Adds a Docker Compose example alongside the existing `docker run` one, using a tagged release and the same hardening options. Co-authored-by: daru <darupeter@pm.me> Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Nh4Z2JCU4aVC5STFN7usfW
131 lines
6.6 KiB
Markdown
131 lines
6.6 KiB
Markdown
## 🚀 Installation
|
|
|
|
☁️ The easiest way to use the bot is to **get a managed Matrix server from [etke.cc](https://etke.cc/)** and order baibot via the [order form](https://etke.cc/order/). Existing customers can request the inclusion of this additional service by [contacting support](https://etke.cc/contacts/).
|
|
|
|
💻 If you're managing your Matrix server with the help of the [matrix-docker-ansible-deploy](https://github.com/spantaleev/matrix-docker-ansible-deploy) Ansible playbook, you can easily **install the bot via the Ansible playbook**. See the playbook's [Setting up baibot](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/master/docs/configuring-playbook-bot-baibot.md) documentation page.
|
|
|
|
🐋 In other cases, we **recommend using our [prebuilt container images](https://github.com/etkecc/baibot/pkgs/container/baibot) and [running in a container](#-running-in-a-container)**. You can also [build a container image](#building-a-container-image) yourself.
|
|
|
|
🔨 If containers are not your thing, you can [build a binary](#-building-a-binary) yourself and [run it](#-running-a-binary).
|
|
|
|
🗲 For a quick experiment, you can refer to the [🧑💻 development documentation](./development.md) which contains information on how to build and run the bot (and its various dependency services) locally.
|
|
|
|
|
|
### 🐋 Building a container image
|
|
|
|
We provide prebuilt container images for the `amd64` and `arm64` architectures, so **you don't necessarily need to build images yourself** and can jump to [Running in a container](#-running-in-a-container).
|
|
|
|
If you nevertheless wish to build a container image yourself, you can do so by running:
|
|
|
|
- (recommended) `just build-container-image-release` to build a release version of the container image
|
|
|
|
- or `just build-container-image-debug` to build a debug version of the container image
|
|
|
|
Debug images are faster to build but are larger in size.
|
|
Release images are ~5x smaller in size, but are slower to build.
|
|
|
|
Both of these commands will build and tag your container image as `localhost/baibot:latest`.
|
|
|
|
|
|
### 🐋 Running in a container
|
|
|
|
We recommend using a **tagged-release** (e.g. `v1.0.0`, not `latest`) of our [prebuilt container images](https://github.com/etkecc/baibot/pkgs/container/baibot), but you can also [build a container image](#-building-a-container-image) yourself.
|
|
|
|
You should:
|
|
|
|
- [🛠️ prepare a configuration file](#-preparing-a-configuration-file) (e.g. `cp etc/app/config.yml.dist /path/to/config.yml` & edit it)
|
|
- prepare a data directory (`mkdir /path/to/data`)
|
|
|
|
The example below uses [🐋 Docker](https://www.docker.com/) to run the container, but other container runtimes like [Podman](https://podman.io/) should work as well.
|
|
|
|
```sh
|
|
# Adjust the version tag to point to the latest available tagged version.
|
|
# If building your own container image name, adjust to something like `localhost/baibot:latest`.
|
|
CONTAINER_IMAGE_NAME=ghcr.io/etkecc/baibot:v1.0.0
|
|
|
|
/usr/bin/env docker run \
|
|
-it \
|
|
--rm \
|
|
--name=baibot \
|
|
--user=$(id -u):$(id -g) \
|
|
--cap-drop=ALL \
|
|
--read-only \
|
|
--env BAIBOT_PERSISTENCE_DATA_DIR_PATH=/data \
|
|
--mount type=bind,src=/path/to/config.yml,dst=/app/config.yml,ro \
|
|
--mount type=bind,src=/path/to/data,dst=/data \
|
|
--tmpfs=/tmp:rw,noexec,nosuid,size=1024m \
|
|
$CONTAINER_IMAGE_NAME
|
|
```
|
|
|
|
Alternatively, you can use [Docker Compose](https://docs.docker.com/compose/) with a `compose.yml` file like this:
|
|
|
|
```yaml
|
|
services:
|
|
baibot:
|
|
container_name: baibot
|
|
# Adjust the version tag to point to the latest available tagged version.
|
|
# If building your own container image name, adjust to something like `localhost/baibot:latest`.
|
|
image: ghcr.io/etkecc/baibot:v1.0.0
|
|
# Set `UID` and `GID` in a `.env` file next to `compose.yml` (e.g. `UID=1000`, `GID=1000`)
|
|
# or export them in your shell (`export UID GID="$(id -g)"`).
|
|
# These should match the user that owns the data directory.
|
|
user: "${UID:-1000}:${GID:-1000}"
|
|
environment:
|
|
# Other settings can also be set via environment variables.
|
|
# See the 🛠️ Configuration documentation (docs/configuration/README.md) for details.
|
|
BAIBOT_PERSISTENCE_DATA_DIR_PATH: /data
|
|
volumes:
|
|
- /path/to/config.yml:/app/config.yml:ro
|
|
- /path/to/data:/data
|
|
cap_drop:
|
|
- ALL
|
|
read_only: true
|
|
tmpfs:
|
|
- /tmp:rw,noexec,nosuid,size=1024m
|
|
restart: unless-stopped
|
|
```
|
|
|
|
💡 If you've defined the `persistence.data_dir_path` setting in the `config.yml` file, you can skip the `BAIBOT_PERSISTENCE_DATA_DIR_PATH` environment variable.
|
|
|
|
|
|
### 🔨 Building a binary
|
|
|
|
To build a binary, you need a [🦀 Rust](https://www.rust-lang.org/) toolchain.
|
|
|
|
Consult the [Dockerfile](../Dockerfile) file to learn what some of the build dependencies are (e.g. `libssl-dev`, `libsqlite3-dev`, etc., on Debian-based distros).
|
|
|
|
You can build a binary from the current project's source code:
|
|
|
|
- in `debug` mode via: `just build-debug`, yielding a binary in `target/debug/baibot`
|
|
- (recommended) in `release` mode via: `just build-release`, yielding a binary in `target/release/baibot`
|
|
|
|
💡 Unless you're [🧑💻 developing](./development.md), you probably wish to build in release mode, as that provides a much smaller and more optimized binary.
|
|
|
|
📦 You can also install from the [baibot](https://crates.io/crates/baibot) crate published to [crates.io](https://crates.io) with the help of the [cargo](https://doc.rust-lang.org/cargo/) package manager by running: `cargo install baibot`.
|
|
|
|
|
|
### 🖥️ Running a binary
|
|
|
|
Once you've [🔨 built a binary](#-building-a-binary) and [🛠️ prepared a configuration file](#-preparing-a-configuration-file), you can run it.
|
|
|
|
Consult the [Dockerfile](../Dockerfile) file to learn what some of the runtime dependencies are (e.g. `ca-certificates`, `sqlite3`, etc., on Debian-based distros).
|
|
|
|
You can run the binary like this:
|
|
|
|
```sh
|
|
BAIBOT_CONFIG_FILE_PATH=/path/to/config.yml \
|
|
BAIBOT_PERSISTENCE_DATA_DIR_PATH=/path/to/data \
|
|
./target/release/baibot
|
|
```
|
|
|
|
💡 If you've defined the `persistence.data_dir_path` setting in the `config.yml` file, you can skip the `BAIBOT_PERSISTENCE_DATA_DIR_PATH` environment variable.
|
|
|
|
💡 If your `config.yml` file is in your working directory (which may be different than the directory the binary lives in), you can skip the `BAIBOT_CONFIG_FILE_PATH` environment variable.
|
|
|
|
|
|
### 🛠️ Preparing a configuration file
|
|
|
|
For an introduction to the configuration file, see the [🛠️ Configuration](./configuration/README.md) page.
|
|
|
|
Generally, you need to copy the configuration file template ([etc/app/config.yml.dist](../etc/app/config.yml.dist)) and make modifications as needed.
|