107 lines
2.6 KiB
YAML
107 lines
2.6 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:
|