73 lines
2.1 KiB
YAML
73 lines
2.1 KiB
YAML
services:
|
|
booklore:
|
|
image: booklore/booklore:latest
|
|
# Alternative: Use GitHub Container Registry
|
|
# image: ghcr.io/booklore-app/booklore:latest
|
|
container_name: booklore
|
|
environment:
|
|
- USER_ID=${APP_USER_ID}
|
|
- GROUP_ID=${APP_GROUP_ID}
|
|
- TZ=${TZ}
|
|
- DATABASE_URL=${DATABASE_URL}
|
|
- DATABASE_USERNAME=${DB_USER}
|
|
- DATABASE_PASSWORD=${DB_PASSWORD}
|
|
- BOOKLORE_PORT=${BOOKLORE_PORT}
|
|
depends_on:
|
|
mariadb:
|
|
condition: service_healthy
|
|
expose:
|
|
- "${BOOKLORE_PORT}"
|
|
labels:
|
|
# Traefik
|
|
traefik.enable: "true"
|
|
traefik.docker.network: "traefik_public"
|
|
traefik.http.routers.booklore.rule: "Host(`booklore.${DOMAIN}`)"
|
|
traefik.http.routers.booklore.entrypoints: "https"
|
|
traefik.http.routers.booklore.tls.certresolver: "cloudflare"
|
|
traefik.http.routers.booklore.service: "booklore"
|
|
traefik.http.services.booklore.loadbalancer.server.port: "${BOOKLORE_PORT}"
|
|
# Homepage
|
|
homepage.group: "Books"
|
|
homepage.name: "BookLore"
|
|
homepage.icon: "booklore.png"
|
|
homepage.href: "https://booklore.${DOMAIN}"
|
|
homepage.description: "Book Manager"
|
|
networks:
|
|
- traefik_public
|
|
- default
|
|
volumes:
|
|
- ${CONFIG_ROOT}/booklore/data:/app/data
|
|
- ${MEDIA_PATH}/books:/books
|
|
- ${MEDIA_PATH}/bookdrop:/bookdrop
|
|
healthcheck:
|
|
test: wget -q -O - http://localhost:${BOOKLORE_PORT}/api/v1/healthcheck
|
|
interval: 60s
|
|
retries: 5
|
|
start_period: 60s
|
|
timeout: 10s
|
|
restart: unless-stopped
|
|
|
|
mariadb:
|
|
image: lscr.io/linuxserver/mariadb:11.4.5
|
|
container_name: mariadb
|
|
environment:
|
|
- PUID=${DB_USER_ID}
|
|
- PGID=${DB_GROUP_ID}
|
|
- TZ=${TZ}
|
|
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
|
|
- MYSQL_DATABASE=${MYSQL_DATABASE}
|
|
- MYSQL_USER=${DB_USER}
|
|
- MYSQL_PASSWORD=${DB_PASSWORD}
|
|
volumes:
|
|
- ./mariadb/config:/config
|
|
restart: unless-stopped
|
|
healthcheck:
|
|
test: [ "CMD", "mariadb-admin", "ping", "-h", "localhost" ]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 10
|
|
|
|
networks:
|
|
traefik_public:
|
|
external: true
|