blog | notes | apps


General check

prosodyctl check

List all user accounts

ls /var/lib/prosody//accounts/

Update certificates (run after every certificate renewal)

prosodyctl --root cert import /etc/letsencrypt/live

Example prosody.cfg.lua for Prosody 0.12+

---------- Server-wide settings ----------
admins = { }
modules_enabled = {
-- Generally required
"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
"dialback"; -- s2s dialback support
"disco"; -- Service discovery
-- Not essential, but recommended
"carbons"; -- Keep multiple clients in sync
"pep"; -- Enables users to publish their avatar, mood, activity, playing music and more
"private"; -- Private XML storage (for room bookmarks, etc.)
"blocklist"; -- Allow users to block communications with other users
"vcard4"; -- User profiles (stored in PEP)
"vcard_legacy"; -- Conversion between legacy vCard and PEP Avatar, vcard
-- Nice to have
"version"; -- Replies to server version requests
"uptime"; -- Report how long server has been running
"time"; -- Let others know the time here on this server
"ping"; -- Replies to XMPP pings with pongs
"register"; -- Allow users to register on this server using a client and change passwords
"mam"; -- Message Archive Management for chats
"csi"; -- Allows clients to report active/inactive state
"csi_simple"; -- Simple mobile optimizations for csi
-- Admin interfaces
-- HTTP modules
"http"; -- Loaded as needed by other modules
--"bosh"; -- Enable BOSH clients, aka "Jabber over HTTP"
--"websocket"; -- XMPP over WebSockets
--"http_files"; -- Serve static files from a directory over HTTP (not for sharing)
-- Other specific functionality
"posix"; -- POSIX functionality, sends server to background, enables syslog, etc.
--"limits"; -- Enable bandwidth limiting for XMPP connections
--"groups"; -- Shared roster support
--"server_contact_info"; -- Publish contact information for this service
--"announce"; -- Send announcement to all online users
--"welcome"; -- Welcome users who register accounts
--"watchregistrations"; -- Alert admins of registrations
--"motd"; -- Send a message to users when they log in
--"legacyauth"; -- Legacy authentication. Only used by some old clients and bots.
--"proxy65"; -- Enables a file transfer proxy service which clients behind NAT can use
-- Mobile
"cloud_notify"; -- Push notifications (needed for iOS)
modules_disabled = {
-- Disable account creation
allow_registration = false
pidfile = "/run/prosody/prosody.pid";
c2s_require_encryption = true
s2s_require_encryption = true
s2s_secure_auth = true
authentication = "internal_hashed"
archive_expires_after = "28d" -- Remove archived messages after 4 weeks (GDPR says hi)
-- Replace 'info' with 'debug' for debugging
log = {
info = "/var/log/prosody/prosody.log";
error = "/var/log/prosody/prosody.err";
{ levels = { "error" }; to = "syslog";  };
certificates = "certs"
-- Prosody 0.12.x and later will automatically find and serve an appropriate
-- certificate for HTTPS, based on the certificates already used for your XMPP
-- services and the hostname requested by the client or web browser.
-- No additional configuration should be necessary for most deployments.
----------- Virtual hosts -----------
VirtualHost "example.net"
------ Components ------
-- Group chats
Component "groups.example.net" "muc"
modules_enabled = {
"muc_mam" -- Message Archive Management for groups
muc_log_expires_after = "28d"
muc_log_cleanup_interval = 12 * 60 * 60
-- Share files via HTTP (v0.12+)
Component "share.example.net" "http_file_share"
-- This path is required for clients to work correctly
-- Have no idea why
http_paths = {
file_share = "/upload"
http_file_share_size_limit = 128*1024*1024+16 -- 128 MiB
http_file_share_expire_after = 60*60*24*28 -- 28 days