Areca Docs

Configuration reference

Every environment variable and Docker Compose setting for the Areca CMS, grouped by purpose, with defaults and whether each one is required.

The CMS reads its settings from environment variables. In the Docker deployment, you set most of them in docker/.env, and the Compose file passes them to the CMS container. This page lists every variable the CMS reads, grouped by purpose. Each table shows whether the variable is required, its default, and what it does.

Three rules apply to every table:

  • The Compose file passes only the variables it lists to the CMS container. A variable that is not in the cms service's environment list has no effect, even when it is set in .env. Where a row says that the stock Compose file does not pass a variable, you must add it to the list before it takes effect. See only listed variables reach the container.
  • A blank value counts as unset in the validated CMS settings. KEY= in .env uses the default, or fails the required check if there is no default.
  • Changes apply after a restart. Run docker compose up -d --wait to recreate the container with the new values.

Where values are loaded

For source development, use apps/cms/.env.local. The CMS loads .env.local then .env relative to its working directory; existing process variables win, then the first file wins. Plain dotenv does not expand ${OTHER_VARIABLE} or run shell commands in values. Quote values containing # so they are not parsed as comments. Keep real env files out of Git.

For Docker, copy docker/.env.example to docker/.env and use docker/compose.yml. Compose interpolates this file; it does not forward its entire contents. For example, to enable a setting absent from the service's environment list, add it explicitly:

docker/compose.yml (cms service excerpt)
services:
  cms:
    environment:
      RATE_LIMIT_TRUST_PROXY: ${RATE_LIMIT_TRUST_PROXY:-false}

Merge that entry into the existing mapping. Recreate the container after changes. VITE_ settings are browser-exposed build inputs; never use that prefix for a secret. All CMS variables below are server-side unless marked otherwise. Website SDK settings belong in the website project, not the CMS container.

Every environment value starts as text. In the tables, boolean means the literal true or false, lowercase; integer means a decimal whole number without units; URL means an absolute URL including its scheme. A provider credential comes from that service: do not replace it with a locally generated encryption key. Base64 key means a fresh, independent openssl rand -base64 32 value, not a password or API token.

Required secrets

Four values must be set before the CMS starts. The CMS checks them at startup, and the Compose file refuses to start without POSTGRES_PASSWORD, BETTER_AUTH_SECRET, S3_SECRET_KEY and DOKPLOY_CREDENTIALS_ENCRYPTION_KEY.

VariableWhy it is required
BETTER_AUTH_SECRETNonempty random secret string; generate with openssl rand -hex 32. Signs sign-in sessions.
DOKPLOY_CREDENTIALS_ENCRYPTION_KEYEncrypts saved Dokploy API keys. The CMS requires it even if you have not connected Dokploy yet.
POSTGRES_PASSWORDPassword for the database user. Compose only.
S3_SECRET_KEYSecret key for the storage service. Required by both Compose and the CMS.

CLOUDFLARE_CREDENTIALS_ENCRYPTION_KEY is optional. Set it if you connect Cloudflare. Without it the CMS still starts, but the Cloudflare card shows "Encryption key not set" and saving a Cloudflare token is disabled. See Cloudflare.

Generate each secret with openssl. Use openssl rand -hex 32 for BETTER_AUTH_SECRET, and openssl rand -base64 32 for the encryption keys:

openssl rand -hex 32       # BETTER_AUTH_SECRET
openssl rand -base64 32    # DOKPLOY_CREDENTIALS_ENCRYPTION_KEY
openssl rand -base64 32    # CLOUDFLARE_CREDENTIALS_ENCRYPTION_KEY, if you use Cloudflare
openssl rand -base64 32    # AI_SETTINGS_ENCRYPTION_KEY, if you use AI settings
openssl rand -base64 32    # SECRETS_ENCRYPTION_KEY, if you save an SMTP password in Agency › Mail

An encryption key must be the base64 encoding of exactly 32 bytes: 44 characters, ending in =. The CMS rejects any other format.

Back up the encryption keys with the database

DOKPLOY_CREDENTIALS_ENCRYPTION_KEY, CLOUDFLARE_CREDENTIALS_ENCRYPTION_KEY and AI_SETTINGS_ENCRYPTION_KEY are used to decrypt values stored in the database. There is no automatic re-encryption. If you change or lose a key, the saved values become unreadable, and you must enter them again. Keep each key with the matching database backup. See backup and recovery.

