Deploy Adventure-Log

Self-hostable travel tracker and trip planner

Deploy Adventure-Log

/code/media/

/var/lib/postgresql/data/

Deploy and Host AdventureLog on Railway

AdventureLog is a modern open-source travel companion. Log locations and visits with photos, notes, and trails; build multi-day trip itineraries; mark countries, regions, and cities on an interactive world map; and share plans with the people you travel with - all while keeping your data on infrastructure you control.

Deploy on Railway

About Hosting AdventureLog

Hosting AdventureLog on Railway runs three containers on Railway’s private network:

  • AdventureLog (frontend) - SvelteKit UI, publicly reachable via Railway’s HTTPS domain
  • Server (backend) - Django API + media handling
  • Db - PostGIS 15 for geospatial data (locations, maps, regions)

The frontend talks to the backend over the private network. The backend stores media on a persistent volume and uses PostGIS for map features. After deploy, open the public AdventureLog domain, log in with the auto-generated admin credentials (or the ones you set), and start logging trips.

Common Use Cases

  • Personal travel journal with an interactive world map of everywhere you’ve been
  • Collaborative trip planning - share itineraries, packing lists, and daily plans with travel companions
  • Track countries, regions, and cities visited and see travel stats on a dashboard
  • Store photos, trails, activities, and notes for each location without relying on closed travel apps
  • Privacy-focused alternative to commercial travel loggers - your data stays on your Railway project

Dependencies for AdventureLog Hosting

  • Frontend: ghcr.io/seanmorley15/adventurelog-frontend:v0.13.0
  • Backend (Server): ghcr.io/seanmorley15/adventurelog-backend:v0.13.0
  • Database: ghcr.io/baosystems/postgis:15-3.5 (PostGIS-enabled PostgreSQL)
  • Railway private networking - frontend → backend, backend → database
  • Two persistent volumes - media files and Postgres data
  • Auto-generated admin password and username secrets

Keep the Db and Server services private; only the AdventureLog (frontend) service needs a public domain.

Upstream: AdventureLog · GitHub · Docs

Implementation Details

ServiceImageRole
AdventureLogghcr.io/seanmorley15/adventurelog-frontend:v0.13.0Public web UI (SvelteKit)
Serverghcr.io/seanmorley15/adventurelog-backend:v0.13.0Django API + media
Dbghcr.io/baosystems/postgis:15-3.5PostGIS database

Key environment wiring:

  • Frontend PUBLIC_SERVER_URL → http://${{Server.RAILWAY_PRIVATE_DOMAIN}}:8000
  • Backend FRONTEND_URL / CSRF_TRUSTED_ORIGINS → frontend public domain
  • Backend PGHOST → ${{Db.RAILWAY_PRIVATE_DOMAIN}}
  • Backend media volume at /code/media/
  • Database uses user adventure, password adventure, database database (change in production if desired)

Topology

ServiceRoleVolumePublicNotes
AdventureLogFrontend (SvelteKit)NoneYesPublic HTTPS domain
ServerBackend (Django)/code/media/NoPrivate, port 8000
DbPostGIS database/var/lib/postgresql/data/NoPGDATA subdirectory used
Volumes (drives) - what to mount

Volumes are already defined in the template. They survive redeploys.

ServiceMount pathWhat is stored
Server/code/media/Uploaded photos and media files
Db/var/lib/postgresql/data/Database files (PGDATA subdirectory)

Railway: each service → Settings → Volumes. Do not detach these volumes or media and travel data will be lost.

Quick Start

  1. Click the Deploy on Railway button above.
  2. Sign in (or create a free Railway account) and deploy.
  3. Wait a few minutes for the three services and volumes to come up (first boot may take longer while geography data is prepared).
  4. Open the AdventureLog service → Settings → Networking and open the generated public domain.
  5. Log in with the admin credentials:
    • Username and password are auto-generated secrets on the Server service (DJANGO_ADMIN_USERNAME / DJANGO_ADMIN_PASSWORD).
    • Find them under Server → Variables.
  6. Start adding locations, planning trips, and exploring the world map.

