diff --git a/PROJECTS/beginner/canary-token-generator/cloudflared.compose.yml b/PROJECTS/beginner/canary-token-generator/cloudflared.compose.yml new file mode 100644 index 00000000..58df3753 --- /dev/null +++ b/PROJECTS/beginner/canary-token-generator/cloudflared.compose.yml @@ -0,0 +1,27 @@ +# ============================================================================= +# AngelaMos | 2026 +# cloudflared.compose.yml +# ============================================================================= +# Cloudflare Tunnel for production remote access +# Usage: docker compose -f compose.yml -f cloudflared.compose.yml up -d +# ============================================================================= + +services: + cloudflared: + image: cloudflare/cloudflared:latest + container_name: ${APP_NAME:-canary-token-generator}-tunnel + command: tunnel run --token ${CLOUDFLARE_TUNNEL_TOKEN} + networks: + - app + depends_on: + nginx: + condition: service_started + deploy: + resources: + limits: + cpus: '0.5' + memory: 128M + reservations: + cpus: '0.1' + memory: 32M + restart: unless-stopped diff --git a/PROJECTS/beginner/canary-token-generator/compose.yml b/PROJECTS/beginner/canary-token-generator/compose.yml new file mode 100644 index 00000000..09ea14d8 --- /dev/null +++ b/PROJECTS/beginner/canary-token-generator/compose.yml @@ -0,0 +1,36 @@ +# ============================================================================= +# AngelaMos | 2026 +# compose.yml +# ============================================================================= +# Production compose - Nginx serving built React app +# For Cloudflare tunnel: docker compose -f compose.yml -f cloudflared.compose.yml up +# ============================================================================= + +name: ${APP_NAME:-canary-token-generator} + +services: + nginx: + build: + context: . + dockerfile: infra/docker/vite.prod + args: + - VITE_API_URL=${VITE_API_URL:-/api} + - VITE_APP_TITLE=${VITE_APP_TITLE:-Canary Token Generator} + container_name: ${APP_NAME:-canary-token-generator}-nginx + ports: + - "${NGINX_HOST_PORT:-22784}:80" + networks: + - app + deploy: + resources: + limits: + cpus: '1.0' + memory: 256M + reservations: + cpus: '0.25' + memory: 64M + restart: unless-stopped + +networks: + app: + driver: bridge diff --git a/PROJECTS/beginner/canary-token-generator/dev.compose.yml b/PROJECTS/beginner/canary-token-generator/dev.compose.yml new file mode 100644 index 00000000..6238f4bc --- /dev/null +++ b/PROJECTS/beginner/canary-token-generator/dev.compose.yml @@ -0,0 +1,49 @@ +# ============================================================================= +# AngelaMos | 2026 +# dev.compose.yml +# ============================================================================= +# Development compose - Nginx + Vite dev server with HMR +# Uses .env.development +# ============================================================================= + +name: ${APP_NAME:-canary-token-generator}-dev + +services: + nginx: + image: nginx:1.27-alpine + container_name: ${APP_NAME:-canary-token-generator}-nginx-dev + ports: + - "${NGINX_HOST_PORT:-58495}:80" + volumes: + - ./infra/nginx/nginx.conf:/etc/nginx/nginx.conf:ro + - ./infra/nginx/dev.nginx:/etc/nginx/conf.d/default.conf:ro + depends_on: + frontend: + condition: service_started + networks: + - app + restart: unless-stopped + + frontend: + build: + context: ./frontend + dockerfile: ../infra/docker/vite.dev + container_name: ${APP_NAME:-canary-token-generator}-frontend-dev + ports: + - "${FRONTEND_HOST_PORT:-15723}:5173" + volumes: + - ./frontend:/app + - frontend_modules:/app/node_modules + environment: + - VITE_API_URL=${VITE_API_URL:-/api} + - VITE_APP_TITLE=${VITE_APP_TITLE:-Canary Token Generator} + networks: + - app + restart: unless-stopped + +networks: + app: + driver: bridge + +volumes: + frontend_modules: