# Trade-In MVP — локальный стек для разработки. # # Архитектура зеркалит прод gendesign (Caddy -> frontend / backend / postgres), # но всё локально без TLS — открывать http://localhost:8080 # # Запуск: # docker compose up -d --build # # Проверки: # curl http://localhost:8080/health # backend health через Caddy # open http://localhost:8080 # frontend (auto-redirect → /trade-in) # open http://localhost:8080/preview/ # tradein.html mockup для сравнения name: tradein-mvp services: postgres: image: postgis/postgis:16-3.4-alpine container_name: tradein-postgres restart: unless-stopped environment: POSTGRES_USER: tradein POSTGRES_PASSWORD: tradein POSTGRES_DB: tradein volumes: - postgres-data:/var/lib/postgresql/data # SQL init scripts: 001_trade_in_estimates.sql создаст таблицу при первом старте. - ./backend/data/sql:/docker-entrypoint-initdb.d:ro healthcheck: test: ["CMD-SHELL", "pg_isready -U tradein -d tradein"] interval: 5s timeout: 3s retries: 10 ports: - "127.0.0.1:5433:5432" # local port 5433, чтобы не конфликтовать с прод-туннелем 15432 backend: build: context: ./backend dockerfile: Dockerfile container_name: tradein-backend restart: unless-stopped environment: DATABASE_URL: postgresql+psycopg://tradein:tradein@postgres:5432/tradein CORS_ORIGINS: '["http://localhost:8080","http://localhost:3000"]' ENVIRONMENT: dev depends_on: postgres: condition: service_healthy volumes: # Hot-reload: монтируем app/ в runner, uvicorn --reload подхватит изменения. - ./backend/app:/app/app:ro ports: - "127.0.0.1:8000:8000" # для прямого debug-доступа в обход Caddy frontend: build: context: ./frontend dockerfile: Dockerfile container_name: tradein-frontend restart: unless-stopped environment: BACKEND_URL: http://backend:8000 NODE_ENV: production depends_on: - backend ports: - "127.0.0.1:3000:3000" # для прямого debug-доступа в обход Caddy caddy: image: caddy:2-alpine container_name: tradein-caddy restart: unless-stopped ports: - "127.0.0.1:8080:80" # главный entry point — http://localhost:8080 volumes: - ./deploy/Caddyfile:/etc/caddy/Caddyfile:ro - ./frontend/public:/srv/preview:ro # для /preview/tradein.html mockup - caddy-data:/data - caddy-config:/config depends_on: - frontend - backend volumes: postgres-data: caddy-data: caddy-config: