Skip to content

Commit 8cd57bb

Browse files
DanbDanb
authored andcommitted
Initial setup: Dockerfile, GitHub Actions, and config
0 parents  commit 8cd57bb

File tree

4 files changed

+182
-0
lines changed

4 files changed

+182
-0
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
name: Build and Push Docker Image
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
paths:
8+
- 'Dockerfile'
9+
- 'config.js'
10+
- '.github/workflows/build-and-push.yaml'
11+
pull_request:
12+
branches:
13+
- main
14+
workflow_dispatch:
15+
16+
env:
17+
REGISTRY: ghcr.io
18+
IMAGE_NAME: ${{ github.repository }}
19+
20+
jobs:
21+
build-and-push:
22+
runs-on: ubuntu-latest
23+
permissions:
24+
contents: read
25+
packages: write
26+
27+
steps:
28+
- name: Checkout repository
29+
uses: actions/checkout@v4
30+
31+
- name: Set up Docker Buildx
32+
uses: docker/setup-buildx-action@v3
33+
34+
- name: Log in to Container Registry
35+
if: github.event_name != 'pull_request'
36+
uses: docker/login-action@v3
37+
with:
38+
registry: ${{ env.REGISTRY }}
39+
username: ${{ github.actor }}
40+
password: ${{ secrets.GITHUB_TOKEN }}
41+
42+
- name: Extract metadata for Docker
43+
id: meta
44+
uses: docker/metadata-action@v5
45+
with:
46+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
47+
tags: |
48+
type=ref,event=branch
49+
type=ref,event=pr
50+
type=sha,prefix=
51+
type=raw,value=latest,enable={{is_default_branch}}
52+
53+
- name: Build and push Docker image
54+
uses: docker/build-push-action@v5
55+
with:
56+
context: .
57+
push: ${{ github.event_name != 'pull_request' }}
58+
tags: ${{ steps.meta.outputs.tags }}
59+
labels: ${{ steps.meta.outputs.labels }}
60+
cache-from: type=gha
61+
cache-to: type=gha,mode=max
62+

Dockerfile

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
FROM thelounge/thelounge:4.4.3
2+
3+
# The Lounge stores config in /var/opt/thelounge
4+
# We'll use a volume for persistence
5+
6+
# Copy custom config if needed
7+
COPY config.js /var/opt/thelounge/config.js
8+
9+
# Expose The Lounge web interface
10+
EXPOSE 9000
11+
12+
# Health check
13+
HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=3 \
14+
CMD wget --no-verbose --tries=1 --spider http://localhost:9000/ || exit 1
15+

README.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# IRC - The Lounge
2+
3+
Self-hosted IRC client using [The Lounge](https://thelounge.chat/).
4+
5+
## Features
6+
7+
- Modern web-based IRC client
8+
- Always connected (no need for a separate bouncer)
9+
- Push notifications
10+
- Link previews
11+
- File uploads
12+
- Multi-user support
13+
14+
## Configuration
15+
16+
Pre-configured networks:
17+
- **Libera.Chat** (formerly Freenode) - `irc.libera.chat:6697` (TLS)
18+
- **Undernet** - `us.undernet.org:6667`
19+
20+
## Docker
21+
22+
```bash
23+
# Build locally
24+
docker build -t ghcr.io/bryanlabs/irc:latest .
25+
26+
# Run locally
27+
docker run -d \
28+
--name irc \
29+
-p 9000:9000 \
30+
-v irc-data:/var/opt/thelounge \
31+
ghcr.io/bryanlabs/irc:latest
32+
```
33+
34+
## User Management
35+
36+
The Lounge runs in private mode. Create users via:
37+
38+
```bash
39+
docker exec -it irc thelounge add <username>
40+
```
41+
42+
## Slack Notifications
43+
44+
To receive Slack notifications when someone mentions your nick, configure the push notification settings in The Lounge's web UI, or use a ZNC-style push module if needed.
45+

config.js

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
"use strict";
2+
3+
module.exports = {
4+
// Public mode allows anyone to connect without authentication
5+
// Set to false for private mode (users must be created via thelounge add)
6+
public: false,
7+
8+
// The IP address or hostname to bind to
9+
host: "0.0.0.0",
10+
11+
// The port to listen on
12+
port: 9000,
13+
14+
// Set to true to enable HTTPS
15+
https: {
16+
enable: false,
17+
},
18+
19+
// Reverse proxy settings
20+
reverseProxy: true,
21+
22+
// Maximum number of history lines per channel
23+
maxHistory: 10000,
24+
25+
// Default theme
26+
theme: "morning",
27+
28+
// Prefetch URLs for link previews
29+
prefetch: true,
30+
prefetchStorage: true,
31+
prefetchMaxImageSize: 2048,
32+
33+
// File uploads
34+
fileUpload: {
35+
enable: true,
36+
maxFileSize: 10240, // KB
37+
baseUrl: null,
38+
},
39+
40+
// LDAP authentication (disabled)
41+
ldap: {
42+
enable: false,
43+
},
44+
45+
// Default settings for new users
46+
defaults: {
47+
name: "Freenode",
48+
host: "irc.libera.chat", // Freenode moved to Libera.Chat
49+
port: 6697,
50+
password: "",
51+
tls: true,
52+
rejectUnauthorized: true,
53+
nick: "socket",
54+
username: "socket",
55+
realname: "The Lounge User",
56+
join: "#test",
57+
leaveMessage: "The Lounge - https://thelounge.chat",
58+
},
59+
};
60+

0 commit comments

Comments
 (0)