User Tools

This is an old revision of the document!


Conduwuit

Conduwuit is a Matrix server written in RUST. Matrix is an open network for secure, decentralised communication. It is a specification which is in turn implemented by many servers and clients, and you can self-host your server as well. This is a new, well supported, lightweight implementation of a Matrix server.

I will show you also how to install Element Web app which is a nice companion for web access everywhere.

Installation of Conduwuit server

Installation instructions: here. While there is a docker approach, it is so simple to install on bare-metal that i preferred this approach to the container one. Actuall accessing the conduwuit command-line admin console is a pain with container, while it's so easy from the prebuilt-binary.

Create user and required folders:

seradd -d /data/daemons/conduwuit conduwuit
mkdir -p /data/conduwuit/db
chown conduwuit:conduwuit /data/conduwuit -R

Download the correct executable from GitHUB releases page. You should pick the one for your architecture. For example, for Linux 64bit would be static-x86_64-unknown-linux-musl:

su - conduwuit
mkdir bin
cd bin
wget https://github.com/girlbossceo/conduwuit/releases/download/<< version >>/static-x86_64-unknown-linux-musl

Installation of Element Web app

Element Web app is a great web based UI for Matrix, that you can pair to your instance.

Again installing bare-metal is the way to go. See here.

Download latest release tarball from here and decompress it:

su - conduwuit
wget https://github.com/element-hq/element-web/releases/<< version >> /element-<< version >>.tar.gz
tar xvf element-<< version >>.tar.gz
ln -s element-<< version >> element-web

Configuration of Conduwuit server

The official Conduwuit configuration documentation can be found here.

Now, you cannot start Conduwuit withour a proper configuration file. I suggest you to put it under /data/conduwuit/conduwuit.toml, and here is an example to start from:

[global]
server_name = "chat.mydomain.com"
address = ["127.0.0.1", "::1"]
port = 6167
database_path = "/data/conduwuit/db"
new_user_displayname_suffix = "-|"
allow_check_for_updates = false
max_request_size = 20971520 # this should match NGINX max request size
#log = "info"
#log_colors = true
#emergency_password = ""
 
[global.well_known]
client = "https://chat.mydomain.com"
server = "chat.mydomain.com:443"

You are now ready for testing your installation.

Configuration of Element Web App

Rename the file called config.sample.json to config.json inside the element-« version » folder and edit accordingly.

At the very least perform the following edits:

    "default_server_config": {
        "m.homeserver": {
            "base_url": "https://chat.gardiol.org",
            "server_name": "chat.gardiol.org"
        },

at the beginning of the file.

Manual startup

to run Conduwuit server, run the following command as conduwuit user:

/data/daemons/bin/static-x86_64-unknown-linux-musl -c /data/conduwuit/conduwuit.toml

Of course, replace the proper paths and filenames with your setup.

Running manually is good because you can easily access the admin console by typing CTRL+C from the terminal. You might want to take this opportunity to create your first user, and make it an admin too.

Testing

Call directly this endpoint:

curl https://chat.mydomain.com/_conduwuit/server_version
{"name":"Conduwuit","version":"0.5.0 (e5049ca)"}

Check federation and Matrix operability, open the following URL:

https://federationtester.matrix.org/#chat.mydomain.com

Reverse proxy

A Matrix server must be hosted on a dedicated subdomain. Please see my NGINX reverse proxy page for more information about the followint configuration.

chat.conf
server {
        server_name chat.mydomain.com;
        listen 8443 ssl; # external access
        listen 443 ssl;  # internal access

        access_log /var/log/nginx/chat.mydomain.com_access_log main;
        error_log /var/log/nginx/chat.mydomain.com_error_log info;

        location / {
                root /data/daemons/conduwuit/element-web;
        }

        location ~ ^(/_matrix|/_synapse/client) {
                add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS, PATCH, HEAD';
                proxy_pass http://127.0.0.1:6167;
                #proxy_pass http://127.0.0.1:6167$request_uri;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header Host $host;
                proxy_buffering off;
                client_max_body_size 30M;
                proxy_read_timeout 10m;
                proxy_http_version 1.1;
        }

        location /.well-known/matrix/server {
                return 200 '{"m.server": "chat.mydomain.com:443"}';
                types { } default_type "application/json; charset=utf-8";
        }

        location /.well-known/matrix/client {
                return 200 '{"m.homeserver": {"base_url": "https://chat.mydomain.com"}}';
                types { } default_type "application/json; charset=utf-8";
                add_header "Access-Control-Allow-Origin" *;
        }
}

Adding users

From the Contuwuit admin console, which can be accessed by running the conduwuit binary in a terminl then hit CTRL+C, you can do a lot of admin stuff, including creating new users.

To create a user:

uwu> admin users create-user myuser mypassword

To make a user an admin:

uwu> admin users make-user-admin myuser

To change a user password:

uwu> admin users reset-password myuser mynewpassword

You must create at least one user and make it admin!

Autostart

Since i use OpenRC, simply drop the following script to /etc/init.d:

/etc/init.d/conduwuit
#!/sbin/openrc-run
# Copyright 2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

name="conduwuit daemon"
description="Conduwuit Matrix server"
pidfile="/run/conduwuit.pid"
command_background=true
command="/data/daemons/conduwuit/bin/static-x86_64-linux-musl"
command_args="-c /data/conduwuit/conduwuit.toml"
command_user="conduwuit:conduwuit"

depend() {
        need net
}

Make it executable and add to the proper runlevel:

chmod +x /etc/init.d/conduwuit
rc-update add conduwuit default

This website uses technical cookies only. No information is shared with anybody or used in any way but provide the website in your browser.

More information