Files

223 lines
6.4 KiB
YAML

version: "3.7"
x-environment: &env
# ---- Внешние URL и порты ----
NGINX_PORT: 8762
LISTEN_HTTP_PORT: 8762
# ---- Имя сегмента, используемое внешним интерфейсом для путей /uploads ----
BUCKET_NAME: uploads
# ---- API Рабочие ----
GUNICORN_WORKERS: 2
# ---- База данных ----
POSTGRES_DB: plane
POSTGRES_USER: plane
POSTGRES_PASSWORD: dfwebosplane
DATABASE_URL: postgresql://plane:umbrelplane@plane_db_1:5432/plane
# ---- Кэш/брокер ----
REDIS_URL: redis://plane_redis_1:6379/0
RABBITMQ_DEFAULT_USER: plane
RABBITMQ_DEFAULT_PASS: dfwebosplane
RABBITMQ_DEFAULT_VHOST: plane
CELERY_BROKER_URL: amqp://plane:umbrelplane@plane_rabbitmq_1:5672/plane
# ---- Объектное хранилище (MinIO; S3-совместимое) ----
USE_MINIO: 1
AWS_ACCESS_KEY_ID: dfwebos
AWS_SECRET_ACCESS_KEY: $APP_PASSWORD
AWS_S3_ENDPOINT_URL: http://plane-minio-1:9000
AWS_S3_BUCKET_NAME: uploads
FILE_SIZE_LIMIT: 52428800 # 50 MB
MINIO_ENDPOINT_SSL: 0
MINIO_ROOT_USER: dfwebos
MINIO_ROOT_PASSWORD: $APP_PASSWORD
# ---- Джанго/приложение ----
SECRET_KEY: $APP_SEED
LIVE_SERVER_SECRET_KEY: $APP_SEED
# необязательно, но часто помогает за прокси
USE_X_FORWARDED_HOST: 1
SECURE_SSL_REDIRECT: 0
SESSION_COOKIE_SECURE: 0
CSRF_COOKIE_SECURE: 0
services:
app_proxy:
environment:
APP_HOST: plane_nginx_1
APP_PORT: 8762
PROXY_AUTH_ADD: "false"
nginx:
image: nginx:alpine3.23@sha256:5616878291a2eed594aee8db4dade5878cf7edcb475e59193904b198d9b830de
restart: on-failure
volumes:
- ${APP_DATA_DIR}/config/nginx.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
- web
db:
image: postgres:17.9-alpine@sha256:778d0b486d6daa02b77434d0358ec57a1b21fd8b6d22ac2eef56a33e816928f6
user: "1000:1000"
restart: on-failure
environment:
<<: *env
env_file:
- ${APP_DATA_DIR}/settings.env
volumes:
- ${APP_DATA_DIR}/data/db:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"]
interval: 10s
timeout: 5s
retries: 10
redis:
image: valkey/valkey:7.2.12-alpine@sha256:d0809f1d763f9fc3d77cd27e7c0393b1b0d69b6ad9269f932328b4793a620c78
restart: on-failure
volumes:
- ${APP_DATA_DIR}/data/redis:/data
rabbitmq:
image: rabbitmq:3.13.7-management-alpine@sha256:0c64ec4fc5596406d755dcca75e8a3b618192cc5fb69f8f0340f06290b1cc08c
user: "1000:1000"
restart: on-failure
environment:
<<: *env
env_file:
- ${APP_DATA_DIR}/settings.env
volumes:
- ${APP_DATA_DIR}/data/rabbitmq:/var/lib/rabbitmq
minio:
image: alpine/minio:RELEASE.2025-10-15T17-29-55Z@sha256:cf23643a6cf9ce159c57643ceb88279e431262282428c9e0bf3a7ef1a97e84b4
user: "1000:1000"
restart: on-failure
command: server /export --console-address ":8763"
environment:
<<: *env
env_file:
- ${APP_DATA_DIR}/settings.env
volumes:
- ${APP_DATA_DIR}/data/uploads:/export
ports:
- "8763:8763"
# не удается подключиться, если имя содержит подчеркивание
container_name: plane-minio-1
api:
image: makeplane/plane-backend:v1.3.0@sha256:60fb33fa75b63594c1b0bb62b9e50e05f03bb0e46ef384c9eec177f2fb1aaf02
user: "1000:1000"
restart: on-failure
environment:
<<: *env
env_file:
- ${APP_DATA_DIR}/settings.env
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
rabbitmq:
condition: service_started
worker:
image: makeplane/plane-backend:v1.3.0@sha256:60fb33fa75b63594c1b0bb62b9e50e05f03bb0e46ef384c9eec177f2fb1aaf02
user: "1000:1000"
restart: on-failure
environment:
<<: *env
env_file:
- ${APP_DATA_DIR}/settings.env
depends_on:
api:
condition: service_started
redis:
condition: service_started
rabbitmq:
condition: service_started
command: ["sh","-c","celery -A plane worker --loglevel=info"]
beat-worker:
image: makeplane/plane-backend:v1.3.0@sha256:60fb33fa75b63594c1b0bb62b9e50e05f03bb0e46ef384c9eec177f2fb1aaf02
user: "1000:1000"
restart: on-failure
environment:
<<: *env
env_file:
- ${APP_DATA_DIR}/settings.env
depends_on:
api:
condition: service_started
redis:
condition: service_started
rabbitmq:
condition: service_started
migrator:
condition: service_completed_successfully
command: ["sh","-c","celery -A plane beat --loglevel=info"]
migrator:
image: makeplane/plane-backend:v1.3.0@sha256:60fb33fa75b63594c1b0bb62b9e50e05f03bb0e46ef384c9eec177f2fb1aaf02
user: "1000:1000"
restart: on-failure
environment:
<<: *env
env_file:
- ${APP_DATA_DIR}/settings.env
depends_on:
db:
condition: service_healthy
command: ["sh","-c","python manage.py wait_for_db && python manage.py migrate"]
web:
image: makeplane/plane-frontend:v1.3.0@sha256:5116ac06c2b5f8cc6b0dfd7638ce787b44302527dd3fa2b3e6889e52c4aff3d1
restart: on-failure
environment:
<<: *env
env_file:
- ${APP_DATA_DIR}/settings.env
depends_on:
- api
live:
image: makeplane/plane-live:v1.3.0@sha256:81ff136509a3069766c27c9f3489db7bfe37af8a8eab8869ee17ab948eeb83c3
user: "1000:1000"
restart: on-failure
environment:
<<: *env
env_file:
- ${APP_DATA_DIR}/settings.env
depends_on:
- api
space:
image: makeplane/plane-space:v1.3.0@sha256:0964d53de83a7f2bcb9418dc157f3ede566a6ddad0774d8d2b10cd931b96fcea
user: "1000:1000"
restart: on-failure
environment:
<<: *env
env_file:
- ${APP_DATA_DIR}/settings.env
depends_on:
- api
healthcheck:
test: ["CMD-SHELL", "node -e \"require('http').get('http://127.0.0.1:3000/', (r) => process.exit(r.statusCode < 500 ? 0 : 1)).on('error', () => process.exit(1))\""]
interval: 30s
timeout: 5s
start_period: 10s
retries: 3
admin:
image: makeplane/plane-admin:v1.3.0@sha256:dd83ae5d61d592d0877e4ddda9eb32a3828f8b51d8efbc307806c34b9a48c0a2
restart: on-failure
environment:
<<: *env
env_file:
- ${APP_DATA_DIR}/settings.env
depends_on:
- api