Ciele

Installation

Start the current single-host Docker Compose deployment.

No terminal? Use the desktop app

Ciele Desktop performs every step on this page for you, including generating the secrets and starting the stack. It needs only Docker Desktop. This page is the server path.

Requirements

  • Install Git.
  • Install Docker with Docker Compose.
  • Reserve sufficient disk space for images, Postgres, and uploaded files.
  • Reserve more memory when you enable the optional workers.

One command

The installer performs every step in the next section: it verifies the prerequisites, fetches the source into ./ciele, and runs bootstrap.sh.

curl -fsSL https://ciele.app/install.sh | sh

Pass bootstrap flags through the pipe with -s --, and set CIELE_DIR to choose the checkout directory or CIELE_REF to install a release tag:

curl -fsSL https://ciele.app/install.sh | sh -s -- --seed

The installer never deletes anything: if the target directory exists and is not a Ciele checkout, it stops and tells you.

On a Mac without Docker, the installer does not stop at an error. It opens Ciele Desktop, downloading the release first when the app is absent. The guided setup there links Docker Desktop and starts the same stack this page describes. On Linux the installer refuses, because there is no desktop app to hand the work to.

Bootstrap the stack

To perform the same steps by hand:

git clone https://github.com/MattiaIppoliti/ciele.git
cd ciele
./deploy/bootstrap.sh

The script generates required secrets in deploy/.env. It then builds and starts the default profiles.

Open http://localhost:3000 after the services become healthy. The first account becomes the Organization owner.

Use ./deploy/bootstrap.sh --seed to add sanitized demonstration content.

Run published images instead of building

Building app, migrate and cron from the checkout takes considerable time and requires the full repository. Every release also publishes those three as container images:

./deploy/bootstrap.sh --images v0.4.0

The command writes two settings into deploy/.env and pulls instead of building:

COMPOSE_FILE=docker-compose.yml:docker-compose.images.yml
CIELE_IMAGE_TAG=v0.4.0

Because both live in deploy/.env, a later docker compose up -d in that directory stays in image mode. Clear both settings to return to building from source. Set CIELE_IMAGE_REGISTRY to use a mirror or your own rebuild.

Profiles, service ordering and the database layer are identical in both modes. Only the origin of those three services changes.

Recreate the container after changing the public URL

The published application image resolves SUPABASE_PUBLIC_URL once, when the container starts, because Next.js inlines that class of value at build time. Run docker compose up -d to recreate the container after you change it. A restart alone keeps the previous value.

Default profiles

ProfileDefaultServices
dbYesPostgres, pgvector, authentication, data API, storage, and gateway.
migrateYesPending migrations and required storage buckets.
appYesAdministrator console, widget runtime, and API v1.
cronYesScheduled application jobs.
workersNoGraph retrieval and JavaScript-rendering crawl services.
studioNoDatabase administration interface.

Inspect the stack

docker compose -f deploy/docker-compose.yml ps
docker compose -f deploy/docker-compose.yml logs -f app

The default configuration publishes the application on port 3000 and the database gateway on port 8000. Both bind to 127.0.0.1, so nothing is reachable from another machine until you put a reverse proxy in front. Set BIND_ADDRESS=0.0.0.0 in deploy/.env to publish them on every interface instead. Postgres is never published. The database console (Studio) always stays on loopback. Reach it through an SSH tunnel.

Add TLS before public use

The Compose stack serves plain HTTP. Put a trusted reverse proxy in front of every public origin.

The application checks this at startup. It reads PUBLIC_URL, CIELE_PUBLIC_ORIGIN and NEXT_PUBLIC_APP_URL. When any one of them starts with http:// and does not point at the local machine, the application does not start. The container log names the variable. The default PUBLIC_URL=http://localhost:3000 passes the check. To run over plain HTTP on purpose, for example on a private network, set CIELE_ALLOW_INSECURE_HTTP=1 in deploy/.env.

Once a public origin exists, set CIELE_PUBLIC_ORIGIN in deploy/.env to that HTTPS URL. Links that go into an email, such as the newsletter confirmation, are built from this value. Without it, the application refuses to send those emails. It does not build a link from the request's Host header.

On this page