From 37e80dfed79cd2093a98460a95ea561104fdefc9 Mon Sep 17 00:00:00 2001 From: Christian Cleberg Date: Sun, 29 Dec 2024 18:51:02 -0600 Subject: publish The Lounge post --- content/blog/2024-12-27-tbd.org | 164 ++++++++++++++++++++++++++++++++++++++++ theme/templates/index.html | 13 ++-- 2 files changed, 171 insertions(+), 6 deletions(-) create mode 100644 content/blog/2024-12-27-tbd.org diff --git a/content/blog/2024-12-27-tbd.org b/content/blog/2024-12-27-tbd.org new file mode 100644 index 0000000..b3dd943 --- /dev/null +++ b/content/blog/2024-12-27-tbd.org @@ -0,0 +1,164 @@ +#+date: <2024-12-29 Sun 17:45:00> +#+title: Self-Hosting The Lounge: An IRC Web Client +#+description: Learn how to deploy The Lounge, an IRC web client, via Docker Compose on Linux. +#+filetags: :self-hosting: +#+slug: self-hosting-the-lounge + +* The Lounge + +[[https://thelounge.chat/][The Lounge]] is a self-hosted IRC client for the web, which supports a lot of +desirable features for a modern IRC client. The Lounge supports push +notifications, link previews, file uploads, always connected, multi-user +support, and is available as a PWA for mobile devices. + +I wanted to write this as I had written a post about [[https://cleberg.net/blog/self-hosting-convos.html][self-hosting Convos]] and +have recently migrated over to The Lounge instead. + +If you'd like to try a demo first, head over to [[https://demo.thelounge.chat/][the official demo website]]. + +** Installation (Docker) + +I install everything I can via Docker, so this tutorial will install The Lounge +with the Docker Compose platform. + +You can find the official docker version of The Lounge's repository on GitHub at +[[https://github.com/thelounge/thelounge-docker][thelounge-docker]]. + +To start, let's create a directory for this app and create the =compose.yml= file. + +#+begin_src shell +mkdir thelounge +cd thelounge +nano compose.yml +#+end_src + +Within this configuration file, you can paste the content below and customize as +needed. If you want to use a different port on your machine, change the first +port on the =9000:9000= line. Additionally, you may move the volume to a +different location if required. + +#+begin_src yaml +services: + thelounge: + image: ghcr.io/thelounge/thelounge:latest + container_name: thelounge + ports: + - "9000:9000" + restart: always + volumes: + - ./.thelounge:/var/opt/thelounge +#+end_src + +Save and close the file and you can now launch the service. + +#+begin_src shell +sudo docker compose up -d +#+end_src + +The service is now available at =localhost:9000= or =machine_ip:9000= if you're +browsing from a different device. Don't forget to allow the port through your +machine's firewall, if you have one enabled. + +#+caption: Login +[[https://img.cleberg.net/blog/20241229-thelounge/login.png]] + +** Nginx Reverse Proxy + +If you want to access the service via a domain name (=thelounge.example.com=), +you can use Nginx as a reverse proxy. + +First, create the Nginx configuration file. + +#+begin_src shell +sudo nano /etc/nginx/conf.d/ +#+end_src + +The configuration below assumes you have a wildcard certificate for HTTPS (:443) +traffic via =example.com=. If you don't, you'll need to obtain an SSL +certificate to use HTTPS. + +#+begin_src configuration +upstream irc_upstream { server 127.0.0.1:9000; } + +# HTTP redirect +server { + listen 80; + listen [::]:80; + server_name thelounge.example.com; + include custom.d/letsencrypt.conf; + + if ($host ~ ^[^.]+\.example\.com) { + return 301 https://$host$request_uri; + } +} + +# HTTPS +server { + listen 443 ssl; + listen [::]:443 ssl; + http2 on; + server_name thelounge.example.com; + + # SSL + ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; + ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; + + # reverse proxy + location / { + proxy_pass http://irc_upstream; + client_max_body_size 0; + proxy_set_header X-Request-Base "$scheme://$host/"; + + # Standard reverse proxy settings + proxy_set_header Host $host; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection upgrade; + proxy_set_header Accept-Encoding gzip; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Host $http_host; + proxy_set_header X-Forwarded-Uri $request_uri; + proxy_set_header X-Forwarded-Ssl on; + proxy_redirect http:// $scheme://; + proxy_http_version 1.1; + proxy_set_header Connection ""; + proxy_cache_bypass $cookie_session; + proxy_no_cache $cookie_session; + proxy_buffers 64 256k; + } +} +#+end_src + +Finally, restart Nginx to see the effects. + +#+begin_src shell +sudo systemctl restart nginx.service +#+end_src + +** Initial Setup + +The first thing you'll need to do is create a user. You can do this with the +docker container with the following command, which will ask for a password. + +#+begin_src shell +sudo docker exec --user node -it thelounge thelounge add [username] +#+end_src + +Once the user has been created, you'll be able to log in to the web interface. +Once created, you can change your password in the settings panel of the web +interface. + +Finally, you can connect to an IRC server with the plus (=+=) button at the +bottom of the sidebar and connect to individual channels or users via the plus +(=+=) button next to your server's name in the sidebar. + +#+caption: New Server Connection +[[https://img.cleberg.net/blog/20241229-thelounge/new_connection.png]] + +#+caption: Existing Server Connection +[[https://img.cleberg.net/blog/20241229-thelounge/existing_connection.png]] + +#+caption: Channel View +[[https://img.cleberg.net/blog/20241229-thelounge/channel.png]] diff --git a/theme/templates/index.html b/theme/templates/index.html index e707d3b..e1909dd 100644 --- a/theme/templates/index.html +++ b/theme/templates/index.html @@ -8,6 +8,13 @@ uid [ultimate] Christian Cleberg <hello@cleberg.net>

Recent Blog Posts

+
+ + Self-Hosting The Lounge: An IRC Web Client +
+
>Self-Hosting Transmission Bittorrent Client
-
- - Linux Observability with Self-Hosted Prometheus and Grafana Cloud -

All Posts → -- cgit v1.2.3-70-g09d2