Self-hosting¶
A Taylis server runs on one Linux machine with Docker Compose. It does not use Redis, Kafka or Kubernetes. The same setup is designed for several dozen users and millions of messages.
Requirements¶
| What | Details |
|---|---|
| Server | Linux (tested on Debian 12 / 13), 2 vCPU / 4 GB RAM recommended (add swap on 2 GB) |
| Software | Docker Engine with the compose plugin |
| Domain name | A DNS name pointing at the server (for example chat.example.com) |
| Ports | TCP 80 and 443 (also used to obtain the certificate); UDP 443 for HTTP/3 |
| Disk | Room for attachments (several GB if you import a large workspace) and backups |
Push notifications additionally need an Apple Developer Program membership (iOS) and a Firebase project (Android).
Components¶
flowchart TD
U["users' apps<br>and browsers"] -- "HTTPS" --> C
subgraph host["Docker Compose"]
C["caddy<br>TLS, browser client"] --> APP["app<br>FastAPI, WebSocket"]
APP --> DB[("db<br>PostgreSQL + PGroonga")]
APP --> OS[("objectstore<br>versitygw")]
subgraph closed["internal-only network"]
CV["converter<br>Gotenberg"]
end
APP --> CV
end
APP -. "push" .-> P["APNs / FCM"]
| Service | Role |
|---|---|
caddy |
Terminates TLS (certificates are obtained automatically), sends /api/* to the app and serves the browser client |
app |
The Taylis server (Python / FastAPI). Applies database migrations when it starts |
db |
PostgreSQL with PGroonga for Japanese and English full-text search |
objectstore |
Attachment storage (versitygw: the S3 API on top of a plain directory) |
converter |
Turns Office documents into PDF previews; it cannot reach the host or the internet |
All state lives in two places: the PostgreSQL volume and the versitygw data directory. Backups copy exactly these
two (infra/backup.sh, infra/restore.sh).
Next steps¶
- Quick start: start the server and create the first administrator.
- The full operations guide (in Japanese) is infra/README.md: backups and restores, push notifications (APNs / FCM), running behind an existing reverse proxy, automatic deployment from release tags, document previews and imports from Slack and Mattermost. Every setting is listed in infra/.env.example.
What operators can see
Admins who are not members cannot read private channels and DMs in the apps. However, anyone with access to the server, the database or the backups can read every message. Tell your users, and decide who will be an admin and who will run the server.