Pterodactyl Panel – 游戏服务器管理面板

Pterodactyl Panel (翼龙面板)包含了两个项目实例 —— Panel 和 Wings:

  • Panel 相当于控制面板,Wings 是受控端(节点)
  • 一个 Panel 可以连接多个安装了 Wings 的服务器
  • Panel 使用 PHP 开发,Wings 使用 Go 开发

翼龙面板的功能类似于 SteamCMD 搭建游戏服务器 和 LinuxGSM自建游戏服务器(l4d2),自带 WebUI 更方便管理,但是开箱即用的游戏服务器比较少,想搭建其他游戏服务器需要自己花时间适配

官方和社区支持的游戏服务器列表可以查看 https://pterodactyl.io/project/introduction.html#supported-games

下文将展示如何在 Debian 11 下安装和使用翼龙面板(仅在内网使用,不包括域名和 SSL 的设置,设置域名和 SSL 使用 certbot 即可)

环境

  • Debian 11
    • LNMP
    • docker

参考

步骤

安装 Panel

安装 LNMP 运行环境

# Nginx 和其他必要软件
apt install unzip curl tar git nginx

# PHP8.1
curl -sSL https://packages.sury.org/php/README.txt | sudo bash -x
apt install php8.1 php8.1-{cli,gd,mysql,pdo,mbstring,tokenizer,bcmath,xml,fpm,curl,zip}

# MySQL 8
wget https://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.deb
apt install ./mysql-apt-config_0.8.22-1_all.deb

新建数据库

# 登录 MySQL
mysql -u root -p

# 登录 MySQL 后执行
CREATE USER 'pterodactyl'@'localhost' IDENTIFIED BY 'veryStrongPassword';
CREATE DATABASE panel;
GRANT ALL PRIVILEGES ON panel.* TO 'pterodactyl'@'localhost' WITH GRANT OPTION;
exit

获取并配置 Panel

# 新建 Panel 存放路径
mkdir -p /var/www/pterodactyl
cd /var/www/pterodactyl

