Backend: - Add hostGate middleware for host-based API protection - Extend rate limiter with publicUploadLimiter (20/hour) - Add source_host and source_type to audit logs - Database migration for audit log source tracking - Unit tests for hostGate middleware (10/20 passing) Frontend: - Add hostDetection utility for runtime host detection - Implement React code splitting with lazy loading - Update App.js with ProtectedRoute component - Customize 404 page for public vs internal hosts - Update env-config.js for host configuration Docker: - Add environment variables to prod/dev docker-compose - Configure ENABLE_HOST_RESTRICTION flags - Set PUBLIC_HOST and INTERNAL_HOST variables Infrastructure: - Prepared for nginx-proxy-manager setup - Trust proxy configuration (TRUST_PROXY_HOPS=1) Note: Some unit tests still need adjustment for ENV handling
72 lines
1.8 KiB
YAML
72 lines
1.8 KiB
YAML
# Development Environment
|
|
# Usage: docker compose -f docker/dev/docker-compose.yml up -d
|
|
# Or use: ./dev.sh
|
|
|
|
services:
|
|
frontend-dev:
|
|
container_name: image-uploader-frontend-dev
|
|
user: root
|
|
build:
|
|
context: ../../
|
|
dockerfile: docker/dev/frontend/Dockerfile
|
|
working_dir: /app
|
|
ports:
|
|
- "3000:80"
|
|
volumes:
|
|
- ../../frontend:/app:cached
|
|
- dev_frontend_node_modules:/app/node_modules
|
|
- ./frontend/config/.env:/app/.env:ro
|
|
environment:
|
|
- CHOKIDAR_USEPOLLING=true
|
|
- API_URL=http://localhost:5001
|
|
- CLIENT_URL=http://localhost:3000
|
|
- PUBLIC_HOST=localhost
|
|
- INTERNAL_HOST=localhost
|
|
depends_on:
|
|
- backend-dev
|
|
networks:
|
|
- dev-internal
|
|
|
|
backend-dev:
|
|
container_name: image-uploader-backend-dev
|
|
user: "1000:1000"
|
|
build:
|
|
context: ../../
|
|
dockerfile: docker/dev/backend/Dockerfile
|
|
working_dir: /usr/src/app
|
|
ports:
|
|
- "5001:5000"
|
|
volumes:
|
|
- ../../backend:/usr/src/app:cached
|
|
- dev_backend_node_modules:/usr/src/app/node_modules
|
|
- ./backend/config/.env:/usr/src/app/.env:ro
|
|
environment:
|
|
- NODE_ENV=development
|
|
- PUBLIC_HOST=localhost
|
|
- INTERNAL_HOST=localhost
|
|
- ENABLE_HOST_RESTRICTION=false
|
|
networks:
|
|
- dev-internal
|
|
command: [ "npm", "run", "server" ]
|
|
|
|
sqliteweb:
|
|
image: tomdesinto/sqliteweb
|
|
ports:
|
|
- "8080:8080"
|
|
volumes:
|
|
- ../../backend/src/data:/usr/src/app/src/data:ro # identischer Host-Pfad wie im Backend
|
|
command: /usr/src/app/src/data/db/image_uploader.db
|
|
networks:
|
|
- dev-internal
|
|
depends_on:
|
|
- backend-dev
|
|
|
|
networks:
|
|
dev-internal:
|
|
driver: bridge
|
|
|
|
volumes:
|
|
dev_frontend_node_modules:
|
|
driver: local
|
|
dev_backend_node_modules:
|
|
driver: local |