This commit is contained in:
Phil Porada 2016-06-02 14:19:42 -04:00
commit 9c5de4307a
14 changed files with 85 additions and 81 deletions

View File

@ -8,33 +8,27 @@ env:
init: /usr/lib/systemd/systemd init: /usr/lib/systemd/systemd
run_opts: "--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro" run_opts: "--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro"
SITE: source SITE: source
PHP_VERSION: 7.0.3 PHP_VERSION: 7.0.5
- distribution: ubuntu - distribution: ubuntu
version: 14.04 version: 14.04
init: /sbin/init init: /sbin/init
run_opts: "" run_opts: ""
SITE: source SITE: source
PHP_VERSION: 7.0.3 PHP_VERSION: 7.0.5
# Test package install on all supported OSes. # Test package install on all supported OSes.
- distribution: centos
version: 6
init: /sbin/init
run_opts: ""
SITE: package
PHP_VERSION: 5.6
- distribution: centos - distribution: centos
version: 7 version: 7
init: /usr/lib/systemd/systemd init: /usr/lib/systemd/systemd
run_opts: "--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro" run_opts: "--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro"
SITE: package SITE: package
PHP_VERSION: 5.6 PHP_VERSION: 7.0
- distribution: ubuntu - distribution: ubuntu
version: 14.04 version: 14.04
init: /sbin/init init: /sbin/init
run_opts: "" run_opts: ""
SITE: package SITE: package
PHP_VERSION: 5.6 PHP_VERSION: 7.0
- distribution: ubuntu - distribution: ubuntu
version: 12.04 version: 12.04
init: /sbin/init init: /sbin/init
@ -64,7 +58,7 @@ script:
- 'sudo docker exec --tty "$(cat ${container_id})" env TERM=xterm ansible-playbook /etc/ansible/roles/role_under_test/tests/test-${SITE}.yml --syntax-check' - 'sudo docker exec --tty "$(cat ${container_id})" env TERM=xterm ansible-playbook /etc/ansible/roles/role_under_test/tests/test-${SITE}.yml --syntax-check'
# Test role. # Test role.
- 'sudo docker exec --tty "$(cat ${container_id})" env TERM=xterm ansible-playbook /etc/ansible/roles/role_under_test/tests/test-${SITE}.yml' - 'travis_wait 30 sudo docker exec --tty "$(cat ${container_id})" env TERM=xterm ansible-playbook /etc/ansible/roles/role_under_test/tests/test-${SITE}.yml'
# Test role idempotence. # Test role idempotence.
- > - >

View File

