An open source software, which enables making a self-hosted microblogging service
This project is under development and is very unstable; there may be breaking changes. We do our best to avoid that since we operate a real server. But sometimes we have to make difficult choices.
We recommend using Docker. Local setup (without Docker) is also supported for development.
Upgrading from an older installation? If your database was previously initialized via
schema.sql(before the golang-migrate migration system was introduced), see docs/migrate-from-schema-sql.md for upgrade steps.
Prerequisites: Docker
Clone the repository and set up config files:
git clone https://github.com/bettaworx/ciel
cd ciel
cp .env.example .env
cp docker-compose.yml.example docker-compose.yml
cp apps/backend/config/config.yaml.example apps/backend/config/config.yamlBy default, the frontend and backend run independently: frontend on port 3000
and backend on port 6137. Set API_BASE_URL in .env to the backend URL that
browsers can reach. A host-level reverse proxy is optional deployment
infrastructure, not required by the application containers.
The frontend container does not proxy backend REST or WebSocket traffic. Browser
clients call the backend directly using API_BASE_URL; the Next.js server uses
INTERNAL_API_BASE_URL only for server-rendered assets such as icons and the
web app manifest.
Operational settings are provided at runtime through Docker Compose and .env.
Build provenance is the exception: frontend and backend images intentionally
embed the source commit and branch so a running deployment can be verified.
Edit .env and set the required secrets (passwords, JWT secret, etc.):
nano .envBuild the images:
docker compose buildTo keep setup instructions focused, detailed policy guidance is documented separately:
Initialize the database (run once on first setup):
docker compose run --rm backend /app/migrate-db upStart all services:
docker compose up# Apply all pending migrations
docker compose run --rm backend /app/migrate-db up
# Roll back the latest migration
docker compose run --rm backend /app/migrate-db down 1
# Roll back all migrations
docker compose run --rm backend /app/migrate-db down -all