Compare commits
53 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4425fae939 | |||
| 6270bc329f | |||
| 370bca28c0 | |||
| fddb859136 | |||
| 348231e50b | |||
| fc3d7b920c | |||
| 1248e97f0c | |||
| 3e85e9d2b6 | |||
| 36fb07b2d4 | |||
| dc8600770a | |||
| ba105e7dee | |||
| d5987023e2 | |||
| 601945cb85 | |||
| 8ede81d357 | |||
| 11f3255946 | |||
| 3683ab91cc | |||
| 9e7be12bec | |||
| 438bb3e002 | |||
| cbc0f60ab2 | |||
| 46201eefc1 | |||
| 8ed20cbe8f | |||
| d15c46949a | |||
| 74286f0b2b | |||
| 0581c684a5 | |||
| aa886a0b49 | |||
| 1c79b49c74 | |||
| bfa98dcb30 | |||
| 2a8ec06934 | |||
| 84a6c25e5d | |||
| 87c60bc5d9 | |||
| d9e98d73cf | |||
| 76fa083967 | |||
| 2f14fcaf8b | |||
| 25f7395352 | |||
| a5e773d9b6 | |||
| 83556a4c5a | |||
| 52cd642d38 | |||
| 31d6d84433 | |||
| d627c29eab | |||
| 0555dc16c9 | |||
| 3a21cd2c21 | |||
| cc88073a79 | |||
| 4878e32010 | |||
| 7a6b4df1a2 | |||
| 90963038ee | |||
| 95a9d24b76 | |||
| 47d22ada68 | |||
| 80c6ffc362 | |||
| f2c1afeabe | |||
| 3a47a006bc | |||
| e0c2334d2a | |||
| 8c4170e7d9 | |||
| 1fa2fb60ce |
+26
-37
@@ -1,53 +1,42 @@
|
||||
################################################################################
|
||||
# Build a dockerfile for Prosody XMPP server
|
||||
# Based on ubuntu
|
||||
################################################################################
|
||||
|
||||
FROM debian:9
|
||||
FROM debian:trixie-slim
|
||||
|
||||
MAINTAINER Prosody Developers <developers@prosody.im>
|
||||
|
||||
# Some dependencies in stretch are not suitable for Prosody 0.11.x, so add our repo
|
||||
RUN echo "deb http://packages.prosody.im/debian stretch main" > /etc/apt/sources.list.d/prosody.list
|
||||
ADD prosody_packages.gpg /etc/apt/trusted.gpg.d/prosody.gpg
|
||||
ARG PROSODY_PACKAGE=prosody-13.0
|
||||
ARG LUA_PACKAGE=lua5.4
|
||||
ARG BUILD_ID=
|
||||
|
||||
ADD https://prosody.im/downloads/repos/trixie/prosody.sources /etc/apt/sources.list.d/prosody.sources
|
||||
|
||||
# Install dependencies
|
||||
RUN apt-get update \
|
||||
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
||||
lsb-base \
|
||||
adduser \
|
||||
libidn11 \
|
||||
libssl1.1 \
|
||||
lua-bitop \
|
||||
lua-dbi-mysql \
|
||||
lua-dbi-postgresql \
|
||||
lua-dbi-sqlite3 \
|
||||
lua-event \
|
||||
lua-expat \
|
||||
lua-filesystem \
|
||||
lua-sec \
|
||||
lua-socket \
|
||||
lua-zlib \
|
||||
lua5.1 \
|
||||
lua5.2 \
|
||||
openssl \
|
||||
tini \
|
||||
${PROSODY_PACKAGE} \
|
||||
${LUA_PACKAGE} \
|
||||
ca-certificates \
|
||||
ssl-cert \
|
||||
dns-root-data \
|
||||
lua-unbound \
|
||||
lua-sec \
|
||||
lua-readline \
|
||||
lua-dbi-sqlite3 \
|
||||
lua-dbi-postgresql \
|
||||
lua-dbi-mysql \
|
||||
luarocks \
|
||||
lib${LUA_PACKAGE}-dev \
|
||||
libjs-bootstrap4 libjs-jquery \
|
||||
&& update-alternatives --set lua-interpreter /usr/bin/${LUA_PACKAGE} \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Install and configure prosody
|
||||
COPY ./prosody.deb /tmp/prosody.deb
|
||||
RUN dpkg -i /tmp/prosody.deb \
|
||||
&& sed -i '1s/^/daemonize = false;\n/' /etc/prosody/prosody.cfg.lua \
|
||||
&& perl -i -pe 'BEGIN{undef $/;} s/^log = {.*?^}$/log = {\n {levels = {min = "info"}, to = "console"};\n}/smg' /etc/prosody/prosody.cfg.lua
|
||||
|
||||
RUN mkdir -p /var/run/prosody && chown prosody:prosody /var/run/prosody
|
||||
RUN mkdir -p /etc/prosody/conf.d /var/run/prosody \
|
||||
&& chown prosody:prosody /etc/prosody/conf.d /var/run/prosody
|
||||
|
||||
COPY ./entrypoint.sh /entrypoint.sh
|
||||
RUN chmod 755 /entrypoint.sh
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
ENTRYPOINT ["/usr/bin/tini", "--", "/entrypoint.sh"]
|
||||
|
||||
COPY ./configs/${PROSODY_PACKAGE}.cfg.lua /etc/prosody/prosody.cfg.lua
|
||||
|
||||
EXPOSE 80 443 5222 5269 5347 5280 5281
|
||||
USER prosody
|
||||
ENV __FLUSH_LOG yes
|
||||
CMD ["prosody"]
|
||||
CMD ["prosody", "-F"]
|
||||
|
||||
@@ -2,21 +2,16 @@
|
||||
|
||||
This is the Prosody Docker image building repository. It is used by our build server to build and publish Docker images for stable releases and nightly builds.
|
||||
|
||||
**Note:** Using this Dockerfile outside of our build server is not a supported use-case. There are many
|
||||
alternative Dockerfiles for Prosody available which can be used for this:
|
||||
|
||||
- [OpusVL/prosody-docker](https://github.com/OpusVL/prosody-docker/)
|
||||
- [unclev/prosody-docker-extended](https://github.com/unclev/prosody-docker-extended)
|
||||
|
||||
## Published images
|
||||
|
||||
For images please see here: [Prosody on Docker](https://hub.docker.com/r/prosody/prosody/).
|
||||
- **[Docker Hub image prosodyim/prosody](https://hub.docker.com/r/prosodyim/prosody): official images, up-to-date, automated builds.**
|
||||
- ~~[Docker Hub image prosody/prosody](https://hub.docker.com/r/prosody/prosody)~~: official images, outdated, manual builds.
|
||||
|
||||
## Running
|
||||
|
||||
It works by copying in a recently built `deb` file and running the install on the system.
|
||||
It works by enabling the [prosody package repository](https://prosody.im/download/package_repository) and installing the selected Prosody package from there based on the `PROSODY_PACKAGE` build argument.
|
||||
|
||||
Docker images are built off an __Debian 9 (stretch)__ base.
|
||||
Docker images are built off an __Debian 13 (trixie)__ base.
|
||||
|
||||
```bash
|
||||
docker run -d --name prosody -p 5222:5222 prosody/prosody
|
||||
@@ -33,6 +28,7 @@ Any error from this script is ignored. Prosody will not check the user exists be
|
||||
The image exposes the following ports to the docker host:
|
||||
|
||||
* __80__: HTTP port
|
||||
* __443__: HTTPS port
|
||||
* __5222__: c2s port
|
||||
* __5269__: s2s port
|
||||
* __5347__: XMPP component port
|
||||
@@ -47,41 +43,77 @@ Volumes can be mounted at the following locations for adding in files:
|
||||
|
||||
* __/etc/prosody__:
|
||||
* Prosody configuration file(s)
|
||||
* __/etc/prosody/certs__:
|
||||
* SSL certificates
|
||||
* __/var/log/prosody__:
|
||||
* Log files for prosody - if not mounted these will be stored on the system
|
||||
* Note: This location can be changed in the configuration, update to match
|
||||
* Also note: The log directory on the host (/logs/prosody in the example below) must be writeable by the prosody user
|
||||
* __/usr/lib/prosody-modules__ (suggested):
|
||||
* __/etc/prosody/modules__:
|
||||
* Location for including additional modules
|
||||
* Note: This needs to be included in your config file, see http://prosody.im/doc/installing_modules#paths
|
||||
* __/var/lib/prosody__:
|
||||
* Location of data
|
||||
|
||||
### Environment Variables
|
||||
|
||||
* `DOMAIN`, `LOCAL`, `PASSWORD` - These three are used by `entrypoint.sh` to create an initial account `$LOCAL@$DOMAIN` with `$PASSWORD` as password.
|
||||
* `PROSODY_PLUGIN_PATHS` - Comma-separated list of additional paths to search for plugins. Defaults to `/etc/prosody/modules`.
|
||||
* `PROSODY_ADMINS` - Comma-separated list of user addresses treated as admins.
|
||||
* `PROSODY_ENABLE_MODULES` - Comma-separated list of additional plugins to load.
|
||||
* `PROSODY_DISABLE_MODULES` - Comma-separated list of modules to disable, e.g. for auto-enabled modules.
|
||||
* `PROSODY_TURN_HOST` - Hostname of TURN server
|
||||
* `PROSODY_TURN_PORT` - Port number of TURN server
|
||||
* `PROSODY_TURN_SECRET` - Shared secret for TURN
|
||||
* `PROSODY_TURN_TLS_PORT` - Port number for STUN over TLS
|
||||
* `PROSODY_RETENTION_DAYS` - How many days worth of message archives and shared file to keep.
|
||||
* `PROSODY_DNS_RESOLVERS` - Comma-separated list of DNS resolvers to use instead of what `/etc/resolv.conf` points to.
|
||||
* `PROSODY_USE_DANE` - Whether to enable [DANE](https://prosody.im/doc/dane) (requires [DNSSEC](https://prosody.im/doc/dnssec) aware resolvers).
|
||||
* `PROSODY_S2S_SECURE_AUTH` - Whether to require that remote servers present valid certificates. Enabled by default.
|
||||
* `PROSODY_C2S_RATE_LIMIT` - Rate limit for client-to-server connections. Defaults to `10kb/s`.
|
||||
* `PROSODY_S2S_RATE_LIMIT` - Rate limit for server-to-server connections. Defaults to `30kb/s`.
|
||||
* `PROSODY_STORAGE` - [Storage driver](https://prosody.im/doc/storage) to use. Defaults to `internal`.
|
||||
* `PROSODY_SQL_DRIVER` - One of `SQLite3`, `PostgreSQL` or `MySQL`. Selects SQL backend when `PROSODY_STORAGE` is set to `sql`.
|
||||
* `PROSODY_SQL_DB` - Name of SQL database to use.
|
||||
* `PROSODY_SQL_HOST` - Hostname of SQL database to connect to (PostgreSQL and MySQL only).
|
||||
* `PROSODY_SQL_USERNAME`, `PROSODY_SQL_PASSWORD` - Credentials for connecting to SQL database.
|
||||
* `PROSODY_ARCHIVE_EXPIRY_DAYS` - When set, overrides `PROSODY_RETENTION_DAYS` for message archives.
|
||||
* `PROSODY_LOGLEVEL` - Log level, one of `debug`, `info`, `warn`, `error`. Defaults to `info`.
|
||||
* `PROSODY_STATISTICS` - [Statistics provider](https://prosody.im/doc/statistics) to use, e.g. `internal`. Default disabled.
|
||||
* `PROSODY_STATISTICS_INTERVAL` - Statistics collection interval. A number or the string `manual` for OpenMetrics-triggered collection. Defaults to `60`.
|
||||
* `PROSODY_CERTIFICATES` - Path to TLS certificates and private keys, relative to the config file. Defaults to `certs`, i.e.
|
||||
* `PROSODY_VIRTUAL_HOSTS` - Comma-separated list of domain names to initialize as hosts that provide user accounts. Defaults to the hostname of the container. `/etc/prosody/certs`.
|
||||
* `PROSODY_NETWORK_HOSTNAME` - Public domain name for use with e.g. HTTP. Defaults to the first entry in `PROSODY_VIRTUAL_HOSTS`.
|
||||
* `PROSODY_COMPONENTS` - Comma-separated list of _internal_ components in the form `name.example.com:type` where `type` can be e.g. `muc`, `http_file_share`.
|
||||
* `PROSODY_MUC_MODULES` - Comma-separated list of additional modules to enable on a MUC component.
|
||||
* `PROSODY_UPLOAD_EXPIRY_DAYS` - When set, overrides `PROSODY_RETENTION_DAYS` for uploaded files.
|
||||
* `PROSODY_UPLOAD_LIMIT_MB` - Size limit in MiB for individual uploaded files.
|
||||
* `PROSODY_UPLOAD_STORAGE_GB` - Total amount of storage available for file uploads.
|
||||
* `PROSODY_EXTERNAL_COMPONENTS` - Comma-separated list of _external_ components, in the form of `name.example.com:secret`.
|
||||
* `PROSODY_COMPONENT_SECRET` - Component shared secret if not provided as part of `PROSODY_EXTERNAL_COMPONENTS`.
|
||||
* `PROSODY_EXTRA_CONFIG` - Path to additional configuration file. Can contain wildcards. Defaults to `/etc/prosody/conf.d/*.cfg.lua`.
|
||||
|
||||
|
||||
### Example
|
||||
|
||||
```
|
||||
docker run -d \
|
||||
```bash
|
||||
docker run -it \
|
||||
-p 5222:5222 \
|
||||
-p 5269:5269 \
|
||||
-p localhost:5347:5347 \
|
||||
-e LOCAL=romeo \
|
||||
-e DOMAIN=shakespeare.lit \
|
||||
-e PASSWORD=juliet4ever \
|
||||
-v /data/prosody/configuration:/etc/prosody \
|
||||
-v /logs/prosody:/var/log/prosody \
|
||||
-v /data/prosody/modules:/usr/lib/prosody-modules \
|
||||
prosody/prosody:0.9
|
||||
prosody/prosody:0.12
|
||||
```
|
||||
|
||||
## Building
|
||||
|
||||
Use the `build-docker.sh` script as follows:
|
||||
|
||||
```bash
|
||||
./build-docker.sh /path/to/built-image.deb version_tag [, ...version_tag2, ...]
|
||||
docker build --build-arg PROSODY_PACKAGE=prosody-0.12 -t prosody/prosody:0.12 .
|
||||
```
|
||||
|
||||
Where argument 1 is a pointer to the build `deb` file that you'd like to make an image from and 'version_tag' is the tag you'd like to push to the Docker registry with.
|
||||
## Alternative Dockerfiles
|
||||
|
||||
You can specify multiple tags by adding additional tag names to the end of the command. This is useful where a for example release 0.10.4 is made which also consitutes 'latest', '0.10-nightly', '0.10.4', '0.10' images.
|
||||
There are many alternative Dockerfiles for Prosody available if this one
|
||||
does not suit your needs:
|
||||
|
||||
After running the script will clean up any images generated (but not the base images - for efficiency purposes).
|
||||
- [OpusVL/prosody-docker](https://github.com/OpusVL/prosody-docker/)
|
||||
- [unclev/prosody-docker-extended](https://github.com/unclev/prosody-docker-extended)
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [[ -z "$1" ]]; then
|
||||
echo "Usage: ./build-docker.sh def_file_name version_number"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "$2" ]]; then
|
||||
echo "Usage: ./build-docker.sh def_file_name version_number"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Starting build..."
|
||||
cp "$1" ./prosody.deb
|
||||
docker build -t prosody/prosody:"$2" .
|
||||
for i in "${@:3}"; do
|
||||
echo "Also building tag $i"
|
||||
docker build -t prosody/prosody:"$i" .
|
||||
done
|
||||
docker push prosody/prosody
|
||||
|
||||
echo "Cleaning up..."
|
||||
docker rmi prosody/prosody:"$2"
|
||||
for i in "${@:3}"; do
|
||||
echo "Also cleaning tag $i"
|
||||
docker rmi prosody/prosody:"$i"
|
||||
done
|
||||
rm ./prosody.deb
|
||||
@@ -0,0 +1,323 @@
|
||||
-- Prosody Configuration File
|
||||
--
|
||||
-- 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.
|
||||
--
|
||||
-- The only thing left to do is rename this file to remove the .dist ending, and fill in the
|
||||
-- blanks. Good luck, and happy Jabbering!
|
||||
|
||||
local _unpack = table.unpack or _G.unpack;
|
||||
local function _split(s, sep)
|
||||
if not s then return nil; end
|
||||
sep = sep or ",";
|
||||
local parts = {};
|
||||
for part in s:gmatch("[^"..sep.."]+") do
|
||||
parts[#parts+1] = part;
|
||||
end
|
||||
return parts;
|
||||
end
|
||||
|
||||
|
||||
---------- Server-wide settings ----------
|
||||
-- Settings in this section apply to the whole server and are the default settings
|
||||
-- for any virtual hosts
|
||||
|
||||
plugin_paths = _split(ENV_PROSODY_PLUGIN_PATHS or "/etc/prosody/modules")
|
||||
|
||||
-- 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 = _split(ENV_PROSODY_ADMINS)
|
||||
|
||||
-- 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
|
||||
local default_modules = {
|
||||
|
||||
-- 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
|
||||
--"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
|
||||
}
|
||||
|
||||
for _, module_name in ipairs(_split(ENV_PROSODY_ENABLE_MODULES) or {}) do
|
||||
default_modules[#default_modules+1] = module_name;
|
||||
end
|
||||
|
||||
if ENV_PROSODY_TURN_SECRET then
|
||||
default_modules[#default_modules+1] = "turn_external";
|
||||
turn_external_secret = ENV_PROSODY_TURN_SECRET
|
||||
turn_external_host = ENV_PROSODY_TURN_HOST
|
||||
turn_external_port = ENV_PROSODY_TURN_PORT
|
||||
turn_external_tls_port = ENV_PROSODY_TURN_TLS_PORT
|
||||
end
|
||||
|
||||
if ENV_PROSODY_RETENTION_DAYS or ENV_PROSODY_ARCHIVE_EXPIRY_DAYS then
|
||||
default_modules[#default_modules+1] = "mam";
|
||||
end
|
||||
|
||||
modules_enabled = default_modules
|
||||
|
||||
local env_disabled_modules = {};
|
||||
for _, module_name in ipairs(_split(ENV_PROSODY_DISABLE_MODULES) or {}) do
|
||||
env_disabled_modules[#env_disabled_modules+1] = module_name;
|
||||
end
|
||||
|
||||
modules_disabled = env_disabled_modules
|
||||
|
||||
|
||||
-- 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 = ENV_PROSODY_S2S_SECURE_AUTH ~= "0"
|
||||
|
||||
-- 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 = ENV_PROSODY_C2S_RATE_LIMIT or "10kb/s";
|
||||
};
|
||||
s2sin = {
|
||||
rate = ENV_PROSODY_S2S_RATE_LIMIT or "30kb/s";
|
||||
};
|
||||
}
|
||||
|
||||
-- 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 = ENV_PROSODY_SQL_DRIVER and "sql" or ENV_PROSODY_STORAGE or "internal"
|
||||
|
||||
-- For the "sql" backend, you can uncomment *one* of the below to configure:
|
||||
|
||||
if ENV_PROSODY_SQL_DRIVER then
|
||||
sql = {
|
||||
driver = ENV_PROSODY_SQL_DRIVER;
|
||||
database = ENV_PROSODY_SQL_DB;
|
||||
username = ENV_PROSODY_SQL_USERNAME;
|
||||
password = ENV_PROSODY_SQL_PASSWORD;
|
||||
host = ENV_PROSODY_SQL_HOST;
|
||||
}
|
||||
end
|
||||
--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 = (ENV_PROSODY_ARCHIVE_EXPIRY_DAYS or ENV_PROSODY_RETENTION_DAYS or "7").."d" -- 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 = {
|
||||
[ENV_PROSODY_LOGLEVEL or "info"] = "*console";
|
||||
}
|
||||
|
||||
|
||||
-- For more info see https://prosody.im/doc/statistics
|
||||
statistics = ENV_PROSODY_STATISTICS
|
||||
statistics_interval = tonumber(ENV_PROSODY_STATISTICS_INTERVAL) or ENV_PROSODY_STATISTICS_INTERVAL
|
||||
|
||||
|
||||
-- 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 = ENV_PROSODY_CERTIFICATES or "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.
|
||||
|
||||
local pp = require "util.pposix";
|
||||
local vhosts = _split(ENV_PROSODY_VIRTUAL_HOSTS) or {pp.uname().nodename};
|
||||
|
||||
local network_hostname = ENV_PROSODY_NETWORK_HOSTNAME or #vhosts == 1 and vhosts[1];
|
||||
if network_hostname then
|
||||
http_host = network_hostname
|
||||
proxy65_address = network_hostname
|
||||
if ENV_PROSODY_TURN_SECRET and not ENV_PROSODY_TURN_HOST then
|
||||
turn_external_host = network_hostname
|
||||
end
|
||||
end
|
||||
|
||||
for _, vhost in ipairs(vhosts) do
|
||||
VirtualHost (vhost)
|
||||
end
|
||||
|
||||
------ 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
|
||||
|
||||
for _, component_def in ipairs(_split(ENV_PROSODY_COMPONENTS) or {}) do
|
||||
local c_name, c_type = _unpack(_split(component_def, ":"));
|
||||
Component (c_name) (c_type)
|
||||
|
||||
if c_type == "muc" then
|
||||
modules_enabled = _split(ENV_PROSODY_MUC_MODULES)
|
||||
elseif c_type == "http_file_share" then
|
||||
http_file_share_expire_after = 60 * 60 * 24 * tonumber(ENV_PROSODY_UPLOAD_EXPIRY_DAYS or ENV_PROSODY_RETENTION_DAYS or "7")
|
||||
if ENV_PROSODY_UPLOAD_LIMIT_MB then
|
||||
http_file_share_size_limit = (1024 * 1024 * tonumber(ENV_PROSODY_UPLOAD_LIMIT_MB)) + 16
|
||||
end
|
||||
if ENV_PROSODY_UPLOAD_STORAGE_GB then
|
||||
http_file_share_global_quota = 1024 * 1024 * 1024 * tonumber(ENV_PROSODY_UPLOAD_STORAGE_GB)
|
||||
end
|
||||
http_paths = {
|
||||
file_share = "/share";
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
for _, component_def in ipairs(_split(ENV_PROSODY_EXTERNAL_COMPONENTS) or {}) do
|
||||
local c_name, c_secret = _unpack(_split(component_def, ":"));
|
||||
Component (c_name)
|
||||
component_secret = c_secret or ENV_PROSODY_COMPONENT_SECRET
|
||||
end
|
||||
|
||||
---Set up a MUC (multi-user chat) room server on conference.example.com:
|
||||
--Component "conference.example.com" "muc"
|
||||
--- Store MUC messages in an archive and allow users to access it
|
||||
--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
|
||||
|
||||
Include (ENV_PROSODY_EXTRA_CONFIG or "/etc/prosody/conf.d/*.cfg.lua")
|
||||
@@ -0,0 +1,323 @@
|
||||
-- Prosody Configuration File
|
||||
--
|
||||
-- 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.
|
||||
--
|
||||
-- The only thing left to do is rename this file to remove the .dist ending, and fill in the
|
||||
-- blanks. Good luck, and happy Jabbering!
|
||||
|
||||
local _unpack = Lua.table.unpack;
|
||||
local function _split(s, sep)
|
||||
if not s then return nil; end
|
||||
sep = sep or ",";
|
||||
local parts = {};
|
||||
for part in s:gmatch("[^"..sep.."]+") do
|
||||
parts[#parts+1] = part;
|
||||
end
|
||||
return parts;
|
||||
end
|
||||
|
||||
|
||||
---------- Server-wide settings ----------
|
||||
-- Settings in this section apply to the whole server and are the default settings
|
||||
-- for any virtual hosts
|
||||
|
||||
plugin_paths = _split(ENV_PROSODY_PLUGIN_PATHS or "/etc/prosody/modules")
|
||||
|
||||
-- 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 = _split(ENV_PROSODY_ADMINS)
|
||||
|
||||
-- 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 = {
|
||||
|
||||
-- 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
|
||||
--"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
|
||||
}
|
||||
|
||||
if ENV_PROSODY_ENABLE_MODULES then
|
||||
modules_enabled:append(_split(ENV_PROSODY_ENABLE_MODULES))
|
||||
end
|
||||
|
||||
if ENV_PROSODY_TURN_SECRET then
|
||||
modules_enabled:append{ "turn_external" };
|
||||
turn_external_secret = ENV_PROSODY_TURN_SECRET
|
||||
turn_external_host = ENV_PROSODY_TURN_HOST
|
||||
turn_external_port = ENV_PROSODY_TURN_PORT
|
||||
turn_external_tls_port = ENV_PROSODY_TURN_TLS_PORT
|
||||
end
|
||||
|
||||
if ENV_PROSODY_RETENTION_DAYS or ENV_PROSODY_ARCHIVE_EXPIRY_DAYS then
|
||||
modules_enabled:append{ "mam" }
|
||||
end
|
||||
|
||||
modules_disabled = _split(ENV_PROSODY_DISABLE_MODULES)
|
||||
|
||||
|
||||
-- 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 = ENV_PROSODY_S2S_SECURE_AUTH ~= "0"
|
||||
|
||||
use_dane = ENV_PROSODY_USE_DANE and true or false
|
||||
unbound = {
|
||||
-- on Debian this file is included in the package 'dns-root-data'
|
||||
trustfile = ENV_PROSODY_USE_DANE and "/usr/share/dns/root.ds";
|
||||
forward = _split(ENV_PROSODY_DNS_RESOLVERS);
|
||||
}
|
||||
|
||||
-- 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 = ENV_PROSODY_C2S_RATE_LIMIT or "10kb/s";
|
||||
};
|
||||
s2sin = {
|
||||
rate = ENV_PROSODY_S2S_RATE_LIMIT or "30kb/s";
|
||||
};
|
||||
}
|
||||
|
||||
-- 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 = ENV_PROSODY_SQL_DRIVER and "sql" or ENV_PROSODY_STORAGE or "internal"
|
||||
|
||||
-- For the "sql" backend, you can uncomment *one* of the below to configure:
|
||||
|
||||
if ENV_PROSODY_SQL_DRIVER then
|
||||
sql = {
|
||||
driver = ENV_PROSODY_SQL_DRIVER;
|
||||
database = ENV_PROSODY_SQL_DB;
|
||||
username = ENV_PROSODY_SQL_USERNAME;
|
||||
password = ENV_PROSODY_SQL_PASSWORD;
|
||||
host = ENV_PROSODY_SQL_HOST;
|
||||
}
|
||||
end
|
||||
--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 = (ENV_PROSODY_ARCHIVE_EXPIRY_DAYS or ENV_PROSODY_RETENTION_DAYS or "7").."d" -- 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 = {
|
||||
[ENV_PROSODY_LOGLEVEL or "info"] = "*console";
|
||||
}
|
||||
|
||||
|
||||
-- For more info see https://prosody.im/doc/statistics
|
||||
statistics = ENV_PROSODY_STATISTICS
|
||||
statistics_interval = Lua.tonumber(ENV_PROSODY_STATISTICS_INTERVAL) or ENV_PROSODY_STATISTICS_INTERVAL
|
||||
|
||||
|
||||
-- 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 = ENV_PROSODY_CERTIFICATES or "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.
|
||||
|
||||
local pp = Lua.require "prosody.util.pposix";
|
||||
local vhosts = _split(ENV_PROSODY_VIRTUAL_HOSTS) or {pp.uname().nodename};
|
||||
|
||||
local network_hostname = ENV_PROSODY_NETWORK_HOSTNAME or #vhosts == 1 and vhosts[1];
|
||||
if network_hostname then
|
||||
http_host = network_hostname
|
||||
proxy65_address = network_hostname
|
||||
if ENV_PROSODY_TURN_SECRET and not ENV_PROSODY_TURN_HOST then
|
||||
turn_external_host = network_hostname
|
||||
end
|
||||
end
|
||||
|
||||
for _, vhost in Lua.ipairs(vhosts) do
|
||||
VirtualHost (vhost)
|
||||
end
|
||||
|
||||
------ 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
|
||||
|
||||
for _, component_def in Lua.ipairs(_split(ENV_PROSODY_COMPONENTS) or {}) do
|
||||
local c_name, c_type = _unpack(_split(component_def, ":"));
|
||||
Component (c_name) (c_type)
|
||||
|
||||
if c_type == "muc" then
|
||||
modules_enabled = _split(ENV_PROSODY_MUC_MODULES)
|
||||
elseif c_type == "http_file_share" then
|
||||
http_file_share_expire_after = 60 * 60 * 24 * tonumber(ENV_PROSODY_UPLOAD_EXPIRY_DAYS or ENV_PROSODY_RETENTION_DAYS or "7")
|
||||
if ENV_PROSODY_UPLOAD_LIMIT_MB then
|
||||
http_file_share_size_limit = (1024 * 1024 * tonumber(ENV_PROSODY_UPLOAD_LIMIT_MB)) + 16
|
||||
end
|
||||
if ENV_PROSODY_UPLOAD_STORAGE_GB then
|
||||
http_file_share_global_quota = 1024 * 1024 * 1024 * tonumber(ENV_PROSODY_UPLOAD_STORAGE_GB)
|
||||
end
|
||||
http_paths = {
|
||||
file_share = "/share";
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
for _, component_def in Lua.ipairs(_split(ENV_PROSODY_EXTERNAL_COMPONENTS) or {}) do
|
||||
local c_name, c_secret = _unpack(_split(component_def, ":"));
|
||||
Component (c_name)
|
||||
component_secret = c_secret or ENV_PROSODY_COMPONENT_SECRET
|
||||
end
|
||||
|
||||
---Set up a MUC (multi-user chat) room server on conference.example.com:
|
||||
--Component "conference.example.com" "muc"
|
||||
--- Store MUC messages in an archive and allow users to access it
|
||||
--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
|
||||
|
||||
Include (ENV_PROSODY_EXTRA_CONFIG or "/etc/prosody/conf.d/*.cfg.lua")
|
||||
@@ -0,0 +1,323 @@
|
||||
-- Prosody Configuration File
|
||||
--
|
||||
-- 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.
|
||||
--
|
||||
-- The only thing left to do is rename this file to remove the .dist ending, and fill in the
|
||||
-- blanks. Good luck, and happy Jabbering!
|
||||
|
||||
local _unpack = Lua.table.unpack;
|
||||
local function _split(s, sep)
|
||||
if not s then return nil; end
|
||||
sep = sep or ",";
|
||||
local parts = {};
|
||||
for part in s:gmatch("[^"..sep.."]+") do
|
||||
parts[#parts+1] = part;
|
||||
end
|
||||
return parts;
|
||||
end
|
||||
|
||||
|
||||
---------- Server-wide settings ----------
|
||||
-- Settings in this section apply to the whole server and are the default settings
|
||||
-- for any virtual hosts
|
||||
|
||||
plugin_paths = _split(ENV_PROSODY_PLUGIN_PATHS or "/etc/prosody/modules")
|
||||
|
||||
-- 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 = _split(ENV_PROSODY_ADMINS)
|
||||
|
||||
-- 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 = {
|
||||
|
||||
-- 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
|
||||
--"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
|
||||
}
|
||||
|
||||
if ENV_PROSODY_ENABLE_MODULES then
|
||||
modules_enabled:append(_split(ENV_PROSODY_ENABLE_MODULES))
|
||||
end
|
||||
|
||||
if ENV_PROSODY_TURN_SECRET then
|
||||
modules_enabled:append{ "turn_external" };
|
||||
turn_external_secret = ENV_PROSODY_TURN_SECRET
|
||||
turn_external_host = ENV_PROSODY_TURN_HOST
|
||||
turn_external_port = ENV_PROSODY_TURN_PORT
|
||||
turn_external_tls_port = ENV_PROSODY_TURN_TLS_PORT
|
||||
end
|
||||
|
||||
if ENV_PROSODY_RETENTION_DAYS or ENV_PROSODY_ARCHIVE_EXPIRY_DAYS then
|
||||
modules_enabled:append{ "mam" }
|
||||
end
|
||||
|
||||
modules_disabled = _split(ENV_PROSODY_DISABLE_MODULES)
|
||||
|
||||
|
||||
-- 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 = ENV_PROSODY_S2S_SECURE_AUTH ~= "0"
|
||||
|
||||
use_dane = ENV_PROSODY_USE_DANE and true or false
|
||||
unbound = {
|
||||
-- on Debian this file is included in the package 'dns-root-data'
|
||||
trustfile = ENV_PROSODY_USE_DANE and "/usr/share/dns/root.ds";
|
||||
forward = _split(ENV_PROSODY_DNS_RESOLVERS);
|
||||
}
|
||||
|
||||
-- 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 = ENV_PROSODY_C2S_RATE_LIMIT or "10kb/s";
|
||||
};
|
||||
s2sin = {
|
||||
rate = ENV_PROSODY_S2S_RATE_LIMIT or "30kb/s";
|
||||
};
|
||||
}
|
||||
|
||||
-- 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 = ENV_PROSODY_SQL_DRIVER and "sql" or ENV_PROSODY_STORAGE or "internal"
|
||||
|
||||
-- For the "sql" backend, you can uncomment *one* of the below to configure:
|
||||
|
||||
if ENV_PROSODY_SQL_DRIVER then
|
||||
sql = {
|
||||
driver = ENV_PROSODY_SQL_DRIVER;
|
||||
database = ENV_PROSODY_SQL_DB;
|
||||
username = ENV_PROSODY_SQL_USERNAME;
|
||||
password = ENV_PROSODY_SQL_PASSWORD;
|
||||
host = ENV_PROSODY_SQL_HOST;
|
||||
}
|
||||
end
|
||||
--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 = (ENV_PROSODY_ARCHIVE_EXPIRY_DAYS or ENV_PROSODY_RETENTION_DAYS or "7").."d" -- 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 = {
|
||||
[ENV_PROSODY_LOGLEVEL or "info"] = "*console";
|
||||
}
|
||||
|
||||
|
||||
-- For more info see https://prosody.im/doc/statistics
|
||||
statistics = ENV_PROSODY_STATISTICS
|
||||
statistics_interval = Lua.tonumber(ENV_PROSODY_STATISTICS_INTERVAL) or ENV_PROSODY_STATISTICS_INTERVAL
|
||||
|
||||
|
||||
-- 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 = ENV_PROSODY_CERTIFICATES or "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.
|
||||
|
||||
local pp = Lua.require "prosody.util.pposix";
|
||||
local vhosts = _split(ENV_PROSODY_VIRTUAL_HOSTS) or {pp.uname().nodename};
|
||||
|
||||
local network_hostname = ENV_PROSODY_NETWORK_HOSTNAME or #vhosts == 1 and vhosts[1];
|
||||
if network_hostname then
|
||||
http_host = network_hostname
|
||||
proxy65_address = network_hostname
|
||||
if ENV_PROSODY_TURN_SECRET and not ENV_PROSODY_TURN_HOST then
|
||||
turn_external_host = network_hostname
|
||||
end
|
||||
end
|
||||
|
||||
for _, vhost in Lua.ipairs(vhosts) do
|
||||
VirtualHost (vhost)
|
||||
end
|
||||
|
||||
------ 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
|
||||
|
||||
for _, component_def in Lua.ipairs(_split(ENV_PROSODY_COMPONENTS) or {}) do
|
||||
local c_name, c_type = _unpack(_split(component_def, ":"));
|
||||
Component (c_name) (c_type)
|
||||
|
||||
if c_type == "muc" then
|
||||
modules_enabled = _split(ENV_PROSODY_MUC_MODULES)
|
||||
elseif c_type == "http_file_share" then
|
||||
http_file_share_expire_after = 60 * 60 * 24 * tonumber(ENV_PROSODY_UPLOAD_EXPIRY_DAYS or ENV_PROSODY_RETENTION_DAYS or "7")
|
||||
if ENV_PROSODY_UPLOAD_LIMIT_MB then
|
||||
http_file_share_size_limit = (1024 * 1024 * tonumber(ENV_PROSODY_UPLOAD_LIMIT_MB)) + 16
|
||||
end
|
||||
if ENV_PROSODY_UPLOAD_STORAGE_GB then
|
||||
http_file_share_global_quota = 1024 * 1024 * 1024 * tonumber(ENV_PROSODY_UPLOAD_STORAGE_GB)
|
||||
end
|
||||
http_paths = {
|
||||
file_share = "/share";
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
for _, component_def in Lua.ipairs(_split(ENV_PROSODY_EXTERNAL_COMPONENTS) or {}) do
|
||||
local c_name, c_secret = _unpack(_split(component_def, ":"));
|
||||
Component (c_name)
|
||||
component_secret = c_secret or ENV_PROSODY_COMPONENT_SECRET
|
||||
end
|
||||
|
||||
---Set up a MUC (multi-user chat) room server on conference.example.com:
|
||||
--Component "conference.example.com" "muc"
|
||||
--- Store MUC messages in an archive and allow users to access it
|
||||
--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
|
||||
|
||||
Include (ENV_PROSODY_EXTRA_CONFIG or "/etc/prosody/conf.d/*.cfg.lua")
|
||||
+14
-5
@@ -1,13 +1,22 @@
|
||||
#!/bin/bash
|
||||
#!/bin/bash -e
|
||||
set -e
|
||||
|
||||
data_dir_owner="$(stat -c %u "/var/lib/prosody/")"
|
||||
if [[ "$(id -u prosody)" != "$data_dir_owner" ]]; then
|
||||
# FIXME this fails if owned by root
|
||||
usermod -u "$data_dir_owner" prosody
|
||||
fi
|
||||
if [[ "$(stat -c %u /var/run/prosody/)" != "$data_dir_owner" ]]; then
|
||||
chown "$data_dir_owner" /var/run/prosody/
|
||||
fi
|
||||
|
||||
if [[ "$1" != "prosody" ]]; then
|
||||
exec prosodyctl $*
|
||||
exec prosodyctl "$@"
|
||||
exit 0;
|
||||
fi
|
||||
|
||||
if [ "$LOCAL" -a "$PASSWORD" -a "$DOMAIN" ] ; then
|
||||
prosodyctl register $LOCAL $DOMAIN $PASSWORD
|
||||
if [[ "$LOCAL" && "$PASSWORD" && "$DOMAIN" ]]; then
|
||||
prosodyctl register "$LOCAL" "$DOMAIN" "$PASSWORD"
|
||||
fi
|
||||
|
||||
exec "$@"
|
||||
exec runuser -u prosody -- "$@"
|
||||
|
||||
Reference in New Issue
Block a user