sinka/docker-compose.yml
2026-09-16 04:57:09 +00:00

107 lines
2.7 KiB
YAML

services:
mysql:
image: mysql:8.4
container_name: sinka-mysql
restart: unless-stopped
ports:
- "127.0.0.1:${SINKA_MYSQL_PORT:-3306}:3306"
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root}
MYSQL_DATABASE: sinka_platform
MYSQL_USER: sinka
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-sinka}
volumes:
- sinka_mysql_data:/var/lib/mysql
- ./docker/mysql-init:/docker-entrypoint-initdb.d
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-p${MYSQL_ROOT_PASSWORD:-root}"]
interval: 5s
timeout: 5s
retries: 20
redis:
image: redis:7-alpine
container_name: sinka-redis
restart: unless-stopped
ports:
- "127.0.0.1:${SINKA_REDIS_PORT:-6379}:6379"
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 3s
retries: 20
api:
profiles: ["full"]
build:
context: ./api
dockerfile: Dockerfile
container_name: sinka-api
restart: unless-stopped
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
env_file:
- path: .env
required: false
environment:
PORT: 3001
NODE_ENV: production
COOKIE_SECURE: ${COOKIE_SECURE:-false}
WEB_ORIGIN: ${WEB_ORIGIN:-http://localhost:3000}
DATABASE_URL: mysql://sinka:${MYSQL_PASSWORD:-sinka}@mysql:3306/sinka_platform
MYSQL_ADMIN_URL: mysql://root:${MYSQL_ROOT_PASSWORD:-root}@mysql:3306
REDIS_URL: redis://redis:6379
UPLOAD_DIR: /data/uploads
volumes:
- sinka_uploads:/data/uploads
ports:
- "127.0.0.1:${SINKA_API_PORT:-3001}:3001"
healthcheck:
test:
[
"CMD",
"node",
"-e",
"fetch('http://127.0.0.1:3001/api/health').then((r)=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))",
]
interval: 10s
timeout: 5s
retries: 12
start_period: 40s
web:
profiles: ["full"]
build:
context: ./web
dockerfile: Dockerfile
args:
API_INTERNAL_URL: http://api:3001/api
container_name: sinka-web
restart: unless-stopped
depends_on:
api:
condition: service_healthy
environment:
PORT: 3000
HOSTNAME: 0.0.0.0
ports:
- "${SINKA_WEB_PORT:-3000}:3000"
healthcheck:
test:
[
"CMD",
"node",
"-e",
"fetch('http://127.0.0.1:3000').then((r)=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))",
]
interval: 10s
timeout: 5s
retries: 8
volumes:
sinka_mysql_data:
sinka_uploads: