For small and medium NeoDB instances, it's recommended to deploy as a container cluster with Docker Compose. To run a large instance, please see scaling up for some tips.
Follow official instructions to install Docker Compose if not yet.
Please verify its version is 2.x or higher before next step:
docker compose version
The rest of this doc assumes you can run docker commands without sudo
, to verify that:
docker run --rm hello-world
Follow official instructions if it's not enabled, or use sudo
to run commands in this doc.
- create a folder for configuration, eg ~/mysite/config
- grab
compose.yml
andneodb.env.example
from latest release - rename
neodb.env.example
to.env
Change essential options like NEODB_SITE_DOMAIN
in .env
before starting the cluster for the first time. Changing them later may have unintended consequences, please make sure they are correct before exposing the service externally.
NEODB_SITE_NAME
- name of your siteNEODB_SITE_DOMAIN
- domain name of your siteNEODB_SECRET_KEY
- encryption key of session dataNEODB_DATA
is the path to store db/media/cache, it's../data
by default, but can be any path that's writableNEODB_DEBUG
- set toFalse
for production deploymentNEODB_PREFERRED_LANGUAGES
- preferred languages when importing titles from 3rd party sites like TMDB and Steam, comma-separated list of ISO-639-1 two-letter codes, 'en,zh' by default.
Optionally, robots.txt
and logo.png
may be placed under $NEODB_DATA/www-root/
.
See neodb.env.example and configuration for more options
in the folder with compose.yml
and .env
, execute as the user you just created:
docker compose --profile production pull
docker compose --profile production up -d
Starting up for the first time might take a few minutes, depending on download speed, use the following commands for status and logs:
docker compose ps
docker compose --profile production logs -f
In a few seconds, the site should be up at 127.0.0.1:8000 , you may check it with:
curl http://localhost:8000/nodeinfo/2.0/
JSON response will be returned if the server is up and running:
{"version": "2.0", "software": {"name": "neodb", "version": "0.8-dev"}, "protocols": ["activitypub", "neodb"], "services": {"outbound": [], "inbound": []}, "usage": {"users": {"total": 1}, "localPosts": 0}, "openRegistrations": true, "metadata": {}}
Next step is to expose http://127.0.0.1:8000
to external network as https://yourdomain.tld
(NeoDB requires https
). There are many ways to do it, you may use nginx or caddy as a reverse proxy server with an SSL cert configured, or configure a tunnel provider like cloudflared to do the same. Once done, you may check it with:
curl https://yourdomain.tld/nodeinfo/2.0/
You should see the same JSON response as above, and the site is now accessible to the public.
Open https://yourdomain.tld
in your browser and register an account, assuming username admin
, run the following command to make it super user
docker compose --profile production run --rm shell neodb-manage user --super admin
Now your instance should be ready to serve. More tweaks are available, see configuration for options.