Initial commit

This commit is contained in:
Julian Rother 2025-01-17 17:30:53 +01:00
commit 9d03496f02
Signed by: julian
GPG key ID: C19B924C0CD13341
5 changed files with 87 additions and 0 deletions

3
README.md Normal file
View 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
View 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
View 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
View 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

View 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 %}