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

ComponentMinimumRecommended
OSUbuntu 20.04, Debian 11, CentOS 8Ubuntu 22.04+, Debian 12+
RAM1 GB2 GB+
Disk5 GB10 GB+
SoftwareDocker & Docker Compose (auto-installed by the script)
Supported Distributions

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.

bash
curl -sSL https://riftpanel.net/install.sh | sudo bash

Unattended Install

Skip the interactive wizard by passing parameters directly.

bash
curl -sSL https://riftpanel.net/install.sh | sudo bash -s -- \
  --email [email protected] \
  --password YourSecurePassword \
  --domain panel.example.com \
  --yes

Manual Install (Docker Compose)

If you prefer manual control, create a docker-compose.yml:

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

  1. Access the panelNavigate to your domain or IP:8080. Log in with the admin credentials set during installation.
  2. Add a nodeGo to Admin > Nodes and add your first game server node. Install Wings using the provided script.
  3. Create allocationsAssign port ranges to the node (e.g. 25565-25600 for Minecraft).
  4. Deploy a serverCreate a game server from the dashboard. Choose an egg, select a node, and configure resources.
  5. Activate your licenseGo 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.

VariableDefaultDescription
DB_HOSTpostgresPostgreSQL hostname
DB_PORT5432PostgreSQL port
DB_NAMEriftpanelDatabase name
DB_PASSWORDDatabase password (required)
JWT_SECRETSigning secret, min 64 chars (required)
LICENSE_KEYLicense key (optional for Free tier)
DOMAINlocalhostPanel domain for CORS & cookies
PORT8080HTTP server port
STRIPE_SECRET_KEYStripe secret key (Business plan)
RESEND_API_KEYResend API key for emails

# Reverse Proxy (Nginx)

Recommended production setup with Nginx, SSL via Certbot, and WebSocket support.

/etc/nginx/sites-available/riftpanel.conf
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.

bash
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d panel.example.com
Auto-renewal

Certbot 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)

consolefilespowerbackupsettings subusersdatabasesschedulesallocationsstartup

# Nodes & Wings

Nodes are the machines where game server containers run. Each node requires the Wings daemon and the Rift Agent for metrics.

Install Wings on a node
curl -sSL https://riftpanel.net/install-wings.sh | sudo bash
Important

After 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.

PlanPriceKey Features
Free$015 modules, server management, monitoring
Pro$10/moAll 31 modules, AI assistant, tickets, API keys, templates
Business$19/moHosting store, Stripe billing, auto-provisioning, landing editor
Business Pro$29/moWhite-label, custom domain, multi AI, priority support
Verification & Caching

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

bash
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.

  1. Go to Admin > Migration
  2. Enter your Pterodactyl panel URL and API key
  3. Select what to import: users, nodes, eggs, servers
  4. Existing Wings nodes work as-isno reinstallation needed
Tip

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.