|
|
| Line 1: |
Line 1: |
| == Certbot == | | == Certbot == |
| > sudo apt install certbot python3-certbot-nginx | | <tt>sudo apt install certbot python3-certbot-nginx</tt> |
|
| |
|
| > sudo certbot --nginx -d miranda-ng.org -d www.miranda-ng.org -d addons.miranda-ng.org -d forum.miranda-ng.org -d oauth.miranda-ng.org -d wiki.miranda-ng.org | | <tt>sudo certbot --nginx -d miranda-ng.org -d www.miranda-ng.org -d addons.miranda-ng.org -d forum.miranda-ng.org -d oauth.miranda-ng.org -d wiki.miranda-ng.org</tt> |
|
| |
|
| == Postfix == | | == Postfix == |
| > sudo DEBIAN_PRIORITY=low apt install postfix opendkim opendkim-tools | | <tt>sudo DEBIAN_PRIORITY=low apt install postfix opendkim opendkim-tools</tt> |
|
| |
|
| > sudo dpkg-reconfigure postfix | | <tt>sudo dpkg-reconfigure postfix</tt> |
| <pre style="overflow:auto;"> | | <pre style="overflow:auto;"> |
| Internet Site | | Internet Site |
| Line 20: |
Line 20: |
| </pre> | | </pre> |
|
| |
|
| > sudo nano /etc/postfix/main.cf | | <tt>sudo nano /etc/postfix/main.cf</tt> |
| <pre style="overflow:auto;"> | | <pre style="overflow:auto;"> |
| myhostname = miranda-ng.org | | myhostname = miranda-ng.org |
| Line 26: |
Line 26: |
| </pre> | | </pre> |
|
| |
|
| > sudo systemctl enable opendkim | | <tt>sudo systemctl enable -now pendkim</tt> |
|
| |
|
| > sudo systemctl start opendkim | | <tt>sudo opendkim-genkey -D /etc/dkimkeys/ --domain miranda-ng.org --selector dkim</tt> |
|
| |
|
| > sudo opendkim-genkey -D /etc/dkimkeys/ --domain miranda-ng.org --selector dkim | | <tt>udo nano /etc/opendkim.conf</tt> |
| | |
| > sudo nano /etc/opendkim.conf
| |
| <pre style="overflow:auto;"> | | <pre style="overflow:auto;"> |
| UMask 002 | | UMask 002 |
| Line 47: |
Line 45: |
| </pre> | | </pre> |
|
| |
|
| > sudo adduser postfix opendkim | | <tt>sudo adduser postfix opendkim</tt> |
|
| |
|
| > sudo mkdir -p /var/spool/postfix/run/opendkim | | <tt>sudo mkdir -p /var/spool/postfix/run/opendkim</tt> |
|
| |
|
| > sudo chown opendkim:opendkim /var/spool/postfix/run/opendkim | | <tt>sudo chown opendkim:opendkim /var/spool/postfix/run/opendkim</tt> |
|
| |
|
| > sudo nano /etc/dkimkeys/TrustedHosts | | <tt>sudo nano /etc/dkimkeys/TrustedHosts</tt> |
| <pre style="overflow:auto;"> | | <pre style="overflow:auto;"> |
| 127.0.0.1 | | 127.0.0.1 |
| Line 60: |
Line 58: |
| </pre> | | </pre> |
|
| |
|
| > sudo nano /etc/dkimkeys/KeyTable | | <tt>sudo nano /etc/dkimkeys/KeyTable</tt> |
| <pre style="overflow:auto;"> | | <pre style="overflow:auto;"> |
| dkim._domainkey.miranda-ng.org miranda-ng.org:dkim:/etc/dkimkeys/dkim.private | | dkim._domainkey.miranda-ng.org miranda-ng.org:dkim:/etc/dkimkeys/dkim.private |
| </pre> | | </pre> |
|
| |
|
| > sudo nano /etc/dkimkeys/SigningTable | | <tt>sudo nano /etc/dkimkeys/SigningTable</tt> |
| <pre style="overflow:auto;"> | | <pre style="overflow:auto;"> |
| *@miranda-ng.org dkim._domainkey.miranda-ng.org | | *@miranda-ng.org dkim._domainkey.miranda-ng.org |
| </pre> | | </pre> |
|
| |
|
| > sudo chown -R opendkim:opendkim /etc/dkimkeys | | <tt>sudo chown -R opendkim:opendkim /etc/dkimkeys</tt> |
|
| |
|
| > sudo chmod 600 /etc/dkimkeys/* | | <tt>sudo chmod 600 /etc/dkimkeys/*</tt> |
|
| |
|
| > sudo nano /etc/postfix/main.cf | | <tt>sudo nano /etc/postfix/main.cf</tt> |
| <pre style="overflow:auto;"> | | <pre style="overflow:auto;"> |
| milter_protocol = 2 | | milter_protocol = 2 |
| Line 82: |
Line 80: |
| </pre> | | </pre> |
|
| |
|
| > sudo nano /etc/hosts | | <tt>sudo nano /etc/hosts</tt> |
| <pre style="overflow:auto;"> | | <pre style="overflow:auto;"> |
| 92.53.65.196 miranda-ng.org | | 92.53.65.196 miranda-ng.org |
| </pre> | | </pre> |
|
| |
|
| > sudo hostnamectl set-hostname miranda-ng.org | | <tt>sudo hostnamectl set-hostname miranda-ng.org</tt> |
|
| |
|
| > sudo systemctl restart opendkim | | <tt>sudo systemctl restart opendkim</tt> |
|
| |
|
| > sudo systemctl restart postfix | | <tt>sudo systemctl restart postfix</tt> |
|
| |
|
| DNS records: | | DNS records: |
| Line 101: |
Line 99: |
| </pre> | | </pre> |
|
| |
|
| > echo "Subject: hello" | sendmail test@example.com | | <tt>echo "Subject: hello" | sendmail test@example.com</tt> |
|
| |
|
| == Prosody == | | == Prosody == |
| > sudo wget https://prosody.im/downloads/repos/$(lsb_release -sc)/prosody.sources -O/etc/apt/sources.list.d/prosody.sources | | <tt>sudo wget https://prosody.im/downloads/repos/$(lsb_release -sc)/prosody.sources -O/etc/apt/sources.list.d/prosody.sources</tt> |
| | |
| > sudo apt install prosody lua-dbi-mysql | |
|
| |
|
| > sudo mysql -u root | | <tt>sudo apt install prosody lua-dbi-mysql</tt> |
|
| |
|
| | <tt>sudo mysql -u root</tt> |
| <pre style="overflow:auto;"> | | <pre style="overflow:auto;"> |
| CREATE USER 'prosody'@'localhost' IDENTIFIED BY 'p@ssw0rd'; | | CREATE USER 'prosody'@'localhost' IDENTIFIED BY 'p@ssw0rd'; |
| Line 118: |
Line 115: |
| </pre> | | </pre> |
|
| |
|
| > sudo nano /etc/prosody/prosody.cfg.lua | | <tt>sudo nano /etc/prosody/prosody.cfg.lua</tt> |
| <pre style="overflow:auto;"> | | <pre style="overflow:auto;"> |
| -- Prosody XMPP Server Configuration | | admins = { "username@miranda-ng.org", "username2@miranda-ng.org" } |
| --
| |
| -- Information on configuring Prosody can be found on our
| |
| -- website at https://prosody.im/doc/configure
| |
| --
| |
| -- Tip: You can check that the syntax of this file is correct
| |
| -- when you have finished by running this command:
| |
| -- prosodyctl check config
| |
| -- If there are any errors, it will let you know what and where
| |
| -- they are, otherwise it will keep quiet.
| |
| --
| |
| -- Good luck, and happy Jabbering!
| |
| | |
|
| |
|
| ---------- Server-wide settings ----------
| |
| -- Settings in this section apply to the whole server and are the default settings
| |
| -- for any virtual hosts
| |
|
| |
| -- This is a (by default, empty) list of accounts that are admins
| |
| -- for the server. Note that you must create the accounts separately
| |
| -- (see https://prosody.im/doc/creating_accounts for info)
| |
| -- Example: admins = { "user1@example.com", "user2@example.net" }
| |
| admins = { "ghazan@miranda-ng.org", "dartraiden@miranda-ng.org" }
| |
|
| |
| -- This option allows you to specify additional locations where Prosody
| |
| -- will search first for modules. For additional modules you can install, see
| |
| -- the community module repository at https://modules.prosody.im/
| |
| --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 = { | | modules_enabled = { |
| | | --"register"; -- Allow users to register on this server |
| -- Generally required
| | "proxy65"; -- Enables a file transfer proxy service which clients behind NAT can use |
| "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
| |
| --"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 = { | | modules_disabled = { |
| -- "offline"; -- Store offline messages
| | "s2s"; -- Handle server-to-server connections |
| -- "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 = false
| |
|
| |
| -- 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 = "10kb/s";
| |
| };
| |
| s2sin = {
| |
| rate = "30kb/s";
| |
| };
| |
| }
| |
|
| |
| -- Required for init scripts and prosodyctl
| |
| pidfile = "/var/run/prosody/prosody.pid"
| |
|
| |
| -- Authentication
| |
| -- Select the authentication backend to use. The 'internal' providers
| |
| -- use Prosody's configured data storage to store the authentication data.
| |
| -- For more information see https://prosody.im/doc/authentication
| |
|
| |
| authentication = "internal_hashed"
| |
|
| |
| -- 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
| |
|
| |
|
| |
| -- 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" | | storage = "sql" -- Default is "internal" |
|
| |
|
| -- For the "sql" backend, you can uncomment *one* of the below to configure:
| | sql = { driver = "MySQL", database = "prosody", username = "prosody", password = "p@ssword", host = "localhost" } |
| --sql = { driver = "SQLite3", database = "prosody.sqlite" } -- Default. 'database' is the filename.
| |
| sql = { driver = "MySQL", database = "prosody", username = "prosody", password = "p@ssw0rd", host = "localhost" } | |
| --sql = { driver = "PostgreSQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }
| |
|
| |
|
| | archive_expires_after = "4w" -- Remove archived messages after 1 week |
|
| |
|
| -- 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 = { | | log = { |
| info = "/var/log/prosody/prosody.log"; -- Change 'info' to 'debug' for verbose logging
| | info = "/var/log/prosody/prosody.log"; -- Change 'info' to 'debug' for verbose logging |
| error = "/var/log/prosody/prosody.err";
| | error = "/var/log/prosody/prosody.err"; |
| -- "*syslog"; -- Uncomment this for logging to syslog
| |
| -- "*console"; -- Log to the console, useful for debugging when running in the foreground
| |
| } | | } |
|
| |
|
| |
| -- Uncomment to enable statistics
| |
| -- For more info see https://prosody.im/doc/statistics
| |
| -- statistics = "internal"
| |
|
| |
|
| |
| -- Certificates
| |
| -- Every virtual host and component needs a certificate so that clients and
| |
| -- servers can securely verify its identity. Prosody will automatically load
| |
| -- certificates/keys from the directory specified here.
| |
| -- For more information, including how to use 'prosodyctl' to auto-import certificates
| |
| -- (from e.g. Let's Encrypt) see https://prosody.im/doc/certificates
| |
|
| |
| -- Location of directory to find certificates in (relative to main config file):
| |
| certificates = "certs"
| |
|
| |
| ----------- 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 "miranda-ng.org" | | VirtualHost "miranda-ng.org" |
| -- Prosody requires at least one enabled VirtualHost to function. You can
| |
| -- safely remove or disable 'localhost' once you have added another.
| |
|
| |
| ssl = { | | ssl = { |
| key = "/etc/letsencrypt/live/miranda-ng.org/privkey.pem";
| | key = "/etc/letsencrypt/live/miranda-ng.org/privkey.pem"; |
| certificate = "/etc/letsencrypt/live/miranda-ng.org/fullchain.pem";
| | certificate = "/etc/letsencrypt/live/miranda-ng.org/fullchain.pem"; |
| | protocol = "tlsv1_1+"; |
| } | | } |
|
| |
|
| ------ 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
| |
|
| |
| ---Set up a MUC (multi-user chat) room server on conference.example.com:
| |
| Component "conference.miranda-ng.org" "muc" | | Component "conference.miranda-ng.org" "muc" |
| --- Store MUC messages in an archive and allow users to access it
| |
| modules_enabled = { "muc_mam" } | | modules_enabled = { "muc_mam" } |
|
| |
| ---Set up a file sharing component
| |
| --Component "share.example.com" "http_file_share"
| |
|
| |
| ---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
| |
| </pre> | | </pre> |
|
| |
|
| > sudo chmod -R 755 /etc/letsencrypt/live | | <tt>sudo chmod -R 755 /etc/letsencrypt/live</tt> |
| | |
| > sudo prosodyctl adduser username@miranda-ng.org | |
|
| |
|
| > sudo systemctl enable prosody | | <tt>sudo prosodyctl adduser username@miranda-ng.org</tt> |
|
| |
|
| > sudo systemctl restart prosody | | <tt>sudo systemctl enable -now prosody</tt> |
Certbot
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d miranda-ng.org -d www.miranda-ng.org -d addons.miranda-ng.org -d forum.miranda-ng.org -d oauth.miranda-ng.org -d wiki.miranda-ng.org
Postfix
sudo DEBIAN_PRIORITY=low apt install postfix opendkim opendkim-tools
sudo dpkg-reconfigure postfix
Internet Site
miranda-ng.org
empty
default
No
default
0
+
all
sudo nano /etc/postfix/main.cf
myhostname = miranda-ng.org
inet_interfaces = loopback-only
sudo systemctl enable -now pendkim
sudo opendkim-genkey -D /etc/dkimkeys/ --domain miranda-ng.org --selector dkim
udo nano /etc/opendkim.conf
UMask 002
Socket local:/var/spool/postfix/run/opendkim/opendkim.sock
AutoRestart Yes
AutoRestartRate 10/1h
SyslogSuccess Yes
LogWhy Yes
ExternalIgnoreList refile:/etc/dkimkeys/TrustedHosts
InternalHosts refile:/etc/dkimkeys/TrustedHosts
KeyTable refile:/etc/dkimkeys/KeyTable
SigningTable refile:/etc/dkimkeys/SigningTable
SignatureAlgorithm rsa-sha256
sudo adduser postfix opendkim
sudo mkdir -p /var/spool/postfix/run/opendkim
sudo chown opendkim:opendkim /var/spool/postfix/run/opendkim
sudo nano /etc/dkimkeys/TrustedHosts
127.0.0.1
localhost
*.miranda-ng.org
sudo nano /etc/dkimkeys/KeyTable
dkim._domainkey.miranda-ng.org miranda-ng.org:dkim:/etc/dkimkeys/dkim.private
sudo nano /etc/dkimkeys/SigningTable
*@miranda-ng.org dkim._domainkey.miranda-ng.org
sudo chown -R opendkim:opendkim /etc/dkimkeys
sudo chmod 600 /etc/dkimkeys/*
sudo nano /etc/postfix/main.cf
milter_protocol = 2
milter_default_action = accept
smtpd_milters = unix:/run/opendkim/opendkim.sock
non_smtpd_milters = unix:/run/opendkim/opendkim.sock
sudo nano /etc/hosts
92.53.65.196 miranda-ng.org
sudo hostnamectl set-hostname miranda-ng.org
sudo systemctl restart opendkim
sudo systemctl restart postfix
DNS records:
miranda-ng.org MX miranda-ng.org 10
miranda-ng.org TXT v=spf1 +a +mx -all
DKIM._DOMAINKEY.miranda-ng.org TXT dkim_from_/etc/dkimkeys/dkim.txt
_DMARC.miranda-ng.org TXT v=DMARC1; p=none; aspf=r; sp=none
echo "Subject: hello" | sendmail test@example.com
Prosody
sudo wget https://prosody.im/downloads/repos/$(lsb_release -sc)/prosody.sources -O/etc/apt/sources.list.d/prosody.sources
sudo apt install prosody lua-dbi-mysql
sudo mysql -u root
CREATE USER 'prosody'@'localhost' IDENTIFIED BY 'p@ssw0rd';
CREATE DATABASE prosody;
GRANT ALL ON prosody.* to 'prosody'@'localhost';
FLUSH PRIVILEGES;
quit;
sudo nano /etc/prosody/prosody.cfg.lua
admins = { "username@miranda-ng.org", "username2@miranda-ng.org" }
modules_enabled = {
--"register"; -- Allow users to register on this server
"proxy65"; -- Enables a file transfer proxy service which clients behind NAT can use
}
modules_disabled = {
"s2s"; -- Handle server-to-server connections
}
storage = "sql" -- Default is "internal"
sql = { driver = "MySQL", database = "prosody", username = "prosody", password = "p@ssword", host = "localhost" }
archive_expires_after = "4w" -- Remove archived messages after 1 week
log = {
info = "/var/log/prosody/prosody.log"; -- Change 'info' to 'debug' for verbose logging
error = "/var/log/prosody/prosody.err";
}
VirtualHost "miranda-ng.org"
ssl = {
key = "/etc/letsencrypt/live/miranda-ng.org/privkey.pem";
certificate = "/etc/letsencrypt/live/miranda-ng.org/fullchain.pem";
protocol = "tlsv1_1+";
}
Component "conference.miranda-ng.org" "muc"
modules_enabled = { "muc_mam" }
sudo chmod -R 755 /etc/letsencrypt/live
sudo prosodyctl adduser username@miranda-ng.org
sudo systemctl enable -now prosody