Troubleshooting
Diagnose common deployment failures across storage, routing, package resolution, Infisical, and admin dashboards.
Last updated
Use this page as a first pass before digging through source code.
Storage startup failure
Symptom
The API fails at startup with an S3 or bucket-health error.
Likely causes
- wrong
STORAGE_ENDPOINT - wrong
STORAGE_BUCKET - wrong
STORAGE_ACCESS_KEYorSTORAGE_SECRET_KEY - bucket not created
- provider access denied
What to check
- Confirm the bucket exists.
- Confirm the endpoint is the provider’s S3-compatible endpoint, not a generic console URL.
- Confirm the credentials have access to that bucket.
- Recheck Storage Setup.
Backblaze browser upload CORS failure
Symptom
The app can issue presigned URLs, but the browser upload fails with a CORS error.
Root cause
The bucket CORS rules are missing or incomplete.
Fix
- Add bucket CORS for the web app origin.
- Allow the required methods such as
PUT,GET, andHEAD. - Allow request headers such as
content-type, or use*during initial validation.
This is not fixed by widening Fastify CORS.
Redis dashboard or Bull Board says you are not logged in
Symptom
You are logged into the app, but /admin/redis or /admin/queues rejects access.
Likely causes
- the route is being accessed through a different host than the logged-in app session
- the route is hitting the wrong service
- the user is not a
SYSTEM_ADMIN
Fix
- Prefer root-domain routing for
/admin/redisand/admin/queues. - Confirm the route is proxied to the
apiservice, not thewebservice. - Confirm the logged-in user has the
SYSTEM_ADMINrole slug.
Root-domain /health, /documentation, or admin route returns SPA 404
Symptom
The browser shows the web app’s “Page Not Found” screen instead of an API response.
Root cause
The request is landing on the web app instead of the API service.
Fix
Add or correct reverse-proxy routes for:
/api/admin/redis/admin/queues- and any optional API-host routes you want
See Routing and Domains.
ArcLocale package install failure
Symptom
pnpm install or Docker source build fails while resolving @arc-laboratories/arclocale-compiler.
Likely causes
- a stale
.npmrcis still forcing@arc-laboratoriesto GitHub Packages - the lockfile still points at an older GitHub Packages tarball
- the dependency version was bumped without refreshing
pnpm-lock.yaml minimumReleaseAgeis still blocking a freshly published alpha
Fix
- Remove any lingering
@arc-laboratoriesregistry override from.npmrc. - Refresh the lockfile with a new
pnpm installafter bumping the package version. - If you intentionally consume a just-published prerelease, confirm
minimumReleaseAgeExcludeincludes that exact version. - Re-run the install after the lockfile points at the public npm release.
GHCR image pull failure
Symptom
Registry-image deployment fails to pull ghcr.io/arc-laboratories/... images.
Likely causes
- no
docker login ghcr.io - token lacks
read:packages - the image tag does not exist yet or is wrong
Fix
- Authenticate with a credential that can pull from
ghcr.io. - Confirm the image tag you are requesting actually exists.
- If you do not want to manage GHCR auth on the target host, use the source-build path.
Infisical startup failure
Symptom
Containers fail before the app starts, often with missing Infisical token or project errors.
Likely causes
INFISICAL_TOKEN-family variables missingINFISICAL_PROJECT_IDmissing- wrong
INFISICAL_ENV - using an Infisical-backed startup path without intending to
Fix
- If you want Infisical, verify the bootstrap variables.
- If you do not want Infisical on source/registry/manual paths, set
SKIP_INFISICAL=trueand provide the full runtime env directly.
Translation build fails even though deployment does not need API keys
Symptom
The web build fails in ArcLocale despite no translation-provider API key being configured.
Root cause
The deployment build is running in cache-only mode and required translation cache entries are missing.
Fix
- Refresh or restore the committed translation cache.
- Re-run the translation workflow if new strings were introduced.
- Do not add translation-provider keys unless you intentionally want to run translation generation.
Postgres or Redis already exists but compose still fails
Symptom
The app stack does not come up cleanly even though you know the database or Redis server is available.
Likely causes
- compose-managed infra is using different credentials or DB names than expected
- the wrong
.envfile is loaded POSTGRES_DBorDATABASE_URLdo not match the actual intended database
Fix
- Re-check the compose file you are using.
- Re-check
.envagainst Environment Reference. - Confirm whether you are using bundled Postgres/Redis or external services.
Email looks configured, but no emails arrive
Likely causes
- sender domain not verified in Resend
- wrong
RESEND_FROM_EMAIL REMOTE_EAZE_DISABLE_OUTBOUND_EMAIL=true
Fix
- Confirm the sender domain is verified.
- Confirm the sender email belongs to that domain.
- Confirm outbound email disable mode is off when you expect live delivery.
- Use
pnpm email:test -- --listand a controlled send or dry-run preview.