The docker/.env.example file leaves BETTER_AUTH_SECRET and DOKPLOY_CREDENTIALS_ENCRYPTION_KEY empty, so you must generate both. Compose stops with a message if they are missing.

In production (NODE_ENV=production), the CMS refuses to start unless these checks pass:

  • REDIS_URL is set. Compose sets it for you. Outside Compose, set it yourself, for example redis://redis:6379.
  • BETTER_AUTH_SECRET is a real value. The CMS refuses the example values: change-me, and any value starting with replace- or replace_. It tells you how to generate one, with openssl rand -hex 32.
  • No encryption key is all zero bytes. Each one that is set (DOKPLOY_CREDENTIALS_ENCRYPTION_KEY, CLOUDFLARE_CREDENTIALS_ENCRYPTION_KEY, SECRETS_ENCRYPTION_KEY, AI_SETTINGS_ENCRYPTION_KEY) is refused if it decodes to 32 zero bytes, and the error names it. Generate each one with openssl rand -base64 32.

Core

VariableExpected valueRequiredDefaultMeaning
APP_URLURLYesCompose: ${CMS_URL}, default http://localhost:3000The public CMS address, used in invitation links, uploaded file URLs and each site's AI connector URL (/api/mcp/<site>). Browsers and the build hosts (Dokploy, or Cloudflare builds) must be able to reach it. Do not use localhost in production.
BETTER_AUTH_URLURLYesCompose: ${CMS_URL}, default http://localhost:3000The public CMS address used for sign-in callbacks. It must match the address people use to open the CMS, including the scheme. It is also the OAuth issuer (<BETTER_AUTH_URL>/api/auth) that AI apps sign in with, so use the public HTTPS address and the same origin as APP_URL.
SERVER_URLURLNoUnsetAccepted by the configuration check, but the CMS does not read it at runtime. Leave it unset.
PORTInteger port, 1–65535No3000 (set by the image)The port the server listens on inside the container. Compose maps the host port CMS_PORT to it.
HOSTBind address, e.g. 0.0.0.0No0.0.0.0 (set by the image)The address the server listens on inside the container.
VITE_APP_TITLEPlain string; browser-exposed build input, currently unusedNoUnsetA browser title setting. The current source does not read it, so setting it has no effect. Change the name shown in the interface under Agency > Branding. The Compose file does not pass it.

The image also sets NODE_ENV=production. The legacy Dokploy fallback below is ignored when this value is production. See dev-only switches.

Database

VariableExpected valueRequiredDefaultMeaning
DATABASE_URLPostgreSQL URL; percent-encode reserved characters in credentialsYesCompose: built from POSTGRES_PASSWORDPostgreSQL connection URL, in the form postgres://user:password@host:5432/database. The Compose file points it at the postgres service.
DB_CONNECT_TIMEOUT_MSInteger milliseconds, ≥0No5000How long a request waits to get a database connection. 0 disables the limit.
DB_STATEMENT_TIMEOUT_MSInteger milliseconds, ≥0No15000The longest any single query may run. 0 disables the limit.
DB_IDLE_IN_TX_TIMEOUT_MSInteger milliseconds, ≥0No30000Closes a transaction that sits idle while holding a lock, so it cannot block other work. 0 disables the limit.

| DB_POOL_MAX | Integer, ≥1 | No | 10 | Main pool connections per CMS process. Additional MCP grant and factor-lock pools can open up to four connections each. |

Migrations run at container start, and they are not subject to these limits. See upgrades.

Redis

