An open API service indexing awesome lists of open source software.

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

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.


GitHub stars
GitHub forks
GitHub issues
CI
License


Latest release
Last commit
Repo size
Node.js
Self-hosted
SSH Powered
PRs welcome

---

## πŸ˜… 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