Skip to main content

Quick start with Docker Compose

This page starts a self-hosted sol2flow with Docker Compose: the app and a PostgreSQL database. Use it to try sol2flow on your own hardware. For a production server, follow Installation afterwards; it adds HTTPS, email and backups.

No server needed

To use sol2flow without running a server, create a cloud account instead.

What you need​

  • A machine with Docker and the Docker Compose plugin (Linux, macOS or Windows with WSL 2).
  • About 1 GB of free memory and a few GB of disk space for the database and uploaded files.
  • openssl (or any other way to create random secrets).

1. Create a folder with two files​

mkdir sol2flow && cd sol2flow

Create compose.yml:

name: sol2flow
services:
app:
image: ghcr.io/sol2flow/sol2flow:${SOL2FLOW_VERSION:-latest}
restart: unless-stopped
env_file: .env
environment:
DATABASE_URL: postgresql://sol2flow:${POSTGRES_PASSWORD:-sol2flow}@db:5432/sol2flow?schema=public
ports: ["3000:3000"]
volumes: [uploads:/data/uploads]
depends_on: { db: { condition: service_healthy } }
db:
image: postgres:18-alpine
restart: unless-stopped
environment: { POSTGRES_USER: sol2flow, POSTGRES_PASSWORD: "${POSTGRES_PASSWORD:-sol2flow}", POSTGRES_DB: sol2flow }
volumes: [pgdata:/var/lib/postgresql] # from PostgreSQL 18 not …/data (data: …/18/docker)
healthcheck: { test: ["CMD-SHELL", "pg_isready -U sol2flow"], interval: 5s, retries: 20 }
volumes: { pgdata: {}, uploads: {} }

Create .env with your own secrets and the first administrator:

cat > .env <<ENV
APP_URL=http://localhost:3000
AUTH_SECRET=$(openssl rand -base64 32)
APP_ENCRYPTION_KEY=$(openssl rand -base64 32)
POSTGRES_PASSWORD=$(openssl rand -hex 16)
BOOTSTRAP_ADMIN_USERNAME=admin
BOOTSTRAP_ADMIN_PASSWORD=choose-a-long-password
ENV

2. Start it​

docker compose up -d
docker compose logs -f app # wait for "applying migrations", then the server start; Ctrl+C stops following

The database schema is created automatically on the first start.

3. Sign in​

Open http://localhost:3000 and sign in with the BOOTSTRAP_ADMIN_USERNAME and BOOTSTRAP_ADMIN_PASSWORD from your .env. That account is the instance's Owner. The instance starts empty: there are no other accounts and no demo data. Then:

  1. Create your first workspace and board.
  2. Open Admin to look at the instance settings (Administration).
  3. Remove BOOTSTRAP_ADMIN_PASSWORD from .env. It's only read while the instance has no users.
Emails

Out of the box, emails (invitations, password resets) are written to the app's log instead of being sent. Set up SMTP before you invite anyone.

Next steps​