@ -6,7 +6,7 @@ Installs PHP on RedHat/CentOS and Debian/Ubuntu servers.
## Requirements ## Requirements
Must be running a separate web server, such as Nginx or Apache. If you're using an older LTS release of Ubuntu or RHEL, with an old/outdated version of PHP, you need to use a repo or PPA with a maintained PHP version, as this role only works with [PHP versions that are currently supported](http://php.net/supported-versions.php) by the PHP community.
## Role Variables ## Role Variables
@ -16,7 +16,7 @@ Available variables are listed below, along with default values (see `defaults/m
A list of the PHP packages to install (OS-specific by default). You'll likely want to install common packages like `php`, `php-cli`, `php-devel` and `php-pdo`, and you can add in whatever other packages you'd like (for example, `php-gd` for image manipulation, or `php-ldap` if you need to connect to an LDAP server for authentication). A list of the PHP packages to install (OS-specific by default). You'll likely want to install common packages like `php`, `php-cli`, `php-devel` and `php-pdo`, and you can add in whatever other packages you'd like (for example, `php-gd` for image manipulation, or `php-ldap` if you need to connect to an LDAP server for authentication).
_Note: If you're using Debian/Ubuntu, you may also need to install `libapache2-mod-fastcgi` (for cgi/PHP-FPM) or `libapache2-mod-php5` (or a similar package depending on PHP version) if you want to use `mod_php` with Apache._ _Note: If you're using Debian/Ubuntu, you also need to install `libapache2-mod-fastcgi` (for cgi/PHP-FPM) or `libapache2-mod-php7.0` (or a similar package depending on PHP version) if you want to use `mod_php` with Apache._
php_enable_webserver: true php_enable_webserver: true
@ -28,7 +28,7 @@ The default values for the HTTP server deamon are `httpd` (used by Apache) for R
php_enablerepo: "" php_enablerepo: ""
(RedHat/CentOS only) If you have enabled any additional repositories (might I suggest [geerlingguy.repo-epel](https://github.com/geerlingguy/ansible-role-repo-epel) or [geerlingguy.repo-remi](https://github.com/geerlingguy/ansible-role-repo-remi)), those repositories can be listed under this variable (e.g. `remi-php56,epel`). This can be handy, as an example, if you want to install the latest version of PHP 5.6, which is in the Remi repository. (RedHat/CentOS only) If you have enabled any additional repositories (might I suggest [geerlingguy.repo-epel](https://github.com/geerlingguy/ansible-role-repo-epel) or [geerlingguy.repo-remi](https://github.com/geerlingguy/ansible-role-repo-remi)), those repositories can be listed under this variable (e.g. `remi-php70,epel`). This can be handy, as an example, if you want to install the latest version of PHP 7.0, which is in the Remi repository.
php_packages_state: "installed" php_packages_state: "installed"
@ -111,22 +111,20 @@ OpCache ini directives that are often customized on a system. Make sure you have
The platform-specific opcache configuration filename. Generally the default should work, but in some cases, you may need to override the filename. The platform-specific opcache configuration filename. Generally the default should work, but in some cases, you may need to override the filename.
### APC-related Variables ### APCu-related Variables
php_enable_apc: true php_enable_apc: true
Whether to enable APC. Other APC variables will be ineffective if this is set to false. Whether to enable APCu. Other APCu variables will be ineffective if this is set to false.
php_apc_enabled_in_ini: false php_apc_enabled_in_ini: false
When installing APC, depending on the system and whether running PHP as a webserver module or standalone via `php-fpm`, you might need the line `extension=apc.so` in `apc.ini`. If you need that line added (e.g. you're running `php-fpm`), set this variable to true. When installing APCu, depending on the system and whether running PHP as a webserver module or standalone via `php-fpm`, you might need the line `extension=apc.so` in `apc.ini`. If you need that line added (e.g. you're running `php-fpm`), set this variable to true.
php_apc_cache_by_default: "1"
php_apc_shm_size: "96M" php_apc_shm_size: "96M"
php_apc_stat: "1"
php_apc_enable_cli: "0" php_apc_enable_cli: "0"
APC ini directives that are often customized on a system. Set `php_apc_cache_by_default` to 0 to disable APC by default (so you could just enable it for one codebase if you have a *lot* of code on a server). Set the `php_apc_shm_size` so it will hold all your application code in memory with a little overhead (fragmentation or APC running out of memory will slow down PHP *dramatically*). APCu ini directives that are often customized on a system. Set the `php_apc_shm_size` so it will hold all cache entries in memory with a little overhead (fragmentation or APC running out of memory will slow down PHP *dramatically*).
php_apc_conf_filename: [platform-specific] php_apc_conf_filename: [platform-specific]
@ -136,10 +134,8 @@ The platform-specific APC configuration filename. Generally the default should w
If you use APC, you will need to make sure APC is installed (it is installed by default, but if you customize the `php_packages` list, you need to include APC in the list): If you use APC, you will need to make sure APC is installed (it is installed by default, but if you customize the `php_packages` list, you need to include APC in the list):
- *On RHEL/CentOS systems*: Make sure `php-pecl-apc` is in the list of `php_packages`. - *On RHEL/CentOS systems*: Make sure `php-pecl-apcu` is in the list of `php_packages`.
- *On Debian/Ubuntu systems*: Make sure `php-apc` is in the list of `php_packages`. - *On Debian/Ubuntu systems*: Make sure `php-apcu` is in the list of `php_packages`.
You can also install APC via `pecl`, but it's simpler to manage the installation with the system's package manager.
### Installing from Source ### Installing from Source
@ -201,7 +197,7 @@ None.
- php-gd - php-gd
- php-mbstring - php-mbstring
- php-pdo - php-pdo
- php-pecl-apc - php-pecl-apcu
- php-xml - php-xml
... ...

View File

@ -33,12 +33,10 @@ php_opcache_revalidate_freq: "2"
php_opcache_max_file_size: "0" php_opcache_max_file_size: "0"
php_opcache_blacklist_filename: "" php_opcache_blacklist_filename: ""
# APC settings (useful for PHP <5.5). # APCu settings.
php_enable_apc: true php_enable_apc: true
php_apc_enabled_in_ini: false php_apc_enabled_in_ini: false
php_apc_cache_by_default: "1"
php_apc_shm_size: "96M" php_apc_shm_size: "96M"
php_apc_stat: "1"
php_apc_enable_cli: "0" php_apc_enable_cli: "0"
# If this is set to false, none of the following options will have any effect. # If this is set to false, none of the following options will have any effect.

View File

@ -9,6 +9,11 @@
php_fpm_pool_conf_path: "{{ __php_fpm_pool_conf_path }}" php_fpm_pool_conf_path: "{{ __php_fpm_pool_conf_path }}"
when: php_fpm_pool_conf_path is not defined when: php_fpm_pool_conf_path is not defined
- name: Stat php_fpm_pool_conf_path
stat:
path: "{{ php_fpm_pool_conf_path | dirname }}"
register: php_fpm_pool_conf_path_dir_stat
- name: Ensure the default pool directory exists. - name: Ensure the default pool directory exists.
file: file:
path: "{{ php_fpm_pool_conf_path | dirname }}" path: "{{ php_fpm_pool_conf_path | dirname }}"
@ -16,6 +21,7 @@
owner: root owner: root
group: root group: root
mode: 0755 mode: 0755
when: php_fpm_pool_conf_path_dir_stat.stat.islnk is not defined
- name: Ensure the default pool exists. - name: Ensure the default pool exists.
copy: copy:

View File

@ -19,7 +19,7 @@
notify: restart webserver notify: restart webserver
when: php_use_managed_ini when: php_use_managed_ini
- name: Place APC configuration file in place. - name: Place APCu configuration file in place.
template: template:
src: apc.ini.j2 src: apc.ini.j2
dest: "{{ item }}/{{ php_apc_conf_filename }}" dest: "{{ item }}/{{ php_apc_conf_filename }}"

View File

@ -28,6 +28,11 @@
php_apc_conf_filename: "{{ __php_apc_conf_filename }}" php_apc_conf_filename: "{{ __php_apc_conf_filename }}"
when: php_apc_conf_filename is not defined when: php_apc_conf_filename is not defined
- name: Define php_opcache_conf_filename (Ubuntu 16.04).
set_fact:
php_opcache_conf_filename: "10-opcache.ini"
when: php_opcache_conf_filename is not defined and ansible_distribution_version == "16.04"
- name: Define php_opcache_conf_filename. - name: Define php_opcache_conf_filename.
set_fact: set_fact:
php_opcache_conf_filename: "{{ __php_opcache_conf_filename }}" php_opcache_conf_filename: "{{ __php_opcache_conf_filename }}"
@ -49,17 +54,6 @@
- include: install-from-source.yml - include: install-from-source.yml
when: php_install_from_source == true when: php_install_from_source == true
- name: Check the installed version of PHP.
shell: '{{ php_executable }} -r "echo PHP_VERSION;"'
register: php_installed_version
changed_when: false
always_run: yes
- name: Disable opcache if PHP version is < 5.5.
set_fact:
php_opcache_enable: 0
when: "{{ php_installed_version.stdout | version_compare('5.5', operator='lt') }}"
# Configure PHP. # Configure PHP.
- include: configure.yml - include: configure.yml

View File

@ -10,7 +10,7 @@
register: php_package_install register: php_package_install
notify: restart webserver notify: restart webserver
- name: Delete APC configuration file if this role will provide one. - name: Delete APCu configuration file if this role will provide one.
file: file:
path: "{{ item }}/{{ php_apc_conf_filename }}" path: "{{ item }}/{{ php_apc_conf_filename }}"
state: absent state: absent

View File

@ -1,8 +1,7 @@
{% if php_apc_enabled_in_ini %} {% if php_apc_enabled_in_ini %}
extension=apcu.so
extension=apc.so extension=apc.so
{% endif %} {% endif %}
apc.shm_size={{ php_apc_shm_size }} apc.shm_size={{ php_apc_shm_size }}
apc.stat={{ php_apc_stat }}
apc.enable_cli={{ php_apc_enable_cli }} apc.enable_cli={{ php_apc_enable_cli }}
apc.rfc1867=1 apc.rfc1867=1
apc.cache_by_default={{ php_apc_cache_by_default }}

View File

@ -1,15 +0,0 @@
FROM centos:6
# Install Ansible
RUN yum -y update; yum clean all;
RUN yum -y install epel-release
RUN yum -y install git ansible sudo
RUN yum clean all
# Disable requiretty
RUN sed -i -e 's/^\(Defaults\s*requiretty\)/#--- \1/' /etc/sudoers
# Install Ansible inventory file
RUN echo -e '[local]\nlocalhost ansible_connection=local' > /etc/ansible/hosts
CMD ["/usr/sbin/init"]

View File

@ -3,18 +3,24 @@
vars: vars:
php_enable_webserver: false php_enable_webserver: false
php_version: 5.6
php_memory_limit: "192M" php_memory_limit: "192M"
php_enablerepo: "remi,remi-php56" php_enablerepo: "remi,remi-php70"
pre_tasks: pre_tasks:
- include_vars: test-vars-ubuntu1204.yml
when: ansible_distribution == 'Ubuntu' and ansible_distribution_version == '12.04'
- name: Ensure build dependencies are installed (RedHat). - name: Ensure build dependencies are installed (RedHat).
yum: name=which state=present yum: name=which state=present
when: ansible_os_family == 'RedHat' when: ansible_os_family == 'RedHat'
- name: Add repository for PHP 7.
apt_repository: repo='ppa:ondrej/php'
when: ansible_distribution == 'Ubuntu' and ansible_distribution_version != '12.04'
- name: Add repository for PHP 5.6. - name: Add repository for PHP 5.6.
apt_repository: repo='ppa:ondrej/php5-5.6' apt_repository: repo='ppa:ondrej/php5-5.6'
when: ansible_os_family == 'Debian' when: ansible_distribution == 'Ubuntu' and ansible_distribution_version == '12.04'
roles: roles:
- { role: geerlingguy.repo-remi, when: ansible_os_family == 'RedHat' } - { role: geerlingguy.repo-remi, when: ansible_os_family == 'RedHat' }

View File

@ -6,7 +6,7 @@
php_install_from_source: true php_install_from_source: true
php_source_clone_dir: /root/php-src php_source_clone_dir: /root/php-src
php_source_make_command: "make --jobs=2" php_source_make_command: "make --jobs=2"
php_source_version: "php-7.0.3" php_source_version: "php-7.0.5"
php_memory_limit: "192M" php_memory_limit: "192M"
pre_tasks: pre_tasks:

View File

@ -0,0 +1,23 @@
---
php_version: "5.6"
php_packages:
- php5
- php5-mcrypt
- php5-cli
- php5-common
- php5-curl
- php5-dev
- php5-fpm
- php5-gd
- php-pear
- libpcre3-dev
php_conf_paths:
- /etc/php5/fpm
- /etc/php5/apache2
- /etc/php5/cli
php_extension_conf_paths:
- /etc/php5/fpm/conf.d
- /etc/php5/apache2/conf.d
- /etc/php5/cli/conf.d
php_fpm_daemon: php5-fpm
php_fpm_conf_path: "/etc/php5/fpm"

View File

@ -1,31 +1,34 @@
--- ---
__php_packages: __php_packages:
- php5 - php7.0-common
- php5-mcrypt - php7.0-cli
- php5-cli - php7.0-dev
- php5-common - php7.0-fpm
- php5-curl
- php5-dev
- php5-fpm
- php5-gd
- php-pear
- php-apc
- libpcre3-dev - libpcre3-dev
- php7.0-gd
- php7.0-curl
- php7.0-imap
- php7.0-json
- php7.0-opcache
- php7.0-xml
- php7.0-mbstring
- php-sqlite3
- php-apcu
__php_webserver_daemon: "apache2" __php_webserver_daemon: "apache2"
# Vendor-specific configuration paths on Debian/Ubuntu make my brain asplode. # Vendor-specific configuration paths on Debian/Ubuntu make my brain asplode.
__php_conf_paths: __php_conf_paths:
- /etc/php5/fpm - /etc/php/7.0/fpm
- /etc/php5/apache2 - /etc/php/7.0/apache2
- /etc/php5/cli - /etc/php/7.0/cli
__php_extension_conf_paths: __php_extension_conf_paths:
- /etc/php5/fpm/conf.d - /etc/php/7.0/fpm/conf.d
- /etc/php5/apache2/conf.d - /etc/php/7.0/apache2/conf.d
- /etc/php5/cli/conf.d - /etc/php/7.0/cli/conf.d
__php_apc_conf_filename: 20-apcu.ini __php_apc_conf_filename: 20-apcu.ini
__php_opcache_conf_filename: 05-opcache.ini __php_opcache_conf_filename: 05-opcache.ini
__php_fpm_daemon: php5-fpm __php_fpm_daemon: php7.0-fpm
__php_fpm_conf_path: "/etc/php5/fpm" __php_fpm_conf_path: "/etc/php/7.0/fpm"
__php_fpm_pool_conf_path: "{{ __php_fpm_conf_path }}/pool.d/www.conf" __php_fpm_pool_conf_path: "{{ __php_fpm_conf_path }}/pool.d/www.conf"

View File

@ -12,7 +12,7 @@ __php_packages:
- php-opcache - php-opcache
- php-pdo - php-pdo
- php-pear - php-pear
- php-pecl-apc - php-pecl-apcu
- php-xml - php-xml
- php-xmlrpc - php-xmlrpc
__php_webserver_daemon: "httpd" __php_webserver_daemon: "httpd"