aboutsummaryrefslogtreecommitdiff
path: root/content/blog/2023-06-23-self-hosting-convos.org
diff options
context:
space:
mode:
authorChristian Cleberg <hello@cleberg.net>2024-03-29 01:30:23 -0500
committerChristian Cleberg <hello@cleberg.net>2024-03-29 01:30:23 -0500
commit41bd0ad58e44244fe67cb36e066d4bb68738516f (patch)
tree205e844650144648e58700df2b632c89298904d4 /content/blog/2023-06-23-self-hosting-convos.org
parent797a1404213173791a5f4126a77ad383ceb00064 (diff)
downloadcleberg.net-41bd0ad58e44244fe67cb36e066d4bb68738516f.tar.gz
cleberg.net-41bd0ad58e44244fe67cb36e066d4bb68738516f.tar.bz2
cleberg.net-41bd0ad58e44244fe67cb36e066d4bb68738516f.zip
massive re-write from org-publish to weblorg
Diffstat (limited to 'content/blog/2023-06-23-self-hosting-convos.org')
-rw-r--r--content/blog/2023-06-23-self-hosting-convos.org160
1 files changed, 160 insertions, 0 deletions
diff --git a/content/blog/2023-06-23-self-hosting-convos.org b/content/blog/2023-06-23-self-hosting-convos.org
new file mode 100644
index 0000000..3ed72d1
--- /dev/null
+++ b/content/blog/2023-06-23-self-hosting-convos.org
@@ -0,0 +1,160 @@
+#+title: Self-Hosting Convos IRC Web Client
+#+date: 2023-06-23
+#+description: A guide to self-hosting the Convos application on your own server.
+#+filetags: :selfhosting:
+
+* Convos
+[[https://convos.chat/][Convos]] is an always-online web client for IRC.
+It has a few features that made it attractive to me as a self-hosted
+option:
+
+- Extremely simple Docker Compose installation method.
+- Runs in the background and monitors chats even while you're not logged
+ in.
+- Neatly organized sidebar for conversation and client settings.
+- Ability to connect to different hosts and create profiles for hosts.
+- By default, registration is closed to the public. You can enable
+ public registration on the Settings page or generate invitation links
+ on the Users page.
+- Customization of the client theme, organization name and URL, admin
+ email, and video service.
+
+* Docker Installation
+To install Convos, simply create a directory and a =docker-compose.yml=
+file:
+
+#+begin_src sh
+mkdir ~/convos && cd ~/convos
+nano docker-compose.yml
+#+end_src
+
+With the =docker-compose.yml= file open, paste the configuration below
+into the file. You can customize the host port to be something unique,
+such as =21897:3000=. You can also change the =data= folder to be a
+docker volume instead, if you prefer.
+
+#+begin_src config
+version: '3'
+
+services:
+ convos:
+ image: 'convos/convos:stable'
+ ports:
+ - '3000:3000'
+ volumes:
+ - './data:/data'
+ environment:
+ - CONVOS_REVERSE_PROXY=1
+ restart: always
+#+end_src
+
+Save the =docker-compose.yml= file and bring the container up:
+
+#+begin_src sh
+sudo docker-compose up -d
+#+end_src
+
+At this point, Convos is available at =<server_ip>:3000= but not
+available to the public.
+
+* Nginx Reverse Proxy
+If you're using Nginx, you can create a configuration file for the
+convos application. Start by opening the file:
+
+#+begin_src sh
+nano /etc/nginx/sites-available/convos
+#+end_src
+
+Within the nginx configuration file, paste the following content and be
+sure to update =convos.example.com= to match your domain and
+=127.0.0.1:3000= to match the port you opened in the
+=docker-compose.yml= file.
+
+#+begin_src config
+# Host and port where convos is running
+upstream convos_upstream { server 127.0.0.1:3000; }
+
+server {
+ if ($host ~ ^[^.]+\.example\.com$) {
+ return 301 https://$host$request_uri;
+ }
+
+ listen [::]:80;
+ listen 80;
+ server_name convos.example.com;
+ return 404;
+}
+
+server {
+ listen [::]:443 ssl http2;
+ listen 443 ssl http2;
+ server_name convos.example.com;
+ access_log /var/log/nginx/convos.access.log;
+ error_log /var/log/nginx/convos.error.log;
+
+ location / {
+ proxy_pass http://convos_upstream;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
+ client_max_body_size 0;
+ proxy_set_header Host $host;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Request-Base "$scheme://$host/";
+ }
+
+ ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
+ ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
+ include /etc/letsencrypt/options-ssl-nginx.conf;
+ ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
+}
+#+end_src
+
+Once the file is saved, link it to the =sites-enabled= directory and
+restart Nginx.
+
+#+begin_src sh
+sudo ln -s /etc/nginx/sites-available/convos /etc/nginx/sites-enabled/convos
+sudo systemctl restart nginx.service
+#+end_src
+
+* Screenshots
+See the screenshots below for an example of the Convos homepage and an
+excerpt of the chat screen.
+
+There are numerous themes to choose from; the theme shown in the images
+below is Dracula.
+
+#+caption: Convos Home
+[[https://img.cleberg.net/blog/20230623-convos/convos_home.png]]
+
+#+caption: Convos Chat
+[[https://img.cleberg.net/blog/20230623-convos/convos_chat.png]]
+
+* Registering a Nickname
+Hop into the server channel so that you can message NickServ. In the
+case of Convos, the default sever is libera.chat. Simply click the
+=libera= conversation at the top of the sidebar to open it. Once the
+chat is open, you can claim a nickname by typing:
+
+#+begin_src txt
+/nick <nick>
+#+end_src
+
+If the nickname is available, and you'd like to register the nickname to
+yourself, you'll need to type another command:
+
+#+begin_src txt
+/msg NickServ REGISTER
+<password> <email>
+#+end_src
+
+On libera.chat, the server will send a confirmation email with a command
+that you must message in IRC to verify registration of the nickname:
+
+#+begin_src txt
+/msg NickServ VERIFY REGISTER <nick> <verification_code>
+#+end_src
+
+Once entered, the server should confirm registration of the nickname to
+the supplied email with the password specified.