VariableExpected valueRequiredDefaultMeaning
REDIS_URLRedis URL (redis:// or rediss://)Yes in productionredis://localhost:6379 outside production (Compose: redis://redis:6379)Redis connection URL. Redis holds the shared counters for rate limits. The CMS refuses to start in production without it. If Redis is down, each instance keeps counting in memory with the same budgets, and the readiness check reports Redis as degraded without failing.

Auth and sign-in

VariableExpected valueRequiredDefaultMeaning
AUTH_EMAIL_PASSWORD_ENABLEDBooleanNotrueSet to false to remove the email and password form and reject password sign-in. The first account created at /setup still gets a password, so the instance cannot be locked out. The stock Compose file does not pass it.
SETUP_TOKENRandom secret string, at least 16 characters; openssl rand -hex 32 recommendedNoGenerated, printed in the logThe token the setup page asks for. It must be at least 16 characters. If you leave it unset, the CMS generates one and prints it in its log while no user exists. See first-run setup.
ADMIN_MFA_REQUIREDBooleanNotrueRequires agency admins to turn on two-factor authentication before they can use admin features. Set it to false only for a throwaway development or test stack. The stock Compose file does not pass it.
GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRETProvider-issued application ID string; Provider-issued secret stringNoUnsetTurns on GitHub sign-in when both values are set. Register the callback <BETTER_AUTH_URL>/api/auth/callback/github with GitHub. The stock Compose file does not pass them.
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRETProvider-issued application ID string; Provider-issued secret stringNoUnsetTurns on Google sign-in when both values are set. Callback: <BETTER_AUTH_URL>/api/auth/callback/google. The stock Compose file does not pass them.
DISCORD_CLIENT_ID, DISCORD_CLIENT_SECRETProvider-issued application ID string; Provider-issued secret stringNoUnsetTurns on Discord sign-in when both values are set. Callback: <BETTER_AUTH_URL>/api/auth/callback/discord. The stock Compose file does not pass them.
MICROSOFT_SSO_CLIENT_ID, MICROSOFT_SSO_CLIENT_SECRET, MICROSOFT_SSO_TENANT_IDProvider-issued application ID string; Provider-issued secret string; Concrete directory ID (normally UUID); not commonNoUnsetTurns on Microsoft Entra ID sign-in (OpenID Connect). All three are needed. MICROSOFT_SSO_TENANT_ID must be a specific directory (tenant) ID. The multi-tenant common value is not supported. Callback: <BETTER_AUTH_URL>/api/auth/sso/callback/microsoft. The stock Compose file does not pass them.
MICROSOFT_SSO_DOMAINEmail domain string, e.g. example.comFor Microsoft sign-inUnsetAn email domain your tenant owns. Entra ID sends no verified-email claim, so only Microsoft addresses on this domain can link to an existing account or accept an invitation. It also routes sign-ins for that domain to Microsoft. The stock Compose file does not pass it.

| SESSION_COOKIE_CACHE_SECONDS | Integer seconds, 0–300 | No | 60 | Signed session cache for reads. Writes always check the database. 0 checks every request; session revocations may take up to this interval to affect cached reads. |

A sign-in method appears on the sign-in page only when it is configured. Sign-in is invite-only: a provider sign-in succeeds only when the email address already has an account or a pending invitation. For how the methods work together, see authentication.

Storage

Uploaded files and branding images are stored in an S3-compatible bucket. The bucket is created at startup if it does not exist.

VariableExpected valueRequiredDefaultMeaning
S3_ENDPOINTURLYesCompose: http://rustfs:9000URL of the S3-compatible API.
S3_REGIONRegion string, e.g. us-east-1YesCompose: us-east-1The bucket's region. Use the region your storage service gives you.
S3_BUCKETBucket name stringYesCompose: arecaA private bucket, dedicated to Areca or shared with a separate S3_PREFIX.
S3_ACCESS_KEYStorage access ID stringYesCompose: ${S3_ACCESS_KEY:-areca-demo}Access key with access to the bucket.
S3_SECRET_KEYStorage secret credential stringYesCompose: required from .envSecret key for the access key.
S3_PREFIXRelative slash-separated path, e.g. sites/productionNoUnset (bucket root)Installation path such as areca or sites/production. Exactly empty also uses root; surrounding slashes are normalized. Invalid nonempty paths fail before storage operations, without root fallback.
S3_FORCE_PATH_STYLEBooleanNofalseSet to true for path-style addressing, which MinIO and RustFS need. Compose sets it to true. Keep the default false for virtual-hosted endpoints.

See storage prefixes and migration for validation, reset scope, permissions and moving existing objects. Use the same prefix for every CMS process and maintenance script. Database keys, bundle keys and public URLs do not change.

Email

The CMS sends email through an SMTP server. It sends invitations, password reset and email verification links, and security notices. The sender's display name comes from Agency > Branding.

You can set the mail server in two places: in these variables, or in Agency > Mail after you sign in. Settings saved in Agency > Mail replace these variables entirely. Turn on Use environment settings in that tab to send with these variables again. See agency mail.

Environment mail needs SMTP_HOST, SMTP_PORT and SMTP_FROM together; omitting any of them disables that source. The CMS starts without any SMTP settings. Until you set a server in one of the two places, mail is off. Invitations still work, and you can share a link with Regenerate link on the pending invitation.

VariableExpected valueRequiredDefaultMeaning
SMTP_HOSTHostname or IP, without scheme or portNoCompose: mailpitHostname of your mail server. Compose points it at the Mailpit test inbox, which does not deliver mail.
SMTP_PORTInteger port, 1–65535NoCompose: 1025Port of your mail server. Use 465 with tls, or 587 with starttls.
SMTP_FROMMailbox string, e.g. cms@example.comNoCompose: cms@areca.localThe sender address. Use an address on a domain you have verified with your provider. Sending needs a From address, set here or in Agency > Mail.
SMTP_USERSMTP username stringNoUnsetUsername for SMTP sign-in. Leave it unset if your server does not need one.
SMTP_PASSWORDSMTP password or provider app password stringNoUnsetPassword for SMTP sign-in. It is kept in the environment file, so protect that file.
SMTP_SECUREEnum: starttls, tls, noneNostarttls, or none for a localhost or private-network hostHow the connection is secured. starttls is required on the connection (usually port 587). tls uses TLS from the start (usually port 465). none sends without encryption, and is allowed only for localhost and private-network hosts such as Mailpit.
SMTP_REPLY_TOMailbox string, e.g. cms@example.comNoUnsetThe reply-to address on outgoing email.
SECRETS_ENCRYPTION_KEYBase64 key (32 bytes)NoUnsetBase64-encoded 32-byte key that encrypts the SMTP password saved in Agency > Mail. It also encrypts the reset token kept in the email queue. If it is unset, the CMS uses AI_SETTINGS_ENCRYPTION_KEY. Without either key, you cannot save a password in Agency > Mail, and reset emails are not retried. If you change the key, enter the SMTP password again.

The CMS always checks the mail server's certificate. Each connection, greeting and socket has a 15-second timeout.

The stock Compose file passes all of these mail variables to the CMS container. When SMTP_HOST is unset it falls back to the bundled Mailpit.

Use a mail server on your private network, or a transactional email provider, and do not expose an open relay to the internet. For provider settings and how to make your mail arrive, see storage and email.

Dokploy, Cloudflare and deployments

Each client saves its own Dokploy and Cloudflare credentials in the CMS, after an agency admin enters them. The Dokploy variables below are for development and for the legacy setup. In production, leave them unset.

VariableExpected valueRequiredDefaultMeaning
DOKPLOY_CREDENTIALS_ENCRYPTION_KEYBase64 key (32 bytes)YesCompose: required from .envBase64-encoded 32-byte key that encrypts each organization's Dokploy API key in the database. See required secrets.
DOKPLOY_URLURLNoUnsetA single, server-wide Dokploy URL. Used only when DOKPLOY_DEV_FALLBACK_ENABLED is true and no organization has saved credentials. The stock Compose file does not pass it.
DOKPLOY_API_KEYProvider-issued secret stringNoUnsetThe API key for DOKPLOY_URL. Same conditions. The stock Compose file does not pass it.
DOKPLOY_DEV_FALLBACK_ENABLEDBooleanNofalseAllows the server-wide DOKPLOY_URL and DOKPLOY_API_KEY pair. Ignored in the production image. The stock Compose file does not pass it.

Dev-only switches

These switches relax security checks so a local or LAN test setup can reach Dokploy over plain HTTP or private addresses. Keep them unset on any instance that other people use. The Compose file does not pass them.

VariableExpected valueRequiredDefaultMeaning
DOKPLOY_ALLOW_INSECURE_HTTPBooleanNoUnsetAllows http:// Dokploy API URLs. Keep unset in production; this switch is not automatically disabled there.
ALLOW_PRIVATE_HEALTH_CHECKSBooleanNoUnsetAllows health-check URLs on private or local addresses, including in production if explicitly enabled. Keep unset in production.

Cloudflare

Cloudflare API tokens are saved per client, on the Deployment tab of the client, the same way as Dokploy keys. The token is encrypted with the key below. For the token steps, see deployment targets.

VariableExpected valueRequiredDefaultMeaning
CLOUDFLARE_CREDENTIALS_ENCRYPTION_KEYBase64 key (32 bytes)NoCompose: optional, from .envBase64-encoded 32-byte key that encrypts each client's Cloudflare API token in the database. Generate it with openssl rand -base64 32. Without it, the Cloudflare card shows "Encryption key not set" and saving is disabled. Keep it the same on every CMS instance, and back it up with the database.
CLOUDFLARE_API_BASE_URLURLNoUnsetDevelopment and testing only. Points Areca at a fake Cloudflare API. Ignored in production, where Areca always calls https://api.cloudflare.com/client/v4.

Publishing worker

The worker runs inside the CMS container. It builds and deploys releases, and it publishes scheduled entries when their time comes. See publishing pipeline.

VariableExpected valueRequiredDefaultMeaning
WORKER_ENABLEDBooleanNotrueSet to false to pause publishing and scheduled publishing in this container, for example during maintenance. The stock Compose file does not pass it.
WORKER_CONCURRENCYInteger, 1–16No2The most build jobs this container runs at the same time, from 1 to 16. Each job is one release build. The stock Compose file does not pass it.
WORKER_DRAIN_TIMEOUT_MSInteger milliseconds, ≥0No8000On shutdown, how long to wait for running jobs to finish. Keep it below the container's stop timeout, which is 10 seconds by default. The stock Compose file does not pass it.

AI settings

VariableExpected valueRequiredDefaultMeaning
AI_SETTINGS_ENCRYPTION_KEYBase64 key (32 bytes)NoUnsetBase64-encoded 32-byte key that encrypts the OpenRouter API key saved on Agency > AI. Until it is set, AI SEO suggestions stay unavailable. If you change it, enter the OpenRouter key again. The Compose file passes it from .env. See AI settings.

Security and limits

VariableExpected valueRequiredDefaultMeaning
RATE_LIMIT_TRUST_PROXYBooleanNofalseWhen true, the CMS reads the client address from the forwarding headers (X-Forwarded-For, then X-Real-IP or CF-Connecting-IP). Turn it on only behind a reverse proxy that replaces those headers with the real client address. When it is false, all anonymous requests share one rate-limit bucket. The stock Compose file does not pass it. See rate limits.
ADMIN_MFA_REQUIREDBooleanNotrueAlso listed under auth and sign-in. Keep it true on any instance that other people use.
CSP_REPORT_ONLYBooleanNofalseThe Content-Security-Policy is enforced by default. true sends it as Content-Security-Policy-Report-Only: browsers log what would be blocked, and nothing is blocked. Use it to test a change before enforcing it. See operations.

The limits themselves, such as requests per minute and upload limits, are described in rate limits.

Observability

VariableExpected valueRequiredDefaultMeaning
METRICS_TOKENRandom secret string, at least 16 characters; openssl rand -hex 32 recommendedNoUnsetBearer token of at least 16 characters for GET /api/metrics. When unset, the endpoint returns 404. Generate it with openssl rand -hex 32. The Compose file passes it from .env. See operations.
LOG_LEVELEnum: debug, info, warn, error, silentNoinfoHow much to log: debug, info, warn, error or silent. The CMS reads it directly, not through the validated configuration. An unrecognized value silently falls back to info. The Compose file does not pass it.
STARTUP_DEADLINE_SECONDSPositive finite number of seconds; fractions acceptedNo60Total time the container may wait for PostgreSQL, the migration lock and S3 when it starts. When the time is up, it logs why and exits with code 1. A migration that has started is not interrupted. See startup.
READINESS_TIMEOUT_MSInteger milliseconds, ≥100No3000Time limit for each dependency check on GET /api/health/ready. The minimum is 100.
READINESS_MAX_QUEUE_AGE_SECONDSInteger seconds, ≥1No900Readiness fails when the oldest queued build has waited longer than this.
READINESS_MAX_TICK_AGE_SECONDSInteger seconds, ≥1No300Readiness fails when the worker or scheduler has not ticked for this long, or when a build lease has expired and not been recovered.

Runtime and build controls

VariableExpected valueRequiredDefaultMeaning
NODE_ENVRuntime mode stringNoImage: productionEnables production secret checks and disables the legacy Dokploy fallback and Cloudflare test override. Keep production in deployed instances.
HTTP_KEEP_ALIVE_TIMEOUT_MSPositive number of millisecondsNo120000Container entrypoint sets the HTTP keep-alive timeout. Keep above the proxy's idle timeout (Traefik commonly uses 90 seconds). Zero or a nonnumeric value uses the default.
SKIP_ENV_VALIDATIONLiteral true to skipNoUnsetBuild/tool escape hatch. The build npm lifecycle also skips general env validation. Never enable for a running production server. Storage-prefix validation still runs.

Docker Compose settings

These values are read by compose.yml itself, not by the CMS. Set them in docker/.env.

VariableExpected valueRequiredDefaultMeaning
CMS_IMAGEContainer image reference (tag or digest)Noghcr.io/seirai-dev/areca-cms:latestThe CMS image to run. Pin it to a version tag (such as v0.1.0) or a digest in production. See image tags.
CMS_PORTInteger port, 1–65535No3000The host port that the CMS is published on, bound to 127.0.0.1.
CMS_URLURLNohttp://localhost:3000The public CMS address. It sets both APP_URL and BETTER_AUTH_URL. Set it to your HTTPS domain in production.
POSTGRES_PASSWORDDatabase password string; use random URL-safe text with stock ComposeYesNonePassword for the areca database user.
S3_ACCESS_KEY, S3_SECRET_KEYStorage access ID string; Storage secret credential stringYes, for the secret keyareca-demo for the access keyCredentials for the bundled storage service. They are also passed to the CMS.

Website SDK variables

These belong in the consuming website's server/build environment. The CLI loads .env.local then .env; direct SDK calls read the process environment, so your framework or entrypoint must load it. See SDK installation.

VariableExpected valueRequiredDefault / effect
ARECA_CMS_URLAbsolute CMS URLYes, unless supplied as SDK optionCMS origin for content and schema requests.
ARECA_SITE_TOKENOpaque CMS-issued secretYes for content reads, unless supplied as SDK optionCopy the site token from the CMS; do not generate it with OpenSSL.
ARECA_SCHEMA_TOKENOpaque CMS-issued schema-write secretOnly for manifest pushesNo fallback to the site token.
ARECA_SITE_KEYSite key stringNoManifest-pull fallback when config does not supply siteKey.
ARECA_SNAPSHOT_IDPublication ID stringNoPins a content pull to a release; blank or 0 means no pin.
ARECA_CONTENT_DIRFilesystem directory pathNoOverrides the generated typed client's content directory; otherwise uses its generated output directory.

ARECA_MCP_KEY is a convention used in MCP client examples, not a CMS configuration variable. It holds a CMS-issued personal AI key only when the client configuration references it. OAuth needs no such env value. Never expose SDK tokens in browser-prefixed variables.

Maintenance and test tools

These configure repository tools, not production CMS behavior. All are optional for ordinary self-hosting. Set them only when running the corresponding tool; use isolated databases and buckets for tests.

VariableExpected valueTool and default / requirement
ARECA_WRITES_STOPPEDLiteral 1Required acknowledgement for authoring transfer that every writer has stopped; it does not acquire a lock.
ARECA_BENCHMARKLiteral 1Required benchmark acknowledgement; the database must also pass the benchmark's isolation guard.
E2E_PORTInteger portIsolated E2E server; 3100.
E2E_DATABASE_URLPostgreSQL URLIsolated E2E; otherwise derives an areca_e2e database from DATABASE_URL.
E2E_S3_BUCKETBucket name stringIsolated E2E; areca-e2e.
E2E_S3_PREFIXStorage prefix pathIsolated E2E; empty by default, intentionally ignores inherited S3_PREFIX.
E2E_REDIS_URLRedis URLIsolated E2E; redis://localhost:6379/1.
PLAYWRIGHT_BASE_URLAbsolute URLBrowser tests; http://localhost:3000.
PW_CHROMIUM_PATHExecutable pathOptional custom Chromium binary.
PW_WORKERSPositive integerPlaywright workers; 3.
PW_EXTERNAL_SERVERLiteral trueUses an already running server instead of starting one.
CLOUDFLARE_STUB_PORTInteger portTest Cloudflare stub; 4607.
VITE_FREEZELiteral trueDisables development watchers/HMR for stable tests.
MAILPIT_URLAbsolute HTTP URLMailpit API address for email tests.
CICI environment flagTest reporting/retry behavior; normally supplied by CI.

The legacy scripts/dokploy-setup.ts provisioning helper also reads the following. These are inputs to that script, not settings for deployments configured through the CMS:

VariableExpected valueRequired / default
DOKPLOY_URL, CMS_URL, GIT_URLAbsolute API, CMS and repository URLsRequired.
DOKPLOY_API_KEY, SITE_TOKENProvider API secret and CMS-issued site tokenRequired.
DOKPLOY_ENVIRONMENT_ID, SSH_KEY_IDProvider resource ID stringsRequired.
APP_NAMEApplication name stringacme-demo-site.
GIT_BRANCHBranch name stringmain.
GIT_BUILD_PATHRepository path/.
DOCKERFILERepository file pathexamples/demo-site/Dockerfile.
DOCKER_CONTEXTBuild context path..
PUBLISHED_PORT, TARGET_PORTInteger ports3101, 3000.
AUTO_DEPLOYBoolean-like stringfalse; this script accepts 1, true, yes, on as enabled, unlike validated CMS booleans.

On this page