Implemented agent auto-update functionality, including periodic update checks, manual update command, and configuration options. Added backend API endpoints for agent version checking, update triggering, and download redirection. Updated documentation to reflect completion of the auto-update system.
ServerKit
Self-hosted infrastructure, made simple
Features · Quick Start · Documentation · Architecture · Contributing
What is ServerKit?
ServerKit is a lightweight, modern server control panel for managing web applications, databases, Docker containers, and security on your VPS or dedicated server. Built with Python/Flask backend and React frontend.
Perfect for: Developers, freelancers, and small teams who want full control over their infrastructure without the complexity of Kubernetes or the cost of managed platforms.
Architecture
View How It Works
┌──────────────────┐
│ INTERNET │
└────────┬─────────┘
│
▼
┌──────────────────────────────────────────────────────────────────────────┐
│ YOUR SERVER │
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ NGINX (Reverse Proxy) │ │
│ │ :80 / :443 │ │
│ │ │ │
│ │ app1.com ──┐ app2.com ──┐ api.app3.com ──┐ │ │
│ └───────────────┼─────────────────┼─────────────────────┼─────────────┘ │
│ │ proxy_pass │ proxy_pass │ proxy_pass │
│ ▼ ▼ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ DOCKER CONTAINERS │ │
│ │ │ │
│ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ │
│ │ │ WordPress │ │ Flask │ │ Node.js │ ... │ │
│ │ │ :8001 │ │ :8002 │ │ :8003 │ │ │
│ │ └─────┬─────┘ └───────────┘ └───────────┘ │ │
│ └──────────┼──────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ DATABASES │ │
│ │ MySQL :3306 PostgreSQL :5432 Redis :6379 │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────────────┘
View Full Architecture Documentation →
Includes: Request flow diagrams, template system, port allocation, database linking, and troubleshooting guides.
Features
Application Management
- PHP / WordPress - PHP-FPM 8.x with one-click WordPress installation
- Python Apps - Deploy Flask and Django with Gunicorn
- Node.js - PM2-managed Node applications
- Docker - Full container and Docker Compose management
- Environment Variables - Secure, encrypted variable management per app
Infrastructure
- Domain Management - Nginx virtual hosts with easy configuration
- SSL Certificates - Automatic Let's Encrypt with auto-renewal
- Database Management - MySQL/MariaDB and PostgreSQL support
- Firewall (UFW) - Visual firewall rule management
- Cron Jobs - Schedule tasks with a visual editor
- File Manager - Browse and edit files via web interface
- FTP Server - Manage vsftpd users and access
Security
- Two-Factor Authentication (2FA) - TOTP-based with backup codes
- ClamAV Integration - Malware scanning with quarantine
- File Integrity Monitoring - Detect unauthorized file changes
- Failed Login Detection - Monitor suspicious login attempts
- Security Alerts - Real-time notifications for threats
Monitoring & Alerts
- Real-time Metrics - CPU, RAM, disk, network monitoring
- Server Uptime Tracking - Historical uptime data
- Alert Thresholds - Customizable warning/critical levels
- Notification Webhooks:
- Discord
- Slack
- Telegram
- Generic webhooks
Modern UI
- Dark-themed responsive dashboard
- Real-time WebSocket updates
- Mobile-friendly interface
Screenshots
Quick Start
Option 1: One-Line Install (Recommended)
curl -fsSL https://raw.githubusercontent.com/jhd3197/serverkit/main/install.sh | bash
Works on Ubuntu 22.04+ and Debian 12+. Sets up everything automatically.
Option 2: Docker
# Clone the repository
git clone https://github.com/jhd3197/ServerKit.git
cd ServerKit
# Configure environment
cp .env.example .env
nano .env # Set SECRET_KEY and JWT_SECRET_KEY
# Start ServerKit
docker compose up -d
# Access at http://localhost
Option 3: Manual Installation
See Installation Guide for detailed instructions.
Requirements
| Requirement | Minimum | Recommended |
|---|---|---|
| OS | Ubuntu 22.04 LTS | Ubuntu 24.04 LTS |
| CPU | 1 vCPU | 2+ vCPU |
| RAM | 1 GB | 2+ GB |
| Disk | 10 GB | 20+ GB |
| Docker | 24.0+ | Latest |
Tech Stack
| Layer | Technology |
|---|---|
| Backend | Python 3.11, Flask, SQLAlchemy, Flask-SocketIO |
| Frontend | React 18, Vite, LESS |
| Database | SQLite / PostgreSQL |
| Web Server | Nginx, Gunicorn |
| Containers | Docker, Docker Compose |
| Security | ClamAV, TOTP (pyotp), Cryptography |
Documentation
| Document | Description |
|---|---|
| Architecture | System design, request flow, and diagrams |
| Installation Guide | Complete setup instructions |
| Deployment Guide | CLI commands and production deployment |
| API Reference | REST API documentation |
| Roadmap | Development roadmap and planned features |
| Contributing | How to contribute |
Project Structure
ServerKit/
├── backend/ # Flask API
│ ├── app/
│ │ ├── api/ # API endpoints
│ │ ├── models/ # Database models
│ │ └── services/ # Business logic
│ ├── config.py
│ └── requirements.txt
│
├── frontend/ # React application
│ ├── src/
│ │ ├── components/ # Reusable components
│ │ ├── pages/ # Page components
│ │ ├── services/ # API client
│ │ └── styles/ # LESS stylesheets
│ └── package.json
│
├── docs/ # Documentation
├── docker-compose.yml # Docker configuration
└── README.md
CLI Commands
ServerKit includes a management CLI:
# Service Management
serverkit start|stop|restart|status
# User Management
serverkit create-admin
serverkit reset-password
# Database
serverkit backup-db
serverkit restore-db <backup-file>
# Updates & Branches
serverkit update # Update to latest version
serverkit update --branch <name> # Switch to specific branch (e.g., dev)
serverkit branch # Show current branch and commit
# Utilities
serverkit generate-keys
serverkit logs [service]
Configuration
Create a .env file from the example:
cp .env.example .env
Key configuration options:
# Required - Generate unique values!
SECRET_KEY=your-secret-key
JWT_SECRET_KEY=your-jwt-secret
# Database (SQLite default, PostgreSQL for production)
DATABASE_URL=sqlite:///serverkit.db
# Your domain
CORS_ORIGINS=https://panel.yourdomain.com
Generate secure keys:
python -c "import secrets; print(secrets.token_hex(32))"
Notification Setup
ServerKit can send alerts to multiple channels:
Discord
- Create webhook: Server Settings → Integrations → Webhooks
- Copy URL to Settings → Notifications → Discord
Slack
- Create app: api.slack.com → Incoming Webhooks
- Copy URL to Settings → Notifications → Slack
Telegram
- Create bot via @BotFather
- Get chat ID from @userinfobot
- Configure in Settings → Notifications → Telegram
Security Features
Two-Factor Authentication
- TOTP-based (Google Authenticator, Authy, etc.)
- Backup codes for recovery
- Enable in Settings → Security
Malware Scanning
- ClamAV integration
- Quick scan / Full scan options
- Automatic quarantine
- Configure in Security → Settings
File Integrity Monitoring
- Baseline creation
- Change detection
- Alert on modifications
API Overview
Base URL: http://localhost:5000/api/v1
Authentication:
POST /auth/login # Login
POST /auth/register # Register
POST /auth/2fa/verify # 2FA verification
Applications:
GET /apps # List apps
POST /apps # Create app
GET /apps/:id # Get app
DELETE /apps/:id # Delete app
Security:
GET /security/status # Security summary
POST /security/scan/quick # Quick malware scan
GET /security/events # Security events
Notifications:
GET /notifications/config # Get config
PUT /notifications/config/:channel # Update channel
POST /notifications/test/:channel # Test channel
Full API documentation: docs/API.md
Contributing
Contributions are welcome! Please read CONTRIBUTING.md first.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
ServerKit — Simple. Modern. Self-hosted.
Report Bug ·
Request Feature
Made with ❤️ by Juan Denis