From ad36788772f324c863cd94101122f4c0acee2e87 Mon Sep 17 00:00:00 2001 From: Chewing_Bever Date: Tue, 1 Oct 2024 14:28:28 +0200 Subject: [PATCH] photoview: add config --- hosts.ini | 12 ++++ nas.yml | 24 +++---- roles/photoview-web/meta/main.yml | 3 + roles/photoview-web/tasks/main.yml | 9 +++ .../templates/photoview.Caddyfile.j2 | 3 + roles/photoview/files/compose.yml | 35 ++++++++++ .../files/photoview.postgres.backup.sh | 5 ++ roles/photoview/files/photoview.service | 13 ++++ roles/photoview/handlers/main.yml | 5 ++ roles/photoview/tasks/main.yml | 69 +++++++++++++++++++ ruby.yml | 12 ++++ web.yml | 14 +++- 12 files changed, 191 insertions(+), 13 deletions(-) create mode 100644 roles/photoview-web/meta/main.yml create mode 100644 roles/photoview-web/tasks/main.yml create mode 100644 roles/photoview-web/templates/photoview.Caddyfile.j2 create mode 100644 roles/photoview/files/compose.yml create mode 100644 roles/photoview/files/photoview.postgres.backup.sh create mode 100644 roles/photoview/files/photoview.service create mode 100644 roles/photoview/handlers/main.yml create mode 100644 roles/photoview/tasks/main.yml diff --git a/hosts.ini b/hosts.ini index 0e05815..44212dd 100644 --- a/hosts.ini +++ b/hosts.ini @@ -21,6 +21,9 @@ [ntfyserver] 192.168.0.3 static_ip=192.168.0.3 +[nefarious] +192.168.0.3 static_ip=192.168.0.3 + [matrix] 192.168.0.2 static_ip=192.168.0.2 @@ -29,3 +32,12 @@ [gitea] 192.168.0.2 static_ip=192.168.0.2 + +[kanboard] +192.168.0.2 static_ip=192.168.0.2 + +[baikal] +192.168.0.2 static_ip=192.168.0.2 + +[photoview] +192.168.0.3 static_ip=192.168.0.3 diff --git a/nas.yml b/nas.yml index c8e81c8..b2d828f 100644 --- a/nas.yml +++ b/nas.yml @@ -56,12 +56,12 @@ - woodpecker tags: woodpecker -- name: Install Lander +- name: Install Restic hosts: nas become: yes roles: - - lander - tags: lander + - restic + tags: restic - name: Install Restic REST server hosts: nas @@ -70,21 +70,21 @@ - restic-rest tags: restic-rest -- name: Install Restic +- name: Install Lander hosts: nas become: yes roles: - - restic - tags: restic - -- hosts: nas - become: yes - roles: - - matrix - tags: matrix + - lander + tags: lander - hosts: nas become: yes roles: - nefarious tags: nefarious + +- hosts: nas + become: yes + roles: + - photoview + tags: photoview diff --git a/roles/photoview-web/meta/main.yml b/roles/photoview-web/meta/main.yml new file mode 100644 index 0000000..1dbd0f6 --- /dev/null +++ b/roles/photoview-web/meta/main.yml @@ -0,0 +1,3 @@ +--- +dependencies: + - role: caddy diff --git a/roles/photoview-web/tasks/main.yml b/roles/photoview-web/tasks/main.yml new file mode 100644 index 0000000..0a08f13 --- /dev/null +++ b/roles/photoview-web/tasks/main.yml @@ -0,0 +1,9 @@ +--- +- name: Ensure Caddyfile is present + template: + src: 'photoview.Caddyfile.j2' + dest: '/etc/caddy/photoview.Caddyfile' + owner: root + group: root + mode: '0644' + notify: caddy-reload diff --git a/roles/photoview-web/templates/photoview.Caddyfile.j2 b/roles/photoview-web/templates/photoview.Caddyfile.j2 new file mode 100644 index 0000000..3fa63be --- /dev/null +++ b/roles/photoview-web/templates/photoview.Caddyfile.j2 @@ -0,0 +1,3 @@ +photos.roosens.me { + reverse_proxy {{ hostvars[groups['photoview'][0]].static_ip }}:8012 +} diff --git a/roles/photoview/files/compose.yml b/roles/photoview/files/compose.yml new file mode 100644 index 0000000..c131748 --- /dev/null +++ b/roles/photoview/files/compose.yml @@ -0,0 +1,35 @@ +services: + app: + image: 'viktorstrate/photoview:2.4.0' + restart: 'always' + + depends_on: + db: + condition: service_healthy + + environment: + PHOTOVIEW_DATABASE_DRIVER: 'postgres' + PHOTOVIEW_POSTGRES_URL: 'postgres://photoview:photoview@db/photoview?sslmode=disable' + ports: + - '8012:80' + volumes: + - '/etc/localtime:/etc/localtime:ro' + - '/etc/timezone:/etc/timezone:ro' + - '/mnt/data1/photoview/cache:/home/photoview/media-cache' + - '/mnt/data1/photos:/photos:ro' + + db: + image: 'postgres:17.0-alpine' + restart: 'always' + + healthcheck: + test: ["CMD", "pg_isready", "-U", "photoview"] + interval: 10s + start_period: 30s + + environment: + POSTGRES_USER: 'photoview' + POSTGRES_PASSWORD: 'photoview' + POSTGRES_DB: 'photoview' + volumes: + - '/mnt/data1/photoview/postgres:/var/lib/postgresql/data' diff --git a/roles/photoview/files/photoview.postgres.backup.sh b/roles/photoview/files/photoview.postgres.backup.sh new file mode 100644 index 0000000..b68c1e2 --- /dev/null +++ b/roles/photoview/files/photoview.postgres.backup.sh @@ -0,0 +1,5 @@ +cd /etc/photoview + +/usr/bin/docker compose exec -T db pg_dump -U photoview photoview | + /usr/bin/gzip --rsyncable | + /usr/local/bin/restic backup --stdin --stdin-filename photoview-postgres.sql.gz diff --git a/roles/photoview/files/photoview.service b/roles/photoview/files/photoview.service new file mode 100644 index 0000000..ce386fb --- /dev/null +++ b/roles/photoview/files/photoview.service @@ -0,0 +1,13 @@ +[Unit] +Description=Photo gallery for self-hosted personal servers +After=docker.service +Requires=docker.service + +[Service] +Type=exec +WorkingDirectory=/etc/photoview +ExecStart=/usr/bin/docker compose up +ExecStop=/usr/bin/docker compose down + +[Install] +WantedBy=multi-user.target diff --git a/roles/photoview/handlers/main.yml b/roles/photoview/handlers/main.yml new file mode 100644 index 0000000..b6d2e52 --- /dev/null +++ b/roles/photoview/handlers/main.yml @@ -0,0 +1,5 @@ +--- +- name: 'restart photoview' + ansible.builtin.service: + name: 'photoview' + state: 'restarted' diff --git a/roles/photoview/tasks/main.yml b/roles/photoview/tasks/main.yml new file mode 100644 index 0000000..315e6b6 --- /dev/null +++ b/roles/photoview/tasks/main.yml @@ -0,0 +1,69 @@ +--- +- name: Ensure data directory is present + ansible.builtin.file: + path: '/mnt/data1/photoview' + state: directory + mode: '0755' + owner: 'root' + group: 'root' + +- name: Ensure data subvolumes are present + community.general.btrfs_subvolume: + name: '/photoview/{{ item }}' + loop: + - 'postgres' + - 'cache' + +- name: Ensure subvolume permissions are correct + ansible.builtin.file: + path: "/mnt/data1/photoview/{{ item }}" + state: directory + mode: '0755' + owner: '999' + group: '999' + loop: + - 'cache' + +- name: Ensure configuration directory is present + ansible.builtin.file: + path: '/etc/photoview' + state: directory + mode: '0755' + +- name: Ensure compose file is present + ansible.builtin.copy: + src: 'compose.yml' + dest: '/etc/photoview/compose.yml' + mode: '0644' + owner: 'root' + group: 'root' + notify: 'restart photoview' + +- name: Ensure backup scripts are present + ansible.builtin.copy: + src: "photoview.{{ item }}.backup.sh" + dest: "/etc/backups/photoview.{{ item }}.backup.sh" + owner: 'root' + group: 'root' + mode: '0644' + loop: + - 'postgres' + +- name: Ensure service file is present + ansible.builtin.copy: + src: 'photoview.service' + dest: '/lib/systemd/system/photoview.service' + owner: 'root' + group: 'root' + mode: '0644' + register: res + +- name: systemd-reload + ansible.builtin.systemd_service: + daemon_reload: true + when: 'res.changed' + +- name: Ensure photoview service is enabled + ansible.builtin.service: + name: 'photoview' + enabled: true diff --git a/ruby.yml b/ruby.yml index 8f590ff..d9b900c 100644 --- a/ruby.yml +++ b/ruby.yml @@ -63,3 +63,15 @@ roles: - gitea tags: gitea + +- hosts: ruby + become: yes + roles: + - kanboard + tags: kanboard + +- hosts: nas + become: yes + roles: + - matrix + tags: matrix diff --git a/web.yml b/web.yml index 48bdf3d..4a6274a 100644 --- a/web.yml +++ b/web.yml @@ -51,4 +51,16 @@ become: yes roles: - gitea-web - tags: atuin + tags: gitea + +- hosts: web + become: yes + roles: + - kanboard-web + tags: kanboard + +- hosts: web + become: yes + roles: + - photoview-web + tags: photoview