getinboxzero.com #4071
Replies: 2 comments 5 replies
-
|
I'm trying to deploy it. Here is the docker compose I'm using. It's not working yet, but it is close to do it: I'm getting the following errors. Maybe someone knows how to avoid them: Thanks! |
Beta Was this translation helpful? Give feedback.
-
|
I started on building this - to solve the issue of there not being a prebuilt image and the NEXT_PUBLIC_BASE_URL being baked into the image I am using a custom entrypoint that uses sed to substitute it just before runtime and building it to my own registry for now: elie222/inbox-zero@main...colinmollenhour:inbox-zero:main Built image: https://github.com/colinmollenhour/inbox-zero/pkgs/container/inbox-zero Here is my docker-compose.yml file so far: # documentation: https://github.com/elie222/inbox-zero
# slogan: Open source email app to reach inbox zero fast
# tags: email,gmail,ai,productivity,inbox-management
# logo: svgs/inbox-zero.svg
# port: 3000
services:
db:
image: 'postgres:16-alpine'
environment:
POSTGRES_USER: '${SERVICE_USER_POSTGRES}'
POSTGRES_DB: '${POSTGRES_DB:-${SERVICE_USER_POSTGRES}}'
POSTGRES_PASSWORD: '${SERVICE_PASSWORD_64_POSTGRES}'
volumes:
- 'postgres-data:/var/lib/postgresql/data'
healthcheck:
test:
- CMD-SHELL
- 'pg_isready -U ${SERVICE_USER_POSTGRES}'
interval: 10s
timeout: 5s
retries: 5
redis:
image: 'redis:7-alpine'
volumes:
- 'redis-data:/data'
command: 'redis-server --appendonly yes'
healthcheck:
test:
- CMD
- redis-cli
- ping
interval: 10s
timeout: 5s
retries: 5
serverless-redis-http:
image: 'hiett/serverless-redis-http:latest'
depends_on:
redis:
condition: service_healthy
environment:
SRH_MODE: env
SRH_TOKEN: '${SERVICE_PASSWORD_64_REDISTOKEN}'
SRH_CONNECTION_STRING: 'redis://redis:6379'
inboxzero:
image: 'ghcr.io/elie222/inbox-zero:latest'
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
healthcheck:
test:
- CMD
- wget
- '--quiet'
- '--tries=1'
- '--spider'
- 'http://inboxzero:3000/'
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
environment:
DATABASE_URL: 'postgresql://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_64_POSTGRES}@db:5432/${POSTGRES_DB:-inboxzero}?schema=public'
DIRECT_URL: 'postgresql://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_64_POSTGRES}@db:5432/${POSTGRES_DB:-inboxzero}?schema=public'
NEXT_PUBLIC_BASE_URL: '${SERVICE_URL_INBOXZERO}'
NEXT_PUBLIC_BYPASS_PREMIUM_CHECKS: '${NEXT_PUBLIC_BYPASS_PREMIUM_CHECKS:-true}'
NEXT_PUBLIC_EMAIL_SEND_ENABLED: '${NEXT_PUBLIC_EMAIL_SEND_ENABLED:-true}'
AUTH_SECRET: '${SERVICE_PASSWORD_64_AUTHSECRET}'
GOOGLE_CLIENT_ID: '${GOOGLE_CLIENT_ID:-}'
GOOGLE_CLIENT_SECRET: '${GOOGLE_CLIENT_SECRET:-}'
GOOGLE_PUBSUB_TOPIC_NAME: '${GOOGLE_PUBSUB_TOPIC_NAME:-}'
GOOGLE_PUBSUB_VERIFICATION_TOKEN: '${SERVICE_PASSWORD_64_PUBSUBVERIFICATION}'
MICROSOFT_CLIENT_ID: '${MICROSOFT_CLIENT_ID:-}'
MICROSOFT_CLIENT_SECRET: '${MICROSOFT_CLIENT_SECRET:-}'
MICROSOFT_WEBHOOK_CLIENT_STATE: '${SERVICE_PASSWORD_64_MICROSOFTWEBHOOK}'
DEFAULT_LLM_PROVIDER: '${DEFAULT_LLM_PROVIDER:-anthropic}'
DEFAULT_LLM_MODEL: '${DEFAULT_LLM_MODEL:-}'
ANTHROPIC_API_KEY: '${ANTHROPIC_API_KEY:-}'
OPENROUTER_API_KEY: '${OPENROUTER_API_KEY:-}'
OPENAI_API_KEY: '${OPENAI_API_KEY:-}'
GOOGLE_API_KEY: '${GOOGLE_API_KEY:-}'
GROQ_API_KEY: '${GROQ_API_KEY:-}'
BEDROCK_ACCESS_KEY: '${BEDROCK_ACCESS_KEY:-}'
BEDROCK_SECRET_KEY: '${BEDROCK_SECRET_KEY:-}'
BEDROCK_REGION: '${BEDROCK_REGION:-us-west-2}'
OLLAMA_BASE_URL: '${OLLAMA_BASE_URL:-}'
NEXT_PUBLIC_OLLAMA_MODEL: '${NEXT_PUBLIC_OLLAMA_MODEL:-}'
ECONOMY_LLM_PROVIDER: '${ECONOMY_LLM_PROVIDER:-}'
ECONOMY_LLM_MODEL: '${ECONOMY_LLM_MODEL:-}'
INTERNAL_API_KEY: '${SERVICE_PASSWORD_64_INTERNALAPI}'
INTERNAL_API_URL: '${INTERNAL_API_URL:-http://inboxzero:3000}'
API_KEY_SALT: '${SERVICE_PASSWORD_64_APISALT}'
UPSTASH_REDIS_URL: 'http://serverless-redis-http:80'
UPSTASH_REDIS_TOKEN: '${SERVICE_PASSWORD_64_REDISTOKEN}'
REDIS_URL: '${REDIS_URL:-}'
QSTASH_TOKEN: '${QSTASH_TOKEN:-}'
QSTASH_CURRENT_SIGNING_KEY: '${QSTASH_CURRENT_SIGNING_KEY:-}'
QSTASH_NEXT_SIGNING_KEY: '${QSTASH_NEXT_SIGNING_KEY:-}'
NEXT_PUBLIC_APP_HOME_PATH: '${NEXT_PUBLIC_APP_HOME_PATH:-/assistant}'
LOG_ZOD_ERRORS: '${LOG_ZOD_ERRORS:-true}'
CRON_SECRET: '${SERVICE_PASSWORD_64_CRON}'
EMAIL_ENCRYPT_SECRET: '${SERVICE_PASSWORD_64_EMAILENCRYPT}'
EMAIL_ENCRYPT_SALT: '${SERVICE_PASSWORD_EMAILSALT}'
NODE_ENV: production
cron:
image: 'alpine:latest'
configs:
-
source: cron_script
target: /cron.sh
command:
- /bin/sh
- '-c'
- 'apk add --no-cache curl && chmod +x /cron.sh && /cron.sh'
environment:
CRON_SECRET: '${SERVICE_PASSWORD_64_CRON}'
INTERNAL_API_URL: '${INTERNAL_API_URL:-http://inboxzero:3000}'
depends_on:
inboxzero:
condition: service_healthy
volumes:
postgres-data: null
redis-data: null
configs:
cron_script:
content: |
#!/bin/sh
(
while true; do
echo "[cron] Processing scheduled actions..."
/usr/bin/curl -s -X GET "$${INTERNAL_API_URL}/api/cron/scheduled-actions" -H "Authorization: Bearer $${CRON_SECRET}" || echo "[cron] Warning: scheduled-actions request failed"
sleep 900
done
) &
(
while true; do
echo "[cron] Processing automation jobs..."
/usr/bin/curl -s -X GET "$${INTERNAL_API_URL}/api/cron/automation-jobs" -H "Authorization: Bearer $${CRON_SECRET}" || echo "[cron] Warning: automation-jobs request failed"
sleep 900
done
) &
(
while true; do
echo "[cron] Processing follow-up reminders..."
/usr/bin/curl -s -X GET "$${INTERNAL_API_URL}/api/follow-up-reminders" -H "Authorization: Bearer $${CRON_SECRET}" || echo "[cron] Warning: follow-up-reminders request failed"
sleep 3600
done
) &
(
while true; do
echo "[cron] Processing digest emails..."
/usr/bin/curl -s -X GET "$${INTERNAL_API_URL}/api/resend/digest/all" -H "Authorization: Bearer $${CRON_SECRET}" || echo "[cron] Warning: digest request failed"
sleep 1800
done
) &
(
while true; do
echo "[cron] Processing meeting briefs..."
/usr/bin/curl -s -X GET "$${INTERNAL_API_URL}/api/meeting-briefs" -H "Authorization: Bearer $${CRON_SECRET}" || echo "[cron] Warning: meeting-briefs request failed"
sleep 900
done
) &
(
while true; do
echo "[cron] Renewing email watches..."
/usr/bin/curl -s -X GET "$${INTERNAL_API_URL}/api/watch/all" -H "Authorization: Bearer $${CRON_SECRET}" || echo "[cron] Warning: watch request failed"
sleep 21600
done
) &
waitHowever, I've spent too much time on it already so I'll have to come back to this later... Updated Nov 20, 2025: Container starts, no errors in console - but Updated March 19, 2026: Everything seems to be working great! |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
"Automate your email with AI, bulk unsubscribe from newsletters, and block cold emails. Open-source."
Hi, getting a service for getinboxzero.com would be fantastic. Thanks :)
github: https://github.com/elie222/inbox-zero
Beta Was this translation helpful? Give feedback.
All reactions