Initial commit
This commit is contained in:
commit
9d03496f02
5 changed files with 87 additions and 0 deletions
3
README.md
Normal file
3
README.md
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
# Setup users and php-fpm pool for multi-tenant web hosting
|
||||
|
||||
Requires [nginx](https://git.notandy.de/ansible/roles/nginx) role in the same block!
|
||||
30
defaults/main.yml
Normal file
30
defaults/main.yml
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
php_tenants: {}
|
||||
# <tenant>:
|
||||
# # user/group get's called "www-<tenant>"
|
||||
# # homedir is /srv/www/<tenant>
|
||||
# # www-data get's "www-<tenant>" additional group to acces data in homedir
|
||||
# mariadb_databases:
|
||||
# <dbname>: {mariadb options ...} # db is called "www-<tenant>-db"
|
||||
# fpm_pool:
|
||||
# <pool option>: ...
|
||||
|
||||
php_tenants_fpm_pool_defaults:
|
||||
# Overwritten in template:
|
||||
#user: www-{{ tenant.name }}
|
||||
#group: www-{{ tenant.name }}
|
||||
#listen: /run/php/php{{ php_version }}-fpm-{{ tenant.name }}.sock
|
||||
#'php_admin_value[syslog.ident]': php-fpm-{{tenant.name}}
|
||||
|
||||
listen.owner: www-data
|
||||
listen.group: www-data
|
||||
listen.mode: '0660'
|
||||
pm: dynamic
|
||||
pm.max_children: 50
|
||||
pm.start_servers: 2
|
||||
pm.min_spare_servers: 2
|
||||
pm.max_spare_servers: 3
|
||||
'env[HOSTNAME]': '$HOSTNAME'
|
||||
'env[PATH]': /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||
'env[TMP]': /tmp
|
||||
'env[TMPDIR]': /tmp
|
||||
'env[TEMP]': /tmp
|
||||
6
tasks/main.yml
Normal file
6
tasks/main.yml
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
- name: Setup tenants
|
||||
loop: "{{ php_tenants|dict2items(key_name='name', value_name='options') }}"
|
||||
loop_control:
|
||||
loop_var: tenant
|
||||
include_tasks:
|
||||
file: tenant.yml
|
||||
42
tasks/tenant.yml
Normal file
42
tasks/tenant.yml
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
- name: 'Create group www-{{ tenant.name }}'
|
||||
ansible.builtin.group:
|
||||
name: 'www-{{ tenant.name }}'
|
||||
|
||||
- name: 'Create user www-{{ tenant.name }}'
|
||||
ansible.builtin.user:
|
||||
name: 'www-{{ tenant.name }}'
|
||||
group: 'www-{{ tenant.name }}'
|
||||
home: '/srv/www/{{ tenant.name }}'
|
||||
shell: /bin/bash
|
||||
|
||||
- name: 'Add user www-data to group www-{{ tenant.name }}'
|
||||
ansible.builtin.user:
|
||||
name: 'www-data'
|
||||
system: true
|
||||
append: true
|
||||
groups: 'www-{{ tenant.name }}'
|
||||
|
||||
# php_version and "restart php-fpm" handler from nginx role
|
||||
- name: 'Create php pool www-{{ tenant.name }}'
|
||||
ansible.builtin.template:
|
||||
dest: "/etc/php/{{ php_version }}/fpm/pool.d/www-{{ tenant.name }}.conf"
|
||||
src: php-fpm-pool.conf.j2
|
||||
owner: root
|
||||
group: root
|
||||
mode: 0644
|
||||
notify:
|
||||
- restart php-fpm
|
||||
|
||||
- name: 'Create MariaDB DBs for {{ tenant.name }}'
|
||||
loop: '{{ tenant.options.mariadb_databases|d({})|dict2items }}'
|
||||
community.mysql.mysql_db:
|
||||
login_unix_socket: /var/run/mysqld/mysqld.sock
|
||||
name: 'www-{{ tenant.name }}-{{ item.key }}'
|
||||
collation: "{{ item.value.collation | default('utf8mb4_unicode_ci') }}"
|
||||
encoding: "{{ item.value.encoding | default('utf8mb4') }}"
|
||||
|
||||
- name: 'Create MariaDB user www-{{ tenant.name }}'
|
||||
community.mysql.mysql_user:
|
||||
name: 'www-{{ tenant.name }}'
|
||||
priv: 'www-{{ tenant.name }}-%.*:ALL PRIVILEGES'
|
||||
plugin: unix_socket
|
||||
6
templates/php-fpm-pool.conf.j2
Normal file
6
templates/php-fpm-pool.conf.j2
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
[www-{{ tenant.name }}]
|
||||
{% set options = php_tenants_fpm_pool_defaults|combine(tenant.options.fpm_pool|d({}), {'user': 'www-'+tenant.name, 'group': 'www-'+tenant.name, 'listen': '/run/php/php'+php_version+'-fpm-'+tenant.name+'.sock', 'php_admin_value[syslog.ident]': 'php-fpm-'+tenant.name}, recursive=true) %}
|
||||
|
||||
{% for key, value in options.items() %}
|
||||
{{ key }} = {{ value }}
|
||||
{% endfor %}
|
||||
Loading…
Add table
Add a link
Reference in a new issue