From be2426c078b00bb2eb2c4fe543ec8448699d8971 Mon Sep 17 00:00:00 2001 From: James Pattinson Date: Tue, 11 Nov 2025 17:17:18 +0000 Subject: [PATCH] Tweak to dev/prod switch --- README.md | 61 ++++++++++++++++------------------------- docker-compose.yml | 39 +++++++++++++------------- frontend/vite.config.ts | 2 +- 3 files changed, 43 insertions(+), 59 deletions(-) diff --git a/README.md b/README.md index 63f0271..750aa32 100644 --- a/README.md +++ b/README.md @@ -90,56 +90,41 @@ membership/ ## Frontend Development vs Production -The frontend supports both development and production modes using Docker Compose profiles: +Choose your deployment mode by using the appropriate docker-compose file: ### Development Mode (Vite) +```bash +docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d +``` +- Frontend served by Vite dev server on port 3500 - Hot reloading and development features - Access at: http://localhost:3500 -- Start with: `docker-compose --profile dev up -d` ### Production Mode (Nginx) -- Optimized static files served by Nginx -- Access at: http://localhost:8080 -- Start with: `docker-compose --profile prod up -d` - -### Usage Examples - ```bash -# Start all services in development mode -docker-compose --profile dev up -d +docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d +``` +- Frontend served by Nginx on port 8050 +- Optimized static files, production-ready +- Access at: http://localhost:8050 -# Start all services in production mode -docker-compose --profile prod up -d +### Configuration -# Start only the frontend in development mode -docker-compose --profile dev up -d frontend +Set your preferred defaults in `.env`: +```bash +# Deployment mode (for reference only) +MODE=dev -# Start only the frontend in production mode -docker-compose --profile prod up -d frontend-prod - -# Stop all services -docker-compose down - -# Check which services are running -docker-compose ps +# Frontend allowed hosts (comma-separated) +VITE_ALLOWED_HOSTS=sasaprod,localhost,members.sasalliance.org ``` -### Profile Details - -- **`dev` profile**: Includes the `frontend` service (Vite dev server) -- **`prod` profile**: Includes the `frontend-prod` service (Nginx) -- **Default**: No frontend service runs unless you specify a profile - -### For Production Deployment - -When deploying to production with Caddy: - -1. Start services in production mode: - ```bash - docker-compose --profile prod up -d - ``` - -2. Configure Caddy to proxy to `localhost:8080` for the frontend and `localhost:6000` for the API +### Stopping Services +```bash +# Stop all services +docker compose -f docker-compose.yml -f docker-compose.dev.yml down +docker compose -f docker-compose.yml -f docker-compose.prod.yml down +``` ## Default Credentials diff --git a/docker-compose.yml b/docker-compose.yml index f574d5a..baf1d16 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -18,7 +18,9 @@ services: - membership_private healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] - timeout: 20s + start_period: 10s + interval: 5s + timeout: 5s retries: 10 backend: @@ -44,11 +46,12 @@ services: build: context: ./frontend dockerfile: Dockerfile - target: development # Default to development + target: development container_name: membership_frontend restart: unless-stopped environment: - VITE_HOST_CHECK=false + - VITE_ALLOWED_HOSTS=${VITE_ALLOWED_HOSTS} ports: - "8050:3000" # Expose frontend to host volumes: @@ -57,26 +60,22 @@ services: - ./frontend/vite.config.ts:/app/vite.config.ts depends_on: - backend - networks: - - membership_private # Access to backend on private network - profiles: - - dev # Only run in development - - frontend-prod: - build: - context: ./frontend - dockerfile: Dockerfile - target: production - container_name: membership_frontend_prod - restart: unless-stopped - ports: - - "8050:80" # Nginx default port - depends_on: - - backend networks: - membership_private - profiles: - - prod # Only run in production + + #frontend-prod: + # build: + # context: ./frontend + # dockerfile: Dockerfile + # target: production + # container_name: membership_frontend_prod + # restart: unless-stopped + # ports: + # - "8050:80" # Nginx default port + # depends_on: + # - backend + # networks: + # - membership_private networks: membership_private: diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index d8ccb06..af714ff 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -7,7 +7,7 @@ export default defineConfig({ host: true, port: 3000, strictPort: true, - allowedHosts: ['sasaprod', 'localhost', 'members.sasalliance.org'], + allowedHosts: process.env.VITE_ALLOWED_HOSTS ? process.env.VITE_ALLOWED_HOSTS.split(',') : ['sasaprod', 'localhost'], watch: { usePolling: true },