Deploy on Railway

One click with the template, or a manual service from the image. Both take a few minutes.

One-click template

  1. Open the Piqo Analytics template and click Deploy.
  2. Optionally paste your license key into PIQO_LICENSE_KEY. Leave it blank to enter it in the app later.
  3. Wait for the deploy to finish, then open the generated domain.
  4. Create the owner account on /setup. If you skipped the key, paste it on /activate.

The template attaches a volume at /app/data, generates AUTH_SECRET, and fillsAPP_URL from your Railway domain.

Manual service

  1. New project → Deploy from Docker image → ghcr.io/mddanishyusuf/piqo-selfhost:0.
  2. Add a volume and mount it at /app/data.
  3. Under Variables, add:
PORT=3000
AUTH_SECRET=<openssl rand -base64 48>
APP_URL=https://<your-service>.up.railway.app
PIQO_LICENSE_KEY=PIQOSH-XXXXX-XXXXX-XXXXX-XXXXX
  1. Settings → Networking → Generate domain, with the target port set to 3000.
  2. Deploy, open the domain, and finish setup in the app.
Why set PORT yourself. Railway injects its own PORT (usually 8080) when none is defined, and the app obeys it. The proxy then points at 3000 while the app listens on 8080, and you get “Application failed to respond”. Defining PORT=3000 pins both sides.

Custom domain

Add it under Settings → Networking, then change APP_URL to match and redeploy. Do this before activating if you can: the license registers the hostname. See License & activation.

Updating

Redeploy the service. Railway pulls the latest :0 image and migrations run on boot. Data stays on the volume.