https://github.com/radhakishan404/sshipit
CD over SSH for Node.js, Next.js, and React apps
https://github.com/radhakishan404/sshipit
cicd deployment devops nextjs nodejs react self-hosted ssh
Last synced: about 2 months ago
JSON representation
CD over SSH for Node.js, Next.js, and React apps
- Host: GitHub
- URL: https://github.com/radhakishan404/sshipit
- Owner: radhakishan404
- License: mit
- Created: 2026-02-18T07:28:24.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2026-02-18T12:21:35.000Z (about 2 months ago)
- Last Synced: 2026-02-18T12:35:59.946Z (about 2 months ago)
- Topics: cicd, deployment, devops, nextjs, nodejs, react, self-hosted, ssh
- Language: JavaScript
- Homepage: https://sshipit.vercel.app/
- Size: 3.73 MB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Codeowners: .github/CODEOWNERS
- Security: SECURITY.md
- Support: SUPPORT.md
Awesome Lists containing this project
README
π SSHipIt
Self-hosted CI/CD over SSH for Node.js, Next.js, and React apps.
Built for developers by developer who want production control without sharing server access.
---
## π
Why I Built This
I was doing deployments like this:
`ssh -> git pull -> npm install -> build -> migrate -> pm2 restart -> repeat`
Across multiple servers. Every day.
So I built **SSHipIt**:
- No GitHub Actions dependency
- No sharing production server with third-party CI
- No one-env-key-at-a-time UI pain
- Just clean, local-first, SSH-native deployments
If this saves your time, star it and share it.
## β¨ What It Does
- π¦ Project management for Node.js, Next.js, React
- π₯οΈ Reusable SSH servers across projects
- π Encrypted server credentials (AES-256-GCM at rest)
- βοΈ Smart stack defaults (install/build/start/restart)
- π± Bulk `.env` editing for production
- π Manual deploy + one-click redeploy
- π Live log streaming over WebSocket
- π§ Deployment history with filtering + cancel/delete
- π§± Release folders + `current` symlink strategy
- π§ͺ Migration support (Prisma / Sequelize / Knex / TypeORM)
## π§ Architecture
```mermaid
flowchart LR
UI["SSHipIt UI (Browser)"] --> API["Node.js API + WebSocket"]
API --> DB["SQLite (projects, env, servers, deployments)"]
API --> RUNNER["Deploy Runner"]
RUNNER --> LOCAL["Local workspace deploy"]
RUNNER --> SSH["Remote deploy over SSH"]
SSH --> TARGET["Server (repo, releases, current, pm2)"]
```
## β‘ Quick Start (60 seconds)
```bash
git clone https://github.com/radhakishan404/sshipit.git
cd sshipit
npm install
cp .env.example .env
npm start
```
Open: `http://localhost:3000`
Required `.env` keys:
- `PORT`
- `DATABASE_PATH`
- `WORKSPACE_ROOT`
- `KEEP_RELEASES`
- `ENCRYPTION_KEY` (set a long random value in production)
## π οΈ First Deployment
1. Create a project
2. Select framework and click smart defaults
3. Paste production env in bulk
4. Add or attach an SSH server
5. Test connection
6. Select target server
7. Click `Deploy Now`
8. Follow live logs
## π§© Default Stack Behavior
| Stack | Install | Build | Restart |
|---|---|---|---|
| Node.js | `npm ci \|\| npm install` | optional | PM2 restart/start fallback |
| Next.js | `npm ci \|\| npm install` | `npm run build` | PM2 restart/start fallback |
| React | `npm ci \|\| npm install` | `npm run build` | usually nginx reload |
You can override all commands per project.
## π API + WebSocket
Core APIs:
- `GET /api/projects`
- `POST /api/projects`
- `PUT /api/projects/:id`
- `DELETE /api/projects/:id`
- `GET /api/projects/:id/env`
- `POST /api/projects/:id/env/bulk`
- `GET /api/projects/:id/servers`
- `POST /api/projects/:id/deploy`
- `GET /api/projects/:id/deployments`
- `POST /api/deployments/:id/redeploy`
- `POST /api/deployments/:id/cancel`
- `DELETE /api/deployments/:id`
WebSocket:
- `ws://localhost:3000/ws`
## π Dependency Map
| Dependency | Use |
|---|---|
| `express` | HTTP API |
| `ws` | Live logs/events over WebSocket |
| `better-sqlite3` | Local metadata DB |
| `ssh2` | SSH execution and remote deploy |
| `dotenv` | Runtime env loading |
| `zod` | Request validation |
| `uuid` | IDs |
| `cors`, `morgan` | API support + logs |
## πΊοΈ Roadmap (PRs Welcome)
- Git webhook auto-deploy (GitHub/GitLab/Bitbucket)
- Build/test quality gates
- Health-check gate before success
- One-click rollback
- Blue/green and canary rollout options
- Secret backends (Vault, SSM)
- Slack/Discord/email notifications
- Multi-user auth + RBAC
- Docker/Compose mode
- Kubernetes target adapter
- Deployment analytics dashboard
If you want to build one, open a PR.
## π£ Want Users? Read This
A practical growth plan is here:
- [`DISCOVERABILITY_PLAN.md`](./DISCOVERABILITY_PLAN.md)
It includes:
- launch-week checklist
- where to post
- post templates (X/LinkedIn/Reddit/dev.to)
- repeatable content strategy for stars + users
## π€ Contributing
- Read [`CONTRIBUTING.md`](./CONTRIBUTING.md)
- Use issue templates in `.github/ISSUE_TEMPLATE`
- Keep PRs focused and include logs/screenshots for deploy/UI changes
## π Security
Please read [`SECURITY.md`](./SECURITY.md) for responsible disclosure.
## π License
MIT - see [`LICENSE`](./LICENSE).
## π§ Maintainer Setup (GitHub UI)
To complete project hygiene, set these in the repo settings:
- Description:
- `Self-hosted CI/CD over SSH for Node.js, Next.js, and React apps`
- Website:
- `https://github.com/radhakishan404/sshipit#readme`
- Topics:
- `cicd`, `self-hosted`, `ssh`, `deployment`, `nodejs`, `nextjs`, `react`, `devops`
- Enable:
- Discussions
- Issues
- Wikis (optional)
- Security advisories