diff options
| author | Jan Tuomi <jan@jantuomi.fi> | 2026-07-09 22:13:03 +0300 |
|---|---|---|
| committer | Jan Tuomi <jan@jantuomi.fi> | 2026-07-09 22:13:03 +0300 |
| commit | badf52135e97531e6c91743322bdbe16105b43e5 (patch) | |
| tree | 17a847f3f6f047cceea03267d26273532e711dcf | |
| parent | 9f55f450e6422e8da29ee94bd0ffeabdff1d3eaa (diff) | |
Refactor jails
| -rw-r--r-- | roles/host/tasks/main.yml | 32 | ||||
| -rw-r--r-- | roles/jail/tasks/jail_setup.yml | 31 | ||||
| -rw-r--r-- | roles/jails/01_ingress/defaults/main.yml | 9 | ||||
| -rw-r--r-- | roles/jails/01_ingress/templates/etc_crontab.j2 | 3 | ||||
| -rw-r--r-- | roles/jails/02_postgres/defaults/main.yml | 4 | ||||
| -rw-r--r-- | roles/jails/03_irc_thelounge/defaults/main.yml | 4 | ||||
| -rw-r--r-- | roles/jails/04_taulubot/defaults/main.yml | 4 | ||||
| -rw-r--r-- | roles/jails/07_aggro/defaults/main.yml | 4 | ||||
| -rw-r--r-- | roles/jails/11_spliit/defaults/main.yml | 4 | ||||
| -rw-r--r-- | roles/jails/12_goaccess/defaults/main.yml | 24 | ||||
| -rw-r--r-- | roles/jails/12_goaccess/templates/etc_crontab | 5 | ||||
| -rw-r--r-- | roles/jails/12_goaccess/templates/usr_local_bin_gen_goaccess.sh | 3 | ||||
| -rw-r--r-- | roles/jails/12_goaccess/templates/usr_local_etc_nginx_nginx.conf | 23 | ||||
| -rw-r--r-- | roles/jails/13_plex/defaults/main.yml | 4 | ||||
| -rw-r--r-- | roles/jails/18_komga/defaults/main.yml | 4 |
15 files changed, 114 insertions, 44 deletions
diff --git a/roles/host/tasks/main.yml b/roles/host/tasks/main.yml index 279aff5..fba9c5e 100644 --- a/roles/host/tasks/main.yml +++ b/roles/host/tasks/main.yml @@ -124,38 +124,6 @@ - { name: "zroot/jails/templates" } - { name: "zroot/jails/containers" } - { name: "zroot/jails/volumes", mountpoint: "none" } - - { - name: "zroot/jails/volumes/goaccess_www", - mountpoint: "/usr/local/jails/volumes/goaccess_www", - } - - { - name: "zroot/jails/volumes/postgres_data", - mountpoint: "/usr/local/jails/containers/postgres/var/db/postgres", - } - - { - name: "zroot/jails/volumes/irc_thelounge", - mountpoint: "/usr/local/jails/containers/irc_thelounge/var/db/thelounge", - } - - { - name: "zroot/jails/volumes/taulubot", - mountpoint: "/usr/local/jails/containers/taulubot/usr/local/taulubot/photos", - } - - { - name: "zroot/jails/volumes/komga_data", - mountpoint: "/usr/local/jails/containers/komga/root/.komga", - } - - { - name: "zroot/jails/volumes/aggro_data", - mountpoint: "/usr/local/jails/containers/aggro/var/db/aggro", - } - - { - name: "zroot/jails/volumes/spliit_data", - mountpoint: "/usr/local/jails/containers/spliit/var/db/expense-tracker", - } - - { - name: "zroot/jails/volumes/plex_data", - mountpoint: "/usr/local/jails/containers/plex/usr/local/plexdata", - } - { name: "zroot/storage", mountpoint: "/usr/local/jails/volumes/storage" } loop_control: label: "{{ item.name }}" diff --git a/roles/jail/tasks/jail_setup.yml b/roles/jail/tasks/jail_setup.yml index 9122b79..7920ee4 100644 --- a/roles/jail/tasks/jail_setup.yml +++ b/roles/jail/tasks/jail_setup.yml @@ -1,3 +1,34 @@ +- name: "Create ZFS volumes for {{ jail_name }}" + community.general.zfs: + name: "{{ item.name }}" + state: present + extra_zfs_properties: + mountpoint: "/usr/local/jails/containers/{{ jail_name }}{{ item.mountpoint }}" + loop: "{{ zfs | default([]) }}" + loop_control: + label: "{{ item.name }}" + delegate_to: "{{ jail_delegate_host }}" + +- name: "Create mount points for ZFS volumes in {{ jail_name }}" + file: + path: "/usr/local/jails/containers/{{ jail_name }}{{ item.mountpoint }}" + state: directory + owner: root + group: wheel + mode: "0755" + loop: "{{ zfs | default([]) }}" + loop_control: + label: "{{ item.mountpoint }}" + delegate_to: "{{ jail_delegate_host }}" + +- name: "Mount ZFS volumes for {{ jail_name }}" + shell: "zfs mount {{ item.name }} || true" + loop: "{{ zfs | default([]) }}" + loop_control: + label: "{{ item.name }}" + changed_when: false + delegate_to: "{{ jail_delegate_host }}" + # Host-side setup (runs on the jail host via SSH) - name: "Check if {{ jail_name }} container exists" shell: "zfs list -o name | grep -Fxq 'zroot/jails/containers/{{ jail_name }}'" diff --git a/roles/jails/01_ingress/defaults/main.yml b/roles/jails/01_ingress/defaults/main.yml index f6d5aa4..c8857b1 100644 --- a/roles/jails/01_ingress/defaults/main.yml +++ b/roles/jails/01_ingress/defaults/main.yml @@ -15,6 +15,7 @@ ingress_routes: - { host: immich.jan.systems, ip: 192.168.3.3, port: 2283 } - { host: plex.jan.systems, jail: plex, port: 32400, presets: [streaming] } - { host: komga.jan.systems, jail: komga, port: 25600 } + - { host: goaccess.jan.systems, jail: goaccess } cert_domains: - "jan.systems" @@ -30,15 +31,12 @@ contact_email: jan@jantuomi.fi jail_conf_options: - "allow.raw_sockets" -nullfs: - - src: /usr/local/jails/volumes/goaccess_www - dst: /mnt/www_goaccess +nullfs: [] pkg: - nginx - py311-certbot - py311-certbot-nginx - - goaccess files: - src: etc_pf.conf.j2 @@ -54,9 +52,6 @@ files: - src: usr_local_etc_hetzner_auth.j2 dest: /usr/local/etc/hetzner_auth mode: "0600" - - src: usr_local_bin_gen_goaccess.sh.j2 - dest: /usr/local/bin/gen_goaccess.sh - mode: "0755" - src: etc_crontab.j2 dest: /etc/crontab diff --git a/roles/jails/01_ingress/templates/etc_crontab.j2 b/roles/jails/01_ingress/templates/etc_crontab.j2 index 6879766..6bd9d42 100644 --- a/roles/jails/01_ingress/templates/etc_crontab.j2 +++ b/roles/jails/01_ingress/templates/etc_crontab.j2 @@ -13,6 +13,3 @@ PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin {% for elem in hetzner_zone_record_ids %} * * * * * root /usr/local/bin/hetzner_ddns.sh --zone '{{ elem.zone }}' --rr-id '{{ elem.rr_id }}' --iface-cmd 'ifconfig epw1b' >>/var/log/hetzner_ddns.log 2>&1 {% endfor %} - -# Update goaccess report HTML -0 * * * * root /usr/local/bin/gen_goaccess.sh diff --git a/roles/jails/02_postgres/defaults/main.yml b/roles/jails/02_postgres/defaults/main.yml index c2335af..d16d128 100644 --- a/roles/jails/02_postgres/defaults/main.yml +++ b/roles/jails/02_postgres/defaults/main.yml @@ -1,6 +1,10 @@ userland: "15.0-RELEASE" devfs_ruleset: 5 +zfs: + - name: zroot/jails/volumes/postgres_data + mountpoint: /var/db/postgres + jail_conf_options: - "allow.raw_sockets" - "allow.sysvipc" diff --git a/roles/jails/03_irc_thelounge/defaults/main.yml b/roles/jails/03_irc_thelounge/defaults/main.yml index 0b2f809..c596a31 100644 --- a/roles/jails/03_irc_thelounge/defaults/main.yml +++ b/roles/jails/03_irc_thelounge/defaults/main.yml @@ -1,5 +1,9 @@ userland: "15.0-RELEASE" +zfs: + - name: zroot/jails/volumes/irc_thelounge + mountpoint: /var/db/thelounge + pkg: - npm - git diff --git a/roles/jails/04_taulubot/defaults/main.yml b/roles/jails/04_taulubot/defaults/main.yml index e6b2279..5fa27dd 100644 --- a/roles/jails/04_taulubot/defaults/main.yml +++ b/roles/jails/04_taulubot/defaults/main.yml @@ -1,5 +1,9 @@ userland: "15.0-RELEASE" +zfs: + - name: zroot/jails/volumes/taulubot + mountpoint: /usr/local/taulubot/photos + pkg: - python311 - py311-pip diff --git a/roles/jails/07_aggro/defaults/main.yml b/roles/jails/07_aggro/defaults/main.yml index e3a2b0e..cc98220 100644 --- a/roles/jails/07_aggro/defaults/main.yml +++ b/roles/jails/07_aggro/defaults/main.yml @@ -1,5 +1,9 @@ userland: "15.0-RELEASE" +zfs: + - name: zroot/jails/volumes/aggro_data + mountpoint: /var/db/aggro + pkg: - python311 - py311-pip diff --git a/roles/jails/11_spliit/defaults/main.yml b/roles/jails/11_spliit/defaults/main.yml index 0e3e44f..e2bb15b 100644 --- a/roles/jails/11_spliit/defaults/main.yml +++ b/roles/jails/11_spliit/defaults/main.yml @@ -1,5 +1,9 @@ userland: "15.0-RELEASE" +zfs: + - name: zroot/jails/volumes/spliit_data + mountpoint: /var/db/expense-tracker + pkg: - py311-sqlite3 diff --git a/roles/jails/12_goaccess/defaults/main.yml b/roles/jails/12_goaccess/defaults/main.yml index 0fa6078..e61a925 100644 --- a/roles/jails/12_goaccess/defaults/main.yml +++ b/roles/jails/12_goaccess/defaults/main.yml @@ -1,5 +1,25 @@ userland: "15.0-RELEASE" +zfs: + - name: zroot/jails/volumes/goaccess_data + mountpoint: /var/db/goaccess + nullfs: - - src: /usr/local/jails/volumes/goaccess_www - dst: /var/www/goaccess + - src: /usr/local/jails/containers/ingress/var/log/nginx + dst: /mnt/nginx_logs + +pkg: + - goaccess + - nginx + +services: + - nginx + +files: + - src: usr_local_etc_nginx_nginx.conf + dest: /usr/local/etc/nginx/nginx.conf + - src: usr_local_bin_gen_goaccess.sh + dest: /usr/local/bin/gen_goaccess.sh + mode: "0755" + - src: etc_crontab + dest: /etc/crontab diff --git a/roles/jails/12_goaccess/templates/etc_crontab b/roles/jails/12_goaccess/templates/etc_crontab new file mode 100644 index 0000000..9984f47 --- /dev/null +++ b/roles/jails/12_goaccess/templates/etc_crontab @@ -0,0 +1,5 @@ +SHELL=/bin/sh +PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin + +# Update goaccess report HTML every hour +0 * * * * root /usr/local/bin/gen_goaccess.sh diff --git a/roles/jails/12_goaccess/templates/usr_local_bin_gen_goaccess.sh b/roles/jails/12_goaccess/templates/usr_local_bin_gen_goaccess.sh new file mode 100644 index 0000000..08ede58 --- /dev/null +++ b/roles/jails/12_goaccess/templates/usr_local_bin_gen_goaccess.sh @@ -0,0 +1,3 @@ +#!/bin/sh +mkdir -p /var/db/goaccess/html +cat /mnt/nginx_logs/access.log | goaccess --log-format=VCOMBINED -a -o /var/db/goaccess/html/index.html --restore --db-path /var/db/goaccess --persist diff --git a/roles/jails/12_goaccess/templates/usr_local_etc_nginx_nginx.conf b/roles/jails/12_goaccess/templates/usr_local_etc_nginx_nginx.conf new file mode 100644 index 0000000..fa6c329 --- /dev/null +++ b/roles/jails/12_goaccess/templates/usr_local_etc_nginx_nginx.conf @@ -0,0 +1,23 @@ +worker_processes 1; + +events { + worker_connections 128; +} + +http { + include mime.types; + default_type application/octet-stream; + sendfile on; + + server { + listen 80; + server_name _; + + root /var/db/goaccess/html; + index index.html; + + location / { + try_files $uri $uri/ =404; + } + } +} diff --git a/roles/jails/13_plex/defaults/main.yml b/roles/jails/13_plex/defaults/main.yml index 9dd5df5..76c9dda 100644 --- a/roles/jails/13_plex/defaults/main.yml +++ b/roles/jails/13_plex/defaults/main.yml @@ -1,5 +1,9 @@ userland: "15.0-RELEASE" +zfs: + - name: zroot/jails/volumes/plex_data + mountpoint: /usr/local/plexdata + nullfs: - src: /usr/local/jails/volumes/storage/media dst: /mnt/media diff --git a/roles/jails/18_komga/defaults/main.yml b/roles/jails/18_komga/defaults/main.yml index d69a731..c825e51 100644 --- a/roles/jails/18_komga/defaults/main.yml +++ b/roles/jails/18_komga/defaults/main.yml @@ -1,5 +1,9 @@ userland: "15.0-RELEASE" +zfs: + - name: zroot/jails/volumes/komga_data + mountpoint: /root/.komga + nullfs: - src: /usr/local/jails/volumes/storage/media/manga dst: /mnt/manga |
