diff options
| author | Joe Carstairs <me@joeac.net> | 2026-08-11 21:44:26 +0100 |
|---|---|---|
| committer | Joe Carstairs <me@joeac.net> | 2026-08-11 21:44:26 +0100 |
| commit | 74b9185a404ace70030e57e0ad493478227a5eac (patch) | |
| tree | 5f32d05d842ef726412ead2932d9157fd2f1df58 /ansible | |
| parent | 4e73a59d76e8c4949908e766657f5d634d39fb67 (diff) | |
ansible installs joeac.net website
Diffstat (limited to 'ansible')
| -rw-r--r-- | ansible/playbook.yml | 6 | ||||
| -rw-r--r-- | ansible/roles/http/tasks/main.yml | 107 | ||||
| -rw-r--r-- | ansible/roles/http/templates/config.ini | 11 | ||||
| -rw-r--r-- | ansible/roles/http/templates/nginx/joeac.net.conf | 24 | ||||
| -rw-r--r-- | ansible/roles/http/templates/php-fpm/joeac.net.conf | 23 | ||||
| -rw-r--r-- | ansible/vars/common.yml | 2 | ||||
| -rw-r--r-- | ansible/vars/http.yml | 3 |
7 files changed, 173 insertions, 3 deletions
diff --git a/ansible/playbook.yml b/ansible/playbook.yml index 72330de..ee0b39d 100644 --- a/ansible/playbook.yml +++ b/ansible/playbook.yml @@ -11,15 +11,15 @@ - mox.yml - network.yml -- name: Install msmtp +- name: Install http hosts: "{{ services.http.host }}" become: true roles: - - msmtp + - http vars_files: - common.yml - email.yml - - msmtp.yml + - http.yml - name: Install ln hosts: "{{ services.ln.host }}" diff --git a/ansible/roles/http/tasks/main.yml b/ansible/roles/http/tasks/main.yml new file mode 100644 index 0000000..05fce26 --- /dev/null +++ b/ansible/roles/http/tasks/main.yml @@ -0,0 +1,107 @@ +- name: Install composer, make, nginx, PHP, PHP-FPM, and PHP-PDO (SQLITE) + community.general.apk: + name: + - composer + - make + - nginx + - php85-fpm + - php85-pdo + - php85-pdo_sqlite + +- name: Start nginx service and configure to restart on boot + ansible.builtin.service: + name: nginx + enabled: true + state: started + +- name: Start PHP-FPM service and configure to restart on boot + ansible.builtin.service: + name: php-fpm85 + enabled: true + state: started + +- name: Remove default PHP-FPM pool + register: default_phpfpm_pool + ansible.builtin.file: + path: /etc/php85/php-fpm.d/www.conf + state: absent + +- name: Install PHP-FPM pool for joeac.net website + register: joeacnet_phpfpm_pool + ansible.builtin.template: + src: php-fpm/joeac.net.conf + dest: /etc/php85/php-fpm.d/joeac.net.conf + owner: nginx + group: nginx + mode: "600" + +- name: Restart PHP-FPM service if config changed + when: default_phpfpm_pool is changed or joeacnet_phpfpm_pool is changed + ansible.builtin.service: + name: php-fpm85 + state: restarted + +- name: Remove default nginx site config + register: default_nginx_site_config + ansible.builtin.file: + path: /etc/nginx/http.d/default.conf + state: absent + +- name: Install joeac.net nginx site config + register: joeacnet_nginx_site_config + ansible.builtin.template: + src: nginx/joeac.net.conf + dest: /etc/nginx/http.d/joeac.net.conf + +- name: Restart nginx service if config changed + when: default_nginx_site_config is changed or joeacnet_nginx_site_config is changed + ansible.builtin.service: + name: nginx + state: restarted + +- name: Checkout joeac.net source code + ansible.builtin.git: + repo: https://git.joeac.net/joeac/joeac.net.git + dest: "{{ joeacnet_src_dir }}" + depth: 1 + version: main + +- name: Build joeac.net website + community.general.make: + chdir: "{{ joeacnet_src_dir }}/http" + +- name: Create joeac.net public directory + ansible.builtin.file: + path: "{{ http_files_dir }}" + state: directory + +- name: Configure website PHP + ansible.builtin.template: + src: config.ini + dest: "{{ http_files_dir }}/config.ini" + +- name: Symlink vendor to public directory + ansible.builtin.file: + src: "{{ joeacnet_src_dir }}/http/vendor" + dest: "{{ http_files_dir }}/vendor" + state: link + +- name: Symlink php to public directory + ansible.builtin.file: + src: "{{ joeacnet_src_dir }}/http/php" + dest: "{{ http_files_dir }}/php" + state: link + +- name: Symlink html to public directory + ansible.builtin.file: + src: "{{ joeacnet_src_dir }}/http/out" + dest: "{{ http_files_dir }}/html" + state: link + +- name: Touch database and grant rw permissions to nginx user + ansible.builtin.file: + path: "{{ http_files_dir }}/{{ http_database_filename }}" + state: touch + owner: nginx + group: nginx + mode: "600" diff --git a/ansible/roles/http/templates/config.ini b/ansible/roles/http/templates/config.ini new file mode 100644 index 0000000..4bbe7b1 --- /dev/null +++ b/ansible/roles/http/templates/config.ini @@ -0,0 +1,11 @@ +MAX_DAILY_EMAILS = 100 +CONTACT_MAILBOX = me@joeac.net +CONTACT_MAILBOX_NAME = Joe Carstairs +LOCAL_SMTP_FROM = jobot@mail.joeac.net +LOCAL_SMTP_FROM_NAME = Jobot +LOCAL_SMTP_HOST = mail.joeac.net +LOCAL_SMTP_PORT = 465 +LOCAL_SMTP_USER = jobot@mail.joeac.net +LOCAL_SMTP_PASSWORD = "{{ ( email_accounts | selectattr("name", "eq", "jobot") | first ).password | trim }}" +DB_SCHEME = sqlite +DB_PATH = {{ http_files_dir }}/{{ http_database_filename }} diff --git a/ansible/roles/http/templates/nginx/joeac.net.conf b/ansible/roles/http/templates/nginx/joeac.net.conf new file mode 100644 index 0000000..9f28fee --- /dev/null +++ b/ansible/roles/http/templates/nginx/joeac.net.conf @@ -0,0 +1,24 @@ +server { + listen {{ services.http.port }}; + listen [::]:{{ services.http.port }}; + server_name joeac.net; + + location / { + root {{ http_files_dir }}/html; + try_files $uri $uri.html $uri/index.html $uri.php $uri/index.php =404; + } + + error_page 404 /error.html; + + location ~ \.php$ { + root html; + fastcgi_pass unix:/run/php8.5-fpm-joeac.net-http.sock; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME /var/joeac.net-http/html$fastcgi_script_name; + include fastcgi_params; + } + + location ~ /\.sqlite { + deny all; + } +} diff --git a/ansible/roles/http/templates/php-fpm/joeac.net.conf b/ansible/roles/http/templates/php-fpm/joeac.net.conf new file mode 100644 index 0000000..30c120d --- /dev/null +++ b/ansible/roles/http/templates/php-fpm/joeac.net.conf @@ -0,0 +1,23 @@ +[joeac.net] +user = nginx +group = nginx +listen = {{ http_phpfpm_socket }} +listen.owner = nginx +listen.group = nginx +listen.mode = 0660 + +access.log = /var/log/php85/$pool.access.log +access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{milli}d %{kilo}M %C%%" +catch_workers_output = yes +php_admin_value[error_log] = /var/log/php85/$pool.error.log +php_admin_flag[log_errors] = on + +php_admin_value[disable_functions] = exec,passthru,shell_exec,system +php_admin_flag[allow_url_fopen] = off + +pm = dynamic +pm.max_children = 20 +pm.start_servers = 4 +pm.min_spare_servers = 2 +pm.max_spare_servers = 8 +pm.max_requests = 500 diff --git a/ansible/vars/common.yml b/ansible/vars/common.yml index 26767e3..b0d9030 100644 --- a/ansible/vars/common.yml +++ b/ansible/vars/common.yml @@ -1,3 +1,5 @@ +joeacnet_src_dir: /usr/share/src/joeac.net + services: actualbudget: port: 5006 diff --git a/ansible/vars/http.yml b/ansible/vars/http.yml new file mode 100644 index 0000000..6d19c74 --- /dev/null +++ b/ansible/vars/http.yml @@ -0,0 +1,3 @@ +http_files_dir: /var/joeac.net-http +http_database_filename: db.sqlite +http_phpfpm_socket: /run/php8.5-fpm-joeac.net-http.sock |
