diff --git a/backend/docker-compose.yml b/backend/docker-compose.yml deleted file mode 100644 index 4cf3633..0000000 --- a/backend/docker-compose.yml +++ /dev/null @@ -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: diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml new file mode 100644 index 0000000..243236b --- /dev/null +++ b/docker-compose.dev.yml @@ -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