Agora

Environment variables

Where and how to change Agora's startup settings depending on your installation route (Docker, panel, Node.js server), and the list of the ones that matter.

Updated on Oct 5, 2026, 1:36 p.m.

On this page
  1. Before you start
  2. Steps
  3. Docker with install.sh
  4. Pterodactyl or Pelican panel (the egg)
  5. Node.js server (agora.env)
  6. You know it worked when…
  7. If it does not work
  8. Going further
  9. One thing, several names
  10. Docker with install.sh (/opt/agora/.env)
  11. Docker with the manual compose file (.env)
  12. Pterodactyl / Pelican egg
  13. Node.js server (agora.env)
  14. Troubleshooting variables

In short. Almost everything is set in Agora's admin area, live. Environment variables (settings handed to the program when it starts, with upper-case names such as AGORA_KEY) are only used at startup: the key, the database, the session secret and a few options. When a setting exists both as a variable and in the admin area, the admin area value wins. You change them in a different place depending on how you installed Agora.

Before you start #

Steps #

Docker with install.sh #

  1. Connect to your machine over SSH.

  2. Open the /opt/agora/.env file with a terminal text editor, for example nano /opt/agora/.env. One variable per line, in the form NAME=value, with no space around the =.

  3. Save, then restart: cd /opt/agora && docker compose up -d. Docker recreates the agora container with the new values.

    <!-- CAPTURE C-064 -->

Pterodactyl or Pelican panel (the egg) #

  1. Open your Agora server in the panel, then its Startup tab.

  2. Change the field you want. Names are in French and have no accents (Cle de licence, Base de donnees, Mettre a jour au demarrage…), which is normal. Some variables do not show or are greyed out: they are reserved for the panel administrator.

  3. Save, then restart the server with Restart.

    <!-- CAPTURE C-065 -->

Node.js server (agora.env) #

  1. Open your host's panel file manager.
  2. Edit the agora.env file, next to agora.mjs: one variable per line, in the form NAME=value. A line starting with # is a comment.
  3. Save, then restart the server.

You know it worked when… #

After the restart, the behaviour has changed as expected. For example, with Docker or a panel, after setting AGORA_UPDATE=1, the console shows mise à jour demandée at the [3/6] Version step.

If it does not work #

What you seeLikely causeWhat to do
Nothing changesYou did not restart, or Agora's admin area holds its own value, which winsRestart (see above); check the matching setting in the admin area
The license key changed in .env is still ignored (Docker)You ran install.sh again with a new key: it is ignored when a .env existsChange AGORA_KEY in /opt/agora/.env, then docker compose up -d
The panel field is missing or greyed outThe variable is reserved for the panel administratorAsk them, or keep the default value
A line of agora.env has no effectName in lower case or with a hyphen, or malformed lineNames are written in upper case, digits and _, in the form NAME=value
Everyone is signed out after a changeYou changed AUTH_SECRETPut the old secret back; otherwise re-enter the admin area's secrets (see below)

Going further #

One thing, several names #

Names differ from one route to the other. The two Docker columns do not start from the same file.

SettingDocker install.sh (.env)Docker manual compose (.env)Panel (Startup tab)Node.js (agora.env)
License keyAGORA_KEY (AGORA_LICENSE_KEY is read too)AGORA_LICENSE_KEYAGORA_KEY (Cle de licence)AGORA_KEY
Update channelAGORA_UPDATE_CHANNELAGORA_UPDATE_CHANNELAGORA_CHANNEL (Canal de mise a jour)AGORA_UPDATE_CHANNEL
Hub databaseDATABASE_URL, written by the scriptPOSTGRES_PASSWORD to fill inDATABASE_URL (Base de donnees): optional, empty = built-in databaseDATABASE_URL optional, absent = portable database installed on its own
Take over a license seatAGORA_TRANSFER—AGORA_TRANSFER (Reprendre le siege)AGORA_TRANSFER

<!-- À CONFIRMER : œuf tout-en-un (claude/pg-integre), ligne « Base de données du Hub », colonne Panel -->

