Skip to content

Instantly share code, notes, and snippets.

@curiousercreative
Created January 9, 2026 21:28
Show Gist options
  • Select an option

  • Save curiousercreative/ec246ca5b22eef975618fc17ab2af221 to your computer and use it in GitHub Desktop.

Select an option

Save curiousercreative/ec246ca5b22eef975618fc17ab2af221 to your computer and use it in GitHub Desktop.
Snikket + Slidge stack configuration files
version: "3.3"
networks:
www:
name: www
external: true
services:
snikket_proxy:
container_name: snikket-proxy
image: snikket/snikket-web-proxy:dev
env_file: ./conf/snikket.conf
network_mode: host
volumes:
- ./data:/snikket
- /srv/snikket/entrypoint.sh:/entrypoint.sh
- /srv/snikket/etc/nginx/templates/proxy:/etc/nginx/templates/proxy
restart: "unless-stopped"
snikket_portal:
container_name: snikket-portal
image: snikket/snikket-web-portal:dev
network_mode: host
env_file: ./conf/snikket.conf
restart: "unless-stopped"
snikket_server:
container_name: snikket
image: snikket/snikket-server:dev
network_mode: host
volumes:
- ./data:/snikket
- /srv/snikket/etc/prosody/certs/domain.tld.key:/etc/prosody/certs/domain.tld.key
- /srv/snikket/etc/prosody/certs/domain.tld.crt:/etc/prosody/certs/domain.tld.crt
- /srv/snikket/etc/sv/prosody/wait-for-certs:/etc/sv/prosody/wait-for-certs:ro
env_file: ./conf/snikket.conf
restart: "unless-stopped"
conversejs:
image: sebp/lighttpd
container_name: conversejs
volumes:
- ./conversejs:/var/www/localhost/htdocs
networks:
- www
restart: unless-stopped
tty: true
matteridge:
#image: codeberg.org/slidge/matteridge:token-expiry-investigation
image: codeberg.org/slidge/matteridge:main
command:
- "--admins=me@domain.tld"
- "--jid=mattermost.domain.tld"
- "--secret=redacted"
- "--user-jid-validator=.*@domain.tld"
volumes:
- ./slidge_data:/var/lib/slidge
network_mode: host
depends_on:
snikket_server:
condition: service_started
restart: "unless-stopped"
slidge-whatsapp:
image: codeberg.org/slidge/slidge-whatsapp:main-amd64
command:
- "--admins=me@domain.tld"
- "--jid=whatsapp.domain.tld"
- "--secret=redacted"
#- "--upload-requester=me@domain.tld"
- "--user-jid-validator=.*@domain.tld"
volumes:
- ./slidge_data:/var/lib/slidge
network_mode: host
depends_on:
snikket_server:
condition: service_started
restart: "unless-stopped"
matridge:
image: codeberg.org/slidge/matridge
command:
- "--admins=me@domain.tld"
- "--jid=matrix.domain.tld"
- "--secret=redacted"
- "--user-jid-validator=.*@domain.tld"
volumes:
- ./slidge_data:/var/lib/slidge
network_mode: host
depends_on:
snikket_server:
condition: service_started
restart: "unless-stopped"
slidgram:
image: codeberg.org/slidge/slidgram:main
command:
- "--admins=me@domain.tld"
- "--jid=telegram.domain.tld"
- "--secret=redacted"
- "--user-jid-validator=.*@domain.tld"
volumes:
- ./slidge_data:/var/lib/slidge
network_mode: host
depends_on:
snikket_server:
condition: service_started
restart: "unless-stopped"
slidgnal:
image: codeberg.org/slidge/slidgnal:main-amd64
command:
- "--admins=me@domain.tld"
- "--jid=signal.domain.tld"
- "--secret=redacted"
- "--user-jid-validator=.*@domain.tld"
volumes:
- ./slidge_data:/var/lib/slidge
network_mode: host
depends_on:
snikket_server:
condition: service_started
restart: "unless-stopped"
local DOMAIN = Lua.assert(ENV_SNIKKET_DOMAIN, "Please set the SNIKKET_DOMAIN environment variable")
modules_enabled: append {
"privilege";
}
local _privileges = {
roster = "both";
message = "outgoing";
iq = {
["http://jabber.org/protocol/pubsub"] = "both";
["http://jabber.org/protocol/pubsub#owner"] = "set";
};
}
VirtualHost (DOMAIN)
-- for roster sync and 'legacy carbons'
privileged_entities = {
["mattermost.domain.tld"] = _privileges,
["whatsapp.domain.tld"] = _privileges,
["matrix.domain.tld"] = _privileges,
["telegram.domain.tld"] = _privileges,
["signal.domain.tld"] = _privileges,
}
Component ("share."..DOMAIN) "http_file_share"
server_user_role = "prosody:registered"
Component ("mattermost."..DOMAIN)
component_secret = "redacted"
modules_enabled = {"privilege"}
Component ("whatsapp."..DOMAIN)
component_secret = "redacted"
modules_enabled = {"privilege"}
Component ("matrix."..DOMAIN)
component_secret = "redacted"
modules_enabled = {"privilege"}
Component ("telegram."..DOMAIN)
component_secret = "redacted"
modules_enabled = {"privilege"}
Component ("signal."..DOMAIN)
component_secret = "redacted"
modules_enabled = {"privilege"}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment