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