Files
xymediavault-releases/compose.yaml
T

123 lines
5.4 KiB
YAML

services:
postgres:
image: postgres:17-bookworm
container_name: xymedia-postgres
labels: &xymedia-managed-labels
com.xymediavault.managed: "true"
com.xymediavault.instance_id: "${XYMEDIA_INSTANCE_ID}"
com.xymediavault.install_dir: "${XYMEDIA_INSTALL_DIR}"
profiles: [local-db]
environment:
POSTGRES_DB: ${XYMEDIA_POSTGRES_DATABASE}
POSTGRES_USER: ${XYMEDIA_POSTGRES_USER}
POSTGRES_PASSWORD_FILE: /run/secrets/xymedia-postgres-password
secrets: [xymedia-postgres-password]
ports:
- "${XYMEDIA_POSTGRES_BIND_ADDRESS:-0.0.0.0}:${XYMEDIA_POSTGRES_PUBLIC_PORT}:5432"
volumes: ["${XYMEDIA_INSTALL_DIR}/data/postgres:/var/lib/postgresql/data"]
healthcheck:
test: [CMD-SHELL, "pg_isready -U ${XYMEDIA_POSTGRES_USER} -d ${XYMEDIA_POSTGRES_DATABASE}"]
interval: 5s
timeout: 5s
retries: 24
app:
image: ${XYMEDIA_BOOTSTRAP_IMAGE:-git.keeper.work/admin/xymediavault-bootstrap:1}
container_name: xymedia-app
labels: *xymedia-managed-labels
entrypoint: [/usr/bin/tini, --]
command: [/releases/current/bin/xymedia-supervisor, --releases-dir, /releases, --config, /app/config.yaml]
environment:
XYMEDIA_POSTGRES_MODE: external
XYMEDIA_POSTGRES_HOST: ${XYMEDIA_POSTGRES_HOST}
XYMEDIA_POSTGRES_PORT: ${XYMEDIA_POSTGRES_PORT}
XYMEDIA_POSTGRES_DATABASE: ${XYMEDIA_POSTGRES_DATABASE}
XYMEDIA_POSTGRES_USER: ${XYMEDIA_POSTGRES_USER}
XYMEDIA_COMPONENT_RUNTIME: local
XYMEDIA_WEB_DIR: /releases/current/web/dist
XYMEDIA_XIAOYA_CONTROLLER_KEY_FILE: /run/secrets/xiaoya-controller-token
extra_hosts:
- "host.docker.internal:host-gateway"
ports:
- "${XYMEDIA_API_PORT:-18080}:8080"
- "${XYMEDIA_WEBDAV_PORT:-18081}:8081"
- "${XYMEDIA_TVBOX_PORT:-18082}:8082"
volumes:
- "${XYMEDIA_INSTALL_DIR}/data:/app/data"
- "${XYMEDIA_INSTALL_DIR}/components:/app/components"
- "${XYMEDIA_INSTALL_DIR}/releases:/releases"
- "${XYMEDIA_INSTALL_DIR}/config.yaml:/app/config.yaml:ro"
secrets: [xymedia-postgres-password, xiaoya-controller-token]
restart: unless-stopped
healthcheck:
test: [CMD, /releases/current/bin/xymediavault, healthcheck, --url, http://127.0.0.1:8080/api/health]
xiaoya-alist:
image: xiaoyaliu/alist:latest
profiles: [xiaoya]
container_name: ${XYMEDIA_XIAOYA_CONTAINER:-xymedia-xiaoya}
labels:
com.xymediavault.managed: "${XYMEDIA_XIAOYA_MANAGED:-false}"
com.xymediavault.instance_id: "${XYMEDIA_INSTANCE_ID}"
com.xymediavault.install_dir: "${XYMEDIA_INSTALL_DIR}"
ports: ["5678:80", "2345:2345", "2346:2346"]
volumes:
- "${XYMEDIA_XIAOYA_DATA_DIR:-${XYMEDIA_INSTALL_DIR}/xiaoya}:/data"
- "${XYMEDIA_XIAOYA_DATA_DIR:-${XYMEDIA_INSTALL_DIR}/xiaoya}/data:/www/data"
restart: unless-stopped
xiaoya-control:
image: debian:bookworm-slim
profiles: [xiaoya-control]
container_name: xymedia-controller
labels: *xymedia-managed-labels
entrypoint: [/controller/xymedia-edge]
command: [controller]
environment:
XYMEDIA_CONTROLLER_TOKEN_FILE: /run/secrets/xiaoya-controller-token
XYMEDIA_XIAOYA_CONTAINER: ${XYMEDIA_XIAOYA_CONTAINER:-xymedia-xiaoya}
XYMEDIA_XIAOYA_DATA_DIR: /xiaoya
XYMEDIA_ALIYUN_OPEN_TOKEN_URL: http://xymedia-aliyuntvtoken:34256
XYMEDIA_CONTROLLER_ADDR: "${XYMEDIA_CONTROLLER_BIND_ADDRESS:-0.0.0.0}:${XYMEDIA_CONTROLLER_PORT:-19090}"
XYMEDIA_HOST_ADDRESSES_FILE: /etc/xymedia/config/XYMEDIA_HOST_ADDRESSES
XYMEDIA_HOST_ADDRESSES: ${XYMEDIA_HOST_ADDRESSES:-}
ports: ["${XYMEDIA_CONTROLLER_BIND_ADDRESS:-0.0.0.0}:${XYMEDIA_CONTROLLER_PORT:-19090}:${XYMEDIA_CONTROLLER_PORT:-19090}"]
volumes:
- "${XYMEDIA_XIAOYA_DATA_DIR:-${XYMEDIA_INSTALL_DIR}/xiaoya}:/xiaoya"
- "${XYMEDIA_INSTALL_DIR}/config:/etc/xymedia/config:ro"
- "${XYMEDIA_INSTALL_DIR}/controller:/controller:ro"
- /var/run/docker.sock:/var/run/docker.sock
secrets: [xiaoya-controller-token]
restart: unless-stopped
aliyuntvtoken:
image: ddsderek/xiaoya-glue:python
container_name: xymedia-aliyuntvtoken
labels: *xymedia-managed-labels
profiles: [xiaoya]
command: [python, /aliyuntvtoken/alitoken2.py, --qrcode_mode, web]
restart: unless-stopped
app-migrate:
# Migrations are ephemeral and use the Compose-generated project name.
image: ${XYMEDIA_BOOTSTRAP_IMAGE:-git.keeper.work/admin/xymediavault-bootstrap:1}
labels: *xymedia-managed-labels
entrypoint: [/releases/current/bin/xymediavault]
command: [migrate, --new, --config, /app/config.yaml]
environment:
XYMEDIA_POSTGRES_MODE: external
XYMEDIA_POSTGRES_HOST: ${XYMEDIA_POSTGRES_HOST}
XYMEDIA_POSTGRES_PORT: ${XYMEDIA_POSTGRES_PORT}
XYMEDIA_POSTGRES_DATABASE: ${XYMEDIA_POSTGRES_DATABASE}
XYMEDIA_POSTGRES_USER: ${XYMEDIA_POSTGRES_USER}
XYMEDIA_EXTERNAL_MIGRATION_CONFIRM: ${XYMEDIA_EXTERNAL_MIGRATION_CONFIRM:-YES}
extra_hosts:
- "host.docker.internal:host-gateway"
volumes:
- "${XYMEDIA_INSTALL_DIR}/data:/app/data"
- "${XYMEDIA_INSTALL_DIR}/releases:/releases:ro"
- "${XYMEDIA_INSTALL_DIR}/config.yaml:/app/config.yaml:ro"
secrets: [xymedia-postgres-password]
profiles: [migration]
restart: "no"
secrets:
xymedia-postgres-password:
file: ${XYMEDIA_INSTALL_DIR}/secrets/xymedia-postgres-password
xiaoya-controller-token:
file: ${XYMEDIA_INSTALL_DIR}/secrets/xiaoya-controller-token