Skip to content

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

  1. Step 1: Create > Droplets. Choose a region, Ubuntu 24.04, the 2 GB size, and your SSH key.

  2. 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)"
  3. 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.

  4. Step 4: Open https://your.domain, or http://<droplet-ip>:4870 without a domain.

  5. Step 5: Or do it by hand over SSH.

    bash
    ssh 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.

Environment variables for Folio on DigitalOcean
VariableDefaultWhat it does
PUBLIC_URLset by the scriptThe address people open. Must match the browser, including https.
POSTGRES_PASSWORDgeneratedApplied when the database is first created.
FOLIO_SECRETgeneratedEncrypts saved Git tokens and personal AI keys. Never change it.
FOLIO_DOMAINemptyDomain for the bundled Caddy (automatic HTTPS).
FOLIO_IMAGEghcr.io/evergreen-it-dev/folio:latestPin a release (for example :v0.1.0) to update on your terms.
FOLIO_PORT, FOLIO_BIND4870, 0.0.0.0The port, and which addresses may reach it.
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRETemptyTurn on "Sign in with Google". Register <your address>/api/auth/google/callback with Google.
GOOGLE_ALLOWED_DOMAINSemptyEmail domains allowed to sign in with Google. Empty means nobody.
CURSOR_API_KEYemptyShared 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.

bash
cd /opt/folio && ./install.sh update

Back up

Same as on a VPS. This writes the database and the data volume to /opt/folio/backups. Copy them off the Droplet.

bash
cd /opt/folio && ./install.sh backup

Turn 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.

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

Other ways to install

Compare all platforms

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