Docker with install.sh (/opt/agora/.env) #

VariablePurpose
AGORA_KEYYour license key. AGORA_LICENSE_KEY is read too
POSTGRES_PASSWORD, DATABASE_URLPostgreSQL database, randomly generated by the script. Do not change them afterwards
AUTH_SECRETSession secret, randomly generated. Changing it signs everyone out and makes the secrets stored in the database unreadable (MySQL password, bot token…)
AGORA_PORTPort published on the machine (3000 by default)
AGORA_TXADMIN_PORTPort of the txAdmin tab published on the machine (40121 by default): see txAdmin in Agora
AGORA_TRUSTED_PROXIESWho may announce a visitor's IP. none by default on a fresh install. See Behind a proxy
AGORA_UPDATE1 = install the latest version on the next start (one-off use)
AGORA_UPDATE_CHANNELstable (default) or beta (Pro tier only)
AGORA_HUBLicense server addresses. Do not change it

Docker with the manual compose file (.env) #

On top of the above (the key is called AGORA_LICENSE_KEY there):

VariablePurpose
SITE_URLPublic address if you have a domain. Empty = the address saved during getting started
AUTH_DISCORD_ID, AUTH_DISCORD_SECRETOptional: the getting-started screen asks for them
DISCORD_BOT_TOKEN, DISCORD_GUILD_IDOptional: set in Administration → Configuration → Discord connection
AGORA_SITE_NAME, AGORA_SITE_LOCALEDefault name and language (fr or en)
TZTime zone, for example America/Toronto or Europe/Paris
SITE_ADDRESSYour domain, for the Caddy profile

Pterodactyl / Pelican egg #

Variable (name in the panel)PurposeDefault
AGORA_KEY (Cle de licence)Your key. Already filled in the egg downloaded from your space—
DATABASE_URL (Base de donnees)Optional. Empty = Agora uses its built-in PostgreSQL database (nothing to install). Filled = an external PostgreSQL database, in the form postgresql://user:password@host:5432/database?schema=public, which takes priority. Keep for advanced usersempty
AUTH_SECRETReserved for the panel administrator. Empty: generated on the first start and kept in .agora/—
AGORA_CHANNEL (Canal de mise a jour)stable or beta. Used for the first download and for AGORA_UPDATE; for the one-click update, the channel chosen in the Updates screen takes precedence. Reserved for the panel administratorstable
AGORA_UPDATE (Mettre a jour au demarrage)1 = install the latest version on every start0
AGORA_TRANSFER (Reprendre le siege)1 = this machine takes over the seat of a previous installation, after a reinstall. Set back to 0 afterwards0
AGORA_TXADMIN_PORT (Port de l'onglet txAdmin)Number of the server's second allocation, for the Server → txAdmin tab (the first one serves the site). off cuts the relay40121
AGORA_HUB, AGORA_SITELicense server and bootstrap addresses. Do not change them. The panel calls the first one "Hub de licences": it is not your Hub—

Node.js server (agora.env) #

VariablePurpose
AGORA_KEYRequired. Your license key
AGORA_UPDATE_CHANNELstable (default) or beta (Pro tier only)
DATABASE_URLOptional: an external PostgreSQL database, which takes priority over the portable database installed on its own
AUTH_URLOptional: your domain over HTTPS, if the host provides one
AGORA_TRANSFER1 for one start to take over the seat after a reinstall

The host's real environment variables, when it offers some, win over the file.

Troubleshooting variables #

VariableWhen to use it
PANEL_ALLOW_PRIVATE_DAEMON=1Your panel is public but its node (Wings) is only reachable at a private address
AGORA_PG_BINFolder with pg_dump and psql of another version (external database on PostgreSQL 18 or later, machine that is not Linux x86-64)
AGORA_SETUP_TOKENToken that opens getting started when there is no license key
RESTORE_DATABASE_URLExternal database where the application is not a superuser: URL of a restricted role for restores
AGORA_SEED_ON_BOOT=falseBefore the very first start: do not create the samples (sections, form, campaign)

Was this article helpful?