Prerequisites
Before you begin, make sure you have the following installed and configured:- Node.js 20+ — the runtime for the Shipyard server
- Docker — used to run the PostgreSQL database and to build and test your projects
- PostgreSQL — Shipyard stores users, projects, builds, and secrets here (you’ll run it in Docker in the steps below)
- A GitHub OAuth App — Shipyard uses GitHub OAuth for authentication and the GitHub API to register webhooks on your repositories
Create a GitHub OAuth App
- Go to GitHub → Settings → Developer Settings → OAuth Apps and click New OAuth App.
- Fill in the fields:
- Application name: anything you like (e.g.,
Shipyard Local) - Homepage URL:
http://localhost:8080 - Authorization callback URL: your
FRONTEND_URL(e.g.,http://localhost:3000)
- Application name: anything you like (e.g.,
- Click Register application.
- Copy the Client ID and generate a Client Secret — you’ll need both for your
.envfile.
read:user, repo, and read:org. These allow it to read your profile and email, register webhooks on repositories, and list your organization memberships.
Set up Shipyard
Start PostgreSQL
Run a PostgreSQL container using Docker. Replace the placeholder values with credentials of your choice — you’ll use these same values in your
DATABASE_URL below.Configure environment variables
Create a Then create your See the environment variables reference for a full description of each value.
.env file in the project root. The ENCRYPTION_KEY must be a cryptographically random 32-byte value encoded as hex — generate one with the command shown below..env:Push the database schema
Run Drizzle Kit to create all the required tables in your PostgreSQL database:
The server starts on port 8080. You can reach the health check endpoint at
http://localhost:8080/health and the API root at http://localhost:8080/api.Expose webhooks locally
GitHub needs a publicly reachable URL to send push events to. If you’re running Shipyard on your local machine, use a tunneling tool to expose port 8080:WEBHOOK_CALLBACK in your .env file, then restart the server. Shipyard will register this URL as the webhook endpoint when you connect a repository.
Verify your setup
Once the server is running, confirm everything is working:DATABASE_URL matches the credentials you used in step 2.
Next steps
Connect a repository
Select a GitHub repo, choose a branch, and configure your build command
Environment variables
Full reference for every configuration variable Shipyard uses
Build pipeline
Understand how Shipyard clones, builds, and tests your project
Local testing
Test subdomain routing and deployed projects on your machine