services: db: image: postgres:16 restart: unless-stopped environment: - POSTGRES_USER=inboxzero - POSTGRES_DB=inboxzero - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} healthcheck: test: ['CMD-SHELL', 'pg_isready -U inboxzero'] interval: 10s timeout: 5s retries: 5 volumes: - /srv/inbox-zero/postgres:/var/lib/postgresql/data networks: - inbox-zero-network redis: image: redis:7 restart: unless-stopped volumes: - /srv/inbox-zero/redis:/data networks: - inbox-zero-network serverless-redis-http: image: hiett/serverless-redis-http:latest restart: unless-stopped environment: SRH_MODE: env SRH_TOKEN: ${UPSTASH_REDIS_TOKEN} SRH_CONNECTION_STRING: "redis://redis:6379" depends_on: - redis networks: - inbox-zero-network web: image: ghcr.io/elie222/inbox-zero:latest pull_policy: always restart: unless-stopped depends_on: db: condition: service_healthy redis: condition: service_started environment: NEXT_PUBLIC_BASE_URL: ${NEXT_PUBLIC_BASE_URL} NEXT_PUBLIC_BYPASS_PREMIUM_CHECKS: "true" NEXT_PUBLIC_EMAIL_SEND_ENABLED: "true" DATABASE_URL: postgresql://inboxzero:${POSTGRES_PASSWORD}@db:5432/inboxzero?schema=public DIRECT_URL: postgresql://inboxzero:${POSTGRES_PASSWORD}@db:5432/inboxzero?schema=public UPSTASH_REDIS_URL: http://serverless-redis-http:80 UPSTASH_REDIS_TOKEN: ${UPSTASH_REDIS_TOKEN} INTERNAL_API_URL: http://web:3000 AUTH_SECRET: ${AUTH_SECRET} EMAIL_ENCRYPT_SECRET: ${EMAIL_ENCRYPT_SECRET} EMAIL_ENCRYPT_SALT: ${EMAIL_ENCRYPT_SALT} GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID} GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET} GOOGLE_PUBSUB_TOPIC_NAME: ${GOOGLE_PUBSUB_TOPIC_NAME} GOOGLE_PUBSUB_VERIFICATION_TOKEN: ${GOOGLE_PUBSUB_VERIFICATION_TOKEN} CRON_SECRET: ${CRON_SECRET} INTERNAL_API_KEY: ${INTERNAL_API_KEY} API_KEY_SALT: ${API_KEY_SALT} # Ollama AI provider DEFAULT_LLM_PROVIDER: ollama DEFAULT_LLM_MODEL: ${OLLAMA_MODEL} ECONOMY_LLM_PROVIDER: ollama ECONOMY_LLM_MODEL: ${OLLAMA_MODEL} OLLAMA_BASE_URL: http://ollama:11434 networks: - inbox-zero-network - npm-network cron: image: alpine:latest restart: unless-stopped command: > sh -c " apk add --no-cache curl && ( while true; do curl -s -X GET 'http://web:3000/api/cron/scheduled-actions' -H \"Authorization: Bearer $${CRON_SECRET}\" || true sleep 900 done ) & ( while true; do curl -s -X GET 'http://web:3000/api/cron/automation-jobs' -H \"Authorization: Bearer $${CRON_SECRET}\" || true sleep 900 done ) & ( while true; do curl -s -X GET 'http://web:3000/api/follow-up-reminders' -H \"Authorization: Bearer $${CRON_SECRET}\" || true sleep 3600 done ) & ( while true; do curl -s -X GET 'http://web:3000/api/resend/digest/all' -H \"Authorization: Bearer $${CRON_SECRET}\" || true sleep 1800 done ) & ( while true; do curl -s -X GET 'http://web:3000/api/meeting-briefs' -H \"Authorization: Bearer $${CRON_SECRET}\" || true sleep 900 done ) & ( while true; do curl -s -X GET 'http://web:3000/api/watch/all' -H \"Authorization: Bearer $${CRON_SECRET}\" || true sleep 21600 done ) & wait " environment: CRON_SECRET: ${CRON_SECRET} depends_on: - web networks: - inbox-zero-network networks: inbox-zero-network: driver: bridge npm-network: external: true