selfhostedworld.com logoselfhostedworld.com

Try describing what you need:

openship logo

openship

★ 14.8k

A self-hosted alternative to Vercel Heroku

Apache License 2.0Open Source — No Paywall5 Containers — 5 containers — moderate hosting footprintCompose · Binary · Package +1Needs Postgres10+ active committers (12mo)

About

Openship is a self-hostable deployment platform aimed at individuals and teams that want to manage application delivery without assembling a separate stack of CI/CD, routing, and TLS tools. It...

Community Ratings

Ease of Setup
—
Documentation
—
Resource Usage
—
Feature Completeness
5.0
Paywall Fairness
5.0
Maintenance
—
Community
—

Features

  • built-in CI/CD
  • desktop app
  • web dashboard
  • CLI
  • SSH server deployment
  • push-to-deploy
  • automatic domain routing
  • Let's Encrypt TLS
  • boot service setup
  • shell completion

Details

Last Updated
Oct 17, 2026
Created
Mar 5, 2026
Install Methods
docker-composebinarypackage-managersource
Requirements
DockerPostgresRedisNode 22+BungitSSH
Authentication
local
API
REST
Privacy & Independence
Cloud: Optional
User Model
Multi-User
Deployment

Deployment: Docker Compose ✓5 Containers — moderate hosting footprintRuns as 5 containers

Run openship with Docker Compose

Compose file from the openship project repository.

5 services · database: postgres · infra: postgres, redis

no resource limits declared

needs persistent storage (2 volumes)

docker-compose.yml · @ d03378b · scanned Sep 23, 2026

# ──────────────────────────────────────────────────────────
# Openship — Docker Compose (SaaS / from-source control plane)
#
#   cp .env.example .env          # then edit
#   docker compose up -d --build
#
# This is the CONTROL PLANE: it BUILDS api + dashboard + web from source and
# runs postgres + redis. It's what we deploy for the openship.io SaaS, and what
# a from-source contributor runs locally. The MODE is decided entirely by .env —
# no profiles, no per-mode service variants:
#   • SaaS (our env):   CLOUD_MODE=true + OPENSHIP_TARGET=cloud-saas + Oblien /
#                       GitHub App / secrets. Deployed apps run in Oblien
#                       sandboxes — the control plane never runs them here, so
#                       there is deliberately NO Docker socket and NO edge.
#   • From-source dev:  CLOUD_MODE=false (the .env.example default).
#
# SELF-HOSTING (run your own apps as host containers with the OpenResty edge on
# :80/:443) is a DIFFERENT stack — the pull-based images + `edge` + Docker-out-
# of-Docker. That lives in docker/docker-compose.yml (or install it with the
# `openship up` CLI). Don't add the edge/socket here; this stays a clean,
# unprivileged control plane.
#
# Services:
#   • postgres → private :5432   (storage)
#   • redis    → private :6379   (queue + cache + rate-limit)
#   • api      → :4000   (override: API_PORT)
#   • dashboard→ :3001   (override: DASHBOARD_PORT)
#   • web      → :3000   (override: WEB_PORT)   landing site (openship.io)
#
# The API + dashboard bind fixed internal ports via PORT (the API honors PORT
# regardless of OPENSHIP_TARGET); a reverse proxy maps the public domains to
# them. postgres/redis are internal-only. The API auto-migrates Postgres on boot.
#
# REMOTE ACCESS: reaching this from another machine (LAN IP or a reverse proxy)
# requires OPENSHIP_PUBLIC_URL in .env — else the dashboard loads but login is
# rejected (403 ORIGIN_REJECTED). Behind a proxy also set TRUST_PROXY=true.
#
# BIND INTERFACE: the api/dashboard/web ports publish on 127.0.0.1 (loopback)
# by default, so nothing is exposed off-box unless you say so — a same-host
# reverse proxy still reaches them over loopback. If your proxy runs on ANOTHER
# machine (or you want direct off-box access), set OPENSHIP_BIND_ADDR to the
# interface to publish on, e.g. OPENSHIP_BIND_ADDR=0.0.0.0 (all) or a specific
# LAN IP. Prefer fronting with a proxy over binding 0.0.0.0.
# ──────────────────────────────────────────────────────────

