nio-template/docker
Andrew Morgan 3d8fbf142b Update suggested python version to 3.10 in dockerfiles 2022-01-27 16:35:44 +00:00
..
.env Docker development and run support 2020-08-11 17:37:23 -07:00
Dockerfile Update suggested python version to 3.10 in dockerfiles 2022-01-27 16:35:44 +00:00
Dockerfile.dev Update suggested python version to 3.10 in dockerfiles 2022-01-27 16:35:44 +00:00
README.md Improve docker documentation 2020-08-16 17:01:44 +01:00
build_and_install_libolm.sh Docker development and run support 2020-08-11 17:37:23 -07:00
docker-compose.yml Docker development and run support 2020-08-11 17:37:23 -07:00
my-project-name.service Docker development and run support 2020-08-11 17:37:23 -07:00
start-dev.sh Docker development and run support 2020-08-11 17:37:23 -07:00

README.md

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, it will be created on startup if it does not exist.

  • Choose whether you want to use SQLite or Postgres as your database backend. Postgres has increased performance over SQLite, and is recommended for deployments with many users.

    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

Optional: 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.

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.

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. 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 .