JustFlows

Installation

Three install paths: Docker, shared hosting / cPanel, and a full source checkout for developers.

8 min read

Pick the path that matches your machine. All three end at the same browser wizard (/install). After install, the wizard is blocked (blockIfInstalled).

Requirements

  • Docker path: Docker Desktop (or Docker Engine + Compose) only.
  • Shared hosting: a host with Node.js (Hostinger, SiteGround, A2, Plesk, cPanel Node selector, and similar).
  • Source path: Node.js ≥ 20.18 (22+ preferred; Site Health warns below 22), pnpm ≥ 11, and PostgreSQL, MySQL 8+, or MariaDB 10.6+.

Option A — Docker

Recommended for most people. Postgres is bundled. Copy env, set APP_URL and APP_SECRET, then:

bash
docker compose up

Open http://localhost:3000/install. Compose files live under docker/ (docker-compose.yml for Postgres, plus MySQL and MariaDB variants). Uploads and the database persist on volumes.

Option B — Shared hosting / cPanel

  1. 1

    Upload the release

    Download the Community Edition zip, unzip it, and upload the folder via File Manager or FTP.

  2. 2

    Create a Node application

    Point it at that folder. In the hosting terminal run npm run setup (scripts/setup.js).

  3. 3

    Open the domain

    The install wizard starts automatically if the site is not installed yet.

Passenger / Plesk: performance settings write tmp/restart.txt so the app restarts after cache or gzip changes.

Option C — Developers (source)

bash
git clone https://github.com/justflows/justflows
cd justflows
pnpm install
cp .env.example .env
# Set DATABASE_DRIVER, DATABASE_URL (or DB_*), APP_URL, APP_SECRET
pnpm --filter @justflows/server dev
# → http://localhost:3000/install

Root scripts: setup, install:all / install:production, build:server, start (node server.js), Turbo dev / build / test / lint / typecheck, and make-zip for a release archive.

What the wizard does

  • POST /api/install streams SSE steps: migrations, site row, admin user, default settings, English language, STATE=INSTALLED.
  • GET /api/install/status{ installed }.
  • GET /api/install/complete sets the jf_installed cookie.
  • Default settings include active_theme=justflows.default, posts_per_page=10, timezone=UTC, site_public=false, discourage_search_engines=false.

Never commit `.env`

Only example files belong in git. APP_SECRET must be unique per install and at least 32 characters.