A powerful CLI tool for deploying projects with automatic Nginx reverse proxy setup, HTTPS with Certbot, and zero-downtime deployments.
- ✅ Automatic Nginx Reverse Proxy - Configures Nginx automatically for your services
- ✅ Automatic HTTPS - Sets up SSL/TLS certificates with Let's Encrypt via Certbot
- ✅ Zero-Downtime Deployment - Rolling deployment strategy ensures continuous availability
- ✅ Docker Support - Deploy Docker containers or connect to existing containers
- ✅ Multiple Domains - Support for multiple domains and subdomains per service
- ✅ Health Checks - Built-in health check monitoring for service reliability
- ✅ YAML Configuration - Simple, declarative configuration file format
Install Suthep globally using your preferred package manager:
npm install -g suthep
# or
yarn global add suthep
# or
pnpm add -g suthepNote: The tool uses
tsxto run TypeScript directly, so no build step is required for development. For production builds, you can optionally compile to JavaScript usingnpm run build.
Create a new configuration file interactively:
suthep initThis will create a suthep.yml file with interactive prompts, or you can use an example configuration:
cp example/suthep.yml suthep.yml
# Edit suthep.yml with your settingsInstall and configure Nginx and Certbot on your system:
suthep setupThis command will:
- Install Nginx (if not already installed)
- Install Certbot (if not already installed)
- Configure system dependencies
Deploy your project using the configuration file:
suthep deployThe configuration file (suthep.yml) uses a YAML format to define your deployment. Here's the complete structure:
project:
name: my-app
version: 1.0.0
services:
- name: api
port: 3000
domains:
- api.example.com
- www.api.example.com
healthCheck:
path: /health
interval: 30
environment:
NODE_ENV: production
- name: webapp
port: 8080
docker:
image: nginx:latest
container: webapp-container
port: 80
domains:
- example.com
- www.example.com
nginx:
configPath: /etc/nginx/sites-available
reloadCommand: sudo nginx -t && sudo systemctl reload nginx
certbot:
email: [email protected]
staging: false
deployment:
strategy: rolling
healthCheckTimeout: 30000Each service in the services array can have the following properties:
| Property | Required | Description |
|---|---|---|
name |
✅ Yes | Unique identifier for the service |
port |
✅ Yes | Port number the service runs on (host port) |
domains |
✅ Yes | Array of domain names or subdomains to route to this service |
docker |
❌ No | Docker configuration (see below) |
healthCheck |
❌ No | Health check configuration (see below) |
environment |
❌ No | Environment variables as key-value pairs |
When deploying Docker containers, use the docker object:
image: Docker image to pull and run (e.g.,nginx:latest)container: Name for the Docker containerport: Internal port the container listens on (mapped to the serviceport)
Configure health monitoring for your service:
path: HTTP endpoint path for health checks (e.g.,/health)interval: Time between health checks in seconds (default: 30)
Initialize a new deployment configuration file with interactive prompts.
suthep init [-f suthep.yml]Options:
-f, --file: Configuration file path (default:suthep.yml)
Install and configure Nginx and Certbot on your system. This command checks for existing installations and sets up any missing components.
suthep setup [--nginx-only] [--certbot-only]Options:
--nginx-only: Only install and configure Nginx--certbot-only: Only install and configure Certbot
Deploy your project using the configuration file. This command will:
- Configure Nginx reverse proxy for all services
- Obtain SSL certificates via Certbot (if enabled)
- Deploy services with zero-downtime strategy
suthep deploy [service-name] [-f suthep.yml] [--no-https] [--no-nginx] [-e KEY=VALUE ...]Options:
service-name: Name or index (1-based) of the service to deploy (optional, deploys all services if not specified). Usesuthep listto see available services with indices.-f, --file: Configuration file path (default:suthep.yml)--no-https: Skip HTTPS/SSL certificate setup--no-nginx: Skip Nginx configuration (useful for testing)-e, --env: Set environment variables (can be used multiple times, e.g.,-e KEY1=value1 -e KEY2=value2)
Restart services (stop and start containers, update Nginx configs).
suthep restart [service-name] [-f suthep.yml] [--all] [--no-https] [--no-nginx]Options:
service-name: Name or index (1-based) of the service to restart (optional). Usesuthep listto see available services with indices.-f, --file: Configuration file path (default:suthep.yml)--all: Restart all services--no-https: Skip HTTPS setup--no-nginx: Skip Nginx configuration
List all services and their status (running, stopped, container status, Nginx configuration).
suthep list [-f suthep.yml]
# or
suthep ls [-f suthep.yml]Options:
-f, --file: Configuration file path (default:suthep.yml)
Options:
-f, --file: Configuration file path (default:suthep.yml)
Output:
- Displays a formatted table with service index numbers, status, ports, container status, and Nginx configuration
- Shows summary statistics (running, stopped, total)
- Color-coded status indicators (green for running, red for stopped, yellow for partial)
Service Selection:
All service commands (deploy, up, down, restart, logs) support selecting services by:
- Name: Use the service name (e.g.,
suthep restart api) - Index: Use the 1-based index number shown in
suthep list(e.g.,suthep restart 1)
Use suthep list to see all services with their index numbers.
Deploy a Node.js API service with health checks:
project:
name: my-api
version: 1.0.0
services:
- name: api
port: 3000
domains:
- api.example.com
healthCheck:
path: /health
interval: 30
environment:
NODE_ENV: production
nginx:
configPath: /etc/nginx/sites-available
reloadCommand: sudo nginx -t && sudo systemctl reload nginx
certbot:
email: [email protected]
staging: false
deployment:
strategy: rolling
healthCheckTimeout: 30000Deploy a web application using a Docker container:
services:
- name: webapp
port: 8080
docker:
image: myapp/webapp:latest
container: webapp-container
port: 80
domains:
- example.com
- www.example.comRoute multiple domains to the same service:
services:
- name: dashboard
port: 5000
domains:
- dashboard.example.com
- admin.example.com
- app.example.com
healthCheck:
path: /api/healthConnect to an already running Docker container:
services:
- name: database-proxy
port: 5432
docker:
container: postgres-container
port: 5432
domains:
- db.example.comNote: When connecting to an existing container, omit the
imagefield. The tool will use the existing container.
- Node.js 16 or higher
- Nginx (installed automatically via
suthep setup) - Certbot (installed automatically via
suthep setup) - Docker (optional, required only for Docker-based services)
- sudo access (required for Nginx and Certbot operations)
Suthep requires sudo privileges to:
- Install system packages (Nginx, Certbot)
- Modify Nginx configuration files
- Reload Nginx service
- Obtain SSL certificates from Let's Encrypt
Suthep helps optimize infrastructure costs by:
- Multi-Service Management - Run multiple services on a single server efficiently
- Automated Configuration - Eliminates manual Nginx and SSL setup, saving time and reducing errors
- Zero-Downtime Deployments - Rolling deployment strategy ensures continuous service availability
- Health Monitoring - Built-in health checks help maintain service reliability and catch issues early
- Simple Configuration - YAML-based configuration is easy to understand and maintain
- One Command Deployment - Deploy entire infrastructure with a single command
- Automatic SSL - HTTPS certificates are obtained and renewed automatically
- Docker Integration - Seamless support for containerized applications