Skip to content

HAVEN CHAT

Haven is a voice, video, and text chat service that can be self hosted, unlike its inspiration Discord.

The two sections here refer to either the client side or server side components. If you are joining another server you do not need your own server. But if you do want to host your own, the instructions to replicate what I did are below.

If you have been forwarded here:

  • Install an appropriate client
  • Register
  • Login and do a quick mic/camera config
  • Yap/Chat/Lurk away.

HAVEN CLIENT

1a. GNU/LINUX & WINDOWS CLIENTS

1b. ANDROID CLIENT

1c. iOS CLIENT

2. REGISTER

Once in the client, there will be the option to Login, Register, or Link Server. Select Register and enter username and password.

3. LOGIN

In the client, there will be the option to Login, Register, or Link Server. Select Login and enter username and password.

4. AUDIO & VIDEO SETUP

In the bottom right of the window, there is a gear icon that is for configuring your audio and video settings and devices.

Also in the bottom right of the window is a "Settings" button. Go there for all the other configurables, including your keybinds -- which are in the "Shortcuts" section.

HAVEN NOTEWORTHY POINTS

  • Since this is entirely a private server, any channel you wish to use may be invite only, with the exception of channels you create, in which you are automatically added. Currently, most of the channels on haven.schotty.com are public and you will automatically be added when your account is created or when the channel is created. If there are any issues with access, contact me.

  • You can share a direct link to the chat channel, or use an invite code.

  • There is no password recovery. Save your recovery info. Use a password manager to remember things if need be. LastPass is great at this, as is Firefox, Chrome, and Bitwarden. Use one, or more, as the admin cannot recover your password.

  • Audio & video is done peer-to-peer, and normally should work without issues. If your ISP is using CGNAT, this may be a problem for you. Contact me to setup and enable the built in TURN server, which will resolve this issue. Most folks in the USA are not going to have this issue, mostly EU nations at this point in time. But the future may bring CGNAT to the US.

HAVEN SERVER

This is the Haven server side setup that I use. These notes are sanitized, so do read over what is being copied/pasted and correct things as appropriate.

If you plan on using a custom domain and an ssl cert, add it to your dns/registrar, and make sure to acquire your cert, whether thru your registrar or LetsEncrypt. If you are looking to have a server that does more than just Haven, you will want to use a proxy of some sort. I use Apache, thus the config I have is provided.

1. PODMAN SYSTEMD CONTAINER FILE

Make /etc/containers/systemd/haven.container with the following (edit ports and such accordingly)

[Container]
ContainerName=haven
Image=ghcr.io/ancsemi/haven:latest
PublishPort=3000:3000
Volume=/opt/docker/haven/haven_data:/data
Environment=SERVER_NAME=My Haven Instance
Environment=ADMIN_USERNAME=your_username_of_choice

2. REFRESH SYSTEMD'S KNOWLEDGE OF UNITFILES

sudo systemctl daemon-reload

3. START & ENABLE HAVEN SERVICE

sudo systemctl start haven
sudo systemctl enable haven

4a. SETUP SSL PROXY VIA APACHE (OPTIONAL)

This and the following step is only needed for SSL. Doing this will make Firefox, Edge, Chrome, etc happy with a secure connection and provide better end-end security. One may run Haven without ssl, just pointless to not do so as proper encryption is a few moments away. With the proxy, you can have one cert handle everything. Do note, that if you are using a subdomain, as I do, you will need to have that subdomain added to the cert. LetsEncrypt makes it easy with appending any number of new domains to the existing cert. Or you can just get a brand new one with all the domains there.

This entire config is presuming you are using Haven on the default port of 3000. If you are not using 3000, but rather something else, change it in the proxy config, otherwise you will not be proxying traffic to/from haven.

<VirtualHost *:80>
    ServerName servername.com
    # Optional: if you ever add aliases
    # ServerAlias www.servername.com

    Redirect permanent / https://servername.com/
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName servername.com

    SSLEngine On
    SSLCertificateFile /etc/letsencrypt/live/servername/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/servername/privkey.pem

    ProxyRequests Off
    ProxyPreserveHost On

    SSLProxyEngine On

    ProxyPass        /  https://127.0.0.1:3000/
    ProxyPassReverse /  https://127.0.0.1:3000/

    # Avoid hop-by-hop header issues
    RequestHeader unset Connection
    RequestHeader unset Upgrade
    RequestHeader unset Proxy-Connection

    ProxyTimeout 60

    ErrorLog  /var/log/httpd/haven-error.log
    CustomLog /var/log/httpd/haven-access.log combined
</VirtualHost>
</IfModule>

4b. RESTART HTTPD

If you added a proxy config you will need to restart httpd for it to take effect. If not you can skip this step

sudo systemctl reload httpd

5. CONNECT TO INSTANCE

Install the app from here or visit the server from the WebUI (your domain assigned or IP + port chosen).

6. CONFIGURE SERVER

Create a user matching the admin in the container file, and then setup your server.