lib.itmens/docs/install.md
2024-06-05 22:05:22 -04:00

97 lines
3.7 KiB
Markdown

Install
=======
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](configuration.md#scaling-up) for some tips.
## Install docker compose
Follow [official instructions](https://docs.docker.com/compose/install/) 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](https://docs.docker.com/engine/install/linux-postinstall/) if it's not enabled, or use `sudo` to run commands in this doc.
## Prepare configuration files
- create a folder for configuration, eg ~/mysite/config
- grab [compose.yml](https://raw.githubusercontent.com/neodb-social/neodb/main/compose.yml) and [neodb.env.example](https://raw.githubusercontent.com/neodb-social/neodb/main/neodb.env.example) from source code
- rename `neodb.env.example` to `.env`
## Set up .env file and web root
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 site
- `NEODB_SITE_DOMAIN` - domain name of your site
- `NEODB_SECRET_KEY` - encryption key of session data
- `NEODB_DATA` is the path to store db/media/cache, it's `../data` by default, but can be any path that's writable
- `NEODB_DEBUG` - set to `False` for production deployment
Optionally, `robots.txt` and `logo.png` may be placed under `$NEODB_DATA/www-root/`.
See [neodb.env.example](https://raw.githubusercontent.com/neodb-social/neodb/main/neodb.env.example) and [configuration](configuration.md) for more options
## Start container
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": {}}
```
## Make the site available publicly
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.
## Register an account and make it admin
Now open `https://yourdomain.tld` in your browser and register an account, assuming username `admin`
add the following line to `.env` to make it an admin account:
```
NEODB_ADMIN_USERS=admin
```
now restart the cluster to make it effective:
```bash
docker compose --profile production up -d
```
Now your instance should be ready to serve. More tweaks are available, see [configuration](configuration.md) for options.