This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ====== ZZ) (deprecated) Server: Conduwuit ====== **Note:** Sadly, Conduwuit project has been abandoned by the current devs and archived. Conduwuit is deprecated, the following instructions are left for historical reference only, **DO NOT FOLLOW**. [[https://conduwuit.puppyirl.gay/|Conduwuit]] is a Matrix server written in RUST, it is a new, well supported, lightweight implementation of a Matrix server. I also tried Synapse, the classic Matrix server, but ended up with Conduwuit that proved itself more lightweight and much easier to implement and maintain. ===== Installation ===== Installation instructions: [[https://conduwuit.puppyirl.gay/deploying/generic.html|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: <code bash> seradd -d /data/daemons/conduwuit conduwuit mkdir -p /data/conduwuit/db /var/log/conduwuit chown conduwuit:conduwuit /data/conduwuit /var/log/conduwuit -R </code> Download the correct executable from [[https://github.com/girlbossceo/conduwuit/releases|GitHUB releases page]]. You should pick the one for your architecture. For example, for Linux 64bit would be **static-x86_64-unknown-linux-musl**: <code bash> su - conduwuit mkdir bin cd bin wget https://github.com/girlbossceo/conduwuit/releases/download/<< version >>/static-x86_64-unknown-linux-musl </code> ===== Configuration of Conduwuit server ===== The official Conduwuit configuration documentation can be found [[https://conduwuit.puppyirl.gay/configuration.html|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: <file /data/conduwuit/conduwuit.toml> [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" </file> You are now ready for testing your installation. ==== Configuration of Conduwuit server ==== To access the admin console, you need to type CTRL+C on the server command line. You can do this if you start the server manually and not automatically. So if you need the admin console to create the admin user or in general in the future, remember this. ===== Manual startup ===== To run Conduwuit server, run the following command as **conduwuit** user: <code bash> /data/daemons/bin/static-x86_64-unknown-linux-musl -c /data/conduwuit/conduwuit.toml </code> 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: <code bash> curl https://chat.mydomain.com/_conduwuit/server_version {"name":"Conduwuit","version":"0.5.0 (e5049ca)"} </code> Check federation and Matrix operability, open the following URL: <code> https://federationtester.matrix.org/#chat.mydomain.com </code> ===== Reverse proxy ===== A Matrix server must be hosted on a dedicated subdomain. Please see my [[selfhost:nginx|NGINX]] reverse proxy page for more information about the followint configuration. <file - chat.conf> server { server_name chat.mydomain.com; # Port 8443 goes to external connection (internet) listen 8443 ssl; # Port 443 is used for internal connections (home) listen 443 ssl; http2 on; access_log /var/log/nginx/chat.mydomain.com_access_log main; error_log /var/log/nginx/chat.mydomain.com_error_log info; location / { # this is to provide a web client, see the ElementWeb page... root /data/daemons/conduwuit/element-web; } location ~ ^(/_matrix|/client) { # The $request_uri is MANDATORY to avoid URI being modifyed by NGINX 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; add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS, PATCH, HEAD'; proxy_read_timeout 10m; proxy_http_version 1.1; } # This is needed for federation location /.well-known/matrix/server { default_type application/json; add_header Access-Control-Allow-Origin *; return 200 '{"m.server": "chat.mydomain.com:443"}'; } # Enable snail sync for Element X and client access info in general location /.well-known/matrix/client { default_type application/json; add_header Access-Control-Allow-Origin *; return 200 '{"m.homeserver": {"base_url": "https://chat.mydomain.com"},"org.mydomain.msc3575.proxy": {"url": "https://chat.mydomain.com"}}'; } include com.mydomain/certbot.conf; } </file> In the above file i have already introduced the location (/) of the ElementWeb client, the installation is described [[matrix:element-web|here]]. ===== Adding users ===== From the Contuwuit admin console, which can be accessed by running the conduwuit binary in a terminal then hit **CTRL+C**, you can do a lot of admin stuff, including creating new users. To create a user: <code> uwu> admin users create-user myuser mypassword </code> To make a user an admin: <code> uwu> admin users make-user-admin myuser </code> To change a user password: <code> uwu> admin users reset-password myuser mynewpassword </code> You **must** create at least one user and make it admin! You can run any admin command later on directly in your favorite Matrix client in the admin chat. You might need the terminal only if you accidentally lock your user out of the instance. ===== Autostart ===== Since i use OpenRC, simply drop the following script to /etc/init.d: <file - /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" output_log="/var/log/conduwuit/conduwuit.log" output_err="/var/log/conduwuit/conduwuit.log" depend() { need net } </file> Make it executable and add to the proper runlevel: <code bash> chmod +x /etc/init.d/conduwuit rc-update add conduwuit default </code>