services:
  # ─── Database (storage, private) ──────────────────────
  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: ${POSTGRES_USER:-openship}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-openship}
      POSTGRES_DB: ${POSTGRES_DB:-openship}
    # PRIVATE: not published to the host. api reaches it at postgres:5432.
    expose:
      - "5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-openship} -d ${POSTGRES_DB:-openship}"]
      interval: 5s
      timeout: 3s
      retries: 12

  # ─── Cache / Queue / Rate-limit (private) ─────────────
  redis:
    image: redis:7-alpine
    restart: unless-stopped
    command: ["redis-server", "--appendonly", "yes"]
    # PRIVATE: not published to the host. api reaches it at redis:6379.
    expose:
      - "6379"
    volumes:
      - redis_data:/data
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      timeout: 3s
      retries: 12

  # ─── API (control plane) ──────────────────────────────
  api:
    build:
      context: .
      dockerfile: apps/api/Dockerfile
    restart: unless-stopped
    ports:
      # Loopback by default (nothing exposed off-box); OPENSHIP_BIND_ADDR opts
      # into a public/LAN interface. See the "BIND INTERFACE" note above.
      - "${OPENSHIP_BIND_ADDR:-127.0.0.1}:${API_PORT:-4000}:${API_PORT:-4000}"
    # Mode + secrets (CLOUD_MODE, DEPLOY_MODE, OPENSHIP_TARGET, Oblien, GitHub
    # App, auth secrets, …) all come from .env. The values below OVERRIDE it
    # with the fixed internal port + in-cluster service DNS (compose
    # `environment` wins over `env_file`).
    env_file:
      - .env
    environment:
      NODE_ENV: production
      PORT: "${API_PORT:-4000}"
      DATABASE_URL: postgresql://${POSTGRES_USER:-openship}:${POSTGRES_PASSWORD:-openship}@postgres:5432/${POSTGRES_DB:-openship}
      REDIS_URL: redis://redis:6379
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
    healthcheck:
      test: ["CMD-SHELL", "bun -e \"fetch('http://127.0.0.1:${API_PORT:-4000}/api/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\""]
      interval: 10s
      timeout: 5s
      retries: 12
      start_period: 40s

  # ─── Dashboard (app UI) ───────────────────────────────
  dashboard:
    build:
      context: .
      dockerfile: apps/dashboard/Dockerfile
    restart: unless-stopped
    ports:
      - "${OPENSHIP_BIND_ADDR:-127.0.0.1}:${DASHBOARD_PORT:-3001}:${DASHBOARD_PORT:-3001}"
    env_file:
      - .env
    environment:
      NODE_ENV: production
      PORT: "${DASHBOARD_PORT:-3001}"
      INTERNAL_API_URL: http://api:${API_PORT:-4000}
    depends_on:
      api:
        condition: service_healthy

  # ─── Web / Landing ────────────────────────────────────
  web:
    build:
      context: .
      dockerfile: apps/web/Dockerfile
    restart: unless-stopped
    ports:
      - "${OPENSHIP_BIND_ADDR:-127.0.0.1}:${WEB_PORT:-3000}:${WEB_PORT:-3000}"
    environment:
      NODE_ENV: production
      PORT: "${WEB_PORT:-3000}"

volumes:
  postgres_data:
  redis_data:

This file may be out of date. Check the openship documentation for current setup steps.

Track your self-hosted stack

Bookmark software to try, rate tools you've used, and keep your collection in one place.

Metadata extracted from README on Sep 18, 2026

Related Software

CapRover logo

CapRover

15.2k
CapRover is a deployment platform and webserver manager for NodeJS, Python, PHP, ASP.NET, Ruby, and common databases.
Platform as a ServiceSelf Hosting SolutionsWeb Servers+4
Not FOSS
Details
Appsmith logo

Appsmith

41.1k
An open-source low-code platform for building, deploying, and maintaining custom applications.
Low Code DevelopmentPermissive LicenseAutomation Tools+3
Details
Coolify logo

Coolify

63.1k
Coolify is an open-source, self-hostable platform for managing servers, applications, and databases as an alternative to Heroku, Netlify, and Vercel.
Platform as a ServiceSelf Hosting SolutionsPermissive License+3
4 Containers
Details
Dokploy logo

Dokploy

37.8k
Dokploy is a self-hostable Platform as a Service for deploying and managing applications and databases.
Platform as a ServiceSelf Hosting SolutionsPermissive License+4
FOSS with Issues
Details
Tipi logo

Tipi

9.7k
A personal homeserver orchestrator for managing and running multiple services on a single server through a web interface.
Self Hosting SolutionsPersonal DashboardsPlatform as a Service+2
Details
Dockge logo

Dockge

24.6k
Dockge is a self-hosted, reactive web UI for managing Docker Compose stacks, including editing, starting, stopping, and updating compose files.
Self Hosting SolutionsPlatform as a ServiceAutomation Tools+1
Single ContainerFully FOSS
Details
Tsuru logo

Tsuru

5.3k
tsuru is an open source Platform as a Service (PaaS) for faster, easier application deployments.
Platform as a ServiceSelf Hosting SolutionsAutomation Tools+1
Details
CasaOS logo

CasaOS

37.3k
CasaOS is a personal cloud and home server platform with a friendly UI for managing apps, drives, files, and widgets.
Self Hosting SolutionsPersonal DashboardsPlatform as a Service+2
Details
Websoft9 logo

Websoft9

2.1k
Websoft9 is a web-based Linux/PaaS control panel for running and managing 200+ open source applications on a self-hosted server.
Self Hosting SolutionsPlatform as a ServiceAutomation Tools+3
Details
piku logo

piku

6.6k
piku is a lightweight micro-PaaS that lets users deploy applications to their own servers with git push.
Platform as a ServiceSelf Hosting SolutionsAutomation Tools+1
Details
Canine logo

Canine

2.9k
Canine is a self-hosted Kubernetes deployment platform that simplifies PaaS-style application deployment and management on your own Kubernetes infrastructure.
Platform as a ServiceSelf Hosting SolutionsAutomation Tools+2
Details
Windmill logo

Windmill

18.2k
Windmill is an open-source developer platform for building APIs, background jobs, workflows, and internal UIs, with autogenerated forms and low-code app building.
FOSS with IssuesLow Code DevelopmentAutomation Tools+4
Open CoreFOSS with Issues
Details