153 lines
4.1 KiB
Markdown
153 lines
4.1 KiB
Markdown
|
# Docker
|
||
|
|
||
|
The docker image will run my-project-name with a SQLite database and
|
||
|
end-to-end encryption dependencies included. For larger deployments, a
|
||
|
connection to a Postgres database backend is recommended.
|
||
|
|
||
|
## Setup
|
||
|
|
||
|
### The `/data` volume
|
||
|
|
||
|
The docker container expects the `config.yaml` file to exist at
|
||
|
`/data/config.yaml`. To easily configure this, it is recommended to create a
|
||
|
directory on your filesystem, and mount it as `/data` inside the container:
|
||
|
|
||
|
```
|
||
|
mkdir data
|
||
|
```
|
||
|
|
||
|
We'll later mount this directory into the container so that its contents
|
||
|
persist across container restarts.
|
||
|
|
||
|
### Creating a config file
|
||
|
|
||
|
Copy `sample.config.yaml` to a file named `config.yaml` inside of your newly
|
||
|
created `data` directory. Fill it out as you normally would, with a few minor
|
||
|
differences:
|
||
|
|
||
|
* The bot store directory should reside inside of the data directory so that it
|
||
|
is not wiped on container restart. Change it from the default to `/data/store`.
|
||
|
There is no need to create this directory yourself, my-project-name will
|
||
|
create it on startup if it does not exist.
|
||
|
|
||
|
* Choose whether you want to use SQLite or Postgres as your database backend. If
|
||
|
using SQLite, ensure your database file is stored inside the `/data` directory:
|
||
|
|
||
|
```
|
||
|
database: "sqlite:///data/bot.db"
|
||
|
```
|
||
|
|
||
|
If using postgres, point to your postgres instance instead:
|
||
|
|
||
|
```
|
||
|
database: "postgres://username:password@postgres/my-project-name?sslmode=disable"
|
||
|
```
|
||
|
|
||
|
**Note:** a postgres container is defined in `docker-compose.yaml` for your convenience.
|
||
|
If you would like to use it, set your database connection string to:
|
||
|
|
||
|
```
|
||
|
database: "postgres://postgres:somefancypassword@postgres/postgres?sslmode=disable"
|
||
|
```
|
||
|
|
||
|
The password `somefancypassword` is defined in the docker compose file.
|
||
|
|
||
|
Change any other config values as necessary. For instance, you may also want to
|
||
|
store log files in the `/data` directory.
|
||
|
|
||
|
## Running
|
||
|
|
||
|
First, create a volume for the data directory created in the above section:
|
||
|
|
||
|
```
|
||
|
docker volume create \
|
||
|
--opt type=none \
|
||
|
--opt o=bind \
|
||
|
--opt device="/path/to/data/dir" data_volume
|
||
|
```
|
||
|
|
||
|
If you want to use the postgres container defined in `docker-compose.yaml`, start that
|
||
|
first:
|
||
|
|
||
|
```
|
||
|
docker-compose up -d postgres
|
||
|
```
|
||
|
|
||
|
Start the bot with:
|
||
|
|
||
|
```
|
||
|
docker-compose up my-project-name
|
||
|
```
|
||
|
|
||
|
This will run the bot and log the output to the terminal. You can instead run
|
||
|
the container detached with the `-d` flag:
|
||
|
|
||
|
```
|
||
|
docker-compose up -d my-project-name
|
||
|
```
|
||
|
|
||
|
(Logs can later be accessed with the `docker logs` command).
|
||
|
|
||
|
This will use the `latest` tag from
|
||
|
[Docker Hub](https://hub.docker.com/somebody/my-project-name).
|
||
|
|
||
|
If you would rather run from the checked out code, you can use:
|
||
|
|
||
|
```
|
||
|
docker-compose up local-checkout
|
||
|
```
|
||
|
|
||
|
This will build an optimized, production-ready container. If you are developing
|
||
|
instead and would like a development container for testing local changes, use
|
||
|
the `start-dev.sh` script and consult [CONTRIBUTING.md](../CONTRIBUTING.md).
|
||
|
|
||
|
**Note:** If you are trying to connect to a Synapse instance running on the
|
||
|
host, you need to allow the IP address of the docker container to connect. This
|
||
|
is controlled by `bind_addresses` in the `listeners` section of Synapse's
|
||
|
config. If present, either add the docker internal IP address to the list, or
|
||
|
remove the option altogether to allow all addresses.
|
||
|
|
||
|
## Updating
|
||
|
|
||
|
To update the container, navigate to the bot's `docker` directory and run:
|
||
|
|
||
|
```
|
||
|
docker-compose pull my-project-name
|
||
|
```
|
||
|
|
||
|
Then restart the bot.
|
||
|
|
||
|
## Systemd
|
||
|
|
||
|
A systemd service file is provided for your convenience at
|
||
|
[my-project-name.service](my-project-name.service). The service uses
|
||
|
`docker-compose` to start and stop the bot.
|
||
|
|
||
|
Copy the file to `/etc/systemd/system/my-project-name.service` and edit to
|
||
|
match your setup. You can then start the bot with:
|
||
|
|
||
|
```
|
||
|
systemctl start my-project-name
|
||
|
```
|
||
|
|
||
|
and stop it with:
|
||
|
|
||
|
```
|
||
|
systemctl stop my-project-name
|
||
|
```
|
||
|
|
||
|
To run the bot on system startup:
|
||
|
|
||
|
```
|
||
|
systemctl enable my-project-name
|
||
|
```
|
||
|
|
||
|
## Building the image
|
||
|
|
||
|
To build a production image from source, use the following `docker build` command
|
||
|
from the repo's root:
|
||
|
|
||
|
```
|
||
|
docker build -t somebody/my-project-name:latest -f docker/Dockerfile .
|
||
|
```
|