The simplest way to deploy web services. Period.
bodega init # Create configuration
bodega deploy # Deploy to productionThat's it. SSL certificates, reverse proxy, load balancing, compression — all handled automatically.
it is a deployment tool that makes self-hosting as easy as:
- Write a simple TOML config
- Run
bodega deploy - Your site is live with HTTPS
No nginx configs. No Certbot commands. No systemd units. Just deploy.
# Using the install script
curl -fsSL https://raw.githubusercontent.com/SRSWTI/mach/main/install.sh | bashInstall mach (Go binary):
# Using go install
go install github.com/SRSWTI/mach@latest
# Or clone and build
git clone https://github.com/SRSWTI/mach
cd mach
./build.shInstall bodega (Python CLI):
cd bodega
pip install -e .
# Or from PyPI: pip install bodega-deploybodega initThis creates a bodega.toml file:
[service]
name = "my-app"
port = 8000
domain = "api.example.com"
command = "python main.py"
working_dir = "."
auto_tls = truebodega deployYour service is now live at https://api.example.com with automatic SSL.
- Automatic HTTPS - SSL certificates via Let's Encrypt
- Reverse Proxy - Multiple upstreams with load balancing
- Static File Serving - Host documentation or SPAs
- Redirects - Domain migrations made easy
- Compression - gzip + zstd automatic compression
- HTTP/3 - Modern protocol support
- WebSocket - Full WebSocket proxy support
- Load Balancing - Round-robin, least-connections, IP hash
- Basic Auth - Password protection
- Header Manipulation - Add/remove/modify any headers
- Security Headers - XSS, CSP, HSTS out of the box
- Request Buffering - DDoS protection
- Health Checks - Automatic backend monitoring
- Access Logging - JSON or common log format
- Status Dashboard - View all deployments
bodega init # Create bodega.toml interactively
bodega deploy # Deploy from bodega.toml
bodega deploy-static # Deploy static files
bodega deploy-redirect # Deploy a redirect
bodega status # Show all deployments
bodega logs [service] # View service logs
bodega remove [name] # Remove a deployment
bodega certify # Setup SSL certificates
bodega doctor # Check system health[service]
name = "api"
domain = "api.example.com"
port = 8080
[[service.upstreams]]
address = "localhost:8080"
[[service.upstreams]]
address = "localhost:8081"
[[service.upstreams]]
address = "localhost:8082"
load_balance = "round_robin"
[service.health_check]
path = "/health"
interval = "10s"[service]
name = "docs"
domain = "docs.example.com"
handler = "static"
[service.static]
root = "/var/www/docs"
browse = false[service]
name = "admin"
domain = "admin.example.com"
port = 3000
[[service.basic_auth]]
username = "admin"
hashed_password = "$2y$10$..."
realm = "Admin Area"
[[service.headers_down]]
name = "X-Frame-Options"
value = "DENY"User runs: bodega deploy
↓
bodega.toml (TOML)
↓
bodega CLI (Python) - prompts, fuzzy search
↓
HTTP API → localhost:8765
↓
mach daemon (Go) - reverse proxy, TLS, static files
↓
Live HTTPS website
| Feature | Description | Status |
|---|---|---|
| Reverse Proxy | Forward to backend services | ✅ |
| Load Balancing | Multiple backends | ✅ |
| Health Checks | Automatic backend monitoring | ✅ |
| WebSocket | Full WebSocket support | ✅ |
| Compression | gzip + zstd | ✅ |
| Static Files | Serve static content | ✅ |
| Redirects | HTTP redirects | ✅ |
| Basic Auth | Password protection | ✅ |
| Headers | Request/response manipulation | ✅ |
| Buffering | Request/response buffering | ✅ |
| Timeouts | Connection timeouts | ✅ |
| Error Pages | Custom error handling | ✅ |
| Logging | Access logs | ✅ |
| Automatic HTTPS | Let's Encrypt integration | ✅ |
| HTTP/3 | Modern protocol | ✅ |
mach-deploy/
├── mach/ # Go daemon (HTTP engine)
├── bodega/ # Python CLI (user interface)
├── examples/ # Example configurations
├── install.sh # One-line installer
└── README.md # This file
# Build mach
cd mach
./build.sh
# Install bodega
cd ../bodega
pip install -e .
# Run tests
./test.shApache 2.0 - See LICENSE file.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing) - Commit your changes (
git commit -am 'Add amazing feature') - Push to the branch (
git push origin feature/amazing) - Open a Pull Request
- Issues: GitHub Issues
- Discussions: GitHub Discussions