# 下载、解压 Panel,更改特定路径权限
curl -Lo panel.tar.gz https://github.com/pterodactyl/panel/releases/latest/download/panel.tar.gz
tar -xzvf panel.tar.gz
chmod -R 755 storage/* bootstrap/cache/

安装 Panel

环境变量相关配置

# 准备环境变量文件
cp .env.example .env
# 安装 PHP 依赖
composer install --no-dev --optimize-autoloader
# 生成应用加密密钥
php artisan key:generate --force

# 配置环境变量
# 配置基本环境变量
php artisan p:environment:setup
# 配置数据库环境变量
php artisan p:environment:database
# 配置邮件相关变量
php artisan p:environment:mail

以上指令会将配置写入 .env 文件

配置基本环境变量时会要求输入 URL,如果没有域名,直接填写 http://[IP] 即可,时区可以填写 Asia/Shanghai,如下图

配置数据库时填写新建数据库时新建的用户名/密码,最后会测试连接

配置邮件服务时如果使用 QQ 邮箱:

  • 选用 SMTP 服务
  • 服务器填写 smtp.qq.com
  • 端口填写 465
  • 使用 SSL 加密
  • 用户名和密码使用 QQ 邮箱提供的信息

迁移数据库

php artisan migrate --seed --force

新建管理员用户

php artisan p:user:make

修改 Panel 目录权限

chown -R www-data:www-data /var/www/pterodactyl/*

这里使用了 www-data 用户,此用户为 Debian 11 下(通过默认源安装的)Nginx 的默认用户,其它系统和 Web 服务器的默认用户可能不同

配置队列监听

队列监听主要用于运行发送邮件等 Panel 运行所需的后台任务

执行

crontab -e

编辑系统 cron,在末尾写入

* * * * * php /var/www/pterodactyl/artisan schedule:run >> /dev/null 2>&1

在 /etc/systemd/system 下新建系统服务配置文件 pteroq.service,写入以下内容

[Unit]
Description=Pterodactyl Queue Worker
After=redis-server.service

[Service]
User=www-data
Group=www-data
Restart=always
ExecStart=/usr/bin/php /var/www/pterodactyl/artisan queue:work --queue=high,standard,low --sleep=3 --tries=3
StartLimitInterval=180
StartLimitBurst=30
RestartSec=5s

[Install]
WantedBy=multi-user.target

与修改 Panel 目录权限一样,根据自己的系统和 Web 服务器修改 User 和 Group

运行服务

sudo systemctl enable --now redis-server
sudo systemctl enable --now pteroq.service

配置 Nginx

在 /etc/nginx/sites-available 下新建配置文件 pterodactyl.conf,写入以下内容(无域名和 SSL 配置)

server {
    listen 80;
    server_name [IP];


    root /var/www/pterodactyl/public;
    index index.html index.htm index.php;
    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    access_log off;
    error_log  /var/log/nginx/pterodactyl.app-error.log error;

    # allow larger file uploads and longer script runtimes
    client_max_body_size 100m;
    client_body_timeout 120s;

    sendfile off;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param PHP_VALUE "upload_max_filesize = 100M \n post_max_size=100M";
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTP_PROXY "";
        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
    }

    location ~ /\.ht {
        deny all;
    }
}

域名、SSL、和 Apache 服务器配置可以查看 https://pterodactyl.io/panel/1.0/webserver_configuration.html

新建软链接

ln -s /etc/nginx/sites-available/pterodactyl.conf /etc/nginx/sites-enabled

测试并重载 Nginx

nginx -t
# 无误后执行
nginx -s reload

Panel 安装完毕,此时可以通过浏览器访问 IP 来查看效果

安装并配置 Wings

安装前确保系统已经安装了 docker

安装 Wings

mkdir -p /etc/pterodactyl
curl -L -o /usr/local/bin/wings "https://github.com/pterodactyl/wings/releases/latest/download/wings_linux_$([[ "$(uname -m)" == "x86_64" ]] && echo "amd64" || echo "arm64")"
chmod u+x /usr/local/bin/wings

配置 Wings

浏览器访问 Panel 并登录,先进入 Locations 标签页新建 Locations

Locations(地区)并没有特殊意义,相当于 Node(节点) 的分组,表明节点在哪个区域,因为不新建地区无法添加节点,所以先添加地区

再进入 Nodes 标签页,新建节点:

  • 填写名称,选择地区
  • FQDN 填写当前(安装了 Wings 的)服务器的 IP 地址
  • SSL、Proxy 全部关闭
  • 根据该节点的硬件条件分配 CPU、内存和硬盘

创建完毕后:

  • 点击该节点名称,进入 Configuration 标签
  • 点击右侧 Auto-Deploy 下的 Generate Token
  • 复制生成的指令,粘贴到该节点的 Shell 中执行

执行成功则代表该(安装了 Wings 的)服务器已经作为这个节点绑定到了 Panel

启动 Wings

Shell 下执行

wings --debug

测试 Wings 是否可以正常启动

测试无误后,在 /etc/systemd/system 下新建系统服务配置文件 wings.service,写入以下内容

[Unit]
Description=Pterodactyl Wings Daemon
After=docker.service
Requires=docker.service
PartOf=docker.service

[Service]
User=root
WorkingDirectory=/etc/pterodactyl
LimitNOFILE=4096
PIDFile=/var/run/wings/daemon.pid
ExecStart=/usr/local/bin/wings
Restart=on-failure
StartLimitInterval=180
StartLimitBurst=30
RestartSec=5s

[Install]
WantedBy=multi-user.target

启动 Wings

systemctl enable --now wings

分配端口

由于游戏服务器使用 docker 运行,需要进行端口映射才能被外部网络访问,这里配置的端口将成为后续游戏服务器的映射端口

进入节点的 Allocation 标签,填写右侧的 Assign New Allocations :

  • IP Address 填写该服务器的外部 IP
  • Ports 填写单个端口或端口范围,例如 20000 或 20000-2999
    • 单次添加的端口数量不能超过 1000 个

点击提交,左侧会显示已经添加的端口

游戏服务器的创建

新建游戏服务器

在 Panel 设置界面进入 Servers 标签页,在这里点击 Create New 新建游戏服务器

下图以 Minecraft 服务器为例,新建游戏服务器

在 Nest Configuration 下选择 Minecraft 的 Nest 和 Egg

需要注意的是 Allocation Management 下的设置:

  • 节点
    • 在哪个节点运行该游戏服务器
  • 游戏服务器映射的端口
    • 之前分配的端口

注意:图中 512 MB 的内存限制无法运行该 Minecraft 服务器,需要至少分配 2 GB 内存(没有玩家加入的情况下,运行后内存为 1.6 G)

启动游戏服务器

新建的游戏服务器不会自动启动,需要手动运行

在 Servers 标签页下点击对应游戏服务器最右侧的设置按钮,进入该游戏服务器的设置页面

点击 Start 按钮即可开启该游戏服务器

游戏服务器启动完毕,通过 netstat 查看 docker 已经绑定对应端口

关于 Nest 和 Egg

在 Panel 设置界面进入 Nests 标签页即可查看当前 Panel 的所有 Nest 和 Egg

属于自创的名词(请问开发者,你们那里说人话罚多少钱)

Egg 实际上就是游戏服务器的模板,相当于 docker-compose 文件:

  • docker-compose 根据 yaml 文件的配置启动容器
  • 翼龙面板根据 Egg 文件的配置启动游戏服务器
    • Egg 配置文件导出后格式为 json

如果想搭建除官方/社区支持外的游戏服务器,需要自己新建并配置 Egg,包括自己提供对应的 docker 镜像

Nest 是对 Egg 的分类,没有特殊意义,两者关系相当于 Location 和 Node

效果

发表评论

您的电子邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据