Hosting guide

Wayfare runs as one small container with Docker. Install Docker, run two commands, and it is live.

Requirements

  • A machine with Docker and the Compose plugin. That is the only dependency.
  • About 512 MB of RAM is plenty. Disk usage grows with the photos you upload.

Install Docker

You only need Docker itself. Pick your operating system.

Linux

Install Docker with the official script, then allow your user to run it without sudo:

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker "$USER"
newgrp docker

Compose ships as docker compose. Check it with docker compose version.

macOS

Install Docker Desktop (Apple Silicon and Intel are both supported), or use Homebrew:

brew install --cask docker

Open Docker Desktop once so the engine starts, then use Terminal for the next steps.

Windows

Install Docker Desktop. It sets up the WSL 2 backend for you. Run the commands from PowerShell, using curl.exe in place of curl.

Start Wayfare

On Linux or macOS (or Windows via WSL), one command sets everything up in a wayfare folder:

curl -fsSL https://wayfare.wiki/install | sh

Wayfare is now at http://localhost:3151. Open it and start a journal.

Your journals and photos are written to a data/ folder inside wayfare/. Keep that folder and you keep your journals.
Prefer to do it by hand, or on Windows PowerShell
mkdir wayfare && cd wayfare
curl -O https://codeberg.org/srtk/wayfare/raw/branch/main/docker-compose.yml
curl -o .env https://codeberg.org/srtk/wayfare/raw/branch/main/.env.example
docker compose up -d

On Windows PowerShell, use curl.exe in place of curl.

Configure

Settings live in the .env file next to docker-compose.yml.

VariableDefaultWhat it does
WAYFARE_PORT3151Host port the app listens on.

The data directory is set by the volume mount in docker-compose.yml. Change the left side of ./data:/app/data to store it elsewhere.

Domain and HTTPS

Run a reverse proxy in front of Wayfare to add TLS and serve it on your own domain. Point the proxy at the port above.

Caddy is the shortest path because it gets certificates automatically:

journal.example.com {
    reverse_proxy 127.0.0.1:3151
}

With nginx and a certificate from certbot:

server {
    listen 443 ssl;
    server_name journal.example.com;

    ssl_certificate     /etc/letsencrypt/live/journal.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/journal.example.com/privkey.pem;

    client_max_body_size 30m;   # photo uploads

    location / {
        proxy_pass http://127.0.0.1:3151;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
Behind a public proxy, bind Wayfare to localhost so it is not reachable directly. Set the port line in docker-compose.yml to "127.0.0.1:3151:3151".

Backups

Everything lives in data/. To back up, stop the container and copy the folder:

docker compose stop
tar czf wayfare-backup-$(date +%F).tar.gz data
docker compose start

Restore by putting the data/ folder back and running docker compose up -d.

Updating

docker compose pull
docker compose up -d

Your data/ folder is untouched by updates.

Build from source

To build the image yourself instead of pulling it, clone the repository, switch the compose file to build locally, and start it:

git clone https://codeberg.org/srtk/wayfare.git
cd wayfare
# In docker-compose.yml, comment out the image line and uncomment build: .
docker compose up -d --build

Security

  • There are no accounts or passwords. Edit access to a trip is a random token kept in the browser that created it. Treat it like a secret.
  • Public journals are readable by anyone with the link. Do not put anything private in a journal you make public.
  • Terminate TLS at your reverse proxy. Wayfare speaks plain HTTP and expects something in front of it on the public internet.

Questions or issues? The source and issue tracker live on Codeberg.