bb4619aefe
Adds a new cron blueprint with UUID-keyed jobs that Cronicle triggers via HTTP POST with a shared secret header. Also adds scripts/migrate-new.sh so migrations can be generated locally against a Docker postgres when no prod container is running. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
127 lines
4.5 KiB
YAML
127 lines
4.5 KiB
YAML
version: "3.8"
|
|
|
|
x-raggr-common: &raggr-common
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
image: torrtle/simbarag:latest
|
|
environment:
|
|
- PAPERLESS_TOKEN=${PAPERLESS_TOKEN}
|
|
- BASE_URL=${BASE_URL}
|
|
- OLLAMA_URL=${OLLAMA_URL:-http://localhost:11434}
|
|
- OPENAI_API_KEY=${OPENAI_API_KEY}
|
|
- EMBEDDING_SERVER_URL=${EMBEDDING_SERVER_URL}
|
|
- EMBEDDING_MODEL_NAME=${EMBEDDING_MODEL_NAME}
|
|
- JWT_SECRET_KEY=${JWT_SECRET_KEY}
|
|
- LLAMA_SERVER_URL=${LLAMA_SERVER_URL}
|
|
- LLAMA_MODEL_NAME=${LLAMA_MODEL_NAME}
|
|
- OIDC_ISSUER=${OIDC_ISSUER}
|
|
- OIDC_CLIENT_ID=${OIDC_CLIENT_ID}
|
|
- OIDC_CLIENT_SECRET=${OIDC_CLIENT_SECRET}
|
|
- OIDC_REDIRECT_URI=${OIDC_REDIRECT_URI}
|
|
- OIDC_USE_DISCOVERY=${OIDC_USE_DISCOVERY:-true}
|
|
- DATABASE_URL=${DATABASE_URL:-postgres://raggr:changeme@postgres:5432/raggr}
|
|
- TAVILY_API_KEY=${TAVILIY_API_KEY}
|
|
- YNAB_ACCESS_TOKEN=${YNAB_ACCESS_TOKEN}
|
|
- YNAB_BUDGET_ID=${YNAB_BUDGET_ID}
|
|
- MEALIE_BASE_URL=${MEALIE_BASE_URL}
|
|
- MEALIE_API_TOKEN=${MEALIE_API_TOKEN}
|
|
- TWILIO_ACCOUNT_SID=${TWILIO_ACCOUNT_SID}
|
|
- TWILIO_AUTH_TOKEN=${TWILIO_AUTH_TOKEN}
|
|
- TWILIO_WHATSAPP_NUMBER=${TWILIO_WHATSAPP_NUMBER}
|
|
- ALLOWED_WHATSAPP_NUMBERS=${ALLOWED_WHATSAPP_NUMBERS}
|
|
- TWILIO_SIGNATURE_VALIDATION=${TWILIO_SIGNATURE_VALIDATION:-true}
|
|
- TWILIO_WEBHOOK_URL=${TWILIO_WEBHOOK_URL:-}
|
|
- OBSIDIAN_EMAIL=${OBSIDIAN_EMAIL}
|
|
- OBSIDIAN_PASSWORD=${OBSIDIAN_PASSWORD}
|
|
- OBSIDIAN_VAULT_ID=${OBSIDIAN_VAULT_ID}
|
|
- OBSIDIAN_E2E_PASSWORD=${OBSIDIAN_E2E_PASSWORD}
|
|
- OBSIDIAN_DEVICE_NAME=${OBSIDIAN_DEVICE_NAME}
|
|
- OBSIDIAN_CONTINUOUS_SYNC=${OBSIDIAN_CONTINUOUS_SYNC:-false}
|
|
- OBSIDIAN_VAULT_PATH=${OBSIDIAN_VAULT_PATH:-/app/data/obsidian}
|
|
- S3_ENDPOINT_URL=${S3_ENDPOINT_URL}
|
|
- S3_ACCESS_KEY_ID=${S3_ACCESS_KEY_ID}
|
|
- S3_SECRET_ACCESS_KEY=${S3_SECRET_ACCESS_KEY}
|
|
- S3_BUCKET_NAME=${S3_BUCKET_NAME:-asksimba-images}
|
|
- S3_REGION=${S3_REGION:-garage}
|
|
- OLLAMA_HOST=${OLLAMA_HOST:-http://localhost:11434}
|
|
- FERNET_KEY=${FERNET_KEY}
|
|
- GOOGLE_TOKEN_FILE=${GOOGLE_TOKEN_FILE:-/app/config/google-token.json}
|
|
- MAILGUN_API_KEY=${MAILGUN_API_KEY}
|
|
- MAILGUN_DOMAIN=${MAILGUN_DOMAIN}
|
|
- MAILGUN_WEBHOOK_SIGNING_KEY=${MAILGUN_WEBHOOK_SIGNING_KEY}
|
|
- MAILGUN_SIGNATURE_VALIDATION=${MAILGUN_SIGNATURE_VALIDATION:-true}
|
|
- EMAIL_RATE_LIMIT_MAX=${EMAIL_RATE_LIMIT_MAX:-5}
|
|
- EMAIL_RATE_LIMIT_WINDOW=${EMAIL_RATE_LIMIT_WINDOW:-300}
|
|
- SENDBLUE_API_KEY=${SENDBLUE_API_KEY}
|
|
- SENDBLUE_API_SECRET=${SENDBLUE_API_SECRET}
|
|
- SENDBLUE_FROM_NUMBER=${SENDBLUE_FROM_NUMBER}
|
|
- SENDBLUE_WEBHOOK_SECRET=${SENDBLUE_WEBHOOK_SECRET}
|
|
- SENDBLUE_SIGNATURE_VALIDATION=${SENDBLUE_SIGNATURE_VALIDATION:-true}
|
|
- ALLOWED_IMESSAGE_NUMBERS=${ALLOWED_IMESSAGE_NUMBERS}
|
|
- SIMBAKIT_URL=${SIMBAKIT_URL:-http://simbakit:8585}
|
|
- CRON_SECRET=${CRON_SECRET}
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
volumes:
|
|
- ./obvault:/app/data/obsidian
|
|
- ./token.json:/app/config/google-token.json:ro
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:8080/api/health"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 3
|
|
start_period: 60s
|
|
restart: unless-stopped
|
|
|
|
services:
|
|
postgres:
|
|
image: pgvector/pgvector:pg16
|
|
ports:
|
|
- "5432:5432"
|
|
environment:
|
|
- POSTGRES_USER=${POSTGRES_USER:-raggr}
|
|
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-changeme}
|
|
- POSTGRES_DB=${POSTGRES_DB:-raggr}
|
|
volumes:
|
|
- postgres_data:/var/lib/postgresql/data
|
|
- ./docker/init-pgvector.sql:/docker-entrypoint-initdb.d/init-pgvector.sql
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-raggr}"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
restart: unless-stopped
|
|
|
|
# Blue-green deployment: exactly one of raggr-blue/raggr-green serves at a
|
|
# time; Caddy health-checks both ports and routes to the healthy one.
|
|
# Use scripts/deploy.sh (make redeploy) to swap colors with zero downtime.
|
|
raggr-blue:
|
|
<<: *raggr-common
|
|
profiles: ["blue"]
|
|
ports:
|
|
- "8080:8080"
|
|
|
|
raggr-green:
|
|
<<: *raggr-common
|
|
profiles: ["green"]
|
|
ports:
|
|
- "8081:8080"
|
|
|
|
simbakit:
|
|
build:
|
|
context: ./simbakit
|
|
restart: unless-stopped
|
|
volumes:
|
|
- simbakit-data:/app/data
|
|
environment:
|
|
- PETKIT_USERNAME=${PETKIT_USERNAME}
|
|
- PETKIT_PASSWORD=${PETKIT_PASSWORD}
|
|
- PETKIT_REGION=${PETKIT_REGION:-US}
|
|
- PETKIT_TIMEZONE=${PETKIT_TIMEZONE:-America/New_York}
|
|
|
|
volumes:
|
|
postgres_data:
|
|
simbakit-data:
|