services: # The web app; its nginx sends /api and /uploads to the server. sparkyfitness-frontend: image: codewithcj/sparkyfitness:v1.8.0 restart: unless-stopped environment: SPARKY_FITNESS_FRONTEND_URL: ${URL} SPARKY_FITNESS_SERVER_HOST: sparkyfitness-server SPARKY_FITNESS_SERVER_PORT: 3010 depends_on: - sparkyfitness-server sparkyfitness-server: image: codewithcj/sparkyfitness_server:v1.8.0 restart: unless-stopped environment: SPARKY_FITNESS_DB_HOST: sparkyfitness-db SPARKY_FITNESS_DB_PORT: 5432 SPARKY_FITNESS_DB_NAME: sparkyfitness_db SPARKY_FITNESS_DB_USER: sparky SPARKY_FITNESS_DB_PASSWORD: ${DB_PASSWORD} SPARKY_FITNESS_APP_DB_USER: sparky_app SPARKY_FITNESS_APP_DB_PASSWORD: ${APP_DB_PASSWORD} # Better Auth's address, trusted origins and secure cookies. SPARKY_FITNESS_FRONTEND_URL: ${URL} SPARKY_FITNESS_API_ENCRYPTION_KEY: ${ENCRYPTION_KEY} BETTER_AUTH_SECRET: ${AUTH_SECRET} NODE_ENV: production SPARKY_FITNESS_LOG_LEVEL: ERROR SPARKY_FITNESS_SERVER_PORT: 3010 # The project's proxy and the web app's nginx. SPARKY_FITNESS_TRUSTED_PROXY_HOPS: 2 # Open until the first account is made; the notes say how to close it. SPARKY_FITNESS_DISABLE_SIGNUP: ${DISABLE_SIGNUP:-false} volumes: - backup:/app/SparkyFitnessServer/backup - uploads:/app/SparkyFitnessServer/uploads depends_on: sparkyfitness-db: condition: service_healthy sparkyfitness-db: image: postgres:18.3-alpine restart: unless-stopped environment: POSTGRES_DB: sparkyfitness_db POSTGRES_USER: sparky POSTGRES_PASSWORD: ${DB_PASSWORD} volumes: - db:/var/lib/postgresql healthcheck: test: ["CMD-SHELL", "pg_isready -U sparky -d sparkyfitness_db"] interval: 5s timeout: 5s retries: 20 volumes: backup: uploads: db: