🚢 部署发布
SunAdmin 支持一体化部署:Laravel 后端托管 API,同时托管 Admin SPA 和 uni-app H5 的编译产物。
📁 生产目录约定
| 内容 | 目录 |
|---|---|
| Laravel 入口 | public/index.php |
| Admin 产物 | public/admin |
| uni-app H5 产物 | public/h5 |
| 上传本地存储 | 通常在 public/storage 或业务存储驱动目录 |
🚀 后端发布流程
首次部署先安装依赖并配置 Web 站点入口,随后通过安装向导完成数据库、缓存、后台管理员账号、应用密钥与基础数据初始化。
# 安装生产依赖并优化 Composer 自动加载
composer install --no-dev --optimize-autoloader
# 创建本地存储公开访问软链接
php artisan storage:link首次部署后访问:
https://你的域名/install安装完成后会生成 install.lock。
安装完成后,可按需生成 Laravel 优化缓存:
# 清理 Laravel 优化缓存
php artisan optimize:clear
# 生成配置缓存
php artisan config:cache
# 生成路由缓存
php artisan route:cache
# 生成视图缓存
php artisan view:cache已安装项目升级时,再按版本变更要求执行迁移:
php artisan migrate --force🏭 前端构建发布
Admin
# 进入管理端项目目录
cd frontend/admin
# 安装管理端依赖
npm install
# 构建管理端生产产物
npm run buildAdmin 构建后应发布到:
public/adminuni-app H5
# 进入 uni-app 项目目录
cd frontend/uniapp
# 使用指定 npm 版本安装 uni-app 依赖
npx npm@11.13.0 install
# 构建 H5 生产产物
npm run build:h5H5 构建脚本会先生成 frontend/uniapp/dist/build/h5,再自动发布到:
public/h5微信小程序
# 进入 uni-app 项目目录
cd frontend/uniapp
# 构建微信小程序生产产物
npm run build:mp-weixin构建前确认 frontend/uniapp/src/manifest.json 中的 mp-weixin.appid 已填写微信小程序 AppID。未填写时,微信开发者工具无法按真实小程序身份预览、上传和发布。
用微信开发者工具导入并上传发布:
frontend/uniapp/dist/build/mp-weixin🌍 Web 服务器
项目站点根目录应指向仓库下的 public 目录,而非仓库根目录。所有 HTTP 请求由 public/index.php 统一入口分发。
以下是一份适用于 SunAdmin 的 Nginx 站点配置示例:
server {
listen 80;
server_name your-domain.com;
# 如需 HTTPS,可在此处配置 ssl_certificate / ssl_certificate_key
# 站点入口目录指向 public
root /var/www/sunadmin/public;
index index.php;
# 建议的安全与性能设置
charset utf-8;
client_max_body_size 64m;
# 静态资源缓存(admin / h5 / modules 等前端产物)
location ~* \.(css|js|woff2?|ttf|eot|svg|png|jpe?g|gif|ico|webp|mp4|webm)$ {
expires 7d;
access_log off;
}
# 伪静态:将非文件、非目录请求统一转发至 index.php
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# PHP-FPM 处理
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
# 传递 Authorization 与 X-XSRF-Token 请求头
fastcgi_param HTTP_AUTHORIZATION $http_authorization;
fastcgi_param HTTP_X_XSRF_TOKEN $http_x_xsrf_token;
}
# 禁止访问隐藏文件(.env、.git 等)
location ~ /\.(?!well-known).* {
deny all;
}
}配置说明:
| 配置项 | 说明 |
|---|---|
root | 指向项目 public 目录,这是唯一的 Web 入口 |
try_files | 伪静态核心:先尝试匹配静态文件,不存在则转发至 index.php,由 Laravel 路由接管 |
fastcgi_param HTTP_AUTHORIZATION | 传递 Authorization 请求头,Sanctum Token 认证依赖此配置 |
fastcgi_param HTTP_X_XSRF_TOKEN | 传递 X-XSRF-Token 请求头,管理端 AJAX 请求的 CSRF 校验依赖此配置 |
location ~ /\.(?!well-known) | 阻止直接访问 .env、.git 等敏感文件 |
如果使用面板工具创建站点,通常只需将网站运行目录设置为 public,并在伪静态规则中填入上述 location / 部分即可;Authorization 等 Header 的透传需确认 FastCGI 参数中已包含。具体面板操作可参考 宝塔面板部署 和 1Panel 部署。
Admin 和 H5 的访问入口由 Laravel 控制器托管:
| 入口 | 说明 |
|---|---|
/admin | Admin SPA |
/h5 | uni-app H5 |
/install | 安装向导 |
⏱️ 队列与计划任务
队列生产环境不要使用开发时的 queue:listen。推荐使用 Supervisor 或系统服务运行:
# 启动生产队列 Worker,并设置重试次数和超时时间
php artisan queue:work --tries=3 --timeout=60如果后续增加计划任务,服务器 crontab 保留 Laravel 标准入口:
* * * * * cd /var/www/sunadmin && php artisan schedule:run >> /dev/null 2>&1🧠 缓存与权限
发布后需要保证以下目录可写:
storage/
bootstrap/cache/
public/admin/
public/h5/本地上传还需要执行以下命令初始化路径映射:
# 创建本地存储公开访问软链接
php artisan storage:link修改配置、路由、视图后按需执行:
# 清理 Laravel 优化缓存
php artisan optimize:clear
# 生成配置缓存
php artisan config:cache
# 生成路由缓存
php artisan route:cache
# 生成视图缓存
php artisan view:cache↩️ 回滚建议
一次发布至少保留:
- 当前后端代码版本。
composer.lock。- Admin 构建产物。
- uni-app H5 构建产物。
- 数据库迁移执行记录。
涉及数据库结构变更时,先确认是否可逆。涉及支付、订单、账户余额等状态数据时,不建议通过简单回滚数据库解决,应写补偿脚本或人工核对。
