All checks were successful
CI / test (push) Successful in 19s
Web client: - Added React + TypeScript + Vite + Tailwind application in web/. - Implemented auth, chat list, chat messages, typing indicators, file uploads, and voice recording/playback. - Added typed API layer, Zustand stores, and realtime websocket hook integration. Containerization: - Added backend Dockerfile and project .dockerignore. - Added web multi-stage Dockerfile with nginx static hosting and API/WS reverse proxy. - Added full docker-compose stack with postgres, redis, minio, backend, worker, mailpit, and web. - Added MinIO bucket bootstrap init job and updated README with Docker quick-start.
160 lines
4.1 KiB
YAML
160 lines
4.1 KiB
YAML
services:
|
|
postgres:
|
|
image: postgres:16-alpine
|
|
container_name: messenger-postgres
|
|
environment:
|
|
POSTGRES_DB: messenger
|
|
POSTGRES_USER: postgres
|
|
POSTGRES_PASSWORD: postgres
|
|
ports:
|
|
- "5432:5432"
|
|
volumes:
|
|
- pg_data:/var/lib/postgresql/data
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U postgres -d messenger"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 20
|
|
|
|
redis:
|
|
image: redis:7-alpine
|
|
container_name: messenger-redis
|
|
ports:
|
|
- "6379:6379"
|
|
volumes:
|
|
- redis_data:/data
|
|
healthcheck:
|
|
test: ["CMD", "redis-cli", "ping"]
|
|
interval: 5s
|
|
timeout: 3s
|
|
retries: 20
|
|
|
|
minio:
|
|
image: minio/minio:latest
|
|
container_name: messenger-minio
|
|
command: server /data --console-address ":9001"
|
|
environment:
|
|
MINIO_ROOT_USER: minioadmin
|
|
MINIO_ROOT_PASSWORD: minioadmin
|
|
ports:
|
|
- "9000:9000"
|
|
- "9001:9001"
|
|
volumes:
|
|
- minio_data:/data
|
|
|
|
minio-init:
|
|
image: minio/mc:latest
|
|
depends_on:
|
|
- minio
|
|
entrypoint: >
|
|
/bin/sh -c "
|
|
mc alias set local http://minio:9000 minioadmin minioadmin &&
|
|
mc mb --ignore-existing local/messenger-media
|
|
"
|
|
restart: "no"
|
|
|
|
backend:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
container_name: messenger-backend
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_healthy
|
|
minio-init:
|
|
condition: service_completed_successfully
|
|
environment:
|
|
APP_NAME: BenyaMessenger
|
|
ENVIRONMENT: production
|
|
DEBUG: "false"
|
|
API_V1_PREFIX: /api/v1
|
|
AUTO_CREATE_TABLES: "true"
|
|
SECRET_KEY: "change-me-please-with-a-long-random-secret"
|
|
JWT_ALGORITHM: HS256
|
|
ACCESS_TOKEN_EXPIRE_MINUTES: "30"
|
|
REFRESH_TOKEN_EXPIRE_DAYS: "30"
|
|
EMAIL_VERIFICATION_TOKEN_EXPIRE_HOURS: "24"
|
|
PASSWORD_RESET_TOKEN_EXPIRE_HOURS: "1"
|
|
POSTGRES_DSN: postgresql+asyncpg://postgres:postgres@postgres:5432/messenger
|
|
REDIS_URL: redis://redis:6379/0
|
|
S3_ENDPOINT_URL: http://minio:9000
|
|
S3_ACCESS_KEY: minioadmin
|
|
S3_SECRET_KEY: minioadmin
|
|
S3_REGION: us-east-1
|
|
S3_BUCKET_NAME: messenger-media
|
|
S3_PRESIGN_EXPIRE_SECONDS: "900"
|
|
MAX_UPLOAD_SIZE_BYTES: "104857600"
|
|
FRONTEND_BASE_URL: http://localhost
|
|
SMTP_HOST: mailpit
|
|
SMTP_PORT: "1025"
|
|
SMTP_USERNAME: ""
|
|
SMTP_PASSWORD: ""
|
|
SMTP_USE_TLS: "false"
|
|
SMTP_FROM_EMAIL: no-reply@benyamessenger.local
|
|
ports:
|
|
- "8000:8000"
|
|
|
|
worker:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
container_name: messenger-worker
|
|
command: celery -A app.celery_app:celery_app worker --loglevel=info
|
|
depends_on:
|
|
redis:
|
|
condition: service_healthy
|
|
backend:
|
|
condition: service_started
|
|
environment:
|
|
APP_NAME: BenyaMessenger
|
|
ENVIRONMENT: production
|
|
DEBUG: "false"
|
|
API_V1_PREFIX: /api/v1
|
|
AUTO_CREATE_TABLES: "false"
|
|
SECRET_KEY: "change-me-please-with-a-long-random-secret"
|
|
JWT_ALGORITHM: HS256
|
|
ACCESS_TOKEN_EXPIRE_MINUTES: "30"
|
|
REFRESH_TOKEN_EXPIRE_DAYS: "30"
|
|
EMAIL_VERIFICATION_TOKEN_EXPIRE_HOURS: "24"
|
|
PASSWORD_RESET_TOKEN_EXPIRE_HOURS: "1"
|
|
POSTGRES_DSN: postgresql+asyncpg://postgres:postgres@postgres:5432/messenger
|
|
REDIS_URL: redis://redis:6379/0
|
|
S3_ENDPOINT_URL: http://minio:9000
|
|
S3_ACCESS_KEY: minioadmin
|
|
S3_SECRET_KEY: minioadmin
|
|
S3_REGION: us-east-1
|
|
S3_BUCKET_NAME: messenger-media
|
|
S3_PRESIGN_EXPIRE_SECONDS: "900"
|
|
MAX_UPLOAD_SIZE_BYTES: "104857600"
|
|
FRONTEND_BASE_URL: http://localhost
|
|
SMTP_HOST: mailpit
|
|
SMTP_PORT: "1025"
|
|
SMTP_USERNAME: ""
|
|
SMTP_PASSWORD: ""
|
|
SMTP_USE_TLS: "false"
|
|
SMTP_FROM_EMAIL: no-reply@benyamessenger.local
|
|
|
|
mailpit:
|
|
image: axllent/mailpit:latest
|
|
container_name: messenger-mailpit
|
|
ports:
|
|
- "1025:1025"
|
|
- "8025:8025"
|
|
|
|
web:
|
|
build:
|
|
context: ./web
|
|
dockerfile: Dockerfile
|
|
container_name: messenger-web
|
|
depends_on:
|
|
- backend
|
|
ports:
|
|
- "80:80"
|
|
|
|
volumes:
|
|
pg_data:
|
|
redis_data:
|
|
minio_data:
|