# Installed as /etc/harbor/harbor.env by remote/bootstrap.sh. # Bootstrap generates all first-party secrets. Add external provider credentials # directly on the server and keep this file free of real secrets. PUBLIC_HOST=threads-tool-dev.30cm.net PUBLIC_WEB_BASE=https://threads-tool-dev.30cm.net PUBLIC_API_BASE=https://threads-tool-dev.30cm.net CORS_ALLOWED_ORIGINS=https://threads-tool-dev.30cm.net PLATFORM_XAI_KEY= PLATFORM_OPENCODE_KEY= PLATFORM_EXA_KEY= THREADS_APP_ID= THREADS_APP_SECRET= STRIPE_ENABLED=false STRIPE_SECRET_KEY= STRIPE_WEBHOOK_SECRET= STRIPE_STARTER_PRICE_ID= STRIPE_PRO_PRICE_ID= STRIPE_SUCCESS_URL="https://threads-tool-dev.30cm.net/app/usage/checkout?result=success&checkout_id={CHECKOUT_ID}&plan={PLAN_ID}" STRIPE_CANCEL_URL="https://threads-tool-dev.30cm.net/app/usage/checkout?result=cancel&plan={PLAN_ID}" STRIPE_PORTAL_RETURN_URL=https://threads-tool-dev.30cm.net/app/usage/plans MAIL_SENDER="Harbor Desk " MAIL_SMTP_HOST= MAIL_SMTP_PORT=587 MAIL_SMTP_USER= MAIL_SMTP_PASSWORD= # Scout Chrome crawler (private Playwright on 127.0.0.1 only) # Install: copy apps/backend/crawler → /opt/harbor/crawler, npm ci, playwright install chromium # Then: systemctl enable --now harbor-crawler SCOUT_CRAWLER_ENDPOINT=http://127.0.0.1:8891 SCOUT_CRAWLER_TOKEN= # Offsite backup sync (backup/offsite-sync.sh, runs from harbor-offsite-backup.timer # daily after the local backup). Leave RESTIC_REPOSITORY empty to keep the sync a # no-op. RESTIC_REPOSITORY/RESTIC_PASSWORD follow restic's own format, e.g. an # S3-compatible bucket: RESTIC_REPOSITORY=s3:https://s3.us-west-000.backblazeb2.com/my-bucket/harbor # plus AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY below for that provider. RESTIC_REPOSITORY= RESTIC_PASSWORD= AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY=