Files
Lucky_Wheel/docker-compose.yml
T
2026-09-10 23:44:59 +03:30

105 lines
3.3 KiB
YAML

# Production / Dokploy
# دامنه‌ها را در UIی Dokploy به سرویس‌ها ببندید (پورت کانتینر):
# client → https://wheel.montzar.ir (80)
# api → https://api.wheel.montzar.ir (3000)
# admin → https://adm.wheel.montzar.ir (80)
#
# بیلد لوکال قبل از push:
# pnpm install && pnpm run build:release
#
# env: از .env.production.example کپی کنید و در Dokploy ست کنید.
services:
postgres:
image: postgres:15-alpine
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB:-lucky_wheel}
POSTGRES_USER: ${POSTGRES_USER:-postgres}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgrespassword}
ports:
- '${EXPORT_DB_PORT:-5432}:5432'
volumes:
- pg_data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB']
interval: 5s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
restart: unless-stopped
command: ['redis-server', '--appendonly', 'yes']
volumes:
- redis_data:/data
healthcheck:
test: ['CMD', 'redis-cli', 'ping']
interval: 5s
timeout: 5s
retries: 5
api:
build:
context: .
dockerfile: apps/api/Dockerfile
restart: unless-stopped
# بدون ports روی هاست — Dokploy با دامنه به پورت داخلی 3000 وصل می‌شود
expose:
- '3000'
environment:
NODE_ENV: production
PORT: 3000
DATABASE_URL: ${DATABASE_URL:-postgresql://postgres:postgrespassword@postgres:5432/lucky_wheel?schema=public}
REDIS_HOST: redis
REDIS_PORT: '6379'
REDIS_PASSWORD: ${REDIS_PASSWORD:-}
JWT_USER_SECRET: ${JWT_USER_SECRET:-change-me-user-jwt}
JWT_USER_EXPIRES_IN: ${JWT_USER_EXPIRES_IN:-7d}
JWT_ADMIN_ACCESS_SECRET: ${JWT_ADMIN_ACCESS_SECRET:-change-me-admin-access-jwt}
JWT_ADMIN_ACCESS_EXPIRES_IN: ${JWT_ADMIN_ACCESS_EXPIRES_IN:-1h}
JWT_ADMIN_REFRESH_SECRET: ${JWT_ADMIN_REFRESH_SECRET:-change-me-admin-refresh-jwt}
JWT_ADMIN_REFRESH_EXPIRES_IN: ${JWT_ADMIN_REFRESH_EXPIRES_IN:-7d}
CORS_ADMIN_ORIGIN: ${CORS_ADMIN_ORIGIN:-https://adm.wheel.montzar.ir}
CORS_CLIENT_ORIGIN: ${CORS_CLIENT_ORIGIN:-https://wheel.montzar.ir}
STORAGE_DRIVER: ${STORAGE_DRIVER:-local}
STORAGE_LOCAL_ROOT: ${STORAGE_LOCAL_ROOT:-./uploads}
STORAGE_PUBLIC_URL: ${STORAGE_PUBLIC_URL:-https://api.wheel.montzar.ir/uploads}
SMS_DRIVER: ${SMS_DRIVER:-mock}
RAYGAN_SMS_USERNAME: ${RAYGAN_SMS_USERNAME:-}
RAYGAN_SMS_PASSWORD: ${RAYGAN_SMS_PASSWORD:-}
RAYGAN_SMS_LINE_NUMBER: ${RAYGAN_SMS_LINE_NUMBER:-}
RAYGAN_SMS_API_BASE_URL: ${RAYGAN_SMS_API_BASE_URL:-https://api.raygansms.com}
volumes:
- uploads_data:/app/uploads
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
admin:
build:
context: .
dockerfile: apps/admin/Dockerfile
restart: unless-stopped
expose:
- '80'
depends_on:
- api
client:
build:
context: .
dockerfile: apps/client/Dockerfile
restart: unless-stopped
expose:
- '80'
depends_on:
- api
volumes:
pg_data:
redis_data:
uploads_data: