
Step by Step Guide to solve n8n Missing Environment Variables
Who this is for: Ops engineers, DevOps specialists, and developers who run n8n in Docker, Docker‑Compose, or systemd and encounter “Missing required environment variable …” errors. We cover this in detail in the n8n Installation Errors Guide.
Quick Diagnosis
- Read the error line – it tells you which variable is missing.
- Add the variable to your
.envfile (Docker, Docker‑Compose, or systemd) or export it in the shell. - Restart the n8n service.
# Docker (quick test)
docker run -e N8N_BASIC_AUTH_USER=admin \
-e N8N_BASIC_AUTH_PASSWORD=secret \
n8nio/n8n
# Systemd / npm
export N8N_BASIC_AUTH_USER=admin
export N8N_BASIC_AUTH_PASSWORD=secret
npm run start
If n8n starts without the “Missing required environment variable” line, the problem is solved.
1. Why n8n Needs Environment Variables
If you encounter any permission denied error n8n resolve them before continuing with the setup.
| Variable | Purpose | Typical Value |
|---|---|---|
| N8N_HOST | Hostname used in generated URLs | localhost |
| N8N_PORT | HTTP port | 5678 |
| N8N_BASIC_AUTH_USER | Basic‑auth username (optional) | admin |
| N8N_BASIC_AUTH_PASSWORD | Basic‑auth password | super‑secret |
| N8N_ENCRYPTION_KEY | Symmetric key for credential encryption (32‑byte base64) | K3yBase64String== |
| DB_TYPE | Database driver (sqlite, postgresdb, mysqldb) |
sqlite |
| DB_SQLITE_VACUUM_ON_STARTUP | SQLite maintenance flag | true |
| EXECUTIONS_PROCESS | Execution mode (main, queue) |
main |
EEFA note: In production never store N8N_ENCRYPTION_KEY or credentials in plain text. Use Docker secrets, HashiCorp Vault, or OS‑level secret stores.
2. Spotting the Missing‑Variable Error
If you encounter any linux systemd service error n8n resolve them before continuing with the setup.
When n8n starts, the first log lines look like:
[2025-12-28 12:34:56] error: Missing required environment variable N8N_BASIC_AUTH_PASSWORD
What to do: copy the variable name (N8N_BASIC_AUTH_PASSWORD) and search your configuration files (.env, Docker‑Compose, systemd unit) for it.
3. Fixing Typos & Incorrect Values
| Symptom | Common Mistake | Fix |
|---|---|---|
| Variable not recognized | Misspelled (case‑sensitive) e.g. N8N_BASiC_AUTH_USER |
Correct the spelling and reload |
| Variable present but empty | N8N_ENCRYPTION_KEY= (nothing after =) |
Provide a valid 32‑byte base64 key (openssl rand -base64 32) |
| Quoted value includes quotes | N8N_HOST="localhost" (Docker interprets the quotes) |
Remove surrounding quotes or use docker run -e N8N_HOST=localhost |
EEFA warning: Double quotes inside a Docker -e flag become part of the value, breaking URL generation.
4. Supplying Variables with a .env File
4.1 Create the .env file
# .env – core n8n settings N8N_HOST=0.0.0.0 N8N_PORT=5678 N8N_BASIC_AUTH_USER=admin N8N_BASIC_AUTH_PASSWORD=SuperSecret123 N8N_ENCRYPTION_KEY=K3yBase64String== DB_TYPE=postgresdb
# .env – database connection details DB_POSTGRESDB_HOST=postgres DB_POSTGRESDB_PORT=5432 DB_POSTGRESDB_DATABASE=n8n DB_POSTGRESDB_USER=n8n_user DB_POSTGRESDB_PASSWORD=postgres_pw
Tip: Set strict permissions so only the service user can read the secrets: chmod 600 .env.
4.2 Docker (stand‑alone docker run)
docker run \ --env-file ./.env \ -p 5678:5678 \ n8nio/n8n
4.3 Docker‑Compose
# docker-compose.yml – version header version: "3.8" services:
# docker-compose.yml – n8n service
n8n:
image: n8nio/n8n
env_file: .env # loads all vars from .env
ports:
- "5678:5678"
restart: unless-stopped
5. Supplying Variables with systemd (or plain npm)
5.1 Systemd Service File – Unit & Service Sections
# /etc/systemd/system/n8n.service – Unit header [Unit] Description=n8n workflow automation After=network.target
# /etc/systemd/system/n8n.service – Service definition [Service] Type=simple User=n8n EnvironmentFile=/etc/n8n/.env ExecStart=/usr/bin/npm run start --prefix /opt/n8n Restart=on-failure LimitNOFILE=65535
# /etc/systemd/system/n8n.service – Install section [Install] WantedBy=multi-user.target
Place the same key‑value pairs from the Docker .env into /etc/n8n/.env, then:
sudo chmod 600 /etc/n8n/.env sudo systemctl daemon-reload sudo systemctl restart n8n
5.2 npm / Yarn (development)
# Load vars for the current shell from .env export $(grep -v '^#' .env | xargs) npm run start
EEFA note: Exported variables are ephemeral. For a persistent dev environment, add the export lines to ~/.bashrc only on a dedicated development machine.
6. Common Pitfalls & How to Avoid Them
| Pitfall | Why It Breaks | Prevention |
|---|---|---|
Trailing spaces in .env values |
Docker treats the space as part of the value → mismatch | Use cat -A .env to visualize hidden characters |
Windows line endings (\r\n) |
Docker on Linux reads \r as part of the value |
Convert file with dos2unix .env |
Missing .env file in Docker‑Compose (path typo) |
Service starts with no vars → error | Verify env_file: path relative to compose file |
Overriding vars with -e after --env-file |
Later -e wins, potentially clearing a value |
Keep --env-file last or avoid mixing both |
Storing .env in version control |
Secrets leak | Add .env to .gitignore and use CI secret injection |
7. Quick Validation Checklist
- [ ] Run
docker run --env-file .env n8nio/n8norsystemctl status n8nand confirm no “Missing required environment variable” lines. - [ ] Verify
.envfile permissions (600) and ownership (e.g.,n8nuser for systemd). - [ ] Inside a container, confirm variables are loaded:
docker exec <container> printenv | grep N8N_. - [ ] For PostgreSQL, test connectivity:
psql -h $DB_POSTGRESDB_HOST -U $DB_POSTGRESDB_USER -d $DB_POSTGRESDB_DATABASE. - [ ] Check that
N8N_ENCRYPTION_KEYis exactly 32‑byte base64:echo -n $N8N_ENCRYPTION_KEY | base64 -d | wc -c.
8. EEFA (Experience, Errors, Fixes, Advice) Summary
| Situation | Typical Error | Fix |
|---|---|---|
Forgot to include .env in Docker‑Compose |
Missing required environment variable N8N_HOST |
Add env_file: .env under the service definition. |
Variable typo (N8N_ENCRPYTION_KEY) |
Same error, pointing to the correct var name | Correct spelling; restart. |
Running as root, .env owned by n8n |
Permission denied reading .env → missing vars |
Align ownership (chown n8n:n8n .env) or run container as root (not recommended). |
| Using Windows line endings | Variable value includes \r → auth fails |
Convert file (dos2unix .env). |
| Secret rotation | Old N8N_ENCRYPTION_KEY breaks credential decryption |
Regenerate key, re‑encrypt credentials, or migrate using n8n’s n8n encrypt CLI. |
Next Steps
- Managing secrets securely – learn how to use Docker secrets or HashiCorp Vault with n8n.
- Scaling n8n with a queue worker – see the *n8n execution process* child page.
- Database migration – if you plan to move from SQLite to PostgreSQL, check the *n8n database migration* guide.
*All commands assume a Unix‑like environment. Adjust paths and user names for your OS as needed.*



