Requirements
Nexus is designed to run on a single server. The install script handles all software dependencies automatically — you don’t need to install Elixir, PostgreSQL, or Node.js on the host.
Operating system
Section titled “Operating system”The installer supports:
- Ubuntu 22.04 LTS (Jammy Jellyfish)
- Ubuntu 24.04 LTS (Noble Numbat)
- Ubuntu 26.04 LTS (Resolute Raccoon)
The install script uses Ubuntu’s codename to configure the Docker CE and Caddy apt repositories, so it works correctly across all three versions without modification.
Server hardware
Section titled “Server hardware”There are no officially enforced minimums, but the following are practical guidelines based on what the stack actually runs:
| Minimum | Recommended | |
|---|---|---|
| CPU | 1 vCPU | 2 vCPU |
| RAM | 1 GB | 2–4 GB |
| Disk | 10 GB | 20 GB+ |
RAM is the most important constraint. The Nexus container (Elixir/OTP), the PostgreSQL container, and the OS all share the host’s memory. 1 GB is tight but workable for a small community. 2 GB is comfortable. If you plan to store a large number of user uploads locally, size your disk accordingly.
Software installed by the installer
Section titled “Software installed by the installer”The install script installs all of the following automatically. You do not need to pre-install anything beyond a clean Ubuntu server with root access and internet connectivity:
- Docker CE — from Docker’s official apt repository. Includes
docker-ce,docker-ce-cli,containerd.io, anddocker-compose-plugin. - Caddy — from Caddy’s official apt repository. Handles HTTPS automatically via Let’s Encrypt.
Everything else — Elixir 1.17, Erlang/OTP, Phoenix 1.8, PostgreSQL 16, Node.js, libvips, and librsvg — runs inside Docker containers and never touches the host system.
Networking requirements
Section titled “Networking requirements”- A domain name with an A record pointing at your server’s public IP, set up before running the installer. Let’s Encrypt’s HTTP challenge needs to reach your server at that hostname to issue the TLS certificate.
- Ports 80 and 443 open on your server’s firewall. Caddy uses port 80 for the ACME challenge and port 443 for HTTPS traffic.
- Outbound internet access to reach GitHub (for downloading the release tarball), Docker Hub (for pulling container images), Let’s Encrypt, and the Caddy and Docker apt repositories.
Optional: email delivery
Section titled “Optional: email delivery”Nexus can send transactional email (registration confirmations, password resets, digest emails, notifications) via:
- Postmark — set
POSTMARK_API_KEYin/opt/nexus/.env - Resend — set
RESEND_API_KEYin/opt/nexus/.env
Without an email provider configured, Nexus will still run — email features simply won’t deliver. For a public community, configuring email delivery is strongly recommended.
Optional: object storage
Section titled “Optional: object storage”By default, user uploads (avatars, post images, covers, logos) are stored on the local filesystem at /opt/nexus-data/uploads. This works well for most deployments.
If you need uploads to survive container rebuilds independent of the host, or want a CDN in front of your assets, you can switch to any S3-compatible object storage service — Cloudflare R2, AWS S3, Backblaze B2, and others — from the admin panel after install.