123 lines
5.4 KiB
YAML
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
|