Self-Hosting
Self-Hosting
docu.nexus runs on your box. Postgres holds the content, a Docker volume holds the uploads, and the license key is a signed string you paste in once. Nothing phones home. No telemetry, no license server check-in, no outbound connection you did not configure yourself.
This chapter is for the person running the server, not the person writing pages. It picks up where Installation leaves off: you ran the one-line installer, it printed a URL, and you now own the thing behind it.
- Production Deployment - the production compose stack, the topology, TLS, and the hardening that actually matters.
- Configuration Reference - every environment variable the app reads, with defaults.
- Backup and Restore - what state exists, how to dump it, how to put it back.
- Upgrading - pulling a new image, how migrations run at boot, and rolling back.
- Troubleshooting - the failures you will actually hit, and where the logs live.
- Moving to a New Server - the whole instance, transferred, restored and verified before it serves a request.
Where everything lives
The installer created one directory and put two files in it. That directory is your deployment.
docu.nexus/
├── docker-compose.yml the stack definition. Refreshed on every upgrade.
└── .env your configuration and your secrets. Never overwritten.
Every command in this chapter is run from inside that directory, which is why none of them pass -f: Compose finds docker-compose.yml and .env on its own.
cd docu.nexus
docker compose ps
You do not need a copy of the source, a git checkout, or a build toolchain for anything in this chapter. If a command here seems to want one, it is a bug in this page — please report it.
What you need
| Requirement | Notes |
|---|---|
| Linux host with Docker and Docker Compose | Any distro. 2 vCPU and 4 GB RAM is comfortable for a small team. |
| Postgres 16 | Supplied by the compose stack. Bring your own if you prefer. |
| Redis 7.2 | Supplied by the compose stack. Used for the job queue. |
| A reverse proxy with TLS | nginx and Caddy both work. The app speaks plain HTTP. |
| A DNS name | Real-time collaboration needs a stable origin. |
.env is the only thing you cannot replace
docker-compose.yml is downloaded fresh on every upgrade, and the application image can be downloaded again at any time. .env cannot: it holds the database password that the existing database was created with, and the JWT secret that every current session was signed with.
Back it up, keep it at chmod 600, and read Backup and Restore before you need it.