Ethora is a chat and messaging platform you run on your own server: an API, a web chat and admin panel, and an XMPP server, with mobile and web SDKs on top. Ethora Core is free, no license key needed, with per-server limits (see Editions).
This repository installs and updates it from published Docker images. One command installs, one updates.
On a fresh Ubuntu 22.04 or 24.04 server (2 vCPU, 4 GB RAM, ports 80 and 443
open), as a user with sudo:
git clone https://github.com/dappros/ethora-install.git ~/ethora-install-shared
cd ~/ethora-install-shared
deploy/scripts/setup.sh --domain chat.example.com --admin-email you@example.com
sudo deploy/scripts/install.shAbout 10 minutes later, open https://app.chat.example.com and sign in with
your e-mail and the password setup.sh printed.
Or, as one line (it clones this repository and runs the same two steps, asking for anything you leave out):
curl -fsSL https://get.ethora.com | bash -s -- --domain chat.example.com --admin-email you@example.comBefore you run it, create four DNS records pointing at the server, all plain
A (or AAAA) records, no proxy:
| Record | Points to |
|---|---|
api.chat.example.com |
your server's IP |
app.chat.example.com |
your server's IP |
xmpp.chat.example.com |
your server's IP |
files.chat.example.com |
your server's IP |
(chat.example.com is your root; every host derives from it. A wildcard
*.chat.example.com record covers all four.)
No domain yet? Use a magic DNS name for a test install: with server IP
203.0.113.10, pass --domain 203-0-113-10.sslip.io. It resolves
everywhere, gets a real Let's Encrypt certificate, and needs no DNS setup.
The admin panel after a fresh install (Ethora Core v2610.5 UNREGISTERED
in the corner) and the License page where you register for free:
setup.sh writes deploy/config/deploy.yml: it derives the four hostnames
from your root domain, generates every secret and password, and prints the
admin password once. Run it with no flags to be prompted instead. Nothing is
installed yet; the file is fully commented and can be edited before the
next step.
install.sh installs Docker, nginx and certbot if they are missing, pulls the
images from Docker Hub, obtains certificates, starts the databases and the
three Ethora services, creates your base app and admin account, and runs a
health check. It is safe to run again after a failure.
What you get:
| Service | Image | Host |
|---|---|---|
| API | dappros/ethora-api |
api.<root> (Swagger at /api-docs/) |
| Web chat and admin panel | dappros/ethora-frontend |
app.<root> |
| XMPP server (ejabberd with the Ethora modules) | dappros/ethora-xmpp |
xmpp.<root> |
| File storage | MinIO | files.<root> |
| MongoDB, MySQL, Redis, Centrifugo | stock images | internal |
The same server as one compose project, for hosts and platforms that run
compose files (Coolify, Dokploy, Portainer, a plain Docker host): copy
deploy/compose/ to the server, run ./configure.sh --domain chat.example.com --admin-email you@example.com, then docker compose up -d. Caddy obtains the certificates; nothing is installed on the
host beyond Docker. Details, backup and update steps in its
README.
The same images are packaged for the places people already get software. The full, current list with status is at https://ethora.com/get/; this repository holds the sources.
| Channel | What you get | Where |
|---|---|---|
| AWS Marketplace | AMI with a first-boot setup page; CloudFormation template for unattended installs | listing, sources in deploy/aws/ |
| Azure, DigitalOcean, Vultr, Akamai (Linode) | Same first-boot setup page as a VM offer, 1-Click Droplet, app image, StackScript | Listings pending; links appear at https://ethora.com/get/ |
| Kubernetes (Helm) | helm install ethora oci://registry-1.docker.io/dappros/ethora-core --set rootDomain=... --set admin.email=... |
Artifact Hub, chart in deploy/helm/ |
| Portainer, Coolify, Dokploy | App template / git deploy from the compose project | deploy/compose/platforms/ |
| Cloudron | One-click app | Cloudron App Store, package in deploy/cloudron/ |
| Umbrel, CasaOS / ZimaOS | App store packages | Store listings pending |
| Docker Hub | dappros/ethora-api, ethora-frontend, ethora-xmpp, ethora-compose-init, the chart and the Cloudron package |
https://hub.docker.com/u/dappros |
A managed dedicated server with an enterprise SLA, run by Ethora in your cloud account or ours, is the direct route: https://ethora.com/chat-sdk/self-hosted-chat-server-aws/.
cd ~/ethora-install-shared
git pull
sudo deploy/scripts/update.sh --ref mainmain always is the current stable release line, so the same command keeps
working across releases. Release lines are named by year and month
(2610, 2611, ...) and exist as branches: clone one with -b 2610 and
update with --ref 2610 to stay pinned. Before a new line reaches main,
its changes are in docs/RELEASE_NOTES_OPERATORS.md.
Roll back with --rollback <commit> using the commit the update log printed
at its start.
| Ethora Core | Ethora Core, registered | Ethora Enterprise | |
|---|---|---|---|
| Price | free | free | per agreement |
| How | just install | admin panel, License page, "Register for free" (domain plus e-mail) | license key from Dappros |
| Apps per server | 5 | 10 | unlimited |
| User accounts per server | 500 | 5,000 | unlimited |
| Push notifications, AI agents, compliance logging, SSO, multi-tenant hosting | included | ||
| Support | community | e-mail: support@ethora.com | SLA |
The limits only stop creating apps and accounts beyond them; nothing else is ever gated and nothing expires. Details: feature schedule. Licence: Ethora Core Software License. Enterprise: sales@ethora.com.
| Path | Purpose |
|---|---|
~/ethora-install-shared |
this checkout, and the only deploy.yml |
~/ethora |
the live install (rebuilt by every update) |
~/ethora-data |
your data: MongoDB, MinIO, MySQL, Redis. Back this up. |
Useful commands:
deploy/scripts/health-check.sh # every service, licence state, public URLs
docker ps # the containers
docker logs --tail 200 ethora-backend # API log (ethora-backend-jobs, deploy-xmpp-1, ...)
sudo deploy/scripts/install.sh --reinstall --yes # wipe the install (keeps your data)- Certificate failed. DNS is not pointing at this server yet, or port 80
is blocked. Fix it and run
sudo deploy/scripts/install.shagain. - Port 80 or 443 in use. Something else is listening (Apache, another nginx). Stop it; the installer runs its own nginx.
- Can I put it behind Cloudflare? Install with plain DNS records first;
proxying can be switched on afterwards for
app.andapi..xmpp.must stay unproxied. - Mobile apps? The Ethora SDKs for iOS, Android and React connect to
api.<root>andxmpp.<root>; see https://ethora.com/chat-sdk/ for each SDK and https://ethora.com/get/#requirements for the DNS layout. - Where is the source? Ethora Core ships as images. The SDKs and the
web client are open source under the
dapprosorganisation.
- docs/OPERATOR_QUICKSTART.md: install, update, rollback, checks, licence, backup on one page.
- deploy/README.md: the full reference (every configuration key, every service).
- docs/runbooks/: backup and restore, troubleshooting, migrations.
- docs/legal/: licence, feature schedule, support policy, privacy notice, third-party notices.
Security issues: see SECURITY.md. Contributions: CONTRIBUTING.md.
Run deploy/scripts/health-check.sh first; it names the failing component.
Open an issue in this repository, or e-mail
support@ethora.com, with its output and the
install or update log. Never send deploy.yml or .deploy.env: they hold
every secret of your install.

