HarryPanel is a lightweight, self-hosted server management dashboard built for developers and sysadmins who want full control over their infrastructure without the bloat of enterprise solutions. Deploy applications, monitor system health, manage services, and execute commands β all from a clean, terminal-inspired web interface.
graph TB
subgraph "Frontend"
UI[Dashboard UI]
WS[WebSocket Client]
TERM[Terminal Emulator]
end
subgraph "Backend (Flask)"
API[REST API]
AUTH[JWT Auth]
PROC[Process Manager]
MON[System Monitor]
DEPLOY[Deployment Engine]
WS_SRV[WebSocket Server]
end
subgraph "System Layer"
SYSTEMD[systemd]
DOCKER[Docker Engine]
NGINX[Nginx]
LOGS[Log Files]
METRICS[/proc, /sys, psutil]
end
UI --> API
UI --> WS
TERM --> WS_SRV
API --> AUTH
API --> PROC
API --> MON
API --> DEPLOY
WS_SRV --> PROC
PROC --> SYSTEMD
PROC --> DOCKER
MON --> METRICS
DEPLOY --> NGINX
DEPLOY --> SYSTEMD
| Feature | Description |
|---|---|
| Real-time CPU/RAM/Disk | Live charts with WebSocket updates |
| Process List | Searchable, sortable, kill/restart actions |
| Network I/O | Per-interface bandwidth, connections |
| Temperature Sensors | lm-sensors integration |
| Service Status | systemd unit monitoring & control |
| Feature | Description |
|---|---|
| Git-based Deploys | Pull, build, deploy from any git repo |
| Docker Support | Compose up/down, image management |
| Static Sites | One-click Hugo, Jekyll, Next.js exports |
| Nginx Config | Auto-generate & manage vhosts |
| SSL/TLS | Let's Encrypt integration (certbot) |
| Rollbacks | One-click previous version restore |
- Full PTY-based terminal in browser (xterm.js)
- Multiple concurrent sessions
- Command history & autocomplete
- Copy/paste support
- JWT-based authentication
- Rate limiting on auth endpoints
- Optional 2FA (TOTP)
- Audit logging for all actions
- IP allowlist support
- Linux server (Ubuntu 20.04+, Debian 11+, RHEL 8+)
- Python 3.10+
- systemd (for service management)
- Docker (optional, for container deployments)
- Nginx (for reverse proxy)
# Clone repository
git clone https://github.com/ykrishhh/HarryPanel.git
cd HarryPanel
# Create virtual environment
python -m venv venv && source venv/bin/activate
# Install dependencies
pip install -r requirements.txt
# Initialize database
flask --app harrypanel db upgrade
# Create admin user
flask --app harrypanel create-admin --username admin --email admin@example.com# Copy config template
cp config.example.yaml config.yaml
# Edit configuration
# βββ secret_key: "your-secret-key"
# βββ database_url: "sqlite:///harrypanel.db"
# βββ jwt_expiry_hours: 24
# βββ allow_registration: false
# βββ ssh_key_path: "/home/user/.ssh/id_rsa"
# βββ nginx_sites_path: "/etc/nginx/sites-available"# Development
flask --app harrypanel run --host 0.0.0.0 --port 5000
# Production (with gunicorn)
gunicorn -w 4 -b 0.0.0.0:5000 "harrypanel:create_app()"
# As systemd service
sudo cp harrypanel.service /etc/systemd/system/
sudo systemctl enable --now harrypanelserver {
listen 80;
server_name panel.yourdomain.com;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}HarryPanel/
βββ harrypanel/
β βββ __init__.py
β βββ create_app.py # Flask app factory
β βββ config.py # Configuration
β βββ extensions.py # SQLAlchemy, JWT, SocketIO
β βββ models/
β β βββ __init__.py
β β βββ user.py # User model
β β βββ server.py # Server/host model
β β βββ deployment.py # Deployment model
β β βββ audit.py # Audit log model
β βββ api/
β β βββ __init__.py
β β βββ auth.py # Login, register, 2FA
β β βββ servers.py # Server CRUD
β β βββ deployments.py # Deployment management
β β βββ monitoring.py # Metrics endpoints
β β βββ terminal.py # WebSocket terminal
β βββ services/
β β βββ __init__.py
β β βββ systemd.py # systemd integration
β β βββ docker.py # Docker API wrapper
β β βββ nginx.py # Nginx config generator
β β βββ git.py # Git operations
β β βββ ssl.py # Let's Encrypt / certbot
β β βββ monitor.py # psutil-based metrics
β βββ cli/
β β βββ __init__.py
β β βββ admin.py # Admin commands
β β βββ db.py # Database commands
β βββ templates/
β β βββ base.html
β β βββ dashboard.html
β β βββ servers.html
β β βββ deployments.html
β β βββ terminal.html
β β βββ auth/
β β βββ login.html
β β βββ register.html
β βββ static/
β βββ css/
β β βββ main.css # Terminal-inspired theme
β βββ js/
β β βββ app.js # Alpine.js app
β β βββ terminal.js # xterm.js integration
β β βββ charts.js # Chart.js dashboards
β βββ fonts/
βββ migrations/ # Alembic migrations
βββ tests/
β βββ unit/
β βββ integration/
βββ harrypanel.service # systemd unit
βββ requirements.txt
βββ pyproject.toml
βββ config.example.yaml
βββ LICENSE
βββ README.md
| Layer | Technology |
|---|---|
| Backend | Flask 3.x, SQLAlchemy 2.x, Flask-SocketIO |
| Auth | PyJWT, pyotp (TOTP), bcrypt |
| System | psutil, docker-py, python-systemd |
| Git | GitPython |
| Frontend | Alpine.js, xterm.js, Chart.js, Tailwind CSS |
| Database | SQLite (dev), PostgreSQL (prod) |
| Process | gunicorn, systemd |
- v0.5 Multi-server management (agent-based)
- v0.6 Kubernetes deployment support
- v0.7 Database management (PostgreSQL, MySQL, Redis)
- v0.8 Backup/restore scheduling
- v0.9 Plugin system for custom modules
- v1.0 Stable release with full documentation
See CONTRIBUTING.md for guidelines.
MIT License β see LICENSE for details.