Files
remnashop/docker-compose.prod.external.yml
Ilay 72dbc3f850 refactor: enhance infrastructure stability and fix circular imports
- update postgres and valkey healthchecks to include default values and password support
- switch valkey startup command to shell script for conditional authentication
- change production database port mapping from 6767 to 5001
- resolve circular imports in user events by localizing keyboard imports
- refactor LocaleList to robustly validate both native lists and csv strings
2026-03-24 23:51:39 +05:00

146 lines
3.2 KiB
YAML

x-build: &build
image: ghcr.io/snoups/remnashop:latest
volumes:
- ./logs:/opt/remnashop/logs
- ./assets:/opt/remnashop/assets
x-common: &common
ulimits:
nofile:
soft: 1048576
hard: 1048576
restart: unless-stopped
networks:
- remnawave-network
x-logging: &logging
logging:
driver: json-file
options:
max-size: 100m
max-file: 5
x-env: &env
env_file: .env
services:
remnashop-db:
image: postgres:17
container_name: "remnashop-db"
hostname: remnashop-db
<<: [*common, *logging, *env]
environment:
- POSTGRES_USER=${DATABASE_USER:-remnashop}
- POSTGRES_PASSWORD=${DATABASE_PASSWORD}
- POSTGRES_DB=${DATABASE_NAME:-remnashop}
- TZ=UTC
ports:
- 127.0.0.1:5001:${DATABASE_PORT:-5432}
volumes:
- remnashop-db-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${DATABASE_USER:-remnashop} -d $${DATABASE_NAME:-remnashop}"]
interval: 3s
timeout: 10s
retries: 3
remnashop-redis:
image: valkey/valkey:9-alpine
container_name: "remnashop-redis"
hostname: remnashop-redis
<<: [*common, *logging, *env]
command: >
sh -c '
ARGS="--save \"\" --appendonly no --maxmemory-policy noeviction --loglevel warning";
if [ -n "$${REDIS_PASSWORD}" ]; then
exec valkey-server $${ARGS} --requirepass "$${REDIS_PASSWORD}";
else
exec valkey-server $${ARGS};
fi'
volumes:
- remnashop-redis-data:/data
healthcheck:
test: ["CMD-SHELL", "valkey-cli $${REDIS_PASSWORD:+-a \"$REDIS_PASSWORD\"} ping | grep PONG"]
interval: 3s
timeout: 10s
retries: 3
remnashop:
container_name: "remnashop"
hostname: remnashop
<<: [*build, *common, *logging, *env]
environment:
RESET_ASSETS: "${RESET_ASSETS:-false}"
ports:
- 127.0.0.1:5000:${APP_PORT:-5000}
depends_on:
remnashop-db:
condition: service_healthy
remnashop-redis:
condition: service_healthy
remnashop-taskiq-worker:
container_name: "remnashop-taskiq-worker"
hostname: remnashop-taskiq-worker
<<: [*build, *common, *logging, *env]
command: >
taskiq worker src.infrastructure.taskiq.worker:worker
--ack-type when_received --tasks-pattern src/infrastructure/taskiq/tasks/*.py -fsd
depends_on:
remnashop-redis:
condition: service_healthy
remnashop-db:
condition: service_healthy
remnashop-taskiq-scheduler:
container_name: "remnashop-taskiq-scheduler"
hostname: remnashop-taskiq-scheduler
<<: [*build, *common, *logging, *env]
command: >
taskiq scheduler src.infrastructure.taskiq.scheduler:scheduler
--tasks-pattern src/infrastructure/taskiq/tasks/*.py -fsd
depends_on:
remnashop-redis:
condition: service_healthy
remnashop-db:
condition: service_healthy
networks:
remnawave-network:
name: remnawave-network
driver: bridge
external: false
volumes:
remnashop-db-data:
name: remnashop-db-data
driver: local
external: false
remnashop-redis-data:
name: remnashop-redis-data
driver: local
external: false