handle multiple PHP versions and their modules

This commit is contained in:
Ludovic Cartier
2025-09-24 11:13:12 +02:00
parent f654335684
commit 5d1878f9db
5 changed files with 90 additions and 19 deletions

View File

@@ -1,2 +1,59 @@
# php # PHP Ansible Role
This Ansible role installs and configures PHP with support for multiple versions and custom modules for each version.
## Features
- Install multiple PHP versions simultaneously (e.g., PHP 8.3 and 8.4)
- Install single PHP version (just provide one version in the list)
- Configure different module lists for each PHP version
- Support for PHP-FPM
- Automatic repository setup (Sury repository for latest PHP versions)
## Requirements
- Ubuntu/Debian-based systems
- Ansible 2.9+
- sudo/root privileges
## Role Variables
### Configuration
```yaml
php_versions:
- version: "8.3"
modules:
- mysql
- gd
- xml
- mbstring
- zip
- version: "8.4"
modules:
- -mysql
- gd
- xml
- redis
- ip
```
## Installed Packages
For each PHP version, the following base packages are automatically installed:
- `php{version}-common`
- `php{version}-cli`
Additional modules are installed based on the `modules` list for each version.
## Notes
- The role uses the Sury repository to provide the latest PHP versions
- Each PHP version runs its own FPM service on different sockets/ports
- Module names should include the PHP version prefix (e.g., `php8.3-mysql`)
- For single version installations, just provide one entry in the `php_versions` list
## License
MIT

View File

@@ -1,3 +1,16 @@
--- ---
php_sapi: fpm # php_versions:
php_modules: [] # - version: "8.3"
# modules:
# - php8.3-mysql
# - php8.3-gd
# - php8.3-xml
# - php8.3-mbstring
# - php8.3-zip
# - version: "8.4"
# modules:
# - php8.4-mysql
# - php8.4-gd
# - php8.4-xml
# - php8.4-mbstring
# - php8.4-zip

View File

@@ -1,5 +1,6 @@
--- ---
- name: restart php-fpm - name: restart php-fpm services
systemd_service: systemd_service:
name: php{{ php_version }}-fpm name: php{{ item.version }}-fpm
state: restarted state: restarted
loop: "{{ php_versions }}"

View File

@@ -1,20 +1,20 @@
--- ---
- name: php | installing php and modules - name: php | installing php common and base modules
apt: apt:
name: name:
- php{{ php_version }}-fpm - php{{ item.version }}-common
- php{{ php_version }}-common - php{{ item.version }}-cli
- php{{ php_version }}-cli
- php{{ php_version }}-curl
- php{{ php_version }}-opcache
state: present state: present
loop: "{{ php_versions }}"
notify: notify:
- restart php-fpm - restart php-fpm services
- name: php | install extra modules - name: php | install extra modules
apt: apt:
name: '{{ php_modules | list }}' name: "{{ item.modules | map('regex_replace', '^(.*)$', 'php' + item.version + '-\\1') | list }}"
state: present state: present
force: yes force: yes
loop: "{{ php_versions }}"
when: item.modules is defined and item.modules | length > 0
notify: notify:
- restart php-fpm - restart php-fpm services

View File

@@ -1,11 +1,11 @@
--- ---
- name: php | apt update cache - name: php | apt update cache
apt: ansible.builtin.apt:
update_cache: yes update_cache: yes
cache_valid_time: 86400 cache_valid_time: 86400
- name: php | install requirements - name: php | install requirements
apt: ansible.builtin.apt:
name: name:
- apt-transport-https - apt-transport-https
- lsb-release - lsb-release
@@ -14,13 +14,13 @@
state: present state: present
- name: php | add sury key - name: php | add sury key
apt_key: ansible.builtin.apt_key:
url: https://packages.sury.org/php/apt.gpg url: https://packages.sury.org/php/apt.gpg
keyring: /etc/apt/trusted.gpg.d/php.gpg keyring: /etc/apt/trusted.gpg.d/php.gpg
state: present state: present
- name: php | add sury repository - name: php | add sury repository
apt_repository: ansible.builtin.apt_repository:
repo: deb https://packages.sury.org/php/ {{ ansible_distribution_release }} main repo: deb https://packages.sury.org/php/ {{ ansible_distribution_release }} main
state: present state: present
filename: php-sury filename: php-sury