Skip to main content
All parameters are optional. Pass them as environment variables before the install command.
DOMAIN=panel.example.com ADMIN_EMAIL=admin@example.com curl -fsSL install.nixopus.com | sudo bash

Environment variables

VariableDefaultDescription
DOMAIN(empty — IP mode)Domain for automatic HTTPS
HOST_IP(auto-detected)Public IP of the machine
CADDY_HTTP_PORT80HTTP port
CADDY_HTTPS_PORT443HTTPS port
ADMIN_EMAIL(empty)Admin account email
SSH_HOST$HOST_IPSSH host the API connects to
SSH_PORT22SSH port (auto-detected from sshd_config if non-standard)
SSH_USERrootSSH user
DB_PASSWORD(random)Postgres password
REDIS_PASSWORD(random)Redis password
DATABASE_URLpostgres://nixopus:$DB_PASSWORD@nixopus-db:5432/nixopusFull DB connection string. Set to an external URL to skip the bundled DB
REDIS_URLredis://default:$REDIS_PASSWORD@nixopus-redis:6379Full Redis connection string. Set to an external URL to skip bundled Redis
AUTH_SERVICE_SECRET(random)Auth service secret
JWT_SECRET(random)JWT signing secret
NIXOPUS_HOME/opt/nixopusInstallation directory
NIXOPUS_TELEMETRYonSet to off to disable anonymous telemetry
LOG_LEVELdebugLog level

Ports

Host-bound ports

PortServiceConfigurableNotes
80Caddy (HTTP)CADDY_HTTP_PORTRequired for Let’s Encrypt HTTPS challenges
443Caddy (HTTPS)CADDY_HTTPS_PORTTLS termination
2019Caddy admin APINoBound to 127.0.0.1 only (not exposed externally)

Internal services (Docker network only)

PortService
9090nixopus-auth
8443nixopus-api
7443nixopus-view
5432nixopus-db (bundled Postgres)
6379nixopus-redis (bundled Redis)
The SSH port on your host (default 22) must also be accessible from the Docker network — the API connects back to the host via SSH for deployments. If ports 80/443 are already in use, either stop the conflicting service or install with custom ports:
CADDY_HTTP_PORT=8080 CADDY_HTTPS_PORT=8443 curl -fsSL install.nixopus.com | sudo bash
Use docker ps --format '{{.Ports}} {{.Names}}' to find what’s using a port.

Firewall

The installer warns about ufw and firewalld but does not modify firewall rules. You must open the HTTP/HTTPS ports yourself.
sudo ufw allow 80/tcp && sudo ufw allow 443/tcp && sudo ufw reload
Cloud providers: Also open ports in your cloud firewall (AWS Security Groups, GCP Firewall Rules, Azure NSG, etc.). These are separate from the OS-level firewall.
If using custom ports, replace 80/443 with your values in all commands above.

HTTPS

When you provide a DOMAIN, Caddy automatically obtains and renews TLS certificates from Let’s Encrypt. For this to work:
  1. DNS A record must point to your machine’s public IP before installing.
  2. Port 80 must be open — Let’s Encrypt uses HTTP-01 challenges on port 80, even if you only serve on 443.
  3. Not behind a proxy — If using Cloudflare, set to “DNS only” (grey cloud) during initial setup so the challenge can reach your machine directly. You can re-enable proxying after the first certificate is issued.
Without a DOMAIN, Nixopus runs in IP mode over plain HTTP.

Viewing secrets

sudo cat /opt/nixopus/.env
You can also use nixopus config to view the current configuration without reading the raw env file.