feat: Implement platform service providers for MinIO and MongoDB
- Added base interface and abstract class for platform service providers. - Created MinIOProvider class for S3-compatible storage with deployment, provisioning, and deprovisioning functionalities. - Implemented MongoDBProvider class for MongoDB service with similar capabilities. - Introduced error handling utilities for better error management. - Developed TokensComponent for managing registry tokens in the UI, including creation, deletion, and display of tokens.
This commit is contained in:
177
readme.md
177
readme.md
@@ -14,10 +14,10 @@ For reporting bugs, issues, or security vulnerabilities, please visit [community
|
||||
- **Docker Swarm First** - All workloads run as Swarm services, not standalone containers, for built-in orchestration
|
||||
- **Real-time Everything** - WebSocket-powered live updates for service status, logs, and metrics across all connected clients
|
||||
- **Single Executable** - Compiles to a standalone binary - just run it, no dependencies
|
||||
- **Private Registry Included** - Built-in Docker registry with auto-deploy on push
|
||||
- **Private Registry Included** - Built-in Docker registry with token-based auth and auto-deploy on push
|
||||
- **Zero Config SSL** - Automatic Let's Encrypt certificates with hot-reload
|
||||
- **Cloudflare Integration** - Automatic DNS record management
|
||||
- **Modern Stack** - Deno runtime + SQLite database + Angular 18 UI
|
||||
- **Cloudflare Integration** - Automatic DNS record management and zone synchronization
|
||||
- **Modern Stack** - Deno runtime + SQLite database + Angular 19 UI
|
||||
|
||||
## Features ✨
|
||||
|
||||
@@ -25,13 +25,13 @@ For reporting bugs, issues, or security vulnerabilities, please visit [community
|
||||
- 🐳 **Docker Swarm Management** - Deploy, scale, and orchestrate services with Swarm mode
|
||||
- 🌐 **Native Reverse Proxy** - Deno-based HTTP/HTTPS proxy with dynamic routing from database
|
||||
- 🔒 **Automatic SSL Certificates** - Let's Encrypt integration with hot-reload and renewal monitoring
|
||||
- ☁️ **Cloudflare DNS Integration** - Automatic DNS record creation and synchronization
|
||||
- ☁️ **Cloudflare DNS Integration** - Automatic DNS record creation and zone synchronization
|
||||
- 📦 **Built-in Registry** - Private Docker registry with per-service tokens and auto-update
|
||||
- 🔄 **Real-time WebSocket Updates** - Live service status, logs, and system events
|
||||
|
||||
### Monitoring & Management
|
||||
- 📊 **Metrics Collection** - Historical CPU, memory, and network stats (every 60s)
|
||||
- 📝 **Centralized Logging** - Container logs with retention policies
|
||||
- 📝 **Centralized Logging** - Container logs with streaming and retention policies
|
||||
- 🎨 **Angular Web UI** - Modern, responsive interface with real-time updates
|
||||
- 👥 **Multi-user Support** - Role-based access control (admin/user)
|
||||
- 💾 **SQLite Database** - Embedded, zero-configuration storage
|
||||
@@ -98,7 +98,7 @@ Onebox is built with modern technologies for performance and developer experienc
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────┐
|
||||
│ Angular 18 Web UI │
|
||||
│ Angular 19 Web UI │
|
||||
│ (Real-time WebSocket Updates) │
|
||||
└─────────────────┬───────────────────────────────┘
|
||||
│ HTTP/WS
|
||||
@@ -121,13 +121,15 @@ Onebox is built with modern technologies for performance and developer experienc
|
||||
|
||||
### Core Components
|
||||
|
||||
- **Deno Runtime** - Modern TypeScript with built-in security
|
||||
- **Native Reverse Proxy** - Custom HTTP/HTTPS proxy with TLS SNI support
|
||||
- **Docker Swarm** - Container orchestration (NOT standalone containers)
|
||||
- **SQLite Database** - Configuration, metrics, and user data
|
||||
- **WebSocket Server** - Real-time bidirectional communication
|
||||
- **Let's Encrypt** - Automatic SSL certificate management
|
||||
- **Cloudflare API** - DNS record automation
|
||||
| Component | Description |
|
||||
|-----------|-------------|
|
||||
| **Deno Runtime** | Modern TypeScript with built-in security |
|
||||
| **Native Reverse Proxy** | Custom HTTP/HTTPS proxy with TLS SNI support |
|
||||
| **Docker Swarm** | Container orchestration (NOT standalone containers) |
|
||||
| **SQLite Database** | Configuration, metrics, and user data |
|
||||
| **WebSocket Server** | Real-time bidirectional communication |
|
||||
| **Let's Encrypt** | Automatic SSL certificate management |
|
||||
| **Cloudflare API** | DNS record automation |
|
||||
|
||||
## CLI Reference 📖
|
||||
|
||||
@@ -244,9 +246,11 @@ onebox status
|
||||
|
||||
### Data Locations
|
||||
|
||||
- **Database**: `./onebox.db` (or custom path)
|
||||
- **SSL Certificates**: Managed by CertManager
|
||||
- **Registry Data**: `./.nogit/registry-data`
|
||||
| Data | Location |
|
||||
|------|----------|
|
||||
| **Database** | `./onebox.db` (or custom path) |
|
||||
| **SSL Certificates** | Managed by CertManager |
|
||||
| **Registry Data** | `./.nogit/registry-data` |
|
||||
|
||||
### Environment Variables
|
||||
|
||||
@@ -270,8 +274,8 @@ ONEBOX_DEBUG=true
|
||||
git clone https://code.foss.global/serve.zone/onebox
|
||||
cd onebox
|
||||
|
||||
# Install dependencies (Deno handles this automatically)
|
||||
deno task dev
|
||||
# Start development server (auto-restart on changes)
|
||||
pnpm run watch
|
||||
```
|
||||
|
||||
### Tasks
|
||||
@@ -295,38 +299,93 @@ deno task compile
|
||||
```
|
||||
onebox/
|
||||
├── ts/
|
||||
│ ├── classes/ # Core implementations
|
||||
│ │ ├── onebox.ts # Main coordinator
|
||||
│ │ ├── reverseproxy.ts # Native HTTP/HTTPS proxy
|
||||
│ │ ├── docker.ts # Docker Swarm API
|
||||
│ │ ├── database.ts # SQLite storage
|
||||
│ │ ├── httpserver.ts # REST API + WebSocket
|
||||
│ │ ├── services.ts # Service orchestration
|
||||
│ │ ├── certmanager.ts # SSL certificate management
|
||||
│ │ ├── registry.ts # Built-in Docker registry
|
||||
│ │ └── ...
|
||||
│ ├── cli.ts # CLI router
|
||||
│ ├── types.ts # TypeScript interfaces
|
||||
│ └── plugins.ts # Dependency imports
|
||||
├── ui/ # Angular web interface
|
||||
├── test/ # Test files
|
||||
├── mod.ts # Main entry point
|
||||
└── deno.json # Deno configuration
|
||||
│ ├── classes/ # Core implementations
|
||||
│ │ ├── onebox.ts # Main coordinator
|
||||
│ │ ├── reverseproxy.ts # Native HTTP/HTTPS proxy
|
||||
│ │ ├── docker.ts # Docker Swarm API
|
||||
│ │ ├── database.ts # SQLite storage
|
||||
│ │ ├── httpserver.ts # REST API + WebSocket
|
||||
│ │ ├── services.ts # Service orchestration
|
||||
│ │ ├── certmanager.ts # SSL certificate management
|
||||
│ │ ├── cert-requirement-manager.ts # Certificate requirements
|
||||
│ │ ├── ssl.ts # SSL utilities
|
||||
│ │ ├── registry.ts # Built-in Docker registry
|
||||
│ │ ├── registries.ts # External registry management
|
||||
│ │ ├── dns.ts # DNS record management
|
||||
│ │ ├── cloudflare-sync.ts # Cloudflare zone sync
|
||||
│ │ ├── daemon.ts # Systemd daemon management
|
||||
│ │ └── apiclient.ts # API client utilities
|
||||
│ ├── cli.ts # CLI router
|
||||
│ ├── types.ts # TypeScript interfaces
|
||||
│ ├── logging.ts # Logging utilities
|
||||
│ └── plugins.ts # Dependency imports
|
||||
├── ui/ # Angular web interface
|
||||
├── test/ # Test files
|
||||
├── mod.ts # Main entry point
|
||||
└── deno.json # Deno configuration
|
||||
```
|
||||
|
||||
### API Endpoints
|
||||
|
||||
The HTTP server exposes the following endpoints:
|
||||
The HTTP server exposes a comprehensive REST API:
|
||||
|
||||
- `POST /api/auth/login` - User authentication (returns token)
|
||||
- `GET /api/status` - System status (requires auth)
|
||||
- `GET /api/services` - List all services (requires auth)
|
||||
- `POST /api/services` - Create service (requires auth)
|
||||
- `PUT /api/services/:id` - Update service (requires auth)
|
||||
- `DELETE /api/services/:id` - Delete service (requires auth)
|
||||
- `GET /api/ws` - WebSocket connection for real-time updates
|
||||
#### Authentication
|
||||
| Method | Endpoint | Description |
|
||||
|--------|----------|-------------|
|
||||
| `POST` | `/api/auth/login` | User authentication (returns token) |
|
||||
|
||||
See `ts/classes/httpserver.ts` for complete API documentation.
|
||||
#### Services
|
||||
| Method | Endpoint | Description |
|
||||
|--------|----------|-------------|
|
||||
| `GET` | `/api/services` | List all services |
|
||||
| `POST` | `/api/services` | Create/deploy service |
|
||||
| `GET` | `/api/services/:name` | Get service details |
|
||||
| `PUT` | `/api/services/:name` | Update service |
|
||||
| `DELETE` | `/api/services/:name` | Delete service |
|
||||
| `POST` | `/api/services/:name/start` | Start service |
|
||||
| `POST` | `/api/services/:name/stop` | Stop service |
|
||||
| `POST` | `/api/services/:name/restart` | Restart service |
|
||||
| `GET` | `/api/services/:name/logs` | Get service logs |
|
||||
| `WS` | `/api/services/:name/logs/stream` | Stream logs via WebSocket |
|
||||
|
||||
#### SSL Certificates
|
||||
| Method | Endpoint | Description |
|
||||
|--------|----------|-------------|
|
||||
| `GET` | `/api/ssl/list` | List all certificates |
|
||||
| `GET` | `/api/ssl/:domain` | Get certificate details |
|
||||
| `POST` | `/api/ssl/obtain` | Request new certificate |
|
||||
| `POST` | `/api/ssl/:domain/renew` | Force renew certificate |
|
||||
|
||||
#### Domains
|
||||
| Method | Endpoint | Description |
|
||||
|--------|----------|-------------|
|
||||
| `GET` | `/api/domains` | List all domains |
|
||||
| `GET` | `/api/domains/:domain` | Get domain details |
|
||||
| `POST` | `/api/domains/sync` | Sync domains from Cloudflare |
|
||||
|
||||
#### DNS Records
|
||||
| Method | Endpoint | Description |
|
||||
|--------|----------|-------------|
|
||||
| `GET` | `/api/dns` | List DNS records |
|
||||
| `POST` | `/api/dns` | Create DNS record |
|
||||
| `DELETE` | `/api/dns/:domain` | Delete DNS record |
|
||||
| `POST` | `/api/dns/sync` | Sync DNS from Cloudflare |
|
||||
|
||||
#### Registry
|
||||
| Method | Endpoint | Description |
|
||||
|--------|----------|-------------|
|
||||
| `GET` | `/api/registry/tags/:service` | Get registry tags for service |
|
||||
| `GET` | `/api/registry/tokens` | List registry tokens |
|
||||
| `POST` | `/api/registry/tokens` | Create registry token |
|
||||
| `DELETE` | `/api/registry/tokens/:id` | Delete registry token |
|
||||
|
||||
#### System
|
||||
| Method | Endpoint | Description |
|
||||
|--------|----------|-------------|
|
||||
| `GET` | `/api/status` | System status |
|
||||
| `GET` | `/api/settings` | Get settings |
|
||||
| `PUT` | `/api/settings` | Update settings |
|
||||
| `WS` | `/api/ws` | WebSocket for real-time updates |
|
||||
|
||||
### WebSocket Messages
|
||||
|
||||
@@ -374,6 +433,19 @@ docker push localhost:4000/myapp:latest
|
||||
# Service automatically updates! 🎉
|
||||
```
|
||||
|
||||
### Registry Token Management
|
||||
|
||||
```bash
|
||||
# Create a CI/CD token via API
|
||||
curl -X POST http://localhost:3000/api/registry/tokens \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"name": "github-actions", "type": "ci", "scope": ["myapp"], "expiresIn": "90d"}'
|
||||
|
||||
# Use token for docker login
|
||||
docker login localhost:4000 -u ci -p <token>
|
||||
```
|
||||
|
||||
### Cloudflare DNS Integration
|
||||
|
||||
```bash
|
||||
@@ -388,16 +460,19 @@ onebox service add myapp \
|
||||
--domain myapp.example.com
|
||||
|
||||
# DNS record is automatically created!
|
||||
|
||||
# Sync all domains from Cloudflare
|
||||
onebox dns sync
|
||||
```
|
||||
|
||||
### SSL Certificate Management
|
||||
|
||||
SSL certificates are automatically obtained and renewed:
|
||||
|
||||
- Certificates are requested when a service with a domain is deployed
|
||||
- Renewal happens automatically 30 days before expiry
|
||||
- Certificates are hot-reloaded without downtime
|
||||
- Force renewal: `onebox ssl force-renew <domain>`
|
||||
- ✅ Certificates are requested when a service with a domain is deployed
|
||||
- ✅ Renewal happens automatically 30 days before expiry
|
||||
- ✅ Certificates are hot-reloaded without downtime
|
||||
- ✅ Force renewal: `onebox ssl force-renew <domain>`
|
||||
|
||||
### Monitoring and Metrics
|
||||
|
||||
@@ -449,9 +524,9 @@ onebox ssl force-renew yourdomain.com
|
||||
|
||||
### WebSocket Connection Issues
|
||||
|
||||
- Ensure firewall allows WebSocket connections
|
||||
- Check browser console for connection errors
|
||||
- Verify `/api/ws` endpoint is accessible
|
||||
- ✅ Ensure firewall allows WebSocket connections
|
||||
- ✅ Check browser console for connection errors
|
||||
- ✅ Verify `/api/ws` endpoint is accessible
|
||||
|
||||
### Service Not Starting
|
||||
|
||||
|
||||
Reference in New Issue
Block a user