Self-Hosting
Prerequisites
You need to run your own Matrix homeserver.
Configuration
Synapse
Create an appservice registration file cactus.yaml
that Synapse can read. Use the following template and change the tokens:
# A unique, user-defined ID of the application service which will never change.
id: "Cactus Comments"
# Where the cactus-appservice is hosted:
url: "http://cactus:5000"
# Unique tokens used to authenticate requests between our service and the
# homeserver (and the other way). Use the sha256 hashes of something random.
# CHANGE THESE VALUES.
as_token: "a2d7789eedb3c5076af0864f4af7bef77b1f250ac4e454c373c806876e939cca"
hs_token: "b3b05236568ab46f0d98a978936c514eac93d8f90e6d5cd3895b3db5bb8d788b"
# User associated with our service. In this case "@cactusbot:example.com"
sender_localpart: "cactusbot"
namespaces:
aliases:
- exclusive: true
regex: "#comments_.*"
Then add the file path to your Synapse homeserver.yaml
:
app_service_config_files:
- "/path/to/cactus.yaml"
To allow guest comments without users needing to log in, you need to have guest registration enabled. To do this set allow_guest_access: true
in homeserver.yaml
.
Cactus Comments application service
The Cactus Comments application service is entirely configured with environment variables.
Name | Required? | Description |
---|---|---|
CACTUS_HS_TOKEN | Yes | The token used to authenticate the homeserver. This should match hs_token in the registration YAML file. |
CACTUS_AS_TOKEN | Yes | The token used to authenticate the application service to the homeserver. This should match as_token in the registration YAML file. |
CACTUS_HOMESERVER_URL | Yes | The complete URL of the homeserver that the application service is registered with. |
CACTUS_USER_ID | Yes | The user id for the chatbot interface. This should be based on sender_localpart from the registration YAML file. Example: @cactusbot:example.com . |
CACTUS_NAMESPACE_REGEX | No | The regex for room aliases that the application service controls. This should match the regex in the registration YAML file. Example: #_comments2_.* . |
CACTUS_NAMESPACE_PREFIX | No | The prefix of room aliases that the application service controls. This should only be set if CACTUS_NAMESPACE_REGEX is set and it should match that. Example: _comments_2 . |
CACTUS_REGISTRATION_REGEX | No | Only allow user id’s matching this regex to register new sites. Example: @user1:example.org|@user2:example.org |
CACTUS_NAMESPACE_REGEX
and CACTUS_NAMESPACE_PREFIX
exists in case you want to change the room alias regex that the application service controls. This is useful if you want to run multiple Cactus Comments deployments on the same homeserver.
There are four required environment variables and they should match those defined in the cactus.yaml
above:
CACTUS_HS_TOKEN=b3b05236568ab46f0d98a978936c514eac93d8f90e6d5cd3895b3db5bb8d788b
CACTUS_AS_TOKEN=a2d7789eedb3c5076af0864f4af7bef77b1f250ac4e454c373c806876e939cca
CACTUS_HOMESERVER_URL=http://synapse:8008
CACTUS_USER_ID=@cactusbot:example.com
Running cactus-appservice
Currently, cactus-appservice
is primarily distributed as a docker image.
However, you can opt to run it as a systemd service by cloning the repo, at the expense of some additional setup steps.
The application service is stateless either way.
Using docker
If the environment variables above were defined in cactus.env
, you could start the application service directly with docker like:
$ docker run --env-file cactus.env --name cactus cactuscomments/cactus-appservice:latest
In docker-compose
, this service might look like:
services:
cactus:
image: cactuscomments/cactus-appservice:latest
env_file: "cactus.env"
Using systemd
See the dedicated instructions for systemd here.