127 lines
6.2 KiB
YAML
127 lines
6.2 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:
|
||
# 应用容器通过宿主机公开端口连接 PostgreSQL;Docker/NAS 网络和防火墙必须允许局域网/回环访问。
|
||
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
|
||
XYMEDIA_DASHBOARD_API_PORT: ${XYMEDIA_API_PORT:-18080}
|
||
XYMEDIA_DASHBOARD_WEBDAV_PORT: ${XYMEDIA_WEBDAV_PORT:-18081}
|
||
XYMEDIA_DASHBOARD_TVBOX_PORT: ${XYMEDIA_TVBOX_PORT:-18082}
|
||
XYMEDIA_DASHBOARD_EMBY_PROXY_PORT: ${XYMEDIA_EMBY_PROXY_PORT:-18086}
|
||
extra_hosts:
|
||
- "host.docker.internal:host-gateway"
|
||
ports:
|
||
- "${XYMEDIA_API_PORT:-18080}:8080"
|
||
- "${XYMEDIA_WEBDAV_PORT:-18081}:8081"
|
||
- "${XYMEDIA_TVBOX_PORT:-18082}:8082"
|
||
- "${XYMEDIA_EMBY_PROXY_PORT:-18086}:8083"
|
||
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: "true"
|
||
com.xymediavault.instance_id: "${XYMEDIA_INSTANCE_ID}"
|
||
com.xymediavault.install_dir: "${XYMEDIA_INSTALL_DIR}"
|
||
ports: ["${XYMEDIA_XIAOYA_PORT:-5678}:80", "${XYMEDIA_XIAOYA_ADMIN_PORT:-2345}:2345", "${XYMEDIA_XIAOYA_PROXY_PORT:-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: ${XYMEDIA_BOOTSTRAP_IMAGE:-git.keeper.work/admin/xymediavault-bootstrap:1}
|
||
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_SERVICE_PORTS: "80,2345,2346"
|
||
XYMEDIA_XIAOYA_DATA_DIR: /xiaoya
|
||
XYMEDIA_ALIYUN_QR_URL: https://passport.aliyundrive.com/newlogin/qrcode
|
||
XYMEDIA_ALIYUN_OPEN_TOKEN_URL: https://openapi.alipan.com
|
||
XYMEDIA_ALIYUN_TV_BASE_URL: ${XYMEDIA_ALIYUN_TV_BASE_URL:-http://api.extscreen.com}
|
||
XYMEDIA_ALIYUN_TV_OPENAPI_BASE_URL: ${XYMEDIA_ALIYUN_TV_OPENAPI_BASE_URL:-https://openapi.alipan.com}
|
||
XYMEDIA_INSECURE_SKIP_TLS_VERIFY: "true"
|
||
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
|
||
app-migrate:
|
||
# 迁移容器同样通过宿主机公开端口连接;Docker/NAS 网络和防火墙必须允许局域网/回环访问。
|
||
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, xiaoya-controller-token]
|
||
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
|