Add The Lounge web IRC client

This commit is contained in:
Andrew Stoltz
2026-04-16 19:10:10 -05:00
parent 4f33d7a053
commit 9d0da584af

View File

@@ -1,9 +1,9 @@
# UnrealIRCd + Anope IRC Services # UnrealIRCd + Anope IRC Services + The Lounge web client
# ArgoCD managed - BlueJay Lab # ArgoCD managed - BlueJay Lab
# Credentials: 1Password → OnePasswordItem → K8s Secret → initContainer sed injection # Credentials: 1Password → OnePasswordItem → K8s Secret → initContainer sed injection
--- ---
apiVersion: v1 apiVersion: v1
kind: Namespace kind: Namespace
metadata: metadata:
name: irc name: irc
labels: labels:
@@ -24,19 +24,71 @@ kind: Certificate
metadata: metadata:
name: irc-tls name: irc-tls
namespace: irc namespace: irc
spec: spec:
secretName: irc-tls secretName: irc-tls
issuerRef: issuerRef:
name: step-ca-acme name: step-ca-acme
kind: ClusterIssuer kind: ClusterIssuer
dnsNames: dnsNames:
- irc.iamworkin.lan - irc.iamworkin.lan
--- ---
# UnrealIRCd configuration template (passwords replaced by placeholders) # TLS Certificate for The Lounge web IRC
apiVersion: v1 apiVersion: cert-manager.io/v1
kind: ConfigMap kind: Certificate
metadata: metadata:
name: unrealircd-config-template name: webirc-tls
namespace: irc
spec:
secretName: webirc-tls
issuerRef:
name: step-ca-acme
kind: ClusterIssuer
dnsNames:
- webirc.iamworkin.lan
---
# The Lounge configuration
apiVersion: v1
kind: ConfigMap
metadata:
name: thelounge-config
namespace: irc
data:
config.js: |
"use strict";
module.exports = {
public: true,
host: "0.0.0.0",
port: 9000,
reverseProxy: true,
maxHistory: 2500,
theme: "default",
prefetch: false,
disableMediaPreview: true,
fileUpload: {
enable: false
},
defaults: {
name: "BlueJayIRC",
host: "unrealircd.irc.svc.cluster.local",
port: 6667,
password: "",
tls: false,
rejectUnauthorized: true,
nick: "BlueJayWeb%%",
username: "bluejayweb",
realname: "BlueJay Web IRC",
join: "#general"
},
lockNetwork: true,
leaveMessage: "BlueJay Web IRC"
};
---
# UnrealIRCd configuration template (passwords replaced by placeholders)
apiVersion: v1
kind: ConfigMap
metadata:
name: unrealircd-config-template
namespace: irc namespace: irc
data: data:
unrealircd.conf: | unrealircd.conf: |
@@ -537,11 +589,11 @@ spec:
--- ---
# Anope IRC Services Deployment # Anope IRC Services Deployment
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
name: anope name: anope
namespace: irc namespace: irc
labels: labels:
app: anope app: anope
spec: spec:
replicas: 1 replicas: 1
@@ -601,24 +653,76 @@ spec:
limits: limits:
memory: 128Mi memory: 128Mi
cpu: 100m cpu: 100m
volumes: volumes:
- name: irc-credentials - name: irc-credentials
secret: secret:
secretName: irc-credentials secretName: irc-credentials
- name: anope-config-template - name: anope-config-template
configMap: configMap:
name: anope-config-template name: anope-config-template
- name: injected-config - name: injected-config
emptyDir: {} emptyDir: {}
- name: anope-data - name: anope-data
persistentVolumeClaim: persistentVolumeClaim:
claimName: anope-data claimName: anope-data
--- ---
# UnrealIRCd Service # The Lounge web IRC Deployment
apiVersion: v1 apiVersion: apps/v1
kind: Service kind: Deployment
metadata: metadata:
name: unrealircd name: thelounge
namespace: irc
labels:
app: thelounge
spec:
replicas: 1
selector:
matchLabels:
app: thelounge
template:
metadata:
labels:
app: thelounge
spec:
containers:
- name: thelounge
image: ghcr.io/thelounge/thelounge:4.4.3
ports:
- containerPort: 9000
name: http
readinessProbe:
httpGet:
path: /
port: http
initialDelaySeconds: 10
periodSeconds: 10
livenessProbe:
httpGet:
path: /
port: http
initialDelaySeconds: 30
periodSeconds: 20
resources:
requests:
memory: 64Mi
cpu: 50m
limits:
memory: 256Mi
cpu: 250m
volumeMounts:
- name: thelounge-config
mountPath: /var/opt/thelounge/config.js
subPath: config.js
volumes:
- name: thelounge-config
configMap:
name: thelounge-config
---
# UnrealIRCd Service
apiVersion: v1
kind: Service
metadata:
name: unrealircd
namespace: irc namespace: irc
spec: spec:
selector: selector:
@@ -643,16 +747,30 @@ metadata:
spec: spec:
selector: selector:
app: anope app: anope
ports: ports:
- port: 8067 - port: 8067
targetPort: 8067 targetPort: 8067
name: services-link name: services-link
--- ---
# Traefik IngressRouteTCP - IRC plain (6667) # The Lounge web IRC Service
apiVersion: traefik.io/v1alpha1 apiVersion: v1
kind: IngressRouteTCP kind: Service
metadata: metadata:
name: irc-plain name: thelounge
namespace: irc
spec:
selector:
app: thelounge
ports:
- port: 9000
targetPort: 9000
name: http
---
# Traefik IngressRouteTCP - IRC plain (6667)
apiVersion: traefik.io/v1alpha1
kind: IngressRouteTCP
metadata:
name: irc-plain
namespace: irc namespace: irc
spec: spec:
entryPoints: entryPoints:
@@ -672,10 +790,28 @@ metadata:
spec: spec:
entryPoints: entryPoints:
- irctls - irctls
routes: routes:
- match: HostSNI(`*`) - match: HostSNI(`*`)
services: services:
- name: unrealircd - name: unrealircd
port: 6697 port: 6697
tls: tls:
passthrough: true passthrough: true
---
# Traefik IngressRoute - The Lounge web IRC
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: webirc
namespace: irc
spec:
entryPoints:
- websecure
routes:
- match: Host(`webirc.iamworkin.lan`)
kind: Rule
services:
- name: thelounge
port: 9000
tls:
secretName: webirc-tls