
Refactored `run_server` to accept explicit config and SSL paths. Added dynamic environment-based config loading and stricter SSL path checks for production. Updated `docker-compose.yml` to use environment variable for port mapping and adjusted `config_prod.json` to reflect correct port usage.
92 lines
3.1 KiB
YAML
92 lines
3.1 KiB
YAML
version: "3.9"
|
|
services:
|
|
backend:
|
|
container_name: backend
|
|
build:
|
|
context: . # Build the image from the parent directory
|
|
dockerfile: backend/Dockerfile
|
|
|
|
ports:
|
|
- "${PORT}:${PORT}" # Map container port 8000 to host
|
|
volumes:
|
|
- ./backend:/app/backend # Map backend directory to /app/backend
|
|
- ./app:/app/app # Map app directory to /app/app
|
|
- ./config_${ENVIRONMENT}.json:/app/backend/config_${ENVIRONMENT}.json # Explicitly map config_dev.json
|
|
- ./backend/ssl:/app/backend/ssl # clearly mount SSL files explicitly into Docker
|
|
working_dir: /app/backend # Set working directory to backend/
|
|
command: python main.py # Command to run main.py
|
|
depends_on: # ⬅️ New addition: wait until postgres is started
|
|
- postgres
|
|
healthcheck:
|
|
test: [ "CMD-SHELL", "curl -k -f https://localhost:${PORT}/openapi.json || exit 1" ]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 5
|
|
environment: # ⬅️ Provide DB info to your backend
|
|
ENVIRONMENT: ${ENVIRONMENT}
|
|
DB_USERNAME: ${DB_USERNAME}
|
|
DB_PASSWORD: ${DB_PASSWORD}
|
|
DB_HOST: postgres
|
|
DB_NAME: ${DB_NAME}
|
|
PORT: ${PORT}
|
|
|
|
postgres: # ⬅️ New service (our PostgreSQL database)
|
|
image: postgres:16
|
|
environment:
|
|
POSTGRES_USER: ${DB_USERNAME}
|
|
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
|
POSTGRES_DB: ${DB_NAME}
|
|
ports:
|
|
- "5432:5432"
|
|
volumes:
|
|
- pgdata:/var/lib/postgresql/data
|
|
|
|
|
|
frontend:
|
|
depends_on:
|
|
backend:
|
|
condition: service_healthy
|
|
build:
|
|
context: ./frontend
|
|
dockerfile: Dockerfile
|
|
args:
|
|
- VITE_OPENAPI_BASE=${VITE_OPENAPI_BASE}
|
|
- VITE_SSL_KEY_PATH=${VITE_SSL_KEY_PATH}
|
|
- VITE_SSL_CERT_PATH=${VITE_SSL_CERT_PATH}
|
|
- NODE_ENV=${NODE_ENV}
|
|
ports:
|
|
- "5173:5173"
|
|
volumes:
|
|
- ./frontend:/app
|
|
- /app/node_modules # ⬅️ explicit exclusion! ensures Docker-provided modules retain explicitly.
|
|
- ./backend/ssl:/app/backend/ssl
|
|
- ./backend/config_${ENVIRONMENT}.json:/app/backend/config_${ENVIRONMENT}.json # Dynamically maps config based on environment
|
|
environment:
|
|
VITE_OPENAPI_BASE: ${VITE_OPENAPI_BASE}
|
|
NODE_ENV: ${NODE_ENV}
|
|
command: sh -c "npm run start-${ENVIRONMENT} & ENVIRONMENT=${ENVIRONMENT} npm run watch:openapi"
|
|
|
|
logistics_frontend:
|
|
build:
|
|
context: ./logistics
|
|
dockerfile: Dockerfile
|
|
args: # 👈 explicitly pass build args from .env
|
|
- VITE_OPENAPI_BASE=${VITE_OPENAPI_BASE}
|
|
- VITE_SSL_KEY_PATH=${VITE_SSL_KEY_PATH}
|
|
- VITE_SSL_CERT_PATH=${VITE_SSL_CERT_PATH}
|
|
- NODE_ENV=${NODE_ENV}
|
|
ports:
|
|
- "3000:3000"
|
|
depends_on:
|
|
- frontend # Ensure OpenAPI models are available
|
|
volumes:
|
|
- ./logistics/src:/app/src # explicitly for active dev (hot reload)
|
|
- ./backend/ssl:/app/backend/ssl # clearly mount SSL files explicitly into Docker
|
|
environment:
|
|
- VITE_OPENAPI_BASE=${VITE_OPENAPI_BASE}
|
|
- NODE_ENV=${NODE_ENV}
|
|
command: sh -c "npm run start-${ENVIRONMENT}"
|
|
|
|
|
|
volumes: # ⬅️ Persistent storage for PostgreSQL data
|
|
pgdata: |