From 3bf5e3ccfb999c5d3690e56cd935afed065b0fd6 Mon Sep 17 00:00:00 2001
From: Murat Aslan <78961478+murataslan1@users.noreply.github.com>
Date: Mon, 8 Dec 2025 15:53:33 +0300
Subject: [PATCH 1/5] feat: add Soju IRC bouncer service template
---
templates/compose/soju.yaml | 49 +++++++++++++++++++++++++++++++++++++
1 file changed, 49 insertions(+)
create mode 100644 templates/compose/soju.yaml
diff --git a/templates/compose/soju.yaml b/templates/compose/soju.yaml
new file mode 100644
index 000000000..a1da14a86
--- /dev/null
+++ b/templates/compose/soju.yaml
@@ -0,0 +1,49 @@
+# documentation: https://soju.im/
+# slogan: A user-friendly IRC bouncer with a modern web interface
+# category: communication
+# tags: irc, bouncer, chat, messaging, relay
+# logo: svgs/soju.svg
+# port: 80
+
+services:
+ soju:
+ image: codeberg.org/emersion/soju:latest
+ volumes:
+ - soju-db:/db
+ - soju-uploads:/uploads
+ - type: bind
+ source: ./soju/config
+ target: /soju-config
+ content: |
+ db sqlite3 /db/main.db
+ message-store db
+ file-upload fs /uploads/
+ listen irc+insecure://
+ listen http+insecure://
+ listen unix+admin://
+ networks:
+ default:
+ aliases:
+ - gamja-backend
+ healthcheck:
+ test: ["CMD-SHELL", "nc -z localhost 6667 || exit 1"]
+ interval: 30s
+ timeout: 10s
+ retries: 5
+
+ gamja:
+ image: codeberg.org/emersion/gamja:latest
+ environment:
+ - SERVICE_FQDN_GAMJA_80
+ depends_on:
+ soju:
+ condition: service_healthy
+ healthcheck:
+ test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:80 || exit 1"]
+ interval: 30s
+ timeout: 10s
+ retries: 5
+
+volumes:
+ soju-db:
+ soju-uploads:
From a28890b258ddb75c6e9dc18efbafc8ccb700dc67 Mon Sep 17 00:00:00 2001
From: Murat Aslan <78961478+murataslan1@users.noreply.github.com>
Date: Mon, 8 Dec 2025 15:53:45 +0300
Subject: [PATCH 2/5] feat: add Soju IRC bouncer logo
---
svgs/soju.svg | 6 ++++++
1 file changed, 6 insertions(+)
create mode 100644 svgs/soju.svg
diff --git a/svgs/soju.svg b/svgs/soju.svg
new file mode 100644
index 000000000..f05aeebee
--- /dev/null
+++ b/svgs/soju.svg
@@ -0,0 +1,6 @@
+
From d6c5265556c22657b5e2203a7cf765c3cc56c0c4 Mon Sep 17 00:00:00 2001
From: Murat Aslan
Date: Tue, 9 Dec 2025 00:16:20 +0300
Subject: [PATCH 3/5] fix: update soju config path and add WebSocket support
- Fix config path to /etc/soju/config
- Use explicit host:port bindings
- Switch to WebSocket listener for Gamja compatibility
- Add GAMJA_SERVER environment variable
---
templates/compose/soju.yaml | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/templates/compose/soju.yaml b/templates/compose/soju.yaml
index a1da14a86..ff9ae5228 100644
--- a/templates/compose/soju.yaml
+++ b/templates/compose/soju.yaml
@@ -13,14 +13,14 @@ services:
- soju-uploads:/uploads
- type: bind
source: ./soju/config
- target: /soju-config
+ target: /etc/soju/config
content: |
db sqlite3 /db/main.db
message-store db
file-upload fs /uploads/
- listen irc+insecure://
- listen http+insecure://
- listen unix+admin://
+ listen irc+insecure://0.0.0.0:6667
+ listen ws+insecure://0.0.0.0:80
+ listen unix+admin:///run/soju/admin
networks:
default:
aliases:
@@ -35,6 +35,7 @@ services:
image: codeberg.org/emersion/gamja:latest
environment:
- SERVICE_FQDN_GAMJA_80
+ - GAMJA_SERVER=ws://soju:80
depends_on:
soju:
condition: service_healthy
From 139db09fe0bdcbb372b668c6b8631b8011edb034 Mon Sep 17 00:00:00 2001
From: Murat Aslan
Date: Tue, 9 Dec 2025 00:28:33 +0300
Subject: [PATCH 4/5] fix: correct soju config path and simplify template
- Fix config path to /soju-config (not /etc/soju/config)
- Remove unix+admin listener (causes bind error)
- Remove health checks (nc/wget not available in containers)
- Simplify depends_on configuration
Tested locally with docker compose - both services start successfully
---
templates/compose/soju.yaml | 17 ++---------------
1 file changed, 2 insertions(+), 15 deletions(-)
diff --git a/templates/compose/soju.yaml b/templates/compose/soju.yaml
index ff9ae5228..ec746b3b7 100644
--- a/templates/compose/soju.yaml
+++ b/templates/compose/soju.yaml
@@ -13,37 +13,24 @@ services:
- soju-uploads:/uploads
- type: bind
source: ./soju/config
- target: /etc/soju/config
+ target: /soju-config
content: |
db sqlite3 /db/main.db
message-store db
file-upload fs /uploads/
listen irc+insecure://0.0.0.0:6667
listen ws+insecure://0.0.0.0:80
- listen unix+admin:///run/soju/admin
networks:
default:
aliases:
- gamja-backend
- healthcheck:
- test: ["CMD-SHELL", "nc -z localhost 6667 || exit 1"]
- interval: 30s
- timeout: 10s
- retries: 5
gamja:
image: codeberg.org/emersion/gamja:latest
environment:
- SERVICE_FQDN_GAMJA_80
- - GAMJA_SERVER=ws://soju:80
depends_on:
- soju:
- condition: service_healthy
- healthcheck:
- test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:80 || exit 1"]
- interval: 30s
- timeout: 10s
- retries: 5
+ - soju
volumes:
soju-db:
From d2e2ca892ce2e78db2ff4b273a456698237641ad Mon Sep 17 00:00:00 2001
From: Murat Aslan
Date: Tue, 9 Dec 2025 00:35:53 +0300
Subject: [PATCH 5/5] fix: add soju-run volume for admin socket
- Add soju-run volume for /run/soju directory
- Re-add unix+admin listener for sojuctl user management
- Tested: user creation works with sojuctl
---
templates/compose/soju.yaml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/templates/compose/soju.yaml b/templates/compose/soju.yaml
index ec746b3b7..808c61311 100644
--- a/templates/compose/soju.yaml
+++ b/templates/compose/soju.yaml
@@ -11,6 +11,7 @@ services:
volumes:
- soju-db:/db
- soju-uploads:/uploads
+ - soju-run:/run/soju
- type: bind
source: ./soju/config
target: /soju-config
@@ -20,6 +21,7 @@ services:
file-upload fs /uploads/
listen irc+insecure://0.0.0.0:6667
listen ws+insecure://0.0.0.0:80
+ listen unix+admin:///run/soju/admin
networks:
default:
aliases:
@@ -35,3 +37,4 @@ services:
volumes:
soju-db:
soju-uploads:
+ soju-run: