Skip to content

The Lounge - self-hosted web IRC client

The Lounge is a self-hosted web IRC client.

Follow this guide to integrate it in your Docker Swarm mode cluster deployed as described in DockerSwarm.rocks with a global Traefik HTTPS proxy.

Preparation

  • Connect via SSH to a Docker Swarm manager node.

  • Create an environment variable with the domain where you want to access your instance, e.g.:

export DOMAIN=thelounge.example.com
  • Make sure that your DNS records point that domain (e.g. thelounge.example.com) to one of the IPs of the Docker Swarm mode cluster.

  • Get the Swarm node ID of this node (or any other node) and store it in an environment variable:

export NODE_ID=$(docker info -f '{{.Swarm.NodeID}}')
  • Create a tag in this node, so that the data used by The Lounge is always deployed to the same node and uses the existing volume:
docker node update --label-add thelounge.thelounge-data=true $NODE_ID

Create the Docker Compose file

  • Download the file thelounge.yml:
curl -L dockerswarm.rocks/thelounge.yml -o thelounge.yml
  • ...or create it manually, for example, using nano:
nano thelounge.yml
  • And copy the contents inside:
version: '3.3'

services:
  app:
    image: thelounge/thelounge:latest
    volumes:
      - thelounge-data:/var/opt/thelounge
    networks:
      - traefik-public
    deploy:
      placement:
        constraints:
          - node.labels.thelounge.thelounge-data == true
      labels:
        - traefik.enable=true
        - traefik.docker.network=traefik-public
        - traefik.constraint-label=traefik-public
        - traefik.http.routers.thelounge-http.rule=Host(`${DOMAIN?Variable not set}`)
        - traefik.http.routers.thelounge-http.entrypoints=http
        - traefik.http.routers.thelounge-http.middlewares=https-redirect
        - traefik.http.routers.thelounge-https.rule=Host(`${DOMAIN?Variable not set}`)
        - traefik.http.routers.thelounge-https.entrypoints=https
        - traefik.http.routers.thelounge-https.tls=true
        - traefik.http.routers.thelounge-https.tls.certresolver=le
        - traefik.http.services.thelounge.loadbalancer.server.port=9000

networks:
  traefik-public:
    external: true

volumes:
  thelounge-data:

Info

This is just a standard Docker Compose file.

It's common to name the file docker-compose.yml or something like docker-compose.thelounge.yml.

Here it's named just thelounge.yml for brevity.

Deploy it

Deploy the stack with:

docker stack deploy -c thelounge.yml thelounge

It will use the environment variables you created above.

Check it

  • Check if the stack was deployed with:
docker stack ps thelounge

It will output something like:

ID             NAME               IMAGE                         NODE               DESIRED STATE    CURRENT STATE          ERROR   PORT
kxdsp9f1nuil   thelounge_app.1    thelounge/thelounge:latest    dog.example.com    Running          Running 7 seconds ago
  • You can check the logs with:
docker service logs thelounge_app

...you might see a message like:

thelounge_app.1.kxdsp9f1nuil@dog.example.com    | 2019-05-12 09:58:42 [INFO] Configuration file created at /var/opt/thelounge/config.js.
thelounge_app.1.kxdsp9f1nuil@dog.example.com    | 2019-05-12 09:58:43 [INFO] The Lounge v3.0.1 (Node.js 10.15.1 on linux x64)
thelounge_app.1.kxdsp9f1nuil@dog.example.com    | 2019-05-12 09:58:43 [INFO] Configuration file: /var/opt/thelounge/config.js
thelounge_app.1.kxdsp9f1nuil@dog.example.com    | 2019-05-12 09:58:43 [INFO] Available at http://:::9000/ in private mode
thelounge_app.1.kxdsp9f1nuil@dog.example.com    | 2019-05-12 09:58:43 [INFO] New VAPID key pair has been generated for use with push subscription.
thelounge_app.1.kxdsp9f1nuil@dog.example.com    | 2019-05-12 09:58:43 [INFO] There are currently no users. Create one with thelounge add <name>.

Create a user

  • Now, to create a user, enter into a bash session inside the running container, type:
docker exec -it thelounge_app

and hit Tab to get autocompletion, then type bash. It would look something like:

docker exec -it thelounge_app.1.kxdsp9f1nuilj0vclhhfuc4ho bash

Then hit Enter, you will be in a bash session inside the running container.

You will see a prompt like:

root@61d7cc2c6e44:/#
  • Now create the user, if the user is named admin, it would be something like:
thelounge add admin
  • You will see a prompt for a password. Enter your password and hit Enter.
  • It will ask you if you want to save, hit Enter again and the user will be created.

Login and configure

Now you can open the URL in your browser, e.g.: https://thelounge.example.com.

Use the user and password you just created and finish configuring it in the web browser.