Docs
Deploy. Configure. Operate.
Pick the deploy path that fits how you run infrastructure, then go deep with the reference docs. Every page here is rendered from the repository, so it matches the code.
01 Choose your path
From nostream start to blue/green.
Start with Docker Compose. Move to the pre-built image when it's a real server, and to HAProxy when you can't afford a restart.
# clone and configuregit clone https://github.com/cameri/nostream.git && cd nostreamecho "SECRET=$(openssl rand -hex 128)" > .env# install the CLI from the checkout and startpnpm add -g .nostream start# with TLS via nginx + certbotRELAY_DOMAIN=relay.example.com CERTBOT_EMAIL=you@example.com nostream start --nginx
# copy release-managed files to the hostchmod +x deploy/bootstrap.sh./deploy/bootstrap.sh /opt/nostream# edit /opt/nostream/.env, load ghcr.io/cameri/nostream:main, thencd /opt/nostreamdocker compose up -d# later updates (run from your git clone — deploy/ is not copied to /opt/nostream)cd ~/nostream./deploy/recreate-relay.sh /opt/nostream
# after the new image is loadedcd /opt/nostreamdocker compose -f docker-compose.haproxy.yml run --rm nostream-migrate./rolling-relay-recreate.sh# the peer must stay up; wait for /readyz to return 200
# start with hidden servicesnostream start --tor --i2p# print the addresses to sharenostream info --tor-hostnamenostream info --i2p-hostname
# set DB_* / REDIS_* and SECRET in .env, thencorepack enablepnpm installpnpm db:migratemkdir .nostrcp resources/default-settings.yaml .nostr/settings.yamlpnpm start
02 Documentation
Quick start to every last setting.
Start here
Operate
Deploy
deploy/README.md
Production deployment
Minimal Compose stack on a pre-built GHCR image. Bootstrap, settings, services.
Read → docs/DEPLOY-RUNBOOK.mdDeploy runbook & HAProxy
Single-relay and blue/green rollouts, verification, rollback.
Read → docs/DEPLOYMENT.mdContainer publishing
How images are built and published from CI.
Read →