OurSpace self-hosting setup
The same five questions scripts/init-selfhost.sh asks, answered in your browser.
This page is static: nothing runs on a server, nothing is submitted, and no request of any kind
leaves this tab. Everything below is computed here, from the copy of .env.example
embedded in this file.
Your .env
JWT_SECRET and HLS_URL_SECRET were generated in this tab with
crypto.getRandomValues — 32 random bytes each, and guaranteed different from one
another. They are never prompted for and never sent anywhere. Everything the wizard does not ask
about is left at its documented default, exactly as the shell script leaves it.
Then
Save that as .env in the root of your clone — beside compose.yaml, not
inside backend/ — and run:
cd <repo> export BUILD_COMMIT="$(git rev-parse --short=10 HEAD)" docker compose up -d --build --wait
- Keep the
--wait. Without it Compose exits0as soon as the containers have been created, not when they are serving — so an instance with a bad secret gives you a clean-lookingupwhile the api crash-loops behind it. - The
exportis the one thing this page cannot do for you.BUILD_COMMITis whatGET /server-inforeports, and it is stamped into the image at build time from the checkout you are standing in; a browser cannot read your git history. Without it your instance reportsunknown, which is cosmetic but leaves you unable to tell which commit a running instance is on. Re-run the line after everygit pull. - Running the staging profile? The last line becomes
docker compose --profile staging up -d --build --wait. - Then check the API is answering:
curl 127.0.0.1:4100/health(or whichever port you chose) should return JSON with"status":"ok". The server is now running and completely empty — sign up through the app, and seedocs/SELF_HOSTING.md§12 to make that first account an operator. That is the one setting that cannot be made before first run: it wants aUser.id, and no users existed yet.