后端分离部署
本指南将帮助您独立部署 PPanel 后端服务,适用于前后端分离部署场景。
概述
后端分离部署允许您将 PPanel 后端服务部署在独立的服务器上,提供 API 服务给前端应用。这种部署方式具有以下优势:
- 🚀 独立扩展后端服务性能
- 🔒 更好的安全隔离
- 🌐 支持多前端实例连接同一后端
- 🛠️ 便于后端服务的独立维护和升级
系统要求
最低配置
- CPU: 1 核心
- 内存: 1 GB
- 存储: 10 GB
- 操作系统: Linux (推荐 Ubuntu 20.04+, Debian 11+, CentOS 8+)
推荐配置
- CPU: 2 核心以上
- 内存: 2 GB 以上
- 存储: 20 GB 以上
部署方式
方式一:Docker 部署(推荐)
1. 安装 Docker
bash
# Ubuntu/Debian
curl -fsSL https://get.docker.com | sh
# 启动 Docker 服务
sudo systemctl start docker
sudo systemctl enable docker2. 创建配置文件
创建后端配置文件 config.yaml:
yaml
# 数据库配置
database:
type: mysql
host: localhost
port: 3306
username: ppanel
password: your_password
database: ppanel
# Redis 配置
redis:
host: localhost
port: 6379
password: ""
db: 0
# 服务配置
server:
host: 0.0.0.0
port: 8080
# CORS 配置(重要:允许前端域名访问)
cors:
allow_origins:
- "https://your-frontend-domain.com"
- "http://localhost:3000" # 开发环境
allow_methods:
- GET
- POST
- PUT
- DELETE
- OPTIONS
allow_headers:
- "*"
# JWT 配置
jwt:
secret: "your-secret-key"
expire: 7200 # 2小时
# API 配置
api:
prefix: "/api"
version: "v1"3. 准备 MySQL 数据库
bash
# 使用 Docker 运行 MySQL
docker run -d \
--name ppanel-mysql \
-e MYSQL_ROOT_PASSWORD=root_password \
-e MYSQL_DATABASE=ppanel \
-e MYSQL_USER=ppanel \
-e MYSQL_PASSWORD=your_password \
-p 3306:3306 \
-v ppanel-mysql-data:/var/lib/mysql \
mysql:8.0
# 等待 MySQL 启动
sleep 104. 准备 Redis
bash
# 使用 Docker 运行 Redis
docker run -d \
--name ppanel-redis \
-p 6379:6379 \
-v ppanel-redis-data:/data \
redis:7-alpine5. 运行后端服务
bash
# 拉取后端镜像
docker pull ppanel/ppanel:latest
# 运行后端容器
docker run -d \
--name ppanel-backend \
-p 8080:8080 \
-v $(pwd)/config.yaml:/app/config.yaml \
--link ppanel-mysql:mysql \
--link ppanel-redis:redis \
ppanel/ppanel:latest6. 初始化数据库
bash
# 执行数据库迁移
docker exec ppanel-backend ./ppanel migrate方式二:二进制部署
1. 下载后端程序
bash
# 下载最新版本
wget https://github.com/perfect-panel/ppanel/releases/latest/download/ppanel-linux-amd64.tar.gz
# 解压
tar -xzf ppanel-linux-amd64.tar.gz
cd ppanel
# 赋予执行权限
chmod +x ppanel2. 配置后端服务
创建配置文件 config.yaml(内容同上 Docker 部署方式)。
3. 安装并配置 MySQL
bash
# Ubuntu/Debian
sudo apt update
sudo apt install mysql-server -y
# 创建数据库和用户
sudo mysql <<EOF
CREATE DATABASE ppanel;
CREATE USER 'ppanel'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON ppanel.* TO 'ppanel'@'localhost';
FLUSH PRIVILEGES;
EOF4. 安装并配置 Redis
bash
# Ubuntu/Debian
sudo apt install redis-server -y
sudo systemctl start redis-server
sudo systemctl enable redis-server5. 初始化数据库
bash
# 执行数据库迁移
./ppanel migrate6. 创建 systemd 服务
创建服务文件 /etc/systemd/system/ppanel.service:
ini
[Unit]
Description=PPanel Backend Service
After=network.target mysql.service redis.service
[Service]
Type=simple
User=ppanel
WorkingDirectory=/opt/ppanel
ExecStart=/opt/ppanel/ppanel server
Restart=on-failure
RestartSec=5s
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target启动服务:
bash
# 创建专用用户
sudo useradd -r -s /bin/false ppanel
# 移动文件到安装目录
sudo mkdir -p /opt/ppanel
sudo mv ppanel config.yaml /opt/ppanel/
sudo chown -R ppanel:ppanel /opt/ppanel
# 启动服务
sudo systemctl daemon-reload
sudo systemctl start ppanel
sudo systemctl enable ppanel
# 查看服务状态
sudo systemctl status ppanel配置反向代理
Nginx 配置
nginx
server {
listen 80;
server_name api.your-domain.com;
# HTTPS 重定向(推荐配置 SSL 证书)
# return 301 https://$server_name$request_uri;
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_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
# HTTPS 配置示例
# server {
# listen 443 ssl http2;
# server_name api.your-domain.com;
#
# ssl_certificate /path/to/cert.pem;
# ssl_certificate_key /path/to/key.pem;
#
# location / {
# proxy_pass http://127.0.0.1:8080;
# # ... 其他配置同上
# }
# }重载 Nginx:
bash
sudo nginx -t
sudo systemctl reload nginxCaddy 配置
caddy
api.your-domain.com {
reverse_proxy localhost:8080
}验证部署
健康检查
bash
# 检查后端服务是否运行
curl http://localhost:8080/api/health
# 预期输出
# {"status":"ok","version":"1.0.0"}测试 API
bash
# 测试公共 API
curl http://localhost:8080/api/v1/ping
# 预期输出
# {"message":"pong"}环境变量配置
除了配置文件,您也可以使用环境变量:
bash
# 数据库配置
export DB_HOST=localhost
export DB_PORT=3306
export DB_USER=ppanel
export DB_PASSWORD=your_password
export DB_NAME=ppanel
# Redis 配置
export REDIS_HOST=localhost
export REDIS_PORT=6379
export REDIS_PASSWORD=""
# JWT 密钥
export JWT_SECRET=your-secret-key
# 服务端口
export SERVER_PORT=8080Docker 运行时使用环境变量:
bash
docker run -d \
--name ppanel-backend \
-p 8080:8080 \
-e DB_HOST=mysql \
-e DB_USER=ppanel \
-e DB_PASSWORD=your_password \
-e REDIS_HOST=redis \
--link ppanel-mysql:mysql \
--link ppanel-redis:redis \
ppanel/ppanel:latest安全建议
- 使用强密码:为数据库和 JWT 密钥设置强密码
- 配置防火墙:仅开放必要端口(如 80, 443)
- 启用 HTTPS:使用 SSL/TLS 证书加密通信
- CORS 配置:仅允许可信的前端域名访问
- 定期备份:定期备份数据库和配置文件
- 监控日志:定期检查应用日志和系统日志
故障排查
服务无法启动
bash
# 查看服务日志
sudo journalctl -u ppanel -n 50 --no-pager
# Docker 查看日志
docker logs ppanel-backend数据库连接失败
bash
# 测试 MySQL 连接
mysql -h localhost -u ppanel -p -e "SELECT 1;"
# 检查 MySQL 服务状态
sudo systemctl status mysqlRedis 连接失败
bash
# 测试 Redis 连接
redis-cli ping
# 检查 Redis 服务状态
sudo systemctl status redis-serverCORS 错误
确保在 config.yaml 中正确配置了前端域名:
yaml
cors:
allow_origins:
- "https://your-frontend-domain.com"性能优化
数据库优化
sql
-- 创建必要的索引
CREATE INDEX idx_user_email ON users(email);
CREATE INDEX idx_order_status ON orders(status);
CREATE INDEX idx_created_at ON orders(created_at);Redis 缓存配置
yaml
redis:
# 启用缓存
cache_enabled: true
# 缓存过期时间(秒)
cache_ttl: 3600应用层优化
yaml
# 启用 Gzip 压缩
server:
gzip: true
# 调整并发连接数
server:
max_connections: 1000升级指南
Docker 升级
bash
# 拉取最新镜像
docker pull ppanel/ppanel:latest
# 停止旧容器
docker stop ppanel-backend
# 备份数据
docker exec ppanel-mysql mysqldump -u ppanel -p ppanel > backup.sql
# 删除旧容器
docker rm ppanel-backend
# 运行新容器
docker run -d \
--name ppanel-backend \
-p 8080:8080 \
-v $(pwd)/config.yaml:/app/config.yaml \
--link ppanel-mysql:mysql \
--link ppanel-redis:redis \
ppanel/ppanel:latest
# 执行数据库迁移
docker exec ppanel-backend ./ppanel migrate二进制升级
bash
# 停止服务
sudo systemctl stop ppanel
# 备份旧版本
sudo cp /opt/ppanel/ppanel /opt/ppanel/ppanel.backup
# 下载新版本
wget https://github.com/perfect-panel/ppanel/releases/latest/download/ppanel-linux-amd64.tar.gz
tar -xzf ppanel-linux-amd64.tar.gz
# 替换文件
sudo mv ppanel /opt/ppanel/
sudo chown ppanel:ppanel /opt/ppanel/ppanel
# 执行数据库迁移
cd /opt/ppanel
sudo -u ppanel ./ppanel migrate
# 启动服务
sudo systemctl start ppanel