编程 Pelican Panel + Wings 部署笔记:Compose、反代、节点上线

2026-10-20 21:31:10

Pelican Panel + Wings 部署笔记:Compose、反代、节点上线

项目信息

  • Panel:https://github.com/pelican/panel
  • Wings:https://github.com/pelican/wings
  • 文档:https://pelican.dev/docs
  • Egg 仓库:https://github.com/pelican-eggs

先分清 Panel 和 Wings

Pelican Panel 是 Laravel 写的开源游戏服务器面板,Pterodactyl 生态的现代替代品。组件只有两个:

  • Panel:Web UI,Laravel 应用,镜像 ghcr.io/pelican/panel:latest,负责用户、节点、Egg、端口分配这些管理数据。
  • Wings:节点守护进程,跑在真正承载游戏的机器上,把每个游戏服务器作为独立 Docker 容器运行,镜像 ghcr.io/pelican/wings。

关键区别在于:Panel 不启动游戏进程,Wings 才启动。Panel 可以放在小机器上或反向代理后面,Wings 必须和游戏服在同一台机器。

Panel:Docker Compose 跑起来

官方文档写得很明确:Panel 的 Docker 部署仍处于 work in progress,当前推荐标准安装。想省事的可以先试 Compose,前提是 Docker CE 加 Compose v2,v1 不支持。main 分支镜像是 ghcr.io/pelican/panel:main。

基本 compose.yml:

services:
  panel:
    image: ghcr.io/pelican/panel:latest
    restart: always
    networks: [default]
    ports: ["80:80", "443:443"]
    extra_hosts: ["host.docker.internal:host-gateway"]
    volumes:
      - pelican-data:/pelican-data
      - pelican-logs:/var/www/html/storage/logs
    environment:
      XDG_DATA_HOME: /pelican-data
      APP_URL: "http://localhost"
      ADMIN_EMAIL: "you@example.com"
volumes:
  pelican-data:
  pelican-logs:
networks:
  default:
    ipam:
      config:
        - subnet: 172.20.0.0/16

APP_URL 必须写对外可达的完整 URL,带协议和端口。如果写成 https://,内置 Caddy 会从 80 端口做 308 跳转到 https;TLS 在上游反代终止的话,需要自定义 Caddyfile。ADMIN_EMAIL 用于 Let's Encrypt 证书申请。

启动与首次初始化:

docker compose up -d
docker compose logs panel | grep 'Generated app key:'

这条 APP_KEY 必须备份。之后浏览器打开 APP_URL/installer 完成安装。安装或升级后首次启动会跑数据库 migration,可能几分钟不可用。

默认驱动:Cache=Filesystem、Database=SQLite、Queue=Database、Session=Filesystem,其他选项在 admin 设置里改。

反代下的 BEHIND_PROXY / TRUSTED_PROXIES

社区版 Compose(blog.aflorzy.com 2026 版,Panel v1.0.0-beta31 / Wings v1.0.0-beta22)在 panel 服务上加了 ./Caddyfile 挂载,并设置 BEHIND_PROXY=true、TRUSTED_PROXIES=<反代IP>。这一组不配置,面板块拿到的客户端 IP 和协议判断都会出错,登录、会话和生成的 URL 一起出问题。Caddyfile 里的上传大小上限也在这个文件里调,下面建服务器时会用到。

Wings:标准安装

Debian/Ubuntu,需要 Linux + Docker CE,不支持 Windows。OpenVZ/LXC/Virtuozzo 大概率跑不起来,KVM 可以。先 systemd-detect-virt 检查虚拟化类型;内核版本带 -grs-ipv6-64 之类后缀的,可能是被改过的内核。游戏文件建议放独立分区,避免根分区被写满。

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

然后在 Panel 管理界面 Nodes → Create New 建节点,在 Configuration 标签复制配置到 /etc/pelican/config.yml,或用 Auto Deploy Command。注意:Panel 用 SSL 时 Wings 也必须 SSL。

先前台跑一遍看错误:

sudo wings --debug

systemd 单元:

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

[Service]
User=root
WorkingDirectory=/etc/pelican
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
systemctl enable --now wings

社区 Docker 版则在 Compose 里额外加一个 wings 服务:镜像 ghcr.io/pelican-dev/wings:latest,端口 2022、8443:443、8080:8080,环境 WINGS_UID/GID/USERNAME,挂载 /var/run/docker.sock、/var/lib/docker/containers、/etc/pelican、/var/lib/pelican、/var/log/pelican、/tmp/pelican,网络 wings0(172.21.0.0/16,bridge 名 wings0)。启动后 wings 日志报缺 config.yml 是正常的,得先在 Panel 建好节点生成配置。挂 docker.sock 等于把宿主机 root 能力交给容器,这是这一版必须接受的边界;2022 端口要一起放行。

反代与节点健康检查

Nginx Proxy Manager 上:panel 域名转发到 80,开 websockets,SSL force;wings 域名转发到 8080,websockets 必须开,否则控制台和日志的实时输出会断。

节点创建时填 wings 域名,Communication of SSL 选 HTTPS with (reverse) proxy,Connection Port 443,Listening Port 8080,生成的 config.yml 写到 /etc/pelican/config.yml。节点页面出现绿色心跳才算健康。

端口分配与 Egg 导入

Node → Allocations,IP 填 0.0.0.0(容器内网),端口范围如 25560-25570。Egg 从 panel 的 Eggs → Import 导入,仓库是 github.com/pelican-eggs,按 Minecraft、SteamCMD、独立游戏、数据库、监控等分类。建服务器时选节点、端口分配、Egg,状态会走 Installing → Console → Start。Minecraft 需要接受 EULA。上传限制不能超过 Caddyfile 里的设置(示例 512M)。

几条取舍

Docker 版 vs 标准安装:官方自己标了 WIP,长期跑生产用标准安装更稳;Compose 版适合快速验证或小规模同机部署,代价是要自己维护 Caddyfile 和 socket 挂载。

同机 vs 分机:Panel 和 Wings 可以放同一台(社区版就是这么干的),但游戏吃 CPU/IO 时 Panel 会被拖慢;Panel 挂掉不影响已经运行的 Wings 实例,但开新服、改配置会失败。

SQLite vs MySQL:默认 SQLite,单机小规模够用;节点多、并发操作频繁时换 MySQL 更省心,在 admin 设置里切。

复制全文 生成海报 Pelican Laravel Docker 自托管 运维部署

推荐文章

程序员茄子在线接单