From 7fb65caf66d04f7a47019efffcb6bdb5c6dbc682 Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Thu, 15 Jan 2026 13:21:25 +0300 Subject: [PATCH] Kavita: add application --- files/caddyproxy/Caddyfile.j2 | 8 +++ files/kavita/docker-compose.template.yml | 24 ++++++++ playbook-all-applications.yml | 3 + playbook-kavita.yml | 72 ++++++++++++++++++++++++ 4 files changed, 107 insertions(+) create mode 100644 files/kavita/docker-compose.template.yml create mode 100644 playbook-kavita.yml diff --git a/files/caddyproxy/Caddyfile.j2 b/files/caddyproxy/Caddyfile.j2 index c8d1940..03ce0b2 100644 --- a/files/caddyproxy/Caddyfile.j2 +++ b/files/caddyproxy/Caddyfile.j2 @@ -97,6 +97,14 @@ memos.vakhrushev.me { } } +kavita.vakhrushev.me { + tls anwinged@ya.ru + + reverse_proxy { + to kavita_app:5000 + } +} + wanderbase.vakhrushev.me { tls anwinged@ya.ru diff --git a/files/kavita/docker-compose.template.yml b/files/kavita/docker-compose.template.yml new file mode 100644 index 0000000..d64df85 --- /dev/null +++ b/files/kavita/docker-compose.template.yml @@ -0,0 +1,24 @@ +services: + + kavita: + image: jvmilazz0/kavita:0.8.9 + container_name: kavita_app + user: "{{ owner_create_result.uid }}:{{ owner_create_result.group }}" + restart: unless-stopped + networks: + - "web_proxy_network" + volumes: + - "{{ books_fiction }}:/srv/books/fiction:ro" + - "{{ books_technical | path_join }}:/srv/books/technical:ro" + - "{{ books_comics | path_join }}:/srv/books/comics:ro" + - "{{ config_dir }}:/kavita/config" + environment: + - TZ=Europe/Moscow + - "PUID={{ owner_create_result.uid }}" + - "PGID={{ owner_create_result.group }}" +# ports: +# - "5000:5000" + +networks: + web_proxy_network: + external: true diff --git a/playbook-all-applications.yml b/playbook-all-applications.yml index 4ccf124..69ab790 100644 --- a/playbook-all-applications.yml +++ b/playbook-all-applications.yml @@ -31,6 +31,9 @@ - name: 'Configure wanderer' ansible.builtin.import_playbook: playbook-wanderer.yml +- name: 'Configure kavita' + ansible.builtin.import_playbook: playbook-kavita.yml + # - name: 'Configure homepage' diff --git a/playbook-kavita.yml b/playbook-kavita.yml new file mode 100644 index 0000000..d65e01c --- /dev/null +++ b/playbook-kavita.yml @@ -0,0 +1,72 @@ +--- +- name: "Configure kavita application" + hosts: all + + vars_files: + - vars/secrets.yml + + vars: + app_name: "kavita" + app_user: "{{ app_name }}" + app_owner_uid: 1101 + app_owner_gid: 1101 + base_dir: "{{ (application_dir, app_name) | path_join }}" + books_dir: "{{ (base_dir, 'books') | path_join }}" + config_dir: "{{ (base_dir, 'config') | path_join }}" + + books_fiction: "{{ (books_dir, 'fiction') | path_join }}" + books_technical: "{{ (books_dir, 'technical') | path_join }}" + books_comics: "{{ (books_dir, 'comics') | path_join }}" + + tasks: + - name: "Create user and environment" + ansible.builtin.import_role: + name: owner + vars: + owner_name: "{{ app_user }}" + owner_uid: "{{ app_owner_uid }}" + owner_gid: "{{ app_owner_gid }}" + 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: + - "{{ base_dir }}" + - "{{ books_dir }}" + - "{{ config_dir }}" + - "{{ books_fiction }}" + - "{{ books_technical }}" + - "{{ books_comics }}" + + - name: "Create backup targets file" + ansible.builtin.lineinfile: + path: "{{ base_dir }}/backup-targets" + line: "{{ item }}" + create: true + owner: "{{ app_user }}" + group: "{{ app_user }}" + mode: "0750" + loop: + - "{{ books_dir }}" + - "{{ config_dir }}" + + - 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 + tags: + - run-app