refactor: migrate deploy layout and stabilize compose runtime
This commit is contained in:
@@ -0,0 +1,200 @@
|
||||
services:
|
||||
db:
|
||||
image: ${POSTGRES_IMAGE}
|
||||
container_name: ${COMPOSE_PROJECT_NAME}-db
|
||||
environment:
|
||||
POSTGRES_DB: ${POSTGRES_DB}
|
||||
POSTGRES_USER: ${POSTGRES_USER}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||
PGDATA: /var/lib/postgresql/data/pgdata
|
||||
ports:
|
||||
- "${POSTGRES_PORT}:5432"
|
||||
volumes:
|
||||
- ./data/postgres:/var/lib/postgresql/data
|
||||
restart: unless-stopped
|
||||
|
||||
redis:
|
||||
image: ${REDIS_IMAGE}
|
||||
container_name: ${COMPOSE_PROJECT_NAME}-redis
|
||||
ports:
|
||||
- "${REDIS_PORT}:6379"
|
||||
volumes:
|
||||
- ./data/redis:/data
|
||||
command: redis-server --appendonly yes
|
||||
restart: unless-stopped
|
||||
|
||||
minio:
|
||||
image: ${MINIO_IMAGE}
|
||||
container_name: ${COMPOSE_PROJECT_NAME}-minio
|
||||
command: server /data --console-address ":9001"
|
||||
environment:
|
||||
MINIO_ROOT_USER: ${MINIO_ACCESS_KEY}
|
||||
MINIO_ROOT_PASSWORD: ${MINIO_SECRET_KEY}
|
||||
ports:
|
||||
- "${MINIO_API_PORT}:9000"
|
||||
- "${MINIO_CONSOLE_PORT}:9001"
|
||||
volumes:
|
||||
- ./data/minio:/data
|
||||
restart: unless-stopped
|
||||
|
||||
minio-init:
|
||||
image: ${MINIO_MC_IMAGE}
|
||||
container_name: ${COMPOSE_PROJECT_NAME}-minio-init
|
||||
depends_on:
|
||||
- minio
|
||||
entrypoint: /bin/sh
|
||||
command:
|
||||
- -c
|
||||
- >
|
||||
until mc alias set local "$${MINIO_ENDPOINT}" "$${MINIO_ACCESS_KEY}" "$${MINIO_SECRET_KEY}"; do
|
||||
sleep 1;
|
||||
done;
|
||||
mc mb -p "local/$${MINIO_BUCKET}" || true;
|
||||
environment:
|
||||
MINIO_ENDPOINT: ${MINIO_ENDPOINT}
|
||||
MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY}
|
||||
MINIO_SECRET_KEY: ${MINIO_SECRET_KEY}
|
||||
MINIO_BUCKET: ${MINIO_BUCKET}
|
||||
restart: "no"
|
||||
|
||||
api:
|
||||
build:
|
||||
context: ../../api
|
||||
dockerfile: Dockerfile
|
||||
args:
|
||||
PYTHON_BASE_IMAGE: ${PYTHON_BASE_IMAGE}
|
||||
PIP_INDEX_URL: ${PIP_INDEX_URL}
|
||||
PIP_DEFAULT_TIMEOUT: ${PIP_DEFAULT_TIMEOUT}
|
||||
PIP_RETRIES: ${PIP_RETRIES}
|
||||
container_name: ${COMPOSE_PROJECT_NAME}-api
|
||||
depends_on:
|
||||
- db
|
||||
- redis
|
||||
- minio
|
||||
- minio-init
|
||||
env_file:
|
||||
- ./.env.dev
|
||||
environment:
|
||||
API_HOST: 0.0.0.0
|
||||
API_PORT: 8000
|
||||
DB_HOST: db
|
||||
DB_PORT: 5432
|
||||
MINIO_ENDPOINT: http://minio:9000
|
||||
CELERY_BROKER_URL: redis://redis:6379/0
|
||||
CELERY_RESULT_BACKEND: redis://redis:6379/1
|
||||
ports:
|
||||
- "${API_PORT}:8000"
|
||||
volumes:
|
||||
- ./data/app:/app/data
|
||||
restart: unless-stopped
|
||||
|
||||
celery-worker:
|
||||
build:
|
||||
context: ../../api
|
||||
dockerfile: Dockerfile
|
||||
args:
|
||||
PYTHON_BASE_IMAGE: ${PYTHON_BASE_IMAGE}
|
||||
PIP_INDEX_URL: ${PIP_INDEX_URL}
|
||||
PIP_DEFAULT_TIMEOUT: ${PIP_DEFAULT_TIMEOUT}
|
||||
PIP_RETRIES: ${PIP_RETRIES}
|
||||
container_name: ${COMPOSE_PROJECT_NAME}-celery-worker
|
||||
command:
|
||||
- celery
|
||||
- -A
|
||||
- app.core.celery_app.celery_app
|
||||
- worker
|
||||
- --loglevel=${CELERY_LOG_LEVEL}
|
||||
- --concurrency=${CELERY_WORKER_CONCURRENCY}
|
||||
- --queues=${CELERY_WORKER_QUEUES}
|
||||
depends_on:
|
||||
- api
|
||||
- redis
|
||||
env_file:
|
||||
- ./.env.dev
|
||||
environment:
|
||||
DB_HOST: db
|
||||
DB_PORT: 5432
|
||||
CELERY_BROKER_URL: redis://redis:6379/0
|
||||
CELERY_RESULT_BACKEND: redis://redis:6379/1
|
||||
FLOWER_API_BASE_URL: http://flower:5555
|
||||
volumes:
|
||||
- ./data/app:/app/data
|
||||
restart: unless-stopped
|
||||
|
||||
celery-beat:
|
||||
build:
|
||||
context: ../../api
|
||||
dockerfile: Dockerfile
|
||||
args:
|
||||
PYTHON_BASE_IMAGE: ${PYTHON_BASE_IMAGE}
|
||||
PIP_INDEX_URL: ${PIP_INDEX_URL}
|
||||
PIP_DEFAULT_TIMEOUT: ${PIP_DEFAULT_TIMEOUT}
|
||||
PIP_RETRIES: ${PIP_RETRIES}
|
||||
container_name: ${COMPOSE_PROJECT_NAME}-celery-beat
|
||||
command:
|
||||
- celery
|
||||
- -A
|
||||
- app.core.celery_app.celery_app
|
||||
- beat
|
||||
- --loglevel=${CELERY_LOG_LEVEL}
|
||||
- --schedule=/app/data/celery/beat-schedule
|
||||
depends_on:
|
||||
- api
|
||||
- redis
|
||||
env_file:
|
||||
- ./.env.dev
|
||||
environment:
|
||||
DB_HOST: db
|
||||
DB_PORT: 5432
|
||||
CELERY_BROKER_URL: redis://redis:6379/0
|
||||
CELERY_RESULT_BACKEND: redis://redis:6379/1
|
||||
volumes:
|
||||
- ./data/app:/app/data
|
||||
restart: unless-stopped
|
||||
|
||||
flower:
|
||||
build:
|
||||
context: ../../api
|
||||
dockerfile: Dockerfile
|
||||
args:
|
||||
PYTHON_BASE_IMAGE: ${PYTHON_BASE_IMAGE}
|
||||
PIP_INDEX_URL: ${PIP_INDEX_URL}
|
||||
PIP_DEFAULT_TIMEOUT: ${PIP_DEFAULT_TIMEOUT}
|
||||
PIP_RETRIES: ${PIP_RETRIES}
|
||||
container_name: ${COMPOSE_PROJECT_NAME}-flower
|
||||
command:
|
||||
- celery
|
||||
- -A
|
||||
- app.core.celery_app.celery_app
|
||||
- flower
|
||||
- --address=0.0.0.0
|
||||
- --port=5555
|
||||
- --persistent=False
|
||||
- --basic-auth=${FLOWER_BASIC_AUTH}
|
||||
depends_on:
|
||||
- redis
|
||||
environment:
|
||||
CELERY_BROKER_URL: redis://redis:6379/0
|
||||
CELERY_RESULT_BACKEND: redis://redis:6379/1
|
||||
CELERY_TIMEZONE: ${CELERY_TIMEZONE}
|
||||
FLOWER_BASIC_AUTH: ${FLOWER_BASIC_AUTH}
|
||||
ports:
|
||||
- "${FLOWER_PORT}:5555"
|
||||
restart: unless-stopped
|
||||
|
||||
web:
|
||||
build:
|
||||
context: ../../web
|
||||
dockerfile: Dockerfile
|
||||
args:
|
||||
NODE_BASE_IMAGE: ${NODE_BASE_IMAGE}
|
||||
NEXT_PUBLIC_API_BASE_URL: ${NEXT_PUBLIC_API_BASE_URL}
|
||||
container_name: ${COMPOSE_PROJECT_NAME}-web
|
||||
depends_on:
|
||||
- api
|
||||
environment:
|
||||
NEXT_PUBLIC_API_BASE_URL: ${NEXT_PUBLIC_API_BASE_URL}
|
||||
NODE_ENV: production
|
||||
ports:
|
||||
- "3000:3000"
|
||||
restart: unless-stopped
|
||||
Reference in New Issue
Block a user