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
- Before you start
- Steps
- Docker with install.sh
- Pterodactyl or Pelican panel (the egg)
- Node.js server (agora.env)
- You know it worked when…
- If it does not work
- Going further
- One thing, several names
- Docker with install.sh (/opt/agora/.env)
- Docker with the manual compose file (.env)
- Pterodactyl / Pelican egg
- Node.js server (agora.env)
- 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 #
- Know which route is yours: Docker with
install.sh, a Pterodactyl or Pelican panel (the egg), or a host's Node.js server. If unsure, look at Choose between Docker, the panel egg and a Node.js server. - You almost never need to change a variable for everyday use. Only touch what you understand: the words are in the glossary.
Steps #
Docker with install.sh #
Connect to your machine over SSH.
Open the
/opt/agora/.envfile with a terminal text editor, for examplenano /opt/agora/.env. One variable per line, in the formNAME=value, with no space around the=.Save, then restart:
cd /opt/agora && docker compose up -d. Docker recreates theagoracontainer with the new values.<!-- CAPTURE C-064 -->
Pterodactyl or Pelican panel (the egg) #
Open your Agora server in the panel, then its Startup tab.
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.
Save, then restart the server with Restart.
<!-- CAPTURE C-065 -->
Node.js server (agora.env) #
- Open your host's panel file manager.
- Edit the
agora.envfile, next toagora.mjs: one variable per line, in the formNAME=value. A line starting with#is a comment. - 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 see | Likely cause | What to do |
|---|---|---|
| Nothing changes | You did not restart, or Agora's admin area holds its own value, which wins | Restart (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 exists | Change AGORA_KEY in /opt/agora/.env, then docker compose up -d |
| The panel field is missing or greyed out | The variable is reserved for the panel administrator | Ask them, or keep the default value |
A line of agora.env has no effect | Name in lower case or with a hyphen, or malformed line | Names are written in upper case, digits and _, in the form NAME=value |
| Everyone is signed out after a change | You changed AUTH_SECRET | Put 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.
| Setting | Docker install.sh (.env) | Docker manual compose (.env) | Panel (Startup tab) | Node.js (agora.env) |
|---|---|---|---|---|
| License key | AGORA_KEY (AGORA_LICENSE_KEY is read too) | AGORA_LICENSE_KEY | AGORA_KEY (Cle de licence) | AGORA_KEY |
| Update channel | AGORA_UPDATE_CHANNEL | AGORA_UPDATE_CHANNEL | AGORA_CHANNEL (Canal de mise a jour) | AGORA_UPDATE_CHANNEL |
| Hub database | DATABASE_URL, written by the script | POSTGRES_PASSWORD to fill in | DATABASE_URL (Base de donnees): optional, empty = built-in database | DATABASE_URL optional, absent = portable database installed on its own |
| Take over a license seat | AGORA_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) #
| Variable | Purpose |
|---|---|
AGORA_KEY | Your license key. AGORA_LICENSE_KEY is read too |
POSTGRES_PASSWORD, DATABASE_URL | PostgreSQL database, randomly generated by the script. Do not change them afterwards |
AUTH_SECRET | Session secret, randomly generated. Changing it signs everyone out and makes the secrets stored in the database unreadable (MySQL password, bot token…) |
AGORA_PORT | Port published on the machine (3000 by default) |
AGORA_TXADMIN_PORT | Port of the txAdmin tab published on the machine (40121 by default): see txAdmin in Agora |
AGORA_TRUSTED_PROXIES | Who may announce a visitor's IP. none by default on a fresh install. See Behind a proxy |
AGORA_UPDATE | 1 = install the latest version on the next start (one-off use) |
AGORA_UPDATE_CHANNEL | stable (default) or beta (Pro tier only) |
AGORA_HUB | License 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):
| Variable | Purpose |
|---|---|
SITE_URL | Public address if you have a domain. Empty = the address saved during getting started |
AUTH_DISCORD_ID, AUTH_DISCORD_SECRET | Optional: the getting-started screen asks for them |
DISCORD_BOT_TOKEN, DISCORD_GUILD_ID | Optional: set in Administration → Configuration → Discord connection |
AGORA_SITE_NAME, AGORA_SITE_LOCALE | Default name and language (fr or en) |
TZ | Time zone, for example America/Toronto or Europe/Paris |
SITE_ADDRESS | Your domain, for the Caddy profile |
Pterodactyl / Pelican egg #
| Variable (name in the panel) | Purpose | Default |
|---|---|---|
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 users | empty |
AUTH_SECRET | Reserved 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 administrator | stable |
AGORA_UPDATE (Mettre a jour au demarrage) | 1 = install the latest version on every start | 0 |
AGORA_TRANSFER (Reprendre le siege) | 1 = this machine takes over the seat of a previous installation, after a reinstall. Set back to 0 afterwards | 0 |
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 relay | 40121 |
AGORA_HUB, AGORA_SITE | License 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) #
| Variable | Purpose |
|---|---|
AGORA_KEY | Required. Your license key |
AGORA_UPDATE_CHANNEL | stable (default) or beta (Pro tier only) |
DATABASE_URL | Optional: an external PostgreSQL database, which takes priority over the portable database installed on its own |
AUTH_URL | Optional: your domain over HTTPS, if the host provides one |
AGORA_TRANSFER | 1 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 #
| Variable | When to use it |
|---|---|
PANEL_ALLOW_PRIVATE_DAEMON=1 | Your panel is public but its node (Wings) is only reachable at a private address |
AGORA_PG_BIN | Folder with pg_dump and psql of another version (external database on PostgreSQL 18 or later, machine that is not Linux x86-64) |
AGORA_SETUP_TOKEN | Token that opens getting started when there is no license key |
RESTORE_DATABASE_URL | External database where the application is not a superuser: URL of a restricted role for restores |
AGORA_SEED_ON_BOOT=false | Before the very first start: do not create the samples (sections, form, campaign) |
Was this article helpful?
Related articles
- Install with Docker (install.sh)A single command installs Agora and its PostgreSQL database on a Linux machine with Docker: you have no database to prepare.
- Install on PterodactylImport the Pterodactyl egg downloaded from your space, create a server with it, then start it: the Hub's database is built in, you have nothing to provide.
- Install on PelicanImport the Pelican egg (not the Pterodactyl one), create a server with it, then start it: the Hub's database is built in, you have nothing to provide.
- Install on a host's Node.js server (agora.mjs)Only have an ordinary host's customer panel? Order a Node.js server, drop a single file (agora.mjs) and your key: Agora installs its database and everything else.
- Behind a proxy: HTTPS, Cloudflare and visitor IP addressesGet HTTPS for your Hub (Caddy, Cloudflare, your host's proxy, Nginx), then set AGORA_TRUSTED_PROXIES and let live streams through.
- One-click updates (and the beta channel)Administration → Agora backs up the database, downloads and verifies the new version, migrates, restarts, and rolls back on its own if it does not start.
- Glossary: Agora's technical words, explained simplyHub, panel, egg, Docker, PostgreSQL, framework, lease: every technical word in the documentation defined in a sentence or two, by topic.