Skip to content

Manual Docker Setup

You can install wanderer components either via Docker (Quick Setup or Manual Setup) or from source.

wanderer uses several secrets for database access, to encrypt passwords, private keys, and to secure communication. The secrets are: MEILI_MASTER_KEY, POCKETBASE_ENCRYPTION_KEY and POCKETBASE_PROXY_SECRET. You need to generate these secrets. For example using:

Terminal window
# MEILI_MASTER_KEY and POCKETBASE_PROXY_SECRET (one each)
openssl rand -hex 32
# Example output: 1e85a99427bd2543aacc24c99419183756eaeccd0e3485c9ac2ac2ab110e72f1
# POCKETBASE_ENCRYPTION_KEY (must be exactly 32 characters)
openssl rand -hex 16
# Example output: ce7f0ddb97100c42e6409a8537c11e23

After cloning the repository, you will find a docker-compose.yml file in the root directory. This file sets up all necessary components. Update the secrets in your copy, then start everything by running:

Terminal window
docker compose up -d

If you’re not hosting wanderer at http://localhost:3000, update the ORIGIN environment variable accordingly:

ORIGIN=http(s)://<your_domain>:<your_port>

If this is not set correctly, you may encounter CORS-related issues.

Here’s a minimal docker-compose.yml example with explanations:

version: '3'
x-common-env: &cenv
MEILI_URL: http://search:7700
MEILI_MASTER_KEY: <YOUR_MEILI_KEY_HERE>
services:
search:
container_name: wanderer-search
image: getmeili/meilisearch:v1.36.0
environment:
<<: *cenv
MEILI_NO_ANALYTICS: "true"
ports:
- 7700:7700
networks:
- wanderer
volumes:
- ./data/data.ms:/meili_data/data.ms
restart: unless-stopped
healthcheck:
test: curl --fail http://localhost:7700/health || exit 1
interval: 15s
retries: 10
start_period: 20s
timeout: 10s
db:
container_name: wanderer-db
image: flomp/wanderer-db
depends_on:
search:
condition: service_healthy
environment:
<<: *cenv
POCKETBASE_ENCRYPTION_KEY: <YOUR_ENCRYPTION_KEY_HERE>
POCKETBASE_PROXY_SECRET: <YOUR_PROXY_KEY_HERE>
ORIGIN: http://localhost:3000
ports:
- "127.0.0.1:8090:8090"
networks:
- wanderer
restart: unless-stopped
volumes:
- ./data/pb_data:/pb_data
- ./data/plugins:/data/plugins
healthcheck:
test: ["CMD", "/curl", "--fail", "http://localhost:8090/health"]
interval: 15s
retries: 10
start_period: 20s
timeout: 10s
web:
container_name: wanderer-web
image: flomp/wanderer-web
depends_on:
search:
condition: service_healthy
db:
condition: service_healthy
environment:
<<: *cenv
ORIGIN: http://localhost:3000
BODY_SIZE_LIMIT: ${BODY_SIZE_LIMIT:-2G}
POCKETBASE_PROXY_SECRET: <YOUR_PROXY_KEY_HERE>
PUBLIC_POCKETBASE_URL: http://db:8090
PUBLIC_DISABLE_SIGNUP: "false"
UPLOAD_FOLDER: /app/uploads
UPLOAD_USER:
UPLOAD_PASSWORD:
OVERPASS_API_URL: https://overpass-api.de
VALHALLA_URL: https://valhalla1.openstreetmap.de
NOMINATIM_URL: https://nominatim.openstreetmap.org
PUBLIC_MAP_MAX_POLYLINES: 100
# Optional: trust private CAs for server-side API calls
# NODE_EXTRA_CA_CERTS: /etc/ssl/private-ca/ca.pem
volumes:
- ./data/uploads:/app/uploads
# - ./certs/ca.pem:/etc/ssl/private-ca/ca.pem:ro
# - ./data/about.md:/app/build/client/md/about.md
ports:
- "3000:3000"
networks:
- wanderer
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "--fail", "http://localhost:3000/"]
interval: 15s
retries: 10
start_period: 20s
timeout: 10s
networks:
wanderer:
driver: bridge

All services must be part of the same Docker network. This is handled by the default wanderer network in the configuration above.

Make sure to set the ORIGIN environment variable to the full public URL (including port) where your instance is reachable. If misconfigured, the frontend will show this error:

Cross-site POST form submissions are forbidden

By default, four volumes are mounted:

  • Meilisearch index data: ./data/data.ms
  • PocketBase data: ./data/pb_data
  • Installed plugins: ./data/plugins
  • Uploads: ./data/uploads

These can be changed to bind mounts or other volume strategies if needed.

The default Docker configuration defines all necessary environment variables. You can extend or override them as needed. For advanced options, refer to the environment configuration documentation.

To update your instance to the latest version:

Terminal window
docker compose pull
docker compose up -d

Always consult the changelog before updating, in case of breaking changes.

Regardless of the installation method, once everything is running you should be able to access wanderer at:

http://localhost:3000

If you see the UI and no errors in the logs, you’re all set!