# VibeFinance — productie/self-hosting: 2 containers # # app Express API + gebouwde frontend (poort 3001 in de container) # postgres database met persistent volume # # Zie README.md § Quick Start voor volledige instructies. # # Stappen: # 1. cp .env.example .env (vul JWT_SECRET, POSTGRES_PASSWORD in) # 2. docker compose pull # 3. docker compose up -d services: postgres: image: postgres:18-alpine container_name: vibefinance_postgres restart: unless-stopped environment: POSTGRES_DB: ${POSTGRES_DB:-vibefinance} POSTGRES_USER: ${POSTGRES_USER:-vibefinance} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} volumes: - vibefinance_pgdata:/var/lib/postgresql healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-vibefinance}"] interval: 10s timeout: 5s retries: 5 networks: - vibefinance_net app: image: vibehoogie.duckdns.org/vibe/vibefinance-app:latest container_name: vibefinance_app restart: unless-stopped # Variabelen uit .env (JWT_SECRET, POSTGRES_PASSWORD, ...) env_file: .env environment: NODE_ENV: production PORT: 3001 DATABASE_URL: postgresql://${POSTGRES_USER:-vibefinance}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB:-vibefinance} # Bron voor de update-melding in de app (leeg = melding uit) UPDATE_CHECK_URL: ${UPDATE_CHECK_URL:-https://vibehoogie.duckdns.org/api/v1/repos/vibe/VibeFinance/releases/latest} ports: - "${APP_PORT:-3400}:3001" healthcheck: test: ["CMD-SHELL", "wget -qO- http://localhost:3001/api/health | grep -q status || exit 1"] interval: 30s timeout: 5s retries: 5 start_period: 20s depends_on: postgres: condition: service_healthy networks: - vibefinance_net volumes: vibefinance_pgdata: networks: vibefinance_net: driver: bridge