PufferPanel 3.0.9 安装指南(Ubuntu 22.04)
Ubuntu 22.04 上 PufferPanel 3.0.9 三方案安装实录:apt 官方仓库、离线 deb、Docker Compose,含 unshare 沙箱排障实录与升级降级运维,全命令实测验证。
PufferPanel 3.0.9 安装指南(Ubuntu 22.04)
目标:在 Ubuntu 22.04 LTS 服务器上,通过三种可选方案(官方 apt 仓库在线安装、GitHub Releases 离线 deb 安装、Docker Compose 编排部署)完成 PufferPanel 3.0.9 从零到「面板可登录」的生产级部署,并覆盖服务管理、升级降级与高频故障排查。全部命令、输出、日志均在 Ubuntu 22.04.5 实测环境逐条验证通过,实测时间 2026-10-24。
一、环境信息
- 操作系统:Ubuntu 22.04.5 LTS(x86_64,
PRETTY_NAME="Ubuntu 22.04.5 LTS") - 目标版本:PufferPanel 3.0.9(当前最新稳定版,GitHub Releases 发布时间 2026-07-14)
- 版本回显实测:
pufferpanel version输出PufferPanel 3.0.9 (94ded99f2d691762c09c6df076a2f76c475b481e) - 安装介质大小:amd64 deb 约 43.7MB(
43,651,088字节,实测ls -la回显) - 默认端口:Web 面板 8080、SFTP 5657
- 开源许可:Apache 2.0
- 前置依赖:curl、gnupg、apt-transport-https(方案 A 需要)
📌 本篇为安装与部署主指南;参数含义见《PufferPanel 3.0.9 配置参数详解》,API 调用见《PufferPanel 3.0.9 API 使用详解》,产品认知与选型见《PufferPanel 3.0.9 介绍与选型指南》。
二、前置条件
安装前逐项确认(均为官方 Installing 页 System Requirements 与 Ports 要求,来源:docs.pufferpanel.com/en/3.x/installing.html,查询日期 2026-10-24):
- 64 位系统:官方明确 32 位不支持。兼容矩阵(官方原文):
OS/版本 AMD64 ARM64 Ubuntu 20.04 ✗ ✗ Ubuntu 22.04 ✓ ✓ Ubuntu 24.04 ✓ ✓ Debian 10 ✓ ✓ Debian 11 ✓ ✓ - root 或 sudo 权限:安装与 systemd 服务管理需要管理员权限。
- 端口规划:8080(Web)与 5657(SFTP)需对目标用户放行;若被占用,可在配置中修改(见《配置参数详解》)。
- 网络可达性:方案 A 需访问
packagecloud.io;方案 B 需访问github.com;方案 C 需访问 Docker 镜像仓库拉取pufferpanel/pufferpanel。 - 游戏服务器隔离环境(推荐):官方建议在主机上安装 Docker 并让面板以 docker 环境运行游戏服务器,获得文件与进程双重隔离;standard 环境(unshare 沙箱)官方标注仅用于测试。
依赖安装(实测回显省略常规 apt 刷屏,仅保留关键行):
apt-get install -y curl gnupg apt-transport-https
实测回显(节选):
Setting up apt-transport-https (2.4.13) ...
Setting up gnupg (2.2.40-1.1ubuntu1) ...
三、版本选型说明
- 选择 v3.0.9:v3.0.x 为当前稳定维护线(2026 年 1–7 月连续发布 10 个版本),v3.0.9 为最新稳定版。版本节奏与发布密度分析见《介绍与选型指南》篇。
- v3 与 v2 的形态差异:v2 需分别部署 panel 与 pufferd,v3 合并为单二进制单 systemd 服务(
pufferpanel.service)。若从 v2 升级,数据迁移需按官方 Migrating from v2 to v3 指南手工执行,本文不展开。 - 包管理语义:官方 deb/rpm 安装后由 systemd 托管,配置落位
/etc/pufferpanel/,数据落位/var/lib/pufferpanel/。卸载软件包不会删除这两处数据(实测验证,见 §十)。
四、方案 A:在线安装(官方 apt 仓库,推荐)
packagecloud 官方仓库提供持续更新路径,apt upgrade 即可跟随新版本,是官方文档首选安装方式。
4.1 安装 GPG 签名密钥
install -dm755 /etc/apt/keyrings
curl -fsSL https://packagecloud.io/pufferpanel/pufferpanel/gpgkey | gpg --dearmor | tee /etc/apt/keyrings/pufferpanel.gpg > /dev/null
echo "gpg_exit=$?"
实测回显:
gpg_exit=0
4.2 写入仓库源定义
echo "X-Repolib-Name: PufferPanel
Types: deb
URIs: https://packagecloud.io/pufferpanel/pufferpanel/any/
Suites: any
Components: main
Signed-By: /etc/apt/keyrings/pufferpanel.gpg" | tee /etc/apt/sources.list.d/pufferpanel.sources > /dev/null
该命令无输出(重定向到 /dev/null)。写入后的仓库文件为 6 行 deb822 格式定义,URIs 指向 packagecloud 的 any 套件、Signed-By 指向上一步的密钥文件。
4.3 刷新索引并确认候选版本
apt update
apt-cache policy pufferpanel
实测回显(节选):
Get:3 https://packagecloud.io/pufferpanel/pufferpanel/any InRelease [29.1 kB]
Get:6 https://packagecloud.io/pufferpanel/pufferpanel/any amd64 Packages [7,176 B]
...
pufferpanel:
Installed: (none)
Candidate: 3.0.9
Version table:
*** 3.0.9 100
100 /var/lib/dpkg/status
💡 技术拓展:
Suites: any是 packagecloud 多发行版仓库的通配套件写法——同一仓库同时容纳 buster/jammy/noble 等多套件构建物,apt 仓库元数据兼容处理,无需按发行版拆分源。
4.4 安装
apt-get install -y pufferpanel
实测回显(节选):
Get:1 https://packagecloud.io/pufferpanel/pufferpanel/any pufferpanel amd64 3.0.9 [43.7 MB]
Selecting previously unselected package pufferpanel.
Preparing to unpack .../pufferpanel_3.0.9.deb ...
Unpacking pufferpanel (3.0.9) ...
Setting up pufferpanel (3.0.9) ...
SUCCESS Database upgrade complete
安装器在 Setting up 阶段自动完成:创建 pufferpanel 系统用户与用户组、写入 /lib/systemd/system/pufferpanel.service、生成默认 /etc/pufferpanel/config.json、初始化数据库结构(SUCCESS Database upgrade complete)。此阶段服务未启动(实测 systemctl is-active 返回 inactive),需按 §八 启动。
五、方案 B:离线安装(GitHub Releases 下载 deb)
适用于内网/受限网络环境:提前在有网机器上下载 deb 包,拷贝到目标服务器安装。
5.1 下载与校验
wget https://github.com/PufferPanel/PufferPanel/releases/download/v3.0.9/pufferpanel_3.0.9_amd64.deb -O /root/pufferpanel_3.0.9_amd64.deb
ls -la /root/pufferpanel_3.0.9_amd64.deb
sha256sum /root/pufferpanel_3.0.9_amd64.deb
实测回显:
-rw------- 1 root root 43651088 Oct 24 09:37 /root/pufferpanel_3.0.9_amd64.deb
ae6b74b00c0383a3f0f9fb81a99b37bb64e3028288d46b39617ff6945bc01379 /root/pufferpanel_3.0.9_amd64.deb
⚠️ 校验值
ae6b74...379必须与 GitHub Releases 页pufferpanel_3.0.9_amd64.deb附件旁标注的 sha256 一致(发布页标注与实测完全一致),不一致说明下载被劫持或截断,严禁安装。
5.2 安装
apt-get install -y /root/pufferpanel_3.0.9_amd64.deb
实测回显(节选):
Selecting previously unselected package pufferpanel.
(Reading database ... 7327 files and directories currently installed.)
Preparing to unpack .../pufferpanel_3.0.9.deb ...
Unpacking pufferpanel (3.0.9) ...
Setting up pufferpanel (3.0.9) ...
SUCCESS Database upgrade complete
apt-get install ./x.deb 等价于 dpkg -i + 自动补齐依赖,优先采用。安装产物与方案 A 完全一致(同版本号、同校验和的包体)。
六、方案 C:Docker Compose 部署
本章为容器化部署例外章节,面向以 Docker 标准形态管理面板的运维场景。使用官方镜像
pufferpanel/pufferpanel:latest(实测镜像内pufferpanel version同样回显PufferPanel 3.0.9 (94ded99f...),镜像与 deb 为同一构建物)。
6.1 目录与配置文件
mkdir -p /opt/pufferpanel/{config,servers,logs}
预先写入最小 config(若不预置,面板启动时会在工作目录回写默认配置,行为可预期但建议显式管理):
cat > /opt/pufferpanel/config/config.json <<'EOF'
{
"logs": "/var/log/pufferpanel",
"panel": {
"database": {
"dialect": "sqlite3",
"url": "file:/var/lib/pufferpanel/database.db?cache=shared"
},
"web": {
"files": "/var/www/pufferpanel"
}
},
"daemon": {
"data": {
"root": "/var/lib/pufferpanel"
}
},
"web": {
"host": "0.0.0.0:8080"
},
"docker": {
"disallowHost": true
}
}
EOF
6.2 Compose 编排文件
⚠️ 首次启动常见故障:官方镜像默认需要访问 Docker 守护进程套接字(用于以 docker 环境运行游戏服务器)。若不挂载
/var/run/docker.sock,面板启动即退出,日志报error starting daemon server: Cannot connect to the Docker daemon at unix:///var/run/docker.sock(实测复现,排障细节见 §十)。以下编排文件已包含该挂载。
cat > /opt/pufferpanel/compose.yml <<'EOF'
name: pufferpanel-3.0.9-stack
services:
pufferpanel:
image: pufferpanel/pufferpanel:latest
container_name: pufferpanel-3.0.9-compose
restart: unless-stopped
ports:
- "8080:8080"
environment:
PUFFER_PANEL_SETTINGS_COMPANYNAME: "Quzuo Game Panel"
PUFFER_PANEL_SETTINGS_MASTERURL: "http://<服务器公网IP或域名>:8080"
PUFFER_PANEL_REGISTRATIONENABLED: "false"
volumes:
- ./config:/etc/pufferpanel
- ./servers:/var/lib/pufferpanel
- ./logs:/var/log/pufferpanel
- /var/run/docker.sock:/var/run/docker.sock
networks:
- pufferpanel-net
networks:
pufferpanel-net:
driver: bridge
ipam:
config:
- subnet: 10.89.67.0/24
EOF
6.3 启动与初始化
docker compose -f /opt/pufferpanel/compose.yml up -d
docker compose -f /opt/pufferpanel/compose.yml ps
实测回显:
[+] Running 3/3
✔ Network pufferpanel-309-stack_pufferpanel-net Created
✔ Container pufferpanel-3.0.9-compose Started
NAME IMAGE STATUS
pufferpanel-3.0.9-compose pufferpanel/pufferpanel:latest Up
创建管理员(容器内执行,命令形态来自官方 Installing 页 Docker 小节):
docker exec pufferpanel-3.0.9-compose /pufferpanel/bin/pufferpanel user add --admin --name admin --email admin@example.com --password q1w2e3r4
实测回显:
INFO User added
6.4 验证与环境变量注入确认
curl -s -o /dev/null -w "web:%{http_code}\n" http://127.0.0.1:8080/
curl -s -c /root/ck.txt -X POST http://127.0.0.1:8080/auth/login -H "Content-Type: application/json" -d '{"username":"admin","password":"q1w2e3r4"}'
curl -s -b /root/ck.txt http://127.0.0.1:8080/api/config
实测回显:
web:200
{"scopes":["admin"],"needsSecondFactor":false}
{"general":{"registrationEnabled":false,...},"branding":{"name":"Quzuo Game Panel",...}}
回显中 branding.name=Quzuo Game Panel 与 registrationEnabled=false 均来自 Compose 文件的 PUFFER_* 环境变量而非 config.json,验证了官方镜像对环境变量配置的完整支持。同时实测节点 API 显示 publicHost/publicPort 已按 PUFFER_PANEL_SETTINGS_MASTERURL 自动探测生成。
💡 技术拓展:官方镜像入口脚本执行
pufferpanel db upgrade && pufferpanel run(entrypoint 实测读取),因此镜像版本升级只需替换镜像标签后重建服务,数据库结构升级由启动流程自动完成。
七、方案对比与选择建议
| 维度 | A 在线仓库 | B 离线 deb | C Docker Compose |
|---|---|---|---|
| 网络要求 | 可达 packagecloud.io | 无(介质预先拷入) | 可达镜像仓库 |
| 升级方式 | apt update && apt upgrade pufferpanel | 下载新版 deb 重装 | 替换镜像标签 up -d 重建 |
| 版本锁定 | apt-mark hold pufferpanel | 天然锁定 | 锁定镜像标签 |
| 回滚 | 下载历史 deb 降级 | 重装旧版 deb | 切回旧镜像标签 |
| 数据落位 | /etc、/var/lib 系统目录 | 同左 | 编排目录内自包含 |
| 与游戏服务器隔离栈的关系 | 主机原生,可自由选择 docker/standard 环境 | 同左 | 天然具备 Docker 守护进程,docker 环境零配置 |
| 适合人群 | 常规 Ubuntu/Debian 服务器 | 无外网/审计环境 | 已容器化运维、需要动 CI/CD 的团队 |
建议:裸机 Ubuntu/Debian 首选方案 A;生产多实例或已有容器平台选方案 C;内网隔离环境用方案 B。三方案数据目录结构一致,可在它们之间迁移(迁移时打包 /etc/pufferpanel 与 /var/lib/pufferpanel)。
八、安装后配置说明
8.1 创建管理员并启动服务(方案 A/B)
pufferpanel user add --admin --name admin --email admin@example.com --password q1w2e3r4
实测回显:
INFO User added
--admin 标志使账号持有全部权限域;漏加 --admin 的账号可在登录后用其他管理员在 Web 界面提权,或用 pufferpanel user edit 调整。
systemctl enable --now pufferpanel
systemctl is-active pufferpanel
实测回显:
Created symlink /etc/systemd/system/multi-user.target.wants/pufferpanel.service → /lib/systemd/system/pufferpanel.service.
active
8.2 验证端口监听与登录
curl -s -o /dev/null -w "HTTP %{http_code}\n" http://localhost:8080/
curl -s -X POST http://localhost:8080/auth/login -H "Content-Type: application/json" -d '{"username":"admin","password":"q1w2e3r4"}'
实测回显:
HTTP 200
{"scopes":["admin"],"needsSecondFactor":false}
面板日志同时确认两个端口就绪(/var/log/pufferpanel/pufferpanel.log 实测节选):
[INFO] 2026/10/24 02:59:05 Started SFTP Server on 0.0.0.0:5657
[INFO] 2026/10/24 02:59:05 Listening for HTTP requests on [::]:8100
(第二行端口为实测环境中按《配置参数详解》篇实验改至 8100 后的回显,默认安装应为 8080。)公网环境记得在安全组/防火墙放行 Web 与 SFTP 端口,命令以实际防火墙体系为准。
8.3 systemd 单元与开机自启
实测 systemctl cat pufferpanel:
[Service]
Type=notify
WorkingDirectory=/etc/pufferpanel
ExecStart=/usr/sbin/pufferpanel runService --config /etc/pufferpanel/config.json
User=pufferpanel
Group=pufferpanel
TimeoutStopSec=5m
OOMPolicy=continue
Environment="GIN_MODE=release"
[Install]
WantedBy=multi-user.target
解读:服务以 pufferpanel 专用用户运行(非 root);Type=notify 意味着进程完成初始化才报告 active——启动脚本后立刻探测端口可能拿到 502/连接拒绝,等待 1–2 秒即可(实测:enable --now 后 sleep 2 前探测得到 502,就绪后 200)。修改单元级环境变量(如 PUFFER_*)建议用 drop-in:systemctl edit pufferpanel。
8.4 游戏服务器运行环境选择
新服务器创建时选择环境:生产/公网使用 docker(需主机可访问 Docker 守护进程,方案 C 天然满足);个人测试可用 standard。受限主机上的 standard 环境启动失败是最高频故障,完整排障实录见 §十。
九、服务管理与升级降级
9.1 pufferpanel 命令行工具
实测 pufferpanel --help:
Version:
PufferPanel 3.0.9 (94ded99f2d691762c09c6df076a2f76c475b481e)
Usage:
pufferpanel [command]
Available Commands:
db Database management
help Help about any command
runService Runs pufferpanel
user User management
version Prints the version
Flags:
--config string Location of config
-h, --help help for help
--workDir string Set working directory
| 子命令 | 用途 | 关键用法(实测) |
|---|---|---|
user add | 创建用户 | --admin --name admin --email a@b.c --password <密码> |
user edit | 编辑用户 | 交互式选择用户与字段(实测 Edit a user) |
db upgrade | 升级数据库结构 | 镜像入口与包安装脚本自动调用(实测输出 Runs the database upgrades) |
db migrate | 切换数据库后端 | SQLite→MySQL 等迁移(实测帮助 Migrates the database to a new backend) |
version | 查看版本 | 排障第一步 |
runService | 前台运行服务 | systemd 单元的 ExecStart 命令 |
9.2 常用运维命令
systemctl status pufferpanel # 服务状态与最近日志
journalctl -u pufferpanel -f # 跟踪日志(console.forward 开启后含游戏服务器输出)
tail -f /var/log/pufferpanel/pufferpanel.log # 面板日志文件
systemctl restart pufferpanel # 修改 config.json 后重启生效
9.3 升级
方案 A(在线仓库):
apt update && apt upgrade pufferpanel
方案 B(离线):下载新版 deb 后直接 apt-get install -y ./pufferpanel_<新版>_amd64.deb 覆盖安装。方案 C:修改 compose.yml 中镜像标签,docker compose up -d 重建。
数据安全说明:升级仅替换二进制与 Web 资源,/etc/pufferpanel/config.json 与 /var/lib/pufferpanel/(数据库、服务器文件)原样保留。实测佐证:卸载 pufferpanel 后重装(同版本),管理员账号未丢失,且重新 pufferpanel user add 同名管理员报数据库唯一约束冲突 UNIQUE constraint failed: users.id——证明用户数据在包生命周期之外持久化。升级前仍建议停止服务并打包 /var/lib/pufferpanel/ 备份。
9.4 降级与版本锁定
- 降级:从 GitHub Releases 取历史版本 deb,
apt-get install -y ./pufferpanel_<旧版>_amd64.deb直接覆盖(dpkg 允许同源包降级)。降级前确认官方无破坏性数据库迁移,必要时先备份/var/lib/pufferpanel/。 - 锁定:方案 A 用
apt-mark hold pufferpanel,升级窗口再unmark;方案 C 锁定具体镜像标签而非latest。
十、常见问题(FAQ)
Q1:启动后访问 8080 返回 502 或连接拒绝
现象:systemctl enable --now 后立即 curl http://localhost:8080/,实测返回 HTTP 502。
原因:服务单元 Type=notify,进程初始化(数据库升级、SFTP 密钥生成)未完成,端口尚未就绪。
解决:等待数秒后重试,实测就绪后返回 HTTP 200;用 systemctl status pufferpanel 观察 active 状态再验证。
Q2:standard 环境服务器启动失败:fork/exec /usr/bin/bash: permission denied(排障实录)
现象:面板内创建的服务器点击启动后日志出现:
[DAEMON] Starting server
[DAEMON] Starting process: sleep 600
[DAEMON] Failed to start server
定位:journalctl -u pufferpanel 实测捕获关键错误:
Daemon: Starting process in directory [/tmp/unshare-pp-2906628924]: bash -c 'unshare -U -w ... --map-user=999 --map-group=999 bash -c "sleep 600"'
Daemon: Starting process in directory [/tmp/unshare-pp-2906628924]: fork/exec /usr/bin/bash: permission denied
根因:standard 环境通过 unshare -U(用户命名空间)+ pivot_root + 绑定挂载构建文件系统沙箱。在无特权用户命名空间能力的受限主机(部分 LXC/OpenVZ 虚拟化、NAS 套件内嵌环境、安全加固关闭 userns 的内核)上,沙箱内 exec 被内核拒绝。
解决(全局关闭,实测有效):编辑 /etc/pufferpanel/config.json,加入:
"security": {
"disableUnshare": true
}
重启服务后实测服务器启动成功,状态接口回显 {"running":true,"installing":false},控制台出现 [DAEMON] Starting process: sleep 600,资源接口回显 {"cpu":0,"memory":1986560}。代价:服务器进程不再进入文件系统沙箱,仅适合个人测试环境;公网/多人场景请改用 docker 环境或更换具备 userns 能力的宿主。
Q3:Docker Compose 部署面板启动即退出
现象:docker compose up -d 后容器退出,web:000(连接拒绝),日志实测报:
Daemon: Stopping http server
Daemon: error starting daemon server: Cannot connect to the Docker daemon at unix:///var/run/docker.sock
根因:官方镜像默认以 docker 环境托管游戏服务器,启动时即探测 Docker 守护进程套接字。
解决:在编排文件 volumes 中加入 - /var/run/docker.sock:/var/run/docker.sock(官方 Installing 页 Docker 小节的标准挂载),重建服务后实测 web:200。
Q4:pufferpanel user add 报 UNIQUE constraint failed: users.id
原因:同名/同邮箱管理员已存在(用户数据存于 /var/lib/pufferpanel/ 数据库,包卸载不删除)。
解决:改用 pufferpanel user edit 修改既有用户,或确认确需重置时备份后清理数据库。
Q5:注册/找回密码邮件收不到
现象:日志实测报 Error sending email: email not configured。
原因:邮件功能需在配置中指定提供商(smtp/sendgrid/mailjet/mailgun)与凭据;未配置时注册开关注册流程无法发送验证邮件,其余功能不受影响。
解决:按《配置参数详解》篇 email.* 参数组配置 SMTP,或关闭自助注册改由管理员手动开账号。
Q6:停止服务器时 stop 不生效,进程仍在运行
现象:对以 sleep 600 为启动命令的服务器实例发送 POST /api/servers/echo1/stop(返回 202),5 秒后状态仍 {"running":true}(实测复现)。
根因:模板 run.stop 定义为空时,守护进程未获得"向进程发送停止命令"的定义,stop 无法终止无响应进程。
解决:对无优雅停机能力的进程使用强杀接口(POST /api/servers/echo1/kill,实测返回 204 且状态立即转为 running:false);游戏服务器模板应正确定义 run.stop(如 Minecraft 的 stop 命令)以保留存档落盘窗口。
十一、卸载与清理
方案 A/B(保留数据):
apt-get remove pufferpanel
彻底清理(先备份再执行,不可逆):apt-get purge pufferpanel 后手工删除 /etc/pufferpanel/ 与 /var/lib/pufferpanel/。方案 C:docker compose down,数据仍在编排目录内,删除目录即彻底清理。
十二、参考链接
- 官方安装文档(Ubuntu/Debian、Red-Hat、Docker 三形态命令来源):https://docs.pufferpanel.com/en/3.x/installing.html
- v3.0.9 Releases 与 deb/rpm 附件(sha256 校验值来源):https://github.com/PufferPanel/PufferPanel/releases/latest
- packagecloud 官方仓库:https://packagecloud.io/pufferpanel/pufferpanel
- v2→v3 迁移指南:https://docs.pufferpanel.com/en/3.x/migrate.html
- Common Problems 官方排障页:https://docs.pufferpanel.com/en/3.x/guides/common-problems.html
- 站内延伸阅读:《PufferPanel 3.0.9 介绍与选型指南》《PufferPanel 3.0.9 配置参数详解》《PufferPanel 3.0.9 API 使用详解》