migration: move to bash based build scripts
This commit is contained in:
210
docker-compose.yml
Normal file
210
docker-compose.yml
Normal file
@@ -0,0 +1,210 @@
|
||||
# TimeSafari Docker Compose Configuration
|
||||
# Author: Matthew Raymer
|
||||
# Description: Multi-environment Docker Compose setup for TimeSafari
|
||||
#
|
||||
# Usage:
|
||||
# Development: docker-compose up dev
|
||||
# Staging: docker-compose up staging
|
||||
# Production: docker-compose up production
|
||||
# Custom: BUILD_MODE=staging docker-compose up custom
|
||||
#
|
||||
# Environment Variables:
|
||||
# BUILD_MODE: development, staging, or production (default: production)
|
||||
# NODE_ENV: node environment (default: production)
|
||||
# VITE_PLATFORM: vite platform (default: web)
|
||||
# VITE_PWA_ENABLED: enable PWA (default: true)
|
||||
# VITE_DISABLE_PWA: disable PWA (default: false)
|
||||
# PORT: port to expose (default: 80 for production, 5173 for dev)
|
||||
# ENV_FILE: environment file to use (default: .env.production)
|
||||
#
|
||||
# See .env files for application-specific configuration
|
||||
# VITE_APP_SERVER: Application server URL
|
||||
# VITE_DEFAULT_ENDORSER_API_SERVER: Endorser API server URL
|
||||
|
||||
version: '3.8'
|
||||
|
||||
# Default values that can be overridden
|
||||
x-defaults: &defaults
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
args:
|
||||
BUILD_MODE: ${BUILD_MODE:-production}
|
||||
NODE_ENV: ${NODE_ENV:-production}
|
||||
VITE_PLATFORM: ${VITE_PLATFORM:-web}
|
||||
VITE_PWA_ENABLED: ${VITE_PWA_ENABLED:-true}
|
||||
VITE_DISABLE_PWA: ${VITE_DISABLE_PWA:-false}
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost/health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
|
||||
services:
|
||||
# Development service with hot reloading
|
||||
dev:
|
||||
<<: *defaults
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
target: development
|
||||
args:
|
||||
BUILD_MODE: development
|
||||
NODE_ENV: development
|
||||
VITE_PLATFORM: web
|
||||
VITE_PWA_ENABLED: true
|
||||
VITE_DISABLE_PWA: false
|
||||
ports:
|
||||
- "${DEV_PORT:-5173}:5173"
|
||||
volumes:
|
||||
- .:/app
|
||||
- /app/node_modules
|
||||
environment:
|
||||
- NODE_ENV=development
|
||||
- VITE_PLATFORM=web
|
||||
- VITE_PWA_ENABLED=true
|
||||
- VITE_DISABLE_PWA=false
|
||||
env_file:
|
||||
- ${DEV_ENV_FILE:-.env.development}
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:5173"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
|
||||
# Staging service for testing
|
||||
staging:
|
||||
<<: *defaults
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
target: staging
|
||||
args:
|
||||
BUILD_MODE: staging
|
||||
NODE_ENV: staging
|
||||
VITE_PLATFORM: web
|
||||
VITE_PWA_ENABLED: true
|
||||
VITE_DISABLE_PWA: false
|
||||
ports:
|
||||
- "${STAGING_PORT:-8080}:80"
|
||||
environment:
|
||||
- NODE_ENV=staging
|
||||
- VITE_PLATFORM=web
|
||||
- VITE_PWA_ENABLED=true
|
||||
- VITE_DISABLE_PWA=false
|
||||
env_file:
|
||||
- ${STAGING_ENV_FILE:-.env.staging}
|
||||
|
||||
# Production service
|
||||
production:
|
||||
<<: *defaults
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
target: production
|
||||
args:
|
||||
BUILD_MODE: production
|
||||
NODE_ENV: production
|
||||
VITE_PLATFORM: web
|
||||
VITE_PWA_ENABLED: true
|
||||
VITE_DISABLE_PWA: false
|
||||
ports:
|
||||
- "${PROD_PORT:-80}:80"
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- VITE_PLATFORM=web
|
||||
- VITE_PWA_ENABLED=true
|
||||
- VITE_DISABLE_PWA=false
|
||||
env_file:
|
||||
- ${PROD_ENV_FILE:-.env.production}
|
||||
|
||||
# Production service with SSL (requires certificates)
|
||||
production-ssl:
|
||||
<<: *defaults
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
target: production
|
||||
args:
|
||||
BUILD_MODE: production
|
||||
NODE_ENV: production
|
||||
VITE_PLATFORM: web
|
||||
VITE_PWA_ENABLED: true
|
||||
VITE_DISABLE_PWA: false
|
||||
ports:
|
||||
- "${SSL_PORT:-443}:443"
|
||||
- "${HTTP_PORT:-80}:80"
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- VITE_PLATFORM=web
|
||||
- VITE_PWA_ENABLED=true
|
||||
- VITE_DISABLE_PWA=false
|
||||
env_file:
|
||||
- ${PROD_ENV_FILE:-.env.production}
|
||||
volumes:
|
||||
- ./ssl:/etc/nginx/ssl:ro
|
||||
- ./docker/nginx-ssl.conf:/etc/nginx/conf.d/default.conf:ro
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "https://localhost/health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
|
||||
# Custom service - configurable via environment variables
|
||||
custom:
|
||||
<<: *defaults
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
target: ${BUILD_TARGET:-production}
|
||||
args:
|
||||
BUILD_MODE: ${BUILD_MODE:-production}
|
||||
NODE_ENV: ${NODE_ENV:-production}
|
||||
VITE_PLATFORM: ${VITE_PLATFORM:-web}
|
||||
VITE_PWA_ENABLED: ${VITE_PWA_ENABLED:-true}
|
||||
VITE_DISABLE_PWA: ${VITE_DISABLE_PWA:-false}
|
||||
ports:
|
||||
- "${CUSTOM_PORT:-8080}:${CUSTOM_INTERNAL_PORT:-80}"
|
||||
environment:
|
||||
- NODE_ENV=${NODE_ENV:-production}
|
||||
- VITE_PLATFORM=${VITE_PLATFORM:-web}
|
||||
- VITE_PWA_ENABLED=${VITE_PWA_ENABLED:-true}
|
||||
- VITE_DISABLE_PWA=${VITE_DISABLE_PWA:-false}
|
||||
env_file:
|
||||
- ${CUSTOM_ENV_FILE:-.env.production}
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:${CUSTOM_INTERNAL_PORT:-80}/health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
|
||||
# Load balancer for production (optional)
|
||||
nginx-lb:
|
||||
image: nginx:alpine
|
||||
ports:
|
||||
- "${LB_PORT:-80}:80"
|
||||
- "${LB_SSL_PORT:-443}:443"
|
||||
volumes:
|
||||
- ./docker/nginx-lb.conf:/etc/nginx/nginx.conf:ro
|
||||
- ./ssl:/etc/nginx/ssl:ro
|
||||
depends_on:
|
||||
- production
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost/health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
|
||||
networks:
|
||||
default:
|
||||
driver: bridge
|
||||
ipam:
|
||||
config:
|
||||
- subnet: 172.20.0.0/16
|
||||
Reference in New Issue
Block a user