RiftPanel Documentation
The modern, all-in-one platform to deploy, manage, and monetize game servers. This guide covers everything from installation to advanced configuration.
# Requirements
| Component | Minimum | Recommended |
|---|---|---|
| OS | Ubuntu 20.04, Debian 11, CentOS 8 | Ubuntu 22.04+, Debian 12+ |
| RAM | 1 GB | 2 GB+ |
| Disk | 5 GB | 10 GB+ |
| Software | Docker & Docker Compose (auto-installed by the script) | |
Ubuntu, Debian, CentOS, Rocky Linux, AlmaLinux, Fedora, Amazon Linux, Oracle Linux, RHEL, Arch Linux, openSUSE, and Alpine Linux.
# Installation
Quick Install (Recommended)
The interactive installer handles Docker, database setup, and admin account creation automatically.
curl -sSL https://riftpanel.net/install.sh | sudo bashUnattended Install
Skip the interactive wizard by passing parameters directly.
curl -sSL https://riftpanel.net/install.sh | sudo bash -s -- \
--email [email protected] \
--password YourSecurePassword \
--domain panel.example.com \
--yesManual Install (Docker Compose)
If you prefer manual control, create a docker-compose.yml:
services:
riftpanel:
image: lucasvicente1/riftpanel:latest
ports:
- "${PANEL_PORT:-8080}:8080"
environment:
- RIFTPANEL_DB_HOST=postgres
- RIFTPANEL_DB_PORT=5432
- RIFTPANEL_DB_NAME=riftpanel
- RIFTPANEL_DB_USER=riftpanel
- RIFTPANEL_DB_PASSWORD=${DB_PASSWORD}
- RIFTPANEL_JWT_SECRET=${JWT_SECRET}
- RIFTPANEL_LICENSE_KEY=${LICENSE_KEY}
depends_on:
postgres:
condition: service_healthy
restart: unless-stopped
postgres:
image: postgres:15-alpine
environment:
POSTGRES_DB: riftpanel
POSTGRES_USER: riftpanel
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U riftpanel"]
interval: 5s
restart: unless-stopped
update-agent:
image: lucasvicente1/riftpanel-updater:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- .:/app
restart: unless-stopped
volumes:
postgres_data:# First Steps
- Access the panel — Navigate to your domain or IP:8080. Log in with the admin credentials set during installation.
- Add a node — Go to Admin > Nodes and add your first game server node. Install Wings using the provided script.
- Create allocations — Assign port ranges to the node (e.g. 25565-25600 for Minecraft).
- Deploy a server — Create a game server from the dashboard. Choose an egg, select a node, and configure resources.
- Activate your license — Go to Settings > License and enter your key. The Free tier works without one.
# Environment Variables
All variables use the RIFTPANEL_ prefix. Set them in a .env file or directly in docker-compose.yml.
| Variable | Default | Description |
|---|---|---|
DB_HOST | postgres | PostgreSQL hostname |
DB_PORT | 5432 | PostgreSQL port |
DB_NAME | riftpanel | Database name |
DB_PASSWORD | — | Database password (required) |
JWT_SECRET | — | Signing secret, min 64 chars (required) |
LICENSE_KEY | — | License key (optional for Free tier) |
DOMAIN | localhost | Panel domain for CORS & cookies |
PORT | 8080 | HTTP server port |
STRIPE_SECRET_KEY | — | Stripe secret key (Business plan) |
RESEND_API_KEY | — | Resend API key for emails |
# Reverse Proxy (Nginx)
Recommended production setup with Nginx, SSL via Certbot, and WebSocket support.
server {
listen 80;
server_name panel.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name panel.example.com;
ssl_certificate /etc/letsencrypt/live/panel.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/panel.example.com/privkey.pem;
# Security headers
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header Strict-Transport-Security "max-age=31536000" always;
client_max_body_size 256m;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400s;
}
}# SSL / HTTPS
Install Certbot and generate a free SSL certificate from Let's Encrypt.
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d panel.example.comCertbot automatically configures a cron job for certificate renewal. No manual action needed.
# Roles & Permissions
RiftPanel has 4 user roles with hierarchical access control.
Super Admin
Full system access. Factory reset, system config, user promotion, and all admin features.
Admin
Manage nodes, eggs, users, modules, database hosts. Full server oversight.
User
Create and manage own servers, networks, teams, and tickets.
Client
Access assigned servers only. Purchase hosting from the store.
Sub-user Permissions (per server)
# Nodes & Wings
Nodes are the machines where game server containers run. Each node requires the Wings daemon and the Rift Agent for metrics.
curl -sSL https://riftpanel.net/install-wings.sh | sudo bashAfter adding a node in the panel, copy the configuration token and use it when setting up Wings on the node.
# Servers
Game servers are Docker containers managed through Wings. Each server uses an egg (game template) that defines startup commands, configs, and variables.
- Real-time console via xterm.js with WebSocket
- File manager with built-in Monaco code editor
- Automatic and manual backups
- Scheduled tasks, restarts, and power actions
- Live CPU, RAM, disk, and network metrics
- Custom subdomains via Cloudflare integration
- 40+ egg templates in the built-in marketplace
# Modules
31 game-aware modules extend server capabilities. Admins enable/disable modules globally from the admin panel.
Free Modules (15)
Startup Config, Environment Vars, Task Scheduler, Resource Alerts, Console Logs, File Search, Resource Monitor, Trash Bin, Idle Stop, Smart Restart, MC Plugin Manager, MC Version Changer, MC Config Editor, Rust Plugin Installer, PZ Mod Installer.
Pro Modules (16)
MC Networks (Proxy), MC Player Analytics, MC Crash Analyzer, MC World Manager, MC MOTD Editor, MC Modpack Installer, MC Whitelist Manager, Hytale Player Tracking, Hytale World Manager, Hytale Profiler, Hytale Asset Manager, Player Analytics, Crash Detector, Audit Log.
# Billing & Store
The Business plan unlocks the built-in hosting store with Stripe-powered billing, automatic provisioning, and client management.
- Stripe-powered recurring invoicing and payment collection
- Automatic server provisioning on checkout
- Client self-service portal with product store
- Auto-suspend overdue services, auto-terminate abandoned
- Customizable landing page and branding
- Coupons, email templates, and hosting analytics
# Licensing
RiftPanel uses a license key to gate features by plan. The Free tier works without a key.
| Plan | Price | Key Features |
|---|---|---|
| Free | $0 | 15 modules, server management, monitoring |
| Pro | $10/mo | All 31 modules, AI assistant, tickets, API keys, templates |
| Business | $19/mo | Hosting store, Stripe billing, auto-provisioning, landing editor |
| Business Pro | $29/mo | White-label, custom domain, multi AI, priority support |
License cached 1 hour, re-validated every 4 hours. 48-hour offline grace period. After 48h offline, the panel downgrades to Free.
# Updates
One-click (Admin Dashboard)
When a new version is available, a notification appears in the admin dashboard. Click "Update" and the update agent handles pulling the new image and recreating containers.
Manual Update
cd /opt/riftpanel
docker compose pull
docker compose up -d --force-recreate# Migrate from Pterodactyl
RiftPanel includes a built-in migration tool to import servers, users, nodes, and eggs from Pterodactyl.
- Go to Admin > Migration
- Enter your Pterodactyl panel URL and API key
- Select what to import: users, nodes, eggs, servers
- Existing Wings nodes work as-is — no reinstallation needed
Create a read-only API key in your Pterodactyl panel to use during migration. You can delete it after the import.
# Troubleshooting
Panel is not accessible after installation
Check containers are running: docker compose ps
Verify port 8080 is open: sudo ufw allow 8080
Check logs: docker compose logs riftpanel
Database connection failed
Check PostgreSQL: docker compose logs postgres
Verify DB_PASSWORD matches between panel and PostgreSQL.
Ensure the health check passes before the panel starts.
WebSocket console not connecting
Ensure your reverse proxy supports WebSocket (see Nginx config).
Set proxy_read_timeout to 86400s.
Verify Wings is running and reachable from the panel.
License not found / not activated
"not found": Key doesn't exist in the license server.
"not activated": Auto-activates on first verify. Try refreshing from Settings > License.
"bound to different machine": Container hostname changed. Use the Reissue button.
Containers keep restarting
Usually a misconfigured environment variable. Check logs: docker compose logs --tail=50 riftpanel
Common causes: missing JWT_SECRET, wrong DB_PASSWORD, or invalid LICENSE_KEY.