317 lines
9.0 KiB
YAML
317 lines
9.0 KiB
YAML
services:
|
|
uploader-bot-image:
|
|
build:
|
|
context: ../uploader-bot
|
|
dockerfile: Dockerfile
|
|
image: ${BACKEND_IMAGE:-uploader-bot:latest}
|
|
command: ["true"]
|
|
networks: [mynet]
|
|
|
|
db:
|
|
image: postgres:16
|
|
environment:
|
|
POSTGRES_DB: ${POSTGRES_DB}
|
|
POSTGRES_USER: ${POSTGRES_USER}
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
|
volumes:
|
|
- ${DB_DATA_DIR_HOST:-./postgres-data}:/var/lib/postgresql/data
|
|
ports:
|
|
- "${POSTGRES_FORWARD_PORT:-15380}:5432"
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 10
|
|
restart: unless-stopped
|
|
networks: [mynet]
|
|
|
|
backend-app:
|
|
image: ${BACKEND_IMAGE:-uploader-bot:latest}
|
|
command: python -m app
|
|
env_file:
|
|
- ./.env
|
|
environment:
|
|
- NODE_ROLE=primary
|
|
depends_on:
|
|
uploader-bot-image:
|
|
condition: service_completed_successfully
|
|
db:
|
|
condition: service_healthy
|
|
ipfs:
|
|
condition: service_started
|
|
volumes:
|
|
- ${BACKEND_LOGS_DIR_HOST:-./app-logs}:/app/logs
|
|
- ${BACKEND_DATA_DIR_HOST:-./dynamicStorage}:/app/data
|
|
- ${TUSD_DATA_DIR_HOST:-./data/tusd}:/data
|
|
ports:
|
|
- "${BACKEND_HTTP_PORT:-8080}:${SANIC_PORT:-8080}"
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "curl -fsS http://127.0.0.1:$${SANIC_PORT}/api/system.version >/dev/null || exit 1"]
|
|
interval: 15s
|
|
timeout: 5s
|
|
retries: 5
|
|
restart: unless-stopped
|
|
networks: [mynet]
|
|
|
|
ipfs:
|
|
image: ipfs/kubo:latest
|
|
container_name: ipfs
|
|
restart: unless-stopped
|
|
environment:
|
|
IPFS_PROFILE: server
|
|
GOMAXPROCS: "4"
|
|
GOMEMLIMIT: "7500MiB"
|
|
IPFS_PRIVATE_BOOTSTRAP: '${IPFS_PRIVATE_BOOTSTRAP:-}'
|
|
IPFS_PEERING_PEERS: '${IPFS_PEERING_PEERS:-}'
|
|
IPFS_ANNOUNCE_ADDRESSES: '${IPFS_ANNOUNCE_ADDRESSES:-}'
|
|
IPFS_NOANNOUNCE_ADDRESSES: '${IPFS_NOANNOUNCE_ADDRESSES:-}'
|
|
IPFS_SWARM_ANNOUNCE_PRIVATE: '${IPFS_SWARM_ANNOUNCE_PRIVATE:-}'
|
|
volumes:
|
|
- ${IPFS_DATA_DIR_HOST:-./data/ipfs}:/data/ipfs
|
|
- ./ipfs/init/001-config.sh:/container-init.d/001-config.sh:ro
|
|
# Опционально: приватный swarm.key. Смонтируйте файл, если он есть.
|
|
- ${IPFS_SWARM_KEY_FILE:-./ipfs/swarm.key}:/data/ipfs/swarm.key:ro
|
|
ports:
|
|
- "4001:4001/tcp"
|
|
- "4001:4001/udp"
|
|
- "${IPFS_GATEWAY_BIND:-127.0.0.1}:8080:8080"
|
|
networks: [mynet]
|
|
ulimits:
|
|
nofile: { soft: 65536, hard: 65536 }
|
|
|
|
tusd:
|
|
image: tusproject/tusd:v1.12.0
|
|
container_name: tusd
|
|
restart: unless-stopped
|
|
# Host volume is often owned by root (created by provisioning scripts),
|
|
# while tusd image runs as a non-root user; run as root to avoid /data permission issues.
|
|
user: "0:0"
|
|
command:
|
|
- -host=0.0.0.0
|
|
- -port=1080
|
|
- -upload-dir=/data
|
|
- -hooks-http=http://backend-app:${SANIC_PORT:-8080}/api/v1/upload.tus-hook
|
|
- -hooks-http-forward-headers=Authorization,X-Upload-Metadata
|
|
- -behind-proxy
|
|
- -disable-cors
|
|
environment:
|
|
- TUSD_LOG_LEVEL=info
|
|
volumes:
|
|
- ${TUSD_DATA_DIR_HOST:-./data/tusd}:/data
|
|
ports:
|
|
- "${TUSD_HTTP_PORT:-13400}:1080"
|
|
depends_on:
|
|
backend-app:
|
|
condition: service_started
|
|
networks: [mynet]
|
|
|
|
backend-indexer:
|
|
image: ${BACKEND_IMAGE:-uploader-bot:latest}
|
|
command: python -m app indexer
|
|
env_file:
|
|
- ./.env
|
|
environment:
|
|
- NODE_ROLE=worker
|
|
depends_on:
|
|
uploader-bot-image:
|
|
condition: service_completed_successfully
|
|
db:
|
|
condition: service_healthy
|
|
backend-app:
|
|
condition: service_healthy
|
|
ipfs:
|
|
condition: service_started
|
|
volumes:
|
|
- ${BACKEND_LOGS_DIR_HOST:-./app-logs}:/app/logs
|
|
- ${BACKEND_DATA_DIR_HOST:-./dynamicStorage}:/app/data
|
|
- ${TUSD_DATA_DIR_HOST:-./data/tusd}:/data
|
|
restart: unless-stopped
|
|
networks: [mynet]
|
|
|
|
backend-ton-daemon:
|
|
image: ${BACKEND_IMAGE:-uploader-bot:latest}
|
|
command: python -m app ton_daemon
|
|
env_file:
|
|
- ./.env
|
|
environment:
|
|
- NODE_ROLE=worker
|
|
depends_on:
|
|
uploader-bot-image:
|
|
condition: service_completed_successfully
|
|
db:
|
|
condition: service_healthy
|
|
backend-app:
|
|
condition: service_healthy
|
|
ipfs:
|
|
condition: service_started
|
|
volumes:
|
|
- ${BACKEND_LOGS_DIR_HOST:-./app-logs}:/app/logs
|
|
- ${BACKEND_DATA_DIR_HOST:-./dynamicStorage}:/app/data
|
|
- ${TUSD_DATA_DIR_HOST:-./data/tusd}:/data
|
|
restart: unless-stopped
|
|
networks: [mynet]
|
|
|
|
backend-license-index:
|
|
image: ${BACKEND_IMAGE:-uploader-bot:latest}
|
|
command: python -m app license_index
|
|
env_file:
|
|
- ./.env
|
|
environment:
|
|
- NODE_ROLE=worker
|
|
depends_on:
|
|
uploader-bot-image:
|
|
condition: service_completed_successfully
|
|
db:
|
|
condition: service_healthy
|
|
backend-app:
|
|
condition: service_healthy
|
|
ipfs:
|
|
condition: service_started
|
|
volumes:
|
|
- ${BACKEND_LOGS_DIR_HOST:-./app-logs}:/app/logs
|
|
- ${BACKEND_DATA_DIR_HOST:-./dynamicStorage}:/app/data
|
|
- ${TUSD_DATA_DIR_HOST:-./data/tusd}:/data
|
|
restart: unless-stopped
|
|
networks: [mynet]
|
|
|
|
backend-events-sync:
|
|
image: ${BACKEND_IMAGE:-uploader-bot:latest}
|
|
command: python -m app events_sync
|
|
env_file:
|
|
- ./.env
|
|
environment:
|
|
- NODE_ROLE=worker
|
|
depends_on:
|
|
uploader-bot-image:
|
|
condition: service_completed_successfully
|
|
db:
|
|
condition: service_healthy
|
|
backend-app:
|
|
condition: service_healthy
|
|
ipfs:
|
|
condition: service_started
|
|
volumes:
|
|
- ${BACKEND_LOGS_DIR_HOST:-./app-logs}:/app/logs
|
|
- ${BACKEND_DATA_DIR_HOST:-./dynamicStorage}:/app/data
|
|
- ${TUSD_DATA_DIR_HOST:-./data/tusd}:/data
|
|
restart: unless-stopped
|
|
networks: [mynet]
|
|
|
|
backend-convert-process:
|
|
image: ${BACKEND_IMAGE:-uploader-bot:latest}
|
|
command: python -m app convert_process
|
|
env_file:
|
|
- ./.env
|
|
environment:
|
|
- NODE_ROLE=worker
|
|
depends_on:
|
|
uploader-bot-image:
|
|
condition: service_completed_successfully
|
|
db:
|
|
condition: service_healthy
|
|
backend-app:
|
|
condition: service_healthy
|
|
ipfs:
|
|
condition: service_started
|
|
volumes:
|
|
- ${BACKEND_LOGS_DIR_HOST:-./app-logs}:/app/logs
|
|
- ${BACKEND_DATA_DIR_HOST:-./dynamicStorage}:/app/data
|
|
- ${TUSD_DATA_DIR_HOST:-./data/tusd}:/data
|
|
- /var/run/docker.sock:/var/run/docker.sock # required by conversion pipeline
|
|
restart: unless-stopped
|
|
cpus: ${CONVERT_PROCESS_CPUS:-0.5}
|
|
mem_limit: ${CONVERT_PROCESS_MEM:-512m}
|
|
cpuset: ${CONVERT_CPUSET:-0}
|
|
networks: [mynet]
|
|
|
|
backend-convert-v3:
|
|
image: ${BACKEND_IMAGE:-uploader-bot:latest}
|
|
command: python -m app convert_v3
|
|
env_file:
|
|
- ./.env
|
|
environment:
|
|
- NODE_ROLE=worker
|
|
depends_on:
|
|
uploader-bot-image:
|
|
condition: service_completed_successfully
|
|
db:
|
|
condition: service_healthy
|
|
backend-app:
|
|
condition: service_healthy
|
|
ipfs:
|
|
condition: service_started
|
|
volumes:
|
|
- ${BACKEND_LOGS_DIR_HOST:-./app-logs}:/app/logs
|
|
- ${BACKEND_DATA_DIR_HOST:-./dynamicStorage}:/app/data
|
|
- ${TUSD_DATA_DIR_HOST:-./data/tusd}:/data
|
|
- /var/run/docker.sock:/var/run/docker.sock
|
|
restart: unless-stopped
|
|
cpus: ${CONVERT_V3_CPUS:-1}
|
|
mem_limit: ${CONVERT_V3_MEM:-2048m}
|
|
cpuset: ${CONVERT_CPUSET:-0}
|
|
networks: [mynet]
|
|
|
|
backend-index-scout-v3:
|
|
image: ${BACKEND_IMAGE:-uploader-bot:latest}
|
|
command: python -m app index_scout_v3
|
|
env_file:
|
|
- ./.env
|
|
environment:
|
|
- NODE_ROLE=worker
|
|
depends_on:
|
|
uploader-bot-image:
|
|
condition: service_completed_successfully
|
|
db:
|
|
condition: service_healthy
|
|
backend-app:
|
|
condition: service_healthy
|
|
ipfs:
|
|
condition: service_started
|
|
networks: [mynet]
|
|
|
|
backend-derivative-janitor:
|
|
image: ${BACKEND_IMAGE:-uploader-bot:latest}
|
|
command: python -m app derivative_janitor
|
|
env_file:
|
|
- ./.env
|
|
environment:
|
|
- NODE_ROLE=worker
|
|
depends_on:
|
|
uploader-bot-image:
|
|
condition: service_completed_successfully
|
|
db:
|
|
condition: service_healthy
|
|
backend-app:
|
|
condition: service_healthy
|
|
ipfs:
|
|
condition: service_started
|
|
networks: [mynet]
|
|
|
|
frontend:
|
|
build:
|
|
context: ../web2-client
|
|
dockerfile: Dockerfile
|
|
args:
|
|
VITE_SENTRY_DSN: ${VITE_SENTRY_DSN}
|
|
VITE_API_BASE_URL: ${VITE_API_BASE_URL}
|
|
VITE_API_BASE_STORAGE_URL: ${VITE_API_BASE_STORAGE_URL}
|
|
VITE_TUS_ENDPOINT: ${VITE_TUS_ENDPOINT}
|
|
depends_on:
|
|
backend-app:
|
|
condition: service_started
|
|
ports:
|
|
- "${FRONTEND_HTTP_PORT:-8081}:80"
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "curl -fsS http://127.0.0.1/ >/dev/null || exit 1"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 5
|
|
restart: unless-stopped
|
|
networks: [mynet]
|
|
|
|
volumes: {}
|
|
|
|
networks:
|
|
mynet:
|
|
driver: bridge
|