7.0 KiB
YakPanel
A web hosting control panel for Linux servers (Ubuntu 22+/Debian, Rocky/Alma 9, EL with dnf/yum). Built with FastAPI, React, and SQLAlchemy. Descended from YakPanel-style panels, rebuilt with a modern stack.
YakPanel (yakpanel.com) treats this repo as the baseline implementation: stack choice, security/privilege model, and distribution strategy are documented in ../../YakPanel-product/.
Features
- Dashboard - System stats, site/FTP/DB counts
- Website Management - Create sites, Nginx vhost, domains, Git deploy (clone/pull)
- FTP - FTP account management
- Databases - MySQL, PostgreSQL, Redis, MongoDB (create, backup, restore)
- Files - File manager (list, read, edit, upload, download, mkdir, rename, delete)
- Cron - Scheduled tasks
- Firewall - Port rules
- SSL - Let's Encrypt certificates via Certbot
- Docker - Container list, start, stop, restart
- Plugins - Built-in extensions + third-party plugins (add from JSON manifest URL)
- Backup Plans - Scheduled site and database backups
- Users - Multi-user management (admin only)
Linux install options (one-click)
All native installs require root. Use sudo -E ... when you set environment variables so they are preserved.
| Method | When to use |
|---|---|
| curl | Default; Debian/Ubuntu/RHEL-family with curl |
| wget | Host has wget but not curl |
Bootstrap install-curl.sh |
Same as curl but YAKPANEL_INSTALLER_BASE points at your mirror |
| Local / air-gap | Tree already on disk: YAKPANEL_SOURCE_DIR or scripts/install.sh |
| Docker Compose | Quick trial / CI; different ports than native (see below) |
| Web + SSH | Optional: browser UI at /install runs the same install.sh over SSH (off by default; see below) |
Web-based remote installer (SSH)
Disabled by default. Set ENABLE_REMOTE_INSTALLER=true in the API environment and restart the backend. Then open the SPA at /install (e.g. http://your-panel:8888/install behind Nginx, or Vite dev with proxy).
- Security: The browser sends SSH credentials to your YakPanel API; they are not stored in the database. Prefer SSH keys. Non-root users must have passwordless sudo (
sudo -n) because the session is non-interactive. The host running the API must be allowed to reach the target:SSH port (and the target must allow outbound HTTPS to runcurl+ clone + NodeSource as ininstall.sh). - Tuning (env):
REMOTE_INSTALL_DEFAULT_URL(HTTPSinstall.shonly),REMOTE_INSTALL_RATE_LIMIT_PER_IP,REMOTE_INSTALL_RATE_WINDOW_MINUTES,REMOTE_INSTALL_ALLOWED_TARGET_CIDRS(comma-separated CIDRs; empty = no restriction),CORS_EXTRA_ORIGINSfor extra browser origins in production. - API:
GET /api/v1/public-install/config,POST /api/v1/public-install/jobs, WebSocket/api/v1/public-install/ws/{job_id}(JSON messages:line,done).
Supported distros (native installer)
- Debian/Ubuntu:
apt-get(Nginxsites-availablelayout). - RHEL-family (Rocky, Alma, CentOS Stream, etc.):
dnforyum(Nginxconf.dlayout,firewalldport if active).
Environment variables (native install.sh)
| Variable | Meaning | Default |
|---|---|---|
REPO_URL |
Git URL to clone | https://source.yakpanel.com/admin/yakpanel-core (override for other mirrors) |
YAKPANEL_BRANCH |
Branch/tag for shallow clone | default branch |
GIT_REF |
Alias for YAKPANEL_BRANCH |
— |
INSTALL_PATH |
Install directory | /www/server/YakPanel-server |
PANEL_PORT |
Public HTTP port (Nginx) | 8888 |
BACKEND_PORT |
Uvicorn (localhost) | 8889 |
YAKPANEL_SOURCE_DIR |
Skip git; path with backend/ and frontend/ |
unset |
CLI flags: --repo-url, --install-path, --branch / --ref, --source-dir, --panel-port, --backend-port, --help.
One-liners (official CDN layout)
Paths assume you publish install.sh next to this repo under …/YakPanel-server/ on your web server.
curl -fsSL https://www.yakpanel.com/YakPanel-server/install.sh | sudo bash
wget -qO- https://www.yakpanel.com/YakPanel-server/install.sh | sudo bash
Mirror / GitHub raw (set your base; no trailing install.sh):
export YAKPANEL_INSTALLER_BASE=https://www.yakpanel.com/YakPanel-server
curl -fsSL "${YAKPANEL_INSTALLER_BASE}/install-curl.sh" | sudo -E bash
Custom git mirror and branch:
curl -fsSL https://www.yakpanel.com/YakPanel-server/install.sh | sudo -E env REPO_URL=https://git.example.com/yakpanel.git YAKPANEL_BRANCH=main bash
Local tree / air-gapped
From the YakPanel-server directory (must contain backend/ and frontend/):
sudo YAKPANEL_SOURCE_DIR="$(pwd)" bash install.sh
Or:
sudo bash scripts/install.sh
Docker (evaluation)
Uses docker-compose.yml in this directory — not the same layout as native (no host Nginx unit from install.sh).
git clone --depth 1 https://source.yakpanel.com/admin/yakpanel-core
# Then cd to this folder (in the full monorepo it is under YakPanel-master/YakPanel-server).
cd YakPanel-master/YakPanel-server
docker compose up -d
- Backend:
8888(API on container) - Frontend dev server image:
5173 - Redis:
6379
For a single compose command without cd, set -f to your checkout’s docker-compose.yml.
Post-install (all methods): change the default admin password, restrict firewall to SSH + panel port, add TLS (e.g. Let’s Encrypt) for production.
SELinux (RHEL): if Nginx returns 403 on static files, fix file contexts or test with permissive mode; see your distro SELinux docs.
Quick Start (development)
Backend
cd YakPanel-server/backend
python -m venv venv
# Windows: venv\Scripts\activate
# Linux: source venv/bin/activate
pip install -r requirements.txt
python scripts/seed_admin.py # Create admin user (admin/admin)
python run.py
Frontend
cd YakPanel-server/frontend
npm install
npm run dev
- Backend: http://localhost:8888
- Frontend: http://localhost:5173
- Login: admin / admin
Project Structure
YakPanel-server/
├── install.sh # Canonical native installer
├── install-curl.sh # Optional: fetch install.sh from YAKPANEL_INSTALLER_BASE
├── backend/ # FastAPI application
│ ├── app/
│ │ ├── api/ # Route handlers
│ │ ├── core/ # Config, security, utils
│ │ ├── models/ # SQLAlchemy models
│ │ ├── services/ # Business logic
│ │ └── tasks/ # Celery tasks
│ └── scripts/ # Seed, etc.
├── frontend/ # React + Vite SPA
├── webserver/ # Nginx vhost templates
├── scripts/ # Delegates to install.sh (local source)
└── docker-compose.yml
Tech Stack
- Backend: FastAPI, SQLAlchemy 2.0, Celery, Redis
- Frontend: React 18, Vite, TypeScript, Tailwind CSS
- Auth: JWT, bcrypt
License
MIT