Files
docker-infrastructure/inbox-zero/docker-compose.yaml
T

133 lines
3.8 KiB
YAML

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