Skip to content

宝塔部署

目录


1. 功能说明

概述

本文档详细介绍如何使用宝塔面板部署 Niucloud 系统,宝塔面板是国内流行的服务器管理工具,提供可视化的操作界面。

适用场景

  • 生产环境部署
  • 测试环境搭建
  • 快速部署需求

2. 设计思路

部署架构

┌─────────────────────────────────────────┐
│              用户访问                    │
└─────────────────┬───────────────────────┘

┌─────────────────▼───────────────────────┐
│              Nginx                      │
│         (反向代理/静态资源)              │
└─────────────────┬───────────────────────┘

┌─────────────────▼───────────────────────┐
│              PHP-FPM                    │
│           (PHP 处理)                     │
└─────────────────┬───────────────────────┘

┌─────────────────▼───────────────────────┐
│         MySQL / Redis                   │
│        (数据存储/缓存)                   │
└─────────────────────────────────────────┘

3. 部署流程

3.1 安装宝塔面板

bash
# CentOS
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh

# Ubuntu/Debian
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh

3.2 安装运行环境

在宝塔面板中安装以下软件:

  • Nginx 1.20+
  • PHP 8.0
  • MySQL 5.7+
  • Redis
  • phpMyAdmin(可选)

3.3 创建网站

  1. 登录宝塔面板
  2. 点击「网站」→「添加站点」
  3. 填写域名信息
  4. 选择 PHP 版本 8.0
  5. 网站目录:选择项目的 backend/public 目录
  6. 创建数据库(记录数据库名、用户名、密码)

3.4 上传代码

bash
# 方式1:通过 Git 拉取
# 注意:网站目录为 backend/public,代码需上传到上级目录
cd /www/wwwroot/
git clone https://gitee.com/niucloud-team/niucloud-lite-ai your_domain

# 方式2:通过宝塔文件管理器上传
# 将代码压缩包上传到 /www/wwwroot/ 目录并解压
# 确保最终目录结构为 /www/wwwroot/your_domain/backend/public

3.5 配置伪静态

在宝塔面板中选择网站 → 设置 → 伪静态,添加以下规则:

nginx
location / {
    if (!-e $request_filename) {
        rewrite ^(.*)$ /index.php?s=$1 last;
        break;
    }
}

location ~* \.(gif|jpg|jpeg|png|css|js|ico|woff|woff2|ttf|svg|eot)$ {
    expires 30d;
    add_header Cache-Control "public, immutable";
}

location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

3.6 设置目录权限

bash
# 设置目录权限
chmod -R 755 /www/wwwroot/your_domain/backend
chmod -R 777 /www/wwwroot/your_domain/backend/runtime
chmod -R 777 /www/wwwroot/your_domain/backend/public/upload

3.7 安装依赖+构建前端

bash
cd /www/wwwroot/your_domain/frontend

# 安装 PHP 依赖
composer install --no-dev --optimize-autoloader

# 安装前端依赖(Admin)
cd admin
npm install
npm run build

# 安装前端依赖(UniApp)
cd ../uni-app
npm install
npm run build:h5

# 安装前端依赖(Web)
cd ../web
npm install
npm run build

3.8 复制前端构建结果到 backend 目录

bash
# 复制前端构建结果到 backend 目录
cp -r admin/dist /www/wwwroot/your_domain/backend/public/admin
cp -r uni-app/dist /www/wwwroot/your_domain/backend/public/wap
cp -r web/dist /www/wwwroot/your_domain/backend/public/web

3.9 配置数据库

  1. 创建数据库(已在创建网站时完成)
  2. 导入初始 SQL 文件
  3. 修改数据库配置文件 .env
env
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=your_database
DB_USERNAME=your_username
DB_PASSWORD=your_password

REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_PASSWORD=

3.9 配置计划任务

在宝塔面板中添加计划任务:

bash
# 每分钟执行一次
* * * * * cd /www/wwwroot/your_domain && php think schedule:run >> /dev/null 2>&1

3.10 配置 SSL(可选)

  1. 在宝塔面板中选择网站 → SSL
  2. 申请 Let's Encrypt 免费证书
  3. 开启强制 HTTPS

3.11 启动服务+访问网站

  1. 启动 Nginx 服务
  2. 启动 PHP-FPM 服务
  3. 启动 MySQL 服务
  4. 启动 Redis 服务
bash
# 启动服务
bt nginx start
bt php-fpm start
bt mysql start
bt redis start

网站地址:

  • 后台API接口:http://your_domain/adminapi
  • API 接口:http://your_domain/api
  • Admin 管理:http://your_domain/admin
  • UniApp H5:http://your_domain/wap
  • Web 开发:http://your_domain/web

4. 常见问题

Q1: 网站访问 500 错误

问题现象: 访问网站显示 500 Internal Server Error。

解决方案:

  1. 检查 PHP 版本是否为 8.0+
  2. 检查目录权限是否正确
  3. 查看 runtime/log/ 下的错误日志
  4. 确保 .env 文件配置正确

Q2: 静态资源无法加载

问题现象: CSS、JS 文件 404 错误。

解决方案:

  1. 检查伪静态配置是否正确
  2. 确认 public 目录为网站根目录
  3. 检查文件是否上传完整

Q3: 数据库连接失败

问题现象: 提示数据库连接错误。

解决方案:

  1. 检查 .env 中的数据库配置
  2. 确认数据库用户权限
  3. 检查 MySQL 服务是否运行

Q4: 上传文件失败

问题现象: 上传文件时提示失败或文件损坏。

解决方案:

bash
# 检查上传目录权限
chmod -R 777 /www/wwwroot/your_domain/backend/public/upload

# 修改 PHP 上传限制
# 在宝塔面板 → PHP 设置 → 配置修改
upload_max_filesize = 50M
post_max_size = 50M