Getting Started
Installation
Installation
docu.nexus runs as one Docker stack: Postgres, Redis, and the app. One command installs all three.
Prerequisites
- A Linux host with Docker and the Compose plugin (v2). Check with
docker compose version. - curl.
- About 2 GB of disk for the image and its data. 2 vCPU and 4 GB RAM is comfortable for a small team.
You do not need git, a repository, a source tree, or a build toolchain. The installer downloads a compiled image.
Install
curl -fsSL https://docu.nexus/install.sh | sh
It asks one question — the URL people will use to reach this instance — and then:
- Creates
./docu.nexus/and downloads the compose file into it. - Writes
.env, generating a database password and a session secret for you. - Downloads the application image, checks it against its published SHA256, and loads it into Docker.
- Starts Postgres, Redis, and the app, and waits for the app to answer.
There is no Docker registry in that path and no docker login. The image is a
plain file over HTTPS, so an air-gapped install is the same download done by
hand — fetch the .tar.gz and its .sha256 from https://docu.nexus/dl/,
docker load -i it, and run the installer with APP_IMAGE set to the tag it
restored.
Database migrations run inside the container before the app starts listening, so when the installer says it is running, the schema is ready.
To install without being prompted, set the URL up front:
curl -fsSL https://docu.nexus/install.sh \
| APP_URL=https://docs.example.com sh
| Variable | Effect | Default |
|---|---|---|
APP_URL | Public URL of the instance. Skips the prompt. | http://localhost:3000 |
DOCUNEXUS_DIR | Where to install. | ./docu.nexus |
DOCUNEXUS_VERSION | Install a specific version instead of the current release. | the current release |
APP_IMAGE | Use an image already loaded on this machine. Downloads nothing. | unset |
Create the first account
Open the URL the installer printed. The setup screen asks for the name, email, and password you want for the first administrator.
That first account is an instance administrator. Everyone else can be added afterwards from Admin, or provisioned through OAuth or LDAP.
What got installed
Everything lives in the directory the installer created:
docu.nexus/
├── docker-compose.yml # the stack definition; replaced on upgrade
└── .env # your configuration and secrets (chmod 600)
Your data is not in that directory. It lives in Docker named volumes, which survive docker compose down:
| Volume | Holds |
|---|---|
docunexus_postgres_data | every page, space, user, and comment |
docunexus_app_storage | uploaded files and images |
docunexus_redis_data | the job queue |
docunexus_db_backups | dumps written by the backup script |
Everyday commands
Run these from the install directory.
docker compose ps # what is running
docker compose logs -f app # follow the application log
docker compose stop # stop, keeping data
docker compose start # start again
Upgrade
The same command, run again from inside the install directory. Your configuration and data are kept; the compose file is refreshed and the newer image is pulled.
cd docu.nexus
curl -fsSL https://docu.nexus/install.sh | sh
From anywhere else, name the directory rather than changing into it:
curl -fsSL https://docu.nexus/install.sh | DOCUNEXUS_DIR=/path/to/docu.nexus sh
If your compose file had been edited, the previous copy is kept beside it as docker-compose.yml.bak rather than being overwritten silently.
See Upgrading for how migrations run and how to roll back.
Before other people use it
The installer gets you running. It does not make you production-ready. Two things it leaves to you:
- TLS. The app speaks plain HTTP and expects a reverse proxy in front. Real-time collaboration also needs a WebSocket route, which is easy to miss — without it, editing silently stops being collaborative. See Production Deployment.
- Backups. Nothing is scheduled for you. See Backup and Restore.
Troubleshooting
| Symptom | Cause |
|---|---|
cannot talk to the Docker daemon | Docker is not running, or your user is not in the docker group. |
could not pull … and it is not present locally | No network route to the registry, or a tag that does not exist. The message lists what to check in order. |
| It never finishes waiting | The app is probably still migrating. Run docker compose logs -f app in the install directory. |
| Port already in use | Something else holds 3000 or 3001. Set HOST_PORT and HOST_COLLAB_PORT in .env, then re-run. |
More in Troubleshooting.
Configuration
.env holds only what the installer needed to set. Every variable the application reads, with defaults, is in the Configuration Reference.
Edit .env, then apply the change from the install directory:
docker compose up -d