diff options
-rw-r--r-- | content/blog/2024-12-27-tbd.org | 164 | ||||
-rw-r--r-- | theme/templates/index.html | 13 |
2 files changed, 171 insertions, 6 deletions
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 @@ -9,6 +9,13 @@ uid [ultimate] Christian Cleberg <hello@cleberg.net></pre> <h2>Recent Blog Posts</h2> <div class="post"> + <time datetime="2024-12-29 17:45:00">2024-12-29</time> + <a href="/blog/self-hosting-the-lounge.html" + >Self-Hosting The Lounge: An IRC Web Client</a + > + </div> + + <div class="post"> <time datetime="2024-10-31 11:01:05">2024-10-31</time> <a href="/blog/continue-ollama-code-assistant.html" >Using Ollama As a Code Assistant in VS Codium</a @@ -20,12 +27,6 @@ uid [ultimate] Christian Cleberg <hello@cleberg.net></pre> >Self-Hosting Transmission Bittorrent Client</a > </div> - <div class="post"> - <time datetime="2024-09-20 13:38:52">2024-09-20</time> - <a href="/blog/prometheus-grafana-cloud.html" - >Linux Observability with Self-Hosted Prometheus and Grafana Cloud</a - > - </div> <br /> <a href="/blog/">All Posts →</a> |