dcomms
Decentralized communications that work with or without the Internet
Prerequisites
docker
using the docker guide (https://docs.docker.com/engine/install/)curl
,aria2
,tor
- A directory named
/var/www/dcomms
created on the host for the website document root. - A subdomain with the A record pointed to the IP address of a node for automatic issuance of a Let's Encrypt SSL certificate.
- A subdomain with the MX record pointed to the A record of a node for DeltaChat mail delivery.
- (Optional) A Tor hidden service configured, and listening on port 80 and 8448.
Introduction
dcomms
is a bundle of decentralized communication software running as services in the form of a docker swarm stack.
It is used to rapidly deploy a server hosting a variety of decentralized, encrypted, and federated communications platforms such as Matrix and DeltaChat across multiple hosts.
Let's Encrypt TLS certificates are automatically issued and managed by the Caddy container across all services.
Service containers
The dcomms stack leverages single node, non-replicated containers of the following services built from the latest images below:
- CENO client courtesy of censorship.no
- Synapse Docker courtesy of matrix.org
- Element courtesy of vector-im
- Mau courtesy of the maubot dev team
- Caddy courtesy of the Caddy Docker Maintainers
- docker-mailadm, includes dovecot and postfix, courtesy of DeltaChat
- Mastodon, a modified version of the original Mastodon container that includes sendmail.
Ports
CENO client: 28729/udp
Caddy (webserver): 443/tcp, 80/tcp, 8448/tcp
DeltaChat (postfix/dovecot): 587/tcp 143/tcp
- Note:
dcomms
leverages docker host networking and therefore we recommend denying access to all other unnecessary ports at the host level.
Installation
Point the following A records to the docker worker you wish to use for deployment:
matrix.server1.example.org -> IP of your server
chat.server1.example.org -> IP of your server
server1.example.org -> IP of your server
Point the following MX record to the A record:
server1.example.org -> server1.example.org
Clone or download this repository. Review ./install.sh
and make any that may be required for your environment.
Install
Once your server meets the prerequisites, installation simply involves running ./install.sh
and responding to any prompts. Configs will be automatically placed in your DCOMMS_DIR
and a run.sh
script will be generated.
- Note: If you wish to reinstall dcomms you will need to delete all docker volumes, and the
conf
directory inDCOMMS_DIR
before runninginstall.sh
again.
Redeploy
In the future, if you need to start the dcomms containers again simply run the ./run.sh
program in your DCOMMS_DIR
.
Tor
If you wish to provide users with a Tor hidden service address by which they can access your services, you must first install and configure Tor.
The script will detect if you have Tor installed and prompt you for a hidden service address. You can find this in the hostname
file in your HiddenServiceDir
.
Example:
cat /var/lib/tor/onion_service/hostname
Post installation
- Copy a pre-existing website into
/var/www/dcomms/
across all docker nodes or checkout all files from either the dcomms-web repo (UA) or the chatv3 repo (RU) into the same location. - Optionally visit
https://server1.example.org
to view the website. - Optionally visit
https://chat.server1.example.org
to view the Element service. - Optionally configure a Matrix client to use
https://matrix.server1.example.org
as the homeserver.