adding prosody
This commit is contained in:
6
social/prosody/.env.example
Normal file
6
social/prosody/.env.example
Normal file
@@ -0,0 +1,6 @@
|
||||
# The XMPP domain users will register under (e.g. xmpp.example.com)
|
||||
XMPP_DOMAIN=xmpp.example.com
|
||||
|
||||
# Admin JID(s) — comma-separated, must match XMPP_DOMAIN
|
||||
# e.g. XMPP_ADMIN=admin@xmpp.example.com
|
||||
XMPP_ADMIN=admin@xmpp.example.com
|
||||
44
social/prosody/docker-compose.yml
Normal file
44
social/prosody/docker-compose.yml
Normal file
@@ -0,0 +1,44 @@
|
||||
services:
|
||||
# One-time init: creates ./data and ./certs with the correct ownership
|
||||
# Also, prosody's official docker image do not have any latest tag, so using current latest tag 13.0
|
||||
prosody-init:
|
||||
image: prosodyim/prosody:13.0
|
||||
container_name: prosody-init
|
||||
restart: "no"
|
||||
entrypoint: /bin/sh
|
||||
command: -c "mkdir -p /var/lib/prosody /etc/prosody/certs && chown prosody:prosody /var/lib/prosody /etc/prosody/certs"
|
||||
volumes:
|
||||
- ./data:/var/lib/prosody
|
||||
- ./certs:/etc/prosody/certs
|
||||
|
||||
# One-time init: dumps certs from Traefik's acme.json and makes them readable
|
||||
certs-init:
|
||||
image: ldez/traefik-certs-dumper:latest
|
||||
container_name: prosody-certs-init
|
||||
restart: "no"
|
||||
entrypoint: /bin/sh
|
||||
command: -c "traefik-certs-dumper file --version v2 --source /traefik/acme.json --dest /output && chmod 644 /output/certs/*.crt /output/private/*.key"
|
||||
volumes:
|
||||
- ../../tools/wireguard/letsencrypt:/traefik:ro # Change this to cert path if not using same folder structure
|
||||
- ./certs:/output
|
||||
|
||||
prosody:
|
||||
image: prosodyim/prosody:13.0
|
||||
container_name: prosody
|
||||
restart: unless-stopped
|
||||
env_file: .env
|
||||
volumes:
|
||||
- ./prosody.cfg.lua:/etc/prosody/prosody.cfg.lua:ro
|
||||
- ./data:/var/lib/prosody
|
||||
- ./certs:/etc/prosody/certs
|
||||
networks:
|
||||
- traefik_portal
|
||||
depends_on:
|
||||
prosody-init:
|
||||
condition: service_completed_successfully
|
||||
certs-init:
|
||||
condition: service_completed_successfully
|
||||
|
||||
networks:
|
||||
traefik_portal:
|
||||
external: true
|
||||
225
social/prosody/prosody.cfg.lua
Normal file
225
social/prosody/prosody.cfg.lua
Normal file
@@ -0,0 +1,225 @@
|
||||
-- Prosody MK Configuration File
|
||||
--
|
||||
-- Tip: You can check that the syntax of this file is correct
|
||||
-- when you have finished by running this command:
|
||||
-- prosodyctl check config
|
||||
|
||||
---------- Server-wide settings ----------
|
||||
local xmpp_domain = Lua.os.getenv("XMPP_DOMAIN") or "example.com"
|
||||
local xmpp_admin = Lua.os.getenv("XMPP_ADMIN") or ("admin@" .. xmpp_domain)
|
||||
|
||||
admins = { xmpp_admin }
|
||||
|
||||
--plugin_paths = {}
|
||||
|
||||
-- This is the list of modules Prosody will load on startup.
|
||||
-- Documentation for bundled modules can be found at: https://prosody.im/doc/modules
|
||||
modules_enabled = {
|
||||
|
||||
-- Generally required
|
||||
"disco", -- Service discovery
|
||||
"roster", -- Allow users to have a roster. Recommended ;)
|
||||
"saslauth", -- Authentication for clients and servers. Recommended if you want to log in.
|
||||
"tls", -- Add support for secure TLS on c2s/s2s connections
|
||||
|
||||
-- Not essential, but recommended
|
||||
"blocklist", -- Allow users to block communications with other users
|
||||
"bookmarks", -- Synchronise the list of open rooms between clients
|
||||
"carbons", -- Keep multiple online clients in sync
|
||||
"dialback", -- Support for verifying remote servers using DNS
|
||||
"limits", -- Enable bandwidth limiting for XMPP connections
|
||||
"pep", -- Allow users to store public and private data in their account
|
||||
"private", -- Legacy account storage mechanism (XEP-0049)
|
||||
"smacks", -- Stream management and resumption (XEP-0198)
|
||||
"vcard4", -- User profiles (stored in PEP)
|
||||
"vcard_legacy", -- Conversion between legacy vCard and PEP Avatar, vcard
|
||||
|
||||
-- Nice to have
|
||||
"csi_simple", -- Simple but effective traffic optimizations for mobile devices
|
||||
"invites", -- Create and manage invites
|
||||
"invites_adhoc", -- Allow admins/users to create invitations via their client
|
||||
"invites_register", -- Allows invited users to create accounts
|
||||
"ping", -- Replies to XMPP pings with pongs
|
||||
"register", -- Allow users to register on this server using a client and change passwords
|
||||
"time", -- Let others know the time here on this server
|
||||
"uptime", -- Report how long server has been running
|
||||
"version", -- Replies to server version requests
|
||||
"mam"; -- Store recent messages to allow multi-device synchronization
|
||||
--"turn_external"; -- Provide external STUN/TURN service for e.g. audio/video calls
|
||||
|
||||
-- Admin interfaces
|
||||
"admin_adhoc", -- Allows administration via an XMPP client that supports ad-hoc commands
|
||||
"admin_shell", -- Allow secure administration via 'prosodyctl shell'
|
||||
|
||||
-- HTTP modules
|
||||
"http_file_share"; -- HTTP file upload for sharing files/images in chat (XEP-0363)
|
||||
--"bosh"; -- Enable BOSH clients, aka "Jabber over HTTP"
|
||||
--"http_openmetrics"; -- for exposing metrics to stats collectors
|
||||
--"websocket"; -- XMPP over WebSockets
|
||||
|
||||
-- Other specific functionality
|
||||
"announce"; -- Send announcement to all online users
|
||||
--"groups"; -- Shared roster support
|
||||
--"legacyauth"; -- Legacy authentication. Only used by some old clients and bots.
|
||||
--"mimicking"; -- Prevent address spoofing
|
||||
--"motd"; -- Send a message to users when they log in
|
||||
--"proxy65"; -- Enables a file transfer proxy service which clients behind NAT can use
|
||||
--"s2s_bidi"; -- Bi-directional server-to-server (XEP-0288)
|
||||
--"server_contact_info"; -- Publish contact information for this service
|
||||
--"tombstones"; -- Prevent registration of deleted accounts
|
||||
--"watchregistrations"; -- Alert admins of registrations
|
||||
--"welcome"; -- Welcome users who register accounts
|
||||
}
|
||||
|
||||
-- These modules are auto-loaded, but should you want
|
||||
-- to disable them then uncomment them here:
|
||||
modules_disabled = {
|
||||
-- "offline"; -- Store offline messages
|
||||
-- "c2s"; -- Handle client connections
|
||||
-- "s2s"; -- Handle server-to-server connections
|
||||
-- "posix"; -- POSIX functionality, sends server to background, etc.
|
||||
}
|
||||
|
||||
|
||||
-- Server-to-server authentication
|
||||
-- Require valid certificates for server-to-server connections?
|
||||
-- If false, other methods such as dialback (DNS) may be used instead.
|
||||
|
||||
s2s_secure_auth = true
|
||||
|
||||
-- Some servers have invalid or self-signed certificates. You can list
|
||||
-- remote domains here that will not be required to authenticate using
|
||||
-- certificates. They will be authenticated using other methods instead,
|
||||
-- even when s2s_secure_auth is enabled.
|
||||
|
||||
--s2s_insecure_domains = { "insecure.example" }
|
||||
|
||||
-- Even if you disable s2s_secure_auth, you can still require valid
|
||||
-- certificates for some domains by specifying a list here.
|
||||
|
||||
--s2s_secure_domains = { "jabber.org" }
|
||||
|
||||
|
||||
-- Rate limits
|
||||
-- Enable rate limits for incoming client and server connections. These help
|
||||
-- protect from excessive resource consumption and denial-of-service attacks.
|
||||
|
||||
limits = {
|
||||
c2s = {
|
||||
rate = "50kb/s",
|
||||
},
|
||||
s2sin = {
|
||||
rate = "300kb/s",
|
||||
},
|
||||
}
|
||||
|
||||
-- Authentication
|
||||
-- Many authentication providers, including the default one, allow you to
|
||||
-- create user accounts via Prosody's admin interfaces. For details, see the
|
||||
-- documentation at https://prosody.im/doc/creating_accounts
|
||||
authentication = "internal_hashed"
|
||||
|
||||
-- Storage
|
||||
-- Select the storage backend to use. By default Prosody uses flat files
|
||||
-- in its configured data directory, but it also supports more backends
|
||||
-- through modules. An "sql" backend is included by default, but requires
|
||||
-- additional dependencies. See https://prosody.im/doc/storage for more info.
|
||||
|
||||
storage = "sql" -- Default is "internal"
|
||||
|
||||
-- For the "sql" backend, you can uncomment *one* of the below to configure:
|
||||
sql = { driver = "SQLite3", database = "prosody.sqlite" } -- Default. 'database' is the filename.
|
||||
--sql = { driver = "MySQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }
|
||||
--sql = { driver = "PostgreSQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }
|
||||
|
||||
|
||||
-- Archiving configuration
|
||||
-- If mod_mam is enabled, Prosody will store a copy of every message. This
|
||||
-- is used to synchronize conversations between multiple clients, even if
|
||||
-- they are offline. This setting controls how long Prosody will keep
|
||||
-- messages in the archive before removing them.
|
||||
|
||||
archive_expires_after = "1w" -- Remove archived messages after 1 week
|
||||
|
||||
-- You can also configure messages to be stored in-memory only. For more
|
||||
-- archiving options, see https://prosody.im/doc/modules/mod_mam
|
||||
|
||||
|
||||
-- Audio/video call relay (STUN/TURN)
|
||||
-- To ensure clients connected to the server can establish connections for
|
||||
-- low-latency media streaming (such as audio and video calls), it is
|
||||
-- recommended to run a STUN/TURN server for clients to use. If you do this,
|
||||
-- specify the details here so clients can discover it.
|
||||
-- Find more information at https://prosody.im/doc/turn
|
||||
|
||||
-- Specify the address of the TURN service (you may use the same domain as XMPP)
|
||||
--turn_external_host = "turn.example.com"
|
||||
|
||||
-- This secret must be set to the same value in both Prosody and the TURN server
|
||||
--turn_external_secret = "your-secret-turn-access-token"
|
||||
|
||||
|
||||
-- Logging configuration
|
||||
-- For advanced logging see https://prosody.im/doc/logging
|
||||
log = {
|
||||
-- Docker: log to stdout/stderr
|
||||
info = "*console";
|
||||
error = "*console";
|
||||
-- "*syslog"; -- Uncomment to also log to syslog
|
||||
}
|
||||
|
||||
|
||||
-- statistics = "internal"
|
||||
|
||||
|
||||
-- Certificates
|
||||
ssl = {
|
||||
certificate = "/etc/prosody/certs/certs/" .. xmpp_domain .. ".crt",
|
||||
key = "/etc/prosody/certs/private/" .. xmpp_domain .. ".key",
|
||||
}
|
||||
|
||||
-- HTTP file upload (XEP-0363)
|
||||
http_file_share_size_limit = 10 * 1024 * 1024 -- 10 MB per file
|
||||
http_file_share_expire_after = 60 * 60 * 24 * 14 -- delete after 14 days
|
||||
http_external_url = "https://" .. xmpp_domain .. "/"
|
||||
|
||||
----------- Virtual hosts -----------
|
||||
-- You need to add a VirtualHost entry for each domain you wish Prosody to serve.
|
||||
-- Settings under each VirtualHost entry apply *only* to that host.
|
||||
|
||||
VirtualHost(xmpp_domain)
|
||||
|
||||
------ Components ------
|
||||
-- You can specify components to add hosts that provide special services,
|
||||
-- like multi-user conferences, and transports.
|
||||
-- For more information on components, see https://prosody.im/doc/components
|
||||
|
||||
-- Multi-user chat (group chats)
|
||||
Component("conference." .. xmpp_domain, "muc")
|
||||
modules_enabled = { "muc_mam" } -- store group chat history
|
||||
-- Default room settings applied to every newly created room
|
||||
muc_room_default_public = true -- rooms are listed in the room browser
|
||||
muc_room_default_persistent = true -- rooms survive when the last user leaves
|
||||
muc_room_default_members_only = false -- anyone can join
|
||||
muc_room_default_allow_register = true -- users can bookmark with a nickname
|
||||
muc_room_default_history_length = 50 -- messages shown on join
|
||||
|
||||
---Set up an external component (default component port is 5347)
|
||||
--
|
||||
-- External components allow adding various services, such as gateways/
|
||||
-- bridges to non-XMPP networks and services. For more info
|
||||
-- see: https://prosody.im/doc/components#adding_an_external_component
|
||||
--
|
||||
--Component "gateway.example.com"
|
||||
-- component_secret = "password"
|
||||
|
||||
|
||||
---------- End of the Prosody Configuration file ----------
|
||||
-- You usually **DO NOT** want to add settings here at the end, as they would
|
||||
-- only apply to the last defined VirtualHost or Component.
|
||||
--
|
||||
-- Settings for the global section should go higher up, before the first
|
||||
-- VirtualHost or Component line, while settings intended for specific hosts
|
||||
-- should go under the corresponding VirtualHost or Component line.
|
||||
--
|
||||
-- For more information see https://prosody.im/doc/configure
|
||||
Reference in New Issue
Block a user