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:
docker compose upOpen 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
Upload the release
Download the Community Edition zip, unzip it, and upload the folder via File Manager or FTP.
- 2
Create a Node application
Point it at that folder. In the hosting terminal run
npm run setup(scripts/setup.js). - 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)
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/installRoot 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/installstreams SSE steps: migrations, site row, admin user, default settings, English language,STATE=INSTALLED.GET /api/install/status→{ installed }.GET /api/install/completesets thejf_installedcookie.- 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.