Install Folio on DigitalOcean
You use DigitalOcean. A plain Droplet works well and gets the same install as any VPS.
What you need
- A DigitalOcean account and an SSH key.
- A Basic 2 GB / 1 vCPU Droplet at the minimum; 4 GB is comfortable for a team. The 25 GB disk is enough to start. Pick the Ubuntu 24.04 image.
- For HTTPS: a domain whose DNS A record points at the Droplet.
Before you start
Not App Platform
DigitalOcean App Platform has no persistent volumes: "App Platform does not currently support volumes", and a service's local filesystem is wiped on every deploy. Folio stores the Git repositories of your spaces on disk, so it cannot run there. A "Deploy to DO" button would give you an instance that loses its pages at the next deploy. There is no such button for that reason.
Steps
Step 1: Create > Droplets. Choose a region, Ubuntu 24.04, the 2 GB size, and your SSH key.
Step 2: Under Advanced Options > Add Initialization scripts (free), paste the script below. As written it runs Folio on the Droplet's IP over plain http. For a real instance, swap in the commented line with your domain.
cloud-init.yaml#cloud-config # Paste into "Initialization scripts" when you create a Droplet (Ubuntu 24.04). # Installs Docker, then Folio with generated secrets. Follow the progress with: # tail -f /var/log/cloud-init-output.log # # As written it runs Folio on http://<droplet-ip>:4870, to try it. For a real # instance, use the second command instead: replace wiki.example.com with your # domain (its DNS A record must point at the Droplet) and swap the two lines. package_update: true packages: - curl - ca-certificates runcmd: - curl -fsSL https://get.docker.com | sh - FOLIO_YES=1 bash -c "$(curl -fsSL https://raw.githubusercontent.com/evergreen-it-dev/folio/main/deploy/vps/install.sh)" # - FOLIO_YES=1 FOLIO_DOMAIN=wiki.example.com bash -c "$(curl -fsSL https://raw.githubusercontent.com/evergreen-it-dev/folio/main/deploy/vps/install.sh)"Step 3: Create the Droplet. Installing takes about five minutes. If you set a domain, create the DNS A record pointing at the Droplet's IP first or soon after; Caddy gets the certificate as soon as DNS answers. Follow the progress with tail -f /var/log/cloud-init-output.log.
Step 4: Open https://your.domain, or http://<droplet-ip>:4870 without a domain.
Step 5: Or do it by hand over SSH.
bashssh root@<droplet-ip> curl -fsSL https://get.docker.com | sh FOLIO_DOMAIN=wiki.example.com bash -c "$(curl -fsSL https://raw.githubusercontent.com/evergreen-it-dev/folio/main/deploy/vps/install.sh)"
Settings
Settings, update and backup work as on any VPS, because the install is the same script. The variables are the ones from the Linux server page.
| Variable | Default | What it does |
|---|---|---|
PUBLIC_URL | set by the script | The address people open. Must match the browser, including https. |
POSTGRES_PASSWORD | generated | Applied when the database is first created. |
FOLIO_SECRET | generated | Encrypts saved Git tokens and personal AI keys. Never change it. |
FOLIO_DOMAIN | empty | Domain for the bundled Caddy (automatic HTTPS). |
FOLIO_IMAGE | ghcr.io/evergreen-it-dev/folio:latest | Pin a release (for example :v0.1.0) to update on your terms. |
FOLIO_PORT, FOLIO_BIND | 4870, 0.0.0.0 | The port, and which addresses may reach it. |
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET | empty | Turn on "Sign in with Google". Register <your address>/api/auth/google/callback with Google. |
GOOGLE_ALLOWED_DOMAINS | empty | Email domains allowed to sign in with Google. Empty means nobody. |
CURSOR_API_KEY | empty | Shared key for the AI assistant. Without it each person adds their own. |
Update
Same as on a VPS. The installer is saved on the Droplet. It takes a backup, pulls the newest image and restarts.
cd /opt/folio && ./install.sh updateBack up
Same as on a VPS. This writes the database and the data volume to /opt/folio/backups. Copy them off the Droplet.
cd /opt/folio && ./install.sh backupTurn on DigitalOcean Backups for the Droplet as a second layer, and add a Cloud Firewall that allows only ports 22, 80 and 443.
Limits and honest notes
- Without a domain the address is plain http. Use it to try Folio, not to host a team on the open internet.
- There is no DigitalOcean Marketplace 1-Click listing. That is a separate process (a Droplet snapshot built and submitted for review) and is not done.
Platform documentation
Check the installation
From a clone of the repository, run the smoke test against a fresh instance. It needs Node 18 or newer. It creates the first account, a space and a page, and opens a WebSocket connection to the page. Delete the instance, or that space, afterwards.
node deploy/smoke.mjs https://wiki.example.comOther ways to install
Compare all platformsNot 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.