Self-Hosting
Run the entire Shipyard platform on your own server with Docker Compose.
Architecture
The Shipyard platform consists of four services:
| Service | Purpose | Port |
|---|---|---|
| Caddy | Edge proxy with automatic TLS, routes requests by domain | 80, 443 |
| API | Hono REST API (auth, projects, deployments, storage) | 3001 |
| Dashboard | Astro web UI for managing projects | 4321 |
| MinIO | S3-compatible object storage for deployment artifacts | 9000, 9001 |
Requirements
- A Linux server (Ubuntu 22.04+, Debian 12+, or similar)
- Docker and Docker Compose v2
- A domain with DNS configured (wildcard
*.yourdomain.com) - Ports 80 and 443 open
- At least 1 GB RAM, 10 GB disk
Quick setup
1. Clone the repository
git clone https://github.com/DecOperations/shipyard.wtf.git
cd shipyard.wtf2. Configure environment
cp .env.example .envEdit .env with your values:
# Your domain (must have *.domain pointing to this server)
DOMAIN=shipyard.example.com
ACME_EMAIL=admin@example.com
# Privy authentication (get from privy.io)
PRIVY_APP_ID=your-app-id
PRIVY_APP_SECRET=your-app-secret
# S3 storage (defaults to local MinIO)
S3_ENDPOINT=http://minio:9000
S3_BUCKET=shipyard
S3_ACCESS_KEY=changeme
S3_SECRET_KEY=changeme-secret
# Fly.io (for provisioning user deployments)
FLY_API_TOKEN=your-fly-token
FLY_ORG=personal3. Set up DNS
Point your domain and wildcard to the server:
| Type | Name | Value |
|---|---|---|
A | shipyard.example.com | your-server-ip |
A | *.shipyard.example.com | your-server-ip |
4. Deploy
docker compose up -dThat's it. Your services will be available at:
- Dashboard:
https://dash.shipyard.example.com - API:
https://api.shipyard.example.com - MinIO Console:
https://s3.shipyard.example.com
Configure the CLI
Point the CLI at your self-hosted API:
shipyard --api-url https://api.shipyard.example.com login
# Or set it permanently:
export SHIPYARD_API_URL=https://api.shipyard.example.comServices overview
Caddy (edge proxy)
Caddy handles all incoming HTTP/HTTPS traffic. It automatically provisions Let's Encrypt certificates and routes requests based on subdomain:
dash.*→ Dashboardapi.*→ API servers3.*→ MinIO console*.*→ API (deployment proxy)
API server
The Hono API handles authentication, project management, deployment orchestration, and presigned URL generation for S3 uploads. It uses SQLite (via libSQL) for the database, stored at /data/shipyard.db inside the container.
MinIO
Self-hosted S3-compatible storage. Deployment artifacts are uploaded here. You can replace MinIO with any S3-compatible provider (AWS S3, Storj, Backblaze B2) by changing the S3_* environment variables.
Upgrading
cd shipyard.wtf
git pull
docker compose build
docker compose up -dBackups
Back up these Docker volumes regularly:
api_data— SQLite databaseminio_data— Deployment artifactscaddy_data— TLS certificates