Skip to content

Install Folio on Render

You use Render and want the whole stack from one file: the app from the published image, a PostgreSQL database, a Key Value (Redis-compatible) instance and a persistent disk.

Deploy to Render

What you need

  • A Render account with a paid plan. A persistent disk exists only on paid web service plans.
  • The image ghcr.io/evergreen-it-dev/folio, published and public, and render.yaml in the root of the public repository.

Before you start

What it costs, and why not free

Folio keeps the Git repositories of your spaces on disk, and Render offers a persistent disk only on paid web service plans. So the Blueprint uses a paid plan, and there is no free-tier variant that keeps your pages. See Render's pricing for the current prices.

ResourcePlan in the BlueprintWhy
Web servicestandard (2 GB RAM)The app idles near 450 MB; starter (512 MB) is too tight. Edit the plan to starter only for a trial.
Disk10 GB at /app/dataGit repositories and uploads. Can grow, never shrink.
PostgreSQLbasic-256mb, 5 GBThe database holds the index and access rights, not your only copy of the pages.
Key ValuefreeTransient data only.

Steps

  1. Step 1: Click Deploy to Render (or New > Blueprint and choose the repository).

  2. Step 2: Render asks for PUBLIC_URL. Type the address the service will have, for example https://folio.onrender.com. The service name is folio; if the name is taken, Render adds a suffix, so check the real address on the service page and correct PUBLIC_URL under Environment afterwards. With a custom domain, use that.

  3. Step 3: Leave the Google and Cursor values empty unless you use them. Click Deploy Blueprint.

  4. Step 4: When the service is Live, open it. The first account is the administrator.

Files

The button reads render.yaml from the root of the repository. This is the file in full.

Show render.yaml (64 lines) and copy it
render.yaml
# Render Blueprint for Folio: the app (published image), PostgreSQL, Key Value
# (Redis-compatible) and a persistent disk for the Git repositories.
#
# A persistent disk exists only on paid web service plans, so this blueprint
# cannot run on the free plan.
services:
  - type: web
    name: folio
    runtime: image
    image:
      url: ghcr.io/evergreen-it-dev/folio:latest
    plan: standard # 2 GB RAM. The smallest plan that is comfortable; `starter` (512 MB) is tight.
    healthCheckPath: /api/health
    disk:
      name: folio-data
      mountPath: /app/data
      sizeGB: 10
    envVars:
      - key: NODE_ENV
        value: production
      - key: PORT
        value: '4870'
      - key: ASSET_BACKEND
        value: local
      # Encrypts saved git tokens and personal AI keys. Generated once; never
      # change it afterwards.
      - key: FOLIO_SECRET
        generateValue: true
      - key: DATABASE_URL
        fromDatabase:
          name: folio-db
          property: connectionString
      - key: REDIS_URL
        fromService:
          type: keyvalue
          name: folio-cache
          property: connectionString
      # Render asks for this when the Blueprint is created. Type the address
      # the service will have, e.g. https://folio.onrender.com (the name of the
      # service plus .onrender.com, or your custom domain). Links in
      # invitations and shared pages are built from it.
      - key: PUBLIC_URL
        sync: false
      - key: GOOGLE_CLIENT_ID
        sync: false
      - key: GOOGLE_CLIENT_SECRET
        sync: false
      - key: GOOGLE_ALLOWED_DOMAINS
        sync: false
      - key: CURSOR_API_KEY
        sync: false

  # Transient data only (presence, rate limits); no persistence needed.
  - type: keyvalue
    name: folio-cache
    plan: free
    maxmemoryPolicy: allkeys-lru
    ipAllowList: [] # internal connections only

databases:
  - name: folio-db
    plan: basic-256mb
    postgresMajorVersion: '17'
    diskSizeGB: 5

Settings

FOLIO_SECRET is generated by Render and kept. The database and Key Value connection strings are wired in automatically over Render's private network.

Environment variables for Folio on Render
VariableDefaultWhat it does
NODE_ENVproductionRuns the app in production mode.
PORT4870The port the app listens on.
ASSET_BACKENDlocalUploads go to the disk.
FOLIO_SECRETgenerated by RenderEncrypts saved Git tokens and AI keys. Never change it.
DATABASE_URLfrom the folio-db databaseWired in by the Blueprint.
REDIS_URLfrom the folio-cache Key ValueWired in by the Blueprint.
PUBLIC_URLasked when the Blueprint is createdLinks in invitations and shared pages are built from 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

The Blueprint uses the latest image. Press Manual Deploy > Deploy latest reference, or change the image tag in the service's settings (pin v0.1.0 to update on your terms). A service with a disk stops the old instance before it starts the new one, so an update means a short downtime: zero-downtime deploys are off with a disk.

Back up

Database: Render Postgres has its own backups (paid plans). Or run pg_dump "<external connection string>" > folio-db.sql from your machine.

Disk: Render takes daily disk snapshots you can restore from the dashboard. For a copy of your own, open a shell on the service (the Shell tab) and run the command below into a file you download.

bash
tar czf - -C /app/data .

Limits and honest notes

  • One instance only: a service with a disk cannot be scaled to several.
  • WebSocket (real-time editing) is supported by Render's web services.

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