Configuration

Important variables (Server service)

VariableDefault / SourceNotes
PUBLIC_URLhttps://${{Server.RAILWAY_PUBLIC_DOMAIN}}Backend public URL reference
FRONTEND_URLFrontend public domainRequired for CSRF and redirects
CSRF_TRUSTED_ORIGINSFrontend public domainMust match the frontend HTTPS URL
PGHOST${{Db.RAILWAY_PRIVATE_DOMAIN}}Private network to PostGIS
PGUSER / PGPASSWORD / PGDATABASEadventure / adventure / databaseMatch the Db service
SECRET_KEYadventure (placeholder)Change for production
DJANGO_ADMIN_USERNAMEAuto-generated secretFirst admin login
DJANGO_ADMIN_PASSWORDAuto-generated secretFirst admin login
DJANGO_ADMIN_EMAILadmin@example.comCan be updated
DEBUGFalseKeep false in production

Frontend variables

VariableDefault / SourceNotes
ORIGINhttps://${{RAILWAY_PUBLIC_DOMAIN}}Frontend origin
PUBLIC_SERVER_URLhttp://${{Server.RAILWAY_PRIVATE_DOMAIN}}:8000Private link to backend
BODY_SIZE_LIMITInfinityAllows larger media uploads

Database variables

VariableDefaultNotes
POSTGRES_USERadventureMatches backend
POSTGRES_PASSWORDadventureMatches backend
POSTGRES_DBdatabaseMatches backend
PGDATA/var/lib/postgresql/data/pgdataClean subdirectory for Railway volumes

Custom Domain

  1. AdventureLog (frontend) service → Settings → Networking → Custom Domain.
  2. Add your domain and follow Railway’s DNS instructions.
  3. Update any frontend-related variables if needed (ORIGIN, and on the Server: FRONTEND_URL, CSRF_TRUSTED_ORIGINS).
  4. Redeploy the affected services.

Railway provisions TLS automatically.

Updating AdventureLog

  1. For each service (AdventureLog / Server) → Settings → Source.
  2. Change the image tag (e.g. v0.13.0 → newer release).
  3. Redeploy.

Check the AdventureLog releases before upgrading. Database migrations are normally handled by the backend on startup.

Traps

Ways this still fails:

  • Wrong FRONTEND_URL / CSRF_TRUSTED_ORIGINS - Must be the exact public HTTPS URL of the frontend (including https://). Mismatches break login and API calls.
  • Default secrets left in place - Change SECRET_KEY, database password, and consider rotating the auto-generated admin password after first login.
  • Private networking lag - Frontend or backend may start before the database is fully ready. Wait a minute and restart the Server or AdventureLog service if you see connection errors.
  • Media volume missing - Photos and uploads will disappear on redeploy if the /code/media/ volume is not attached.
  • First boot memory - PostGIS + initial geography data can use more RAM. Give the services adequate memory on first deploy if the project struggles.
  • Renaming services - If you rename Db or Server, update the corresponding private-domain references (PGHOST, PUBLIC_SERVER_URL, etc.).

View live logs: select the service → Deployments → latest deployment → View Logs.

Why Deploy AdventureLog on Railway?

Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.

By deploying AdventureLog on Railway, you get a full travel tracker and trip planner with private networking, persistent storage, and automatic HTTPS - no servers to maintain.


Template Content

More templates in this category

View Template
Pixelfed
Explore + Share beautiful photos and videos on the Fediverse

Evan Boehs
30
View Template
Hexo
Hexo — fast static blog framework with admin editor and S3 media storage

INAPP
1
View Template
Bluesky PDS (Atproto Spaces Alpha)
"The Atproto Spaces Alpha" version of Bluesky PDS.

mkizka
2