All guides
Self-hosting

Your own sync server

Keep your notes on a computer you own: a PC, a NAS, a Raspberry Pi or a VPS. Your devices sync through it, live and end-to-end encrypted.

  • Published
  • 6 min read

What you get

FastMemo Server is the self-hosted alternative to Google Firebase for Cloud Sync. One Docker container, one database file.

  • Private

    Notes are encrypted on your devices before they leave them. The server stores them, it can't read them.

  • Live

    An edit shows up on your other devices in about a second, even in a note that's open.

  • Offline-proof

    A device that can't reach the server keeps its changes and sends them as soon as it can.

  • With a dashboard

    Devices, space, reads, writes and deletes per day, warnings, and one-click backups.

What you need

  • A computer that stays on: a PC, a NAS, a VPS, or a Raspberry Pi 3, 4 or 5 with the 64-bit system.
  • Docker, which runs the server in a box of its own.
  • About 15 minutes. No programming: you copy a few commands.

Start the server

On the computer that will host it, open a terminal (on Windows: PowerShell) and follow these steps.

  1. Install Docker

    Install Docker Desktop (opens in a new tab) on Windows or macOS, or Docker Engine on Linux and Raspberry Pi.

  2. Download the server

    This copies the server into a folder called fastmemo-server and creates its settings file.

    git clone https://github.com/ontech7/fastmemo-server.git
    cd fastmemo-server
    cp .env.example .env
  3. Start it

    The server is now running on port 8787. It starts again by itself after a reboot.

    docker compose up -d
  4. Find your access key

    It's the password your devices use to connect. The server made one on its first start: look for it in what this command prints, and keep it somewhere safe.

    docker compose logs fastmemo
  5. Open the dashboard

    Go to http://localhost:8787 in a browser on that computer and enter the access key: you'll see your devices, the operations per day and the backups.

Reach it from your phone

Use an https:// address: the web app and the Windows app only reach those, and it keeps your note titles and your devices' credentials private on every network. Pick the way that suits you:

OptionGood forWhat you need
Tailscale (easiest)Your devices only, nothing exposed to the internetA free Tailscale account
CoolifyYou already run CoolifyCoolify and a domain
Caddy (VPS and domain)A VPS, or a home server with ports 80 and 443 openA domain pointing to the server
Plain http://Trying it out: on the computer it runs on, or from Android, macOS and Linux on your Wi-FiNothing (not for the web app or Windows; the app warns first)

Tailscale (easiest)

Install Tailscale (opens in a new tab) on the server and on each device, and sign in with the same account. Then, on the server:

sudo tailscale serve --bg 8787

It prints your server's address, like https://raspberrypi.your-tailnet.ts.net. If it asks to enable HTTPS certificates, follow the link it shows: it's one click. Last, set TRUST_PROXY=true in the .env file and run docker compose up -d again.

Coolify

Create a resource from the fastmemo-server repository with the Docker Compose build pack and the compose file /docker-compose.coolify.yml. Give the service your domain followed by :8787 (for example https://notes.example.com:8787) and deploy: Coolify takes care of HTTPS and generates the keys (Environment Variables).

Caddy (VPS and domain)

Point your domain to the server, put it in the .env file, and start the server together with Caddy, which gets the HTTPS certificate by itself:

# in .env: DOMAIN=notes.example.com
docker compose -f docker-compose.caddy.yml up -d

Connect FastMemo

On each device:

  1. Open Settings → Cloud Sync and turn on Enable Cloud sync.

  2. Under Sync with, choose FastMemo Server.

  3. Enter the Server address (https://…) and the Access key, then tap Save settings.

  4. On the first device, choose an Encryption password and write down the Recovery key it shows. The other devices ask for the same password.

Backups and updates

  • Back up from the dashboard: one file with everything. The notes in it stay encrypted, but it also holds the titles and the access key: keep it private.
  • Lost a phone? Remove it from the dashboard (or from Manage devices in the app): its access stops at once.
  • To update the server, run these two commands in its folder:
Update the server
git pull
docker compose up -d --build

Good to know

  • The server never sees the content of your notes, nor your encryption password. Titles aren't encrypted: the app sorts by them.
  • Plain http:// is for trying it out: a device on HTTP sends your note titles and its credentials unencrypted on every network it joins, at home or not. For every day, use Tailscale or a domain.
  • A Raspberry Pi is plenty, for a whole family too. Up to 10 devices by default.
  • Every detail (all the settings, restoring a backup, PostgreSQL, troubleshooting) is in the README on GitHub (opens in a new tab).