Add Kavita as the new book server
Runs next to Calibre-Web at a temporary kavita. subdomain until it takes over books. Each book lives in its own folder under /opt/stacks/kavita/books, because Kavita names a book after its folder. The admin password is in the vault as vault_kavita. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -55,6 +55,8 @@
|
|||||||
ip: "{{ network.netcup_ip }}"
|
ip: "{{ network.netcup_ip }}"
|
||||||
- name: id
|
- name: id
|
||||||
ip: "{{ network.netcup_ip }}"
|
ip: "{{ network.netcup_ip }}"
|
||||||
|
- name: kavita
|
||||||
|
ip: "{{ network.netcup_ip }}"
|
||||||
- name: nerder.land
|
- name: nerder.land
|
||||||
dns_records:
|
dns_records:
|
||||||
- name: "forms"
|
- name: "forms"
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ subdomains:
|
|||||||
media: "media.{{ primary_domain }}"
|
media: "media.{{ primary_domain }}"
|
||||||
audio: "audio.{{ primary_domain }}" # Audiobookshelf
|
audio: "audio.{{ primary_domain }}" # Audiobookshelf
|
||||||
books: "books.{{ primary_domain }}" # Calibre
|
books: "books.{{ primary_domain }}" # Calibre
|
||||||
|
kavita: "kavita.{{ primary_domain }}" # Kavita (temporary, moves to books)
|
||||||
models: "models.{{ primary_domain }}" # Manyfold
|
models: "models.{{ primary_domain }}" # Manyfold
|
||||||
paper: "paper.{{ primary_domain }}" # Paperless-NGX
|
paper: "paper.{{ primary_domain }}" # Paperless-NGX
|
||||||
syncthing: "syncthing.{{ primary_domain }}"
|
syncthing: "syncthing.{{ primary_domain }}"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
service_categories:
|
service_categories:
|
||||||
infrastructure: ["caddy", "authentik", "dockge"]
|
infrastructure: ["caddy", "authentik", "dockge"]
|
||||||
development: ["gitea", "bytestash"]
|
development: ["gitea", "bytestash"]
|
||||||
media: ["audiobookshelf", "calibre", "dir2opds", "hoarder", "kosync", "manyfold"]
|
media: ["audiobookshelf", "calibre", "kavita", "dir2opds", "hoarder", "kosync", "manyfold"]
|
||||||
productivity: ["paperlessngx", "baikal", "syncthing", "heyform", "dawarich", "obsidian-livesync", "gokapi"]
|
productivity: ["paperlessngx", "baikal", "syncthing", "heyform", "dawarich", "obsidian-livesync", "gokapi"]
|
||||||
communication: ["gotosocial", "listmonk"]
|
communication: ["gotosocial", "listmonk"]
|
||||||
monitoring: ["glance", "changedetection", "appriseapi", "gotify", "cronmaster"]
|
monitoring: ["glance", "changedetection", "appriseapi", "gotify", "cronmaster"]
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
- name: make kavita directories
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ item }}"
|
||||||
|
state: directory
|
||||||
|
owner: phil
|
||||||
|
group: phil
|
||||||
|
loop:
|
||||||
|
- /opt/stacks/kavita
|
||||||
|
- /opt/stacks/kavita/config
|
||||||
|
- /opt/stacks/kavita/books
|
||||||
|
|
||||||
|
- name: Template out the compose file
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: kavita-compose.yml.j2
|
||||||
|
dest: /opt/stacks/kavita/compose.yml
|
||||||
|
owner: root
|
||||||
|
mode: '0644'
|
||||||
|
|
||||||
|
- name: deploy kavita stack
|
||||||
|
community.docker.docker_compose_v2:
|
||||||
|
project_src: /opt/stacks/kavita
|
||||||
|
files:
|
||||||
|
- compose.yml
|
||||||
@@ -9,6 +9,10 @@
|
|||||||
import_tasks: calibre.yml
|
import_tasks: calibre.yml
|
||||||
tags: calibre
|
tags: calibre
|
||||||
|
|
||||||
|
- name: Install kavita
|
||||||
|
import_tasks: kavita.yml
|
||||||
|
tags: kavita
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,10 @@ books.thesatelliteoflove.com {
|
|||||||
reverse_proxy authentik-server-1:9000
|
reverse_proxy authentik-server-1:9000
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{{ subdomains.kavita }} {
|
||||||
|
reverse_proxy kavita:5000
|
||||||
|
}
|
||||||
|
|
||||||
audio.thesatelliteoflove.com {
|
audio.thesatelliteoflove.com {
|
||||||
reverse_proxy audiobookshelf-audiobookshelf-1:80
|
reverse_proxy audiobookshelf-audiobookshelf-1:80
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
---
|
||||||
|
services:
|
||||||
|
kavita:
|
||||||
|
image: jvmilazz0/kavita:latest
|
||||||
|
container_name: kavita
|
||||||
|
environment:
|
||||||
|
- TZ=America/Denver
|
||||||
|
volumes:
|
||||||
|
- ./config:/kavita/config
|
||||||
|
# Kavita names a book after its folder, so each book goes in its own folder:
|
||||||
|
# scp -r "Book Title/" docker-01:/opt/stacks/kavita/books/
|
||||||
|
- ./books:/books
|
||||||
|
extra_hosts:
|
||||||
|
- "{{ subdomains.pocketid }}:{{ docker.hairpin_ip }}"
|
||||||
|
restart: unless-stopped
|
||||||
|
labels:
|
||||||
|
glance.name: Kavita
|
||||||
|
glance.icon: si:book
|
||||||
|
glance.url: https://{{ subdomains.kavita }}/
|
||||||
|
glance.description: Book server
|
||||||
|
mag37.dockcheck.update: true
|
||||||
|
networks:
|
||||||
|
default:
|
||||||
|
external: true
|
||||||
|
name: {{ docker.network_name }}
|
||||||
Reference in New Issue
Block a user