Skip to content

Install Folio

Folio needs four things from a host: a long-running process, PostgreSQL, Redis and a persistent disk for the Git repositories of your spaces. Real-time editing also needs WebSocket connections. Pick the platform you already use, or run one command on a Linux server.

One command on a Linux server

The script checks Docker, generates the secrets, starts Folio with PostgreSQL and Redis, and waits until it answers. It can set up automatic HTTPS if you give it a domain.

bash
curl -fsSL https://raw.githubusercontent.com/evergreen-it-dev/folio/main/deploy/vps/install.sh | bash

Details, options, updates and backups are on the Linux server page.

Not ready to install?

Try the public demo: https://demo.foliowiki.online. Pick Sam on the sign-in screen. The login is shared and the data resets every 24 hours, so don't enter personal data or API keys.

Open the demo

What Folio needs from a host

  • A long-running process

    Folio is a server that stays up. It is not a function that runs per request.

  • PostgreSQL

    The index, access rights and live-editing state.

  • Redis

    Transient data only: presence and rate limits. It is not persisted.

  • A persistent disk

    The Git repositories of your spaces and uploaded files.

  • WebSocket

    Real-time editing needs connections that stay open.

Pick a platform

Every page has the steps, the settings, how to update and how to back up.

Linux server (VPS)

Any Linux server with Docker

Effort:
One command
Minimum:
2 GB RAM, 1 vCPU, 10 GB disk
Persistent disk:
Yes
Cost:
The price of the server

Coolify

Self-hosted PaaS you run on your own server

Effort:
Paste a Compose file
Minimum:
A server with 2 GB RAM or more
Persistent disk:
Yes (Docker volume)
Cost:
The price of your server

Railway

Hosted platform with managed Postgres and Redis

Effort:
About five minutes by hand; template not created yet
Minimum:
Hobby plan or higher
Persistent disk:
Yes (volume)
Cost:
Billed by use; the volume is billed per GB

Render

Hosted platform; Blueprint from a repository file

Effort:
One Blueprint
Minimum:
Standard web service plan (2 GB RAM), 10 GB disk
Persistent disk:
Paid plans only
Cost:
Paid plans: standard web service, basic-256mb PostgreSQL, disk

DigitalOcean

Cloud servers (Droplets)

Effort:
A Droplet with a cloud-init script
Minimum:
Basic 2 GB / 1 vCPU Droplet
Persistent disk:
Yes (Droplet disk)
Cost:
The price of the Droplet; 4 GB is comfortable for a team

Dokploy

Self-hosted PaaS

Effort:
Compose file and three variables
Minimum:
A server with 2 GB RAM or more
Persistent disk:
Yes (Docker volume)
Cost:
The price of your server

CapRover

Self-hosted PaaS on Docker Swarm

Effort:
One-Click App YAML
Minimum:
A server with 2 GB RAM or more
Persistent disk:
Yes (volumes)
Cost:
The price of your server

Easypanel

Server control panel with app templates

Effort:
Three services by hand, about 3 minutes
Minimum:
A server with 2 GB RAM or more
Persistent disk:
Yes (volume)
Cost:
The price of your server

Portainer

Web UI for Docker hosts

Effort:
Paste a stack
Minimum:
A Docker host with 2 GB RAM or more
Persistent disk:
Yes (Docker volume)
Cost:
The price of your Docker host

Fly.io

Hosted platform; a volume attaches to one machine

Effort:
Manual recipe
Minimum:
One shared-cpu-1x machine with 2 GB RAM, 10 GB volume
Persistent disk:
Yes (volume, one machine)
Cost:
Managed Postgres from about $38 a month, plus the machine and the volume

Sizing

Measured on a running instance: the app idles at about 450 MB of RAM, PostgreSQL uses 30 to 120 MB and Redis about 10 MB. PDF export starts a headless Chromium on demand and adds a few hundred MB while it runs.

Resources Folio needs
ResourceMinimumComfortable (a team of about 20)
RAM2 GB for the whole stack4 GB
CPU1 vCPU2 vCPU
Disk10 GB (the image alone is about 1.7 GB unpacked)20 GB, growing with your content

What every install does the same way

  • Secrets are generated, never shipped as defaults: the database password and FOLIO_SECRET. FOLIO_SECRET encrypts saved Git tokens and personal AI keys. Never change it afterwards.
  • PUBLIC_URL is the address people open. Invitation and share links are built from it, and it decides whether cookies are HTTPS-only. It must match the address in the browser.
  • PostgreSQL and Redis are reachable only from inside the stack.
  • A backup is always two things: the database dump and the data volume (/app/data).

Where Folio cannot run

  • Vercel, Netlify and Cloudflare Pages cannot run Folio. They have no disk and no process that stays alive. AWS Lambda has the same problem.
  • DigitalOcean App Platform cannot run Folio either. It has no persistent volumes, and a service's filesystem is wiped on every deploy, so an instance there would lose its pages at the next deploy. Use a Droplet instead.

Verify your install

On a fresh instance, from a clone of the repository, run the smoke test. It needs Node 18 or newer. It creates the first account, a space and a page, and opens a real-time WebSocket connection to the page. Delete the instance, or that space, afterwards.

bash
node deploy/smoke.mjs https://wiki.example.com