Run your own team chat with Docker Compose
Parletto is self-hosted team chat that runs in one Docker container with SQLite and one volume, with no Redis or external database. Here is what it needs and how the Compose quick start works.
If you want team chat on your own server, Parletto is built for it. It runs in one Docker container, keeps its data in SQLite on one volume, and does not need Redis or an external database. This post covers what Parletto is, what it needs, and how the Docker Compose quick start works. The self-hosting guide has the full steps.
What Parletto is
Parletto is an open-source team chat app you can run yourself. It has:
- organizations,
- public channels and direct messages,
- threaded replies,
- @mentions and emoji reactions,
- file attachments, along with avatars and organization icons,
- real-time delivery over WebSockets.
It is a Ruby on Rails app with a React front end and SQLite for storage. The source is opening shortly under the MIT license.
What it needs
- Docker. The server needs Docker and nothing else: no Ruby, no Node.
- One volume. Everything Parletto stores lives in
/rails/storageinside the container: the SQLite databases and, by default, uploaded files. With Docker Compose this is theparletto_storagevolume, so your data survivesdocker compose downand image rebuilds. - SQLite, and nothing besides it. SQLite holds the app data, the cache, the background job queue and the WebSocket pub/sub. No Redis or external database is needed.
Uploaded files go on local disk in that same volume unless you set up Cloudflare R2, which is optional.
The quick start, in brief
The Compose setup is one docker-compose.yml with a single web service and an .env file that starts as a copy of .env.example. From a checkout of the source:
cd parletto-core
cp .env.example .env
echo "SECRET_KEY_BASE=$(openssl rand -hex 64)" >> .env
docker compose up -d --build
SECRET_KEY_BASE signs sessions and cookies. Keep it stable, because changing it signs everyone out.
Then open http://localhost:3000 and sign up. A fresh database has no accounts, so the first person to sign up creates the first organization.
A few things happen for you along the way:
- When the container starts, it creates or migrates the SQLite databases.
- Background jobs, such as emails, run inside the web process.
- The container has a health check on
/up.
A prebuilt linux/amd64 image is also published, and docker-compose.yml points at it. Once the source is public, you can skip the checkout and the --build: put the compose file next to your .env and run docker compose up -d. To upgrade, run docker compose pull && docker compose up -d. Migrations run when the new container starts.
From a trial to a real server
.env.example sets DISABLE_SSL=true so the app works over plain HTTP on localhost. On a real server, delete that line and serve HTTPS. You can either let Parletto get a Let’s Encrypt certificate itself or put your own reverse proxy in front of it.
The production guide covers HTTPS, email, file storage, backups and upgrades. Start with the self-hosting guide for the setup itself.
Rather not host it?
If you would rather not run Parletto yourself, a hosted version is available at app.parletto.com. Sign up to start a team there.