diff --git a/files/caddyproxy/Caddyfile.j2 b/files/caddyproxy/Caddyfile.j2 index 7be5495..c8d1940 100644 --- a/files/caddyproxy/Caddyfile.j2 +++ b/files/caddyproxy/Caddyfile.j2 @@ -89,6 +89,14 @@ wanderer.vakhrushev.me { } } +memos.vakhrushev.me { + tls anwinged@ya.ru + + reverse_proxy { + to memos_app:5230 + } +} + wanderbase.vakhrushev.me { tls anwinged@ya.ru diff --git a/files/memos/backup.sh.j2 b/files/memos/backup.sh.j2 new file mode 100644 index 0000000..e9eb936 --- /dev/null +++ b/files/memos/backup.sh.j2 @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +set -eu +set -o pipefail + +echo "{{ app_name }}: backup data with gobackups" + +(cd "{{ base_dir }}" && gobackup perform --config "{{ gobackup_config }}") + +echo "{{ app_name }}: done." diff --git a/files/memos/docker-compose.template.yml b/files/memos/docker-compose.template.yml new file mode 100644 index 0000000..40373fa --- /dev/null +++ b/files/memos/docker-compose.template.yml @@ -0,0 +1,20 @@ +# See versions: https://github.com/gramps-project/gramps-web/pkgs/container/grampsweb + +services: + + memos_app: + image: neosmemo/memos:0.25.2 + container_name: memos_app + restart: unless-stopped + user: "{{ user_create_result.uid }}:{{ user_create_result.group }}" + networks: + - "web_proxy_network" + volumes: + - "{{ data_dir }}:/var/opt/memos" + environment: + - MEMOS_MODE=prod + - MEMOS_PORT=5230 + +networks: + web_proxy_network: + external: true diff --git a/files/memos/gobackup.yml.j2 b/files/memos/gobackup.yml.j2 new file mode 100644 index 0000000..5493672 --- /dev/null +++ b/files/memos/gobackup.yml.j2 @@ -0,0 +1,21 @@ +# https://gobackup.github.io/configuration + +models: + + gramps: + compress_with: + type: 'tgz' + storages: + local: + type: 'local' + path: '{{ backups_dir }}' + keep: 3 + databases: + users: + type: sqlite + path: "{{ (data_dir, 'memos_prod.db') | path_join }}" + archive: + includes: + - "{{ data_dir }}" + excludes: + - "{{ (data_dir, '.thumbnail_cache') | path_join }}" diff --git a/playbook-memos.yml b/playbook-memos.yml new file mode 100644 index 0000000..10a2d67 --- /dev/null +++ b/playbook-memos.yml @@ -0,0 +1,64 @@ +--- +- name: "Configure memos application" + hosts: all + + vars_files: + - vars/ports.yml + - vars/secrets.yml + + vars: + app_name: "memos" + app_user: "{{ app_name }}" + base_dir: "/home/{{ app_user }}" + data_dir: "{{ (base_dir, 'data') | path_join }}" + backups_dir: "{{ (base_dir, 'backups') | path_join }}" + gobackup_config: "{{ (base_dir, 'gobackup.yml') | path_join }}" + + tasks: + - name: "Create user and environment" + ansible.builtin.import_role: + name: owner + vars: + owner_name: "{{ app_user }}" + owner_extra_groups: ["docker"] + + - name: "Create application internal directories" + ansible.builtin.file: + path: "{{ item }}" + state: "directory" + owner: "{{ app_user }}" + group: "{{ app_user }}" + mode: "0750" + loop: + - "{{ data_dir }}" + - "{{ backups_dir }}" + + - name: "Copy gobackup config" + ansible.builtin.template: + src: "./files/{{ app_name }}/gobackup.yml.j2" + dest: "{{ gobackup_config }}" + owner: "{{ app_user }}" + group: "{{ app_user }}" + mode: "0640" + + - name: "Copy backup script" + ansible.builtin.template: + src: "files/{{ app_name }}/backup.sh.j2" + dest: "{{ base_dir }}/backup.sh" + owner: "{{ app_user }}" + group: "{{ app_user }}" + mode: "0750" + + - name: "Copy docker compose file" + ansible.builtin.template: + src: "./files/{{ app_name }}/docker-compose.template.yml" + dest: "{{ base_dir }}/docker-compose.yml" + owner: "{{ app_user }}" + group: "{{ app_user }}" + mode: "0640" + + - name: "Run application with docker compose" + community.docker.docker_compose_v2: + project_src: "{{ base_dir }}" + state: "present" + remove_orphans: true