Add: new docker-compose file for dev setup

This commit is contained in:
Aroy-Art 2025-04-03 12:34:59 +02:00
parent 510fff3059
commit b2ec2f6924
Signed by: Aroy
GPG key ID: 583642324A1D2070
2 changed files with 197 additions and 29 deletions

View file

@ -1,29 +0,0 @@
services:
db:
image: postgres:16
container_name: postgres_dev
restart: unless-stopped
environment:
POSTGRES_USER: archivist
POSTGRES_PASSWORD: password
POSTGRES_DB: archivist
TZ: Europe/Berlin
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
pgadmin:
image: dpage/pgadmin4
container_name: pgadmin_dev
restart: unless-stopped #always
environment:
PGADMIN_DEFAULT_EMAIL: aroy-art@pm.me
PGADMIN_DEFAULT_PASSWORD: admin
ports:
- "5050:80"
depends_on:
- db
volumes:
postgres_data:

197
docker-compose.dev.yml Normal file
View file

@ -0,0 +1,197 @@
# ./docker-compose.dev.yml
name: gallery-archivist-dev
services:
# Backend Service (Django API)
backend:
build:
context: ./backend/
dockerfile: Dockerfile
# --- Add build arguments ---
args:
UID: ${UID:-1000} # Use UID from env, default to 1000
GID: ${GID:-1000} # Use GID from env, default to 1000
container_name: backend_dev
command: python manage.py runserver 0.0.0.0:8080
volumes:
- ./backend:/app # Mount local code for hot-reloading
- ./media:/app/media # Mount the media folder outside of the container
- ./tmp/test-data:/app/test-data:ro # Mount the test data folder
ports:
- "8080:8080" # Map host port 8080 to container port 8080
environment:
# --- Django Settings ---
- DJANGO_SETTINGS_MODULE=core.settings # Adjust 'core' if your settings are elsewhere
- SECRET_KEY=django-insecure-replace-this-in-prod! # CHANGE THIS FOR PRODUCTION
- DEBUG=1 # Development mode
- ALLOWED_HOSTS=northpaw.aroy.hs.tun, backend
# --- Initial Admin ---
- DJANGO_SUPERUSER_USERNAME=aroy
- DJANGO_SUPERUSER_PASSWORD=debitor12
- DJANGO_SUPERUSER_EMAIL=aroy-art@pm.me
# --- Database Settings ---
- DB_HOST=db # Use the database service
#- DATABASE_URL=postgres://archivist:password@db:5432/archivist
# --- Valkey/Celery Broker Settings ---
- CELERY_BROKER_URL=redis://valkey:6379/0
# --- Celery Result Backend Settings ---
- CELERY_RESULT_BACKEND=django-db # Using django-celery-results
# --- Other Env Vars ---
# Add any other environment variables your Django app needs
depends_on:
- db
- valkey
restart: unless-stopped
# Frontend Service (React/Vite Dev Server)
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
# --- Add build arguments ---
args:
UID: ${UID:-1000} # Use UID from env, default to 1000
GID: ${GID:-1000} # Use GID from env, default to 1000
container_name: frontend_dev
command: npm run dev -- --host # Runs the Vite dev server, accessible externally
volumes:
- ./frontend:/app # Mount local code
- /app/node_modules # Use a volume for node_modules to avoid overwriting
ports:
- "5173:5173" # Map host port 5173 to container port 5173
environment:
- NODE_ENV=development
- VITE_PROXY_TARGET_API=http://backend:8080 # URL for frontend to reach backend API (via host)
depends_on:
- backend # Optional, ensures backend starts first, but not strictly needed for API calls
restart: unless-stopped
# Database Service (PostgreSQL)
db:
image: postgres:16-alpine # Use a specific version
container_name: postgres_db_dev
volumes:
- postgres_data:/var/lib/postgresql/data # Persist data
environment:
- POSTGRES_DB=archivist
- POSTGRES_USER=archivist
- POSTGRES_PASSWORD=password
- TZ=Europe/Berlin
ports:
- "5433:5432" # Map host port 5433 to container 5432 (avoids conflicts)
restart: unless-stopped
# Cache Service (Valkey)
valkey:
image: valkey/valkey:7.2 # Use official Valkey image
container_name: valkey_cache_dev
ports:
- "6379:6379" # Map host port 6379 to container 6379
volumes:
- valkey_data:/data # Persist Valkey data (optional for dev)
restart: unless-stopped
# Celery Worker Service
celery_worker:
build:
context: ./backend
dockerfile: Dockerfile
# --- Add build arguments ---
args:
UID: ${UID:-1000} # Use UID from env, default to 1000
GID: ${GID:-1000} # Use GID from env, default to 1000
container_name: celery_worker_dev
entrypoint: [""]
# Adjust 'core' if your Celery app instance is named differently in core/celery.py
command: celery -A core worker --loglevel=info
volumes:
- ./backend:/app # Mount code
environment:
# Inherit environment variables from backend (or redefine as needed)
- DJANGO_SETTINGS_MODULE=core.settings
- SECRET_KEY=django-insecure-replace-this-in-prod!
- DEBUG=1
- DB_HOST=db # Use the database service
- CELERY_BROKER_URL=redis://valkey:6379/0
- CELERY_RESULT_BACKEND=django-db
depends_on:
- backend # Depends on backend code
- db
- valkey
restart: unless-stopped
# Celery Beat Service (Scheduled Tasks)
celery_beat:
build:
context: ./backend
dockerfile: Dockerfile
# --- Add build arguments ---
args:
UID: ${UID:-1000} # Use UID from env, default to 1000
GID: ${GID:-1000} # Use GID from env, default to 1000
container_name: celery_beat_dev
entrypoint: [""]
# Adjust 'core' if your Celery app instance is named differently
# Requires django-celery-beat to be installed and configured
command: celery -A core beat --loglevel=info --scheduler django_celery_beat.schedulers:DatabaseScheduler
volumes:
- ./backend:/app # Mount code
environment:
# Inherit environment variables from backend (or redefine as needed)
- DJANGO_SETTINGS_MODULE=core.settings
- SECRET_KEY=django-insecure-replace-this-in-prod!
- DEBUG=1
- DB_HOST=db # Use the database service
- DATABASE_URL=postgres://archivist:password@db:5432/archivist
- CELERY_BROKER_URL=redis://valkey:6379/0
- CELERY_RESULT_BACKEND=django-db
depends_on:
- backend # Depends on backend code
- db
- valkey
restart: unless-stopped
# Flower Service (Celery Monitoring)
flower:
image: mher/flower:latest # Use official Flower image
container_name: flower_monitor_dev
ports:
- "5555:5555" # Map host port 5555 to container 5555
environment:
# Tell Flower how to connect to the Valkey broker
- CELERY_BROKER_URL=redis://valkey:6379/0
# Set Flower's port inside the container (must match the 'ports' mapping)
- FLOWER_PORT=5555
# Optional: Add basic auth for Flower UI
# - FLOWER_BASIC_AUTH=user:password
depends_on:
- valkey
- celery_worker # Wait for worker to likely be up
restart: unless-stopped
# pgAdmin Service (Database GUI)
pgadmin:
image: dpage/pgadmin4:latest # Use official pgAdmin image
container_name: pgadmin_dev
environment:
- PGADMIN_DEFAULT_EMAIL=aroy-art@pm.me # Change as needed
- PGADMIN_DEFAULT_PASSWORD=admin # CHANGE THIS!
- PGADMIN_LISTEN_PORT=80 # Port inside the container pgAdmin listens on
ports:
- "5050:80" # Map host port 5050 to container port 80
volumes:
- pgadmin_data:/var/lib/pgadmin # Persist pgAdmin configuration
depends_on:
- db # Wait for the database to be ready
restart: unless-stopped
# Define named volumes for data persistence
volumes:
postgres_data:
valkey_data:
pgadmin_data:
# Define a default network
networks:
default:
driver: bridge