Install Postgresql: Install Guide
Create db user and databases:
su - _postgresql
createuser -U postgres -P dendrite
for db in mediaapi syncapi roomserver signingkeyserver federationsender appservice keyserver userapi_accounts userapi_devices naffka; do
createdb -U postgres -O dendrite $db
done
echo "host all dendrite 127.0.0.1/32 md5" >>/var/postgresql/data/pg_hba.conf
rcctl reload postgresql
Create system user and directories:
groupadd _dendrite
useradd -g _dendrite -d /var/dendrite -s /sbin/nologin _dendrite
mkdir -p /var/dendrite/media_store /var/log/dendrite
chown -R _dendrite:_dendrite /var/dendrite /var/log/dendrite
Generate Matrix Key:
generate-keys --private-key /var/dendrite/matrix_key.pem
chown root:_dendrite /var/dendrite/matrix_key.pem
chmod 640 /var/dendrite/matrix_key.pem
Generate Dendrite Config:
domain="example.com"
pass="my_db_password"
generate-config | sed -e "s/server_name: localhost/server_name: $domain/" \
-e 's/\[::\]/0.0.0.0/g' \
-e 's/localhost/127.0.0.1/g' \
-e "s,file:\(.*\).db,postgres://dendrite:$pass@127.0.0.1/\1?sslmode=disable,g" \
-e 's,\./media_store,/var/dendrite/media_store,' \
-e 's,matrix_key.pem,/var/dendrite/matrix_key.pem,' \
> /var/dendrite/dendrite.yaml
chmod 640 /var/dendrite/dendrite.yaml
chown root:_dendrite /var/dendrite/dendrite.yaml
Create rc file:
cat <<'EOF'> /etc/rc.d/dendrite
#!/bin/sh
daemon="/usr/local/sbin/dendrite-monolith-server"
daemon_user="_dendrite"
rc_bg=YES
. /etc/rc.d/rc.subr
rc_cmd $1
EOF
chmod 555 /etc/rc.d/dendrite
rcctl enable dendrite
rcctl set dendrite flags -config /var/dendrite/dendrite.yaml
rcctl start dendrite
Nginx well-known config:
server_name example.com;
...
location /.well-known/matrix/client {
return 200 '{"m.homeserver":{"base_url":"https://matrix.example.com"}}';
add_header Content-Type application/json;
add_header Access-Control-Allow-Origin *;
}
location /.well-known/matrix/server {
return 200 '{"m.server":"matrix.example.com:443"}';
}
Nginx Proxy:
server {
listen 443 ssl http2;
server_name matrix.example.com;
...
location /_matrix {
proxy_pass http://192.168.0.100:8008;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
create-account --config /var/dendrite/dendrite.yaml -ask-pass -username <user>
su - _postgresql
for db in mediaapi syncapi roomserver signingkeyserver federationsender appservice keyserver userapi_accounts userapi_devices naffka; do
psql -U postgres -c "drop database $db"
done