---
title: "Deploy openship"
description: "Self-hosted deployment dashboard with CI/CD, Postgres, and Redis"
category: "Automation"
url: https://railway.com/deploy/openship-1
---

# Deploy openship

Self-hosted deployment dashboard with CI/CD, Postgres, and Redis

**[Deploy openship on Railway](https://railway.com/template/openship-1)**

- **Creator:** kmaki's Projects
- **Category:** Automation
- **Total deploys:** 2

## Template content

### postgres

- **Image:** postgres:16-alpine

### api

- **Image:** xiaosong233/openship-api-railway:latest

### redis

- **Image:** redis:7-alpine
- **Start command:** `redis-server --appendonly yes`

### dashboard

- **Image:** xiaosong233/openship-dashboard-railway:latest
- **Public domain:** Yes

## Documentation

# Deploy and Host OpenShip on Railway

## About Hosting OpenShip on Railway
OpenShip runs on Railway as a Docker-only, multi-service deployment with a public dashboard, private API, Postgres storage, and Redis-backed queues/cache. Railway provides managed HTTPS, private service networking, image-based deploys, and persistent volumes for stateful data.

## Tech Stack
- OpenShip API built with Bun, Hono, Drizzle, and Better Auth
- OpenShip Dashboard built with Next.js
- PostgreSQL 16 for persistent application data
- Redis 7 for queues, cache, and rate limiting
- Docker images deployed on Railway private networking

## Why Deploy OpenShip on Railway
Railway is a good fit for OpenShip because it supports one-click templates with Docker images, built-in private networking between services, automatic HTTPS domains for the dashboard, and persistent volumes for Postgres and Redis. The dashboard is exposed publicly while the API remains private and is reached through the dashboard's same-origin proxy.

## Common Use Cases
- Self-hosting the OpenShip deployment dashboard
- Managing projects, servers, domains, jobs, and deployments from a browser
- Testing OpenShip before installing it on dedicated infrastructure
- Running a small team control plane with Postgres-backed state and Redis jobs

## Deployment Notes
The dashboard is the only public HTTP service and listens on port 3001. The API listens on port 4000 and should remain private; dashboard requests are proxied to it through `/api/proxy/*`. Set `OPENSHIP_PUBLIC_URL` to `https://${{dashboard.RAILWAY_PUBLIC_DOMAIN}}` so auth redirects and public callback URLs resolve correctly. Postgres uses `PGDATA=/var/lib/postgresql/data/pgdata` because Railway volumes include `lost+found` at the mount root. Redis uses `redis-server --appendonly yes` for persistence.

Users create their first account through the OpenShip registration/login flow after deployment. OAuth and SMTP variables are optional and can be added later for GitHub/Google login and email features.

## Dependencies for OpenShip on Railway
OpenShip depends on Postgres for durable state and Redis for queues, cache, rate limiting, and background jobs. The dashboard depends on the private API service, and the API depends on both Postgres and Redis.

### Deployment Dependencies

| Service | Image | Port | Volume |
|---------|-------|------|--------|
| dashboard | xiaosong233/openship-dashboard-railway:latest | 3001 | - |
| api | xiaosong233/openship-api-railway:latest | 4000 | - |
| postgres | postgres:16-alpine | 5432 | /var/lib/postgresql |
| redis | redis:7-alpine | 6379 | /data |

## Similar templates

- [N8N Main + Worker](https://railway.com/deploy/n8n-main-worker) — Deploy and Host N8N with Inactive worker.
- [Evolution API with n8n](https://railway.com/deploy/evolution-api-with-n8n) — [Jul'26] WhatsApp automation platform using Evolution API, n8n & PostgreSQL
- [Postgres Backup](https://railway.com/deploy/postgres-s3-backups) — Cron-based PostgreSQL backup to bucket storage

Open this page in a browser: https://railway.com/deploy/openship-1
