宝塔面板是国内最常用的服务器运维面板。本页按 Apache 与 nginx 两种 Web 服务环境,分别梳理在宝塔下安装风云CMS 的完整步骤。整个过程不需要敲 Laravel 命令——建表、管理员账号、storage 软链、主题编译都由浏览器安装向导自动完成。
一、选对安装包
发布包有两个,按你打算使用的 Web 服务二选一下载,差别只在伪静态层(程序代码完全相同):
| 安装包 | 适用环境 | 内置伪静态 |
|---|---|---|
FengyunCMS-v1.0.0-beta.zip | Apache | 两层 .htaccess(Apache 自动读取,无需配置) |
FengyunCMS-v1.0.0-beta-nginx.zip | nginx | nginx/ 目录内含宝塔版伪静态规则(需粘贴到面板) |
不确定选哪个?Apache 包解压即用、上手最简单;nginx 包性能更好,但需要在面板里粘贴一次伪静态规则。两者后台功能完全一致,日后切换环境只需换装另一个包的伪静态。
二、准备工作(两种环境通用)
安装面板与运行环境
在服务器执行宝塔官方安装脚本完成面板安装后,进入【软件商店】安装:
- Web 服务:Apache 2.4 或 nginx 1.22+(二选一,决定用哪个安装包)
- PHP 8.5(或更高的 8.x 可用版本);在 PHP【安装扩展】中确认已装
fileinfo、gd、mbstring、opcache,SQLite 模式还需sqlite3 / pdo_sqlite
上传并解压安装包
- 面板【网站】→ 新建站点前,先在【文件】中进入
/www/wwwroot/,上传安装包 zip; - 右键 zip →【解压】到
/www/wwwroot/fengyuncms(可新建该目录)。zip 内没有套壳文件夹,解压后站点目录下应直接是app、public、nginx(nginx 包)等子目录; - 删除面板自动生成的
index.html与404.html(新建站点时默认生成,不删会挡住 CMS 首页)。
设置目录权限
面板【文件】中右键站点目录 →【权限】,所有者选 www,权限 755,并勾选“应用到子目录”;确认以下目录可写:
storage/(全部)bootstrap/cache/
数据库按需选择:默认使用 SQLite 无需创建数据库;要用 MySQL 则在【数据库】中先建库,安装向导中填入。
三、Apache 环境安装步骤
新建站点
面板【网站】→【添加站点】:域名填你的域名;PHP 版本选 8.5;数据库按需(默认 SQLite 可不建)。
网站目录指向项目根
【站点设置 → 网站目录】选择 /www/fengyuncms(项目根,即含 artisan 的那层,不是 public)。
Apache 包根目录自带 .htaccess,负责静态优先、/storage 媒体直出、后台 SPA 回退、目录防护与转发 public/ 全部逻辑——伪静态一项无需任何配置。
宝塔 Apache 站点默认已开启 mod_rewrite 并允许 .htaccess 覆盖,无需改动。若你更习惯“文档根指到 public”的标准 Laravel 形态,也可以把网站目录设为 public,此时由 public/.htaccess 接管,同样开箱可用;推荐保持项目根形态,静态优先等功能最完整。
保存并重启 Apache
网站目录保存后按面板提示重启 Apache(或【服务】中重载一次)。
进入安装向导
浏览器访问 http://你的域名/,自动跳转安装向导,完成四步:环境自检 → 数据库(默认 SQLite 直接下一步)→ 站点信息与管理员 → 完成。向导会自动建表、写入演示数据、创建 public/storage 软链并编译主题。
登录后台
访问 /admin,用向导中设置的管理员账号登录。
四、nginx 环境安装步骤
新建站点
同 Apache:域名 + PHP 8.5,数据库按需。网站目录同样指向项目根 /www/fengyuncms。
上传 nginx 包并删除默认页面
上传 FengyunCMS-v1.0.0-beta-nginx.zip 解压(覆盖式解压到站点目录),并确认已删除面板默认生成的 index.html、404.html。
粘贴伪静态规则
【站点设置 → 伪静态】,粘贴以下内容并保存。这是一份“宝塔适配版”规则(站点目录 = 项目根形态),已包含静态优先、媒体防护、后台 SPA 与安全防护:
# ===== 静态优先开关:build/.enable 存在且 GET 时,命中 build 静态页直出 =====
set $fy_static 0;
if ($request_method = GET) {
set $fy_static 1;
}
if (!-f $document_root/build/.enable) {
set $fy_static 0;
}
location / {
if ($fy_static = 1) {
set $fy_orig_uri $uri;
set $fy_static 0;
rewrite ^/$ /build/index.html last;
rewrite ^/([^.]+)$ /build/$1/index.html last;
rewrite ^/([^/]+\.html)$ /build/$1 last;
rewrite ^/(sitemap\.xml|robots\.txt|rss\.xml)$ /build/$1 last;
}
try_files $uri @fypublic;
}
# build 静态页内部服务区:命中直出,未命中还原走动态(按需补建依赖此回退)
location ^~ /build/ {
internal;
try_files $uri @fydynamic;
}
location @fydynamic {
set $fy_static 0;
rewrite ^ $fy_orig_uri last;
}
# 转发层:public/ 下存在的文件直出,否则进前置控制器
location @fypublic {
try_files /public$uri /public/index.php?$query_string;
}
# ===== 媒体层:/storage/* 映射 public/storage,脚本后缀一律 403 =====
location ^~ /storage/ {
try_files /public$uri =404;
location ~* \.(?:php\d*|phtml|phar)(?:/|$) { return 403; }
}
# ===== 防护层:点文件 / 工程文件 / 应用目录一律 404 =====
location ~ /\.(?!well-known) { return 404; }
location ~* ^/(composer\.(?:json|lock)|package(?:-lock)?\.json|phpunit\.xml|vite\.config\.js|artisan|AGENTS\.md|CLAUDE\.md)$ {
return 404;
}
location ~ ^/(docs|app|bootstrap|config|database|resources|routes|tests|vendor|scripts)(?:/|$) {
return 404;
}
# ===== 后台 SPA 静态资源长缓存(文件名带 hash) =====
location ~* ^/admin/.+\.(?:js|css|woff2?|ttf|png|jpe?g|gif|svg|ico)$ {
try_files /public$uri =404;
expires 30d;
}
# ===== PHP:强制执行 public/index.php(覆盖面板默认入口) =====
location ~ [^/]\.php(/|$) {
try_files $uri =404;
# fastcgi_pass 按你实际安装的 PHP 版本调整(宝塔规则:/tmp/php-cgi-版本号.sock)
fastcgi_pass unix:/tmp/php-cgi-85.sock;
include fastcgi.conf;
fastcgi_param SCRIPT_FILENAME $document_root/public/index.php;
fastcgi_param HTTPS $https if_not_empty;
}唯一需要按服务器情况修改的是 fastcgi_pass 中的 sock 文件名:PHP 8.5 即 /tmp/php-cgi-85.sock,装的是 8.3 就改成 /tmp/php-cgi-83.sock(面板【软件商店 → PHP → 服务】可查看实际 sock 路径)。
不要在宝塔下使用 nginx/install.sh 一键脚本——它面向裸 nginx 服务器(写入 /etc/nginx/conf.d/),与宝塔的站点配置体系不兼容。宝塔一律用上面的伪静态粘贴方式。
保存后重载 nginx
面板会提示重载,点击即可(或【软件商店 → nginx → 重载配置】)。
进入安装向导并登录后台
与 Apache 相同:访问 http://你的域名/ → 完成四步向导 → /admin 登录。
五、安装后的通用设置
两种环境一致,建议全部完成:
配置定时任务
面板【计划任务】→ 添加任务:类型 Shell 脚本,周期 每 1 分钟,内容:
cd /www/wwwroot/fengyuncms && /www/server/php/85/bin/php artisan schedule:run(php 命令行路径按实际版本调整。)这驱动定时发布、队列等后台能力。
切换生产模式
编辑站点目录下 .env:APP_ENV=production、APP_DEBUG=false,保存。
按需开启静态化
后台【设置 → 静态化设置】开启静态优先并全量构建,前台速度进一步提升(nginx/Apache 规则均已内置命中逻辑,开启后无需改配置)。
六、常见问题
访问首页显示宝塔欢迎页
站点目录里的默认 index.html 没有删除。
全站 404 伪静态规则未生效:nginx 检查伪静态框是否保存并重载;Apache 确认站点目录指向项目根(.htaccess 所在层)。
502 Bad Gateway
fastcgi_pass 的 sock 文件名与实际 PHP 版本不符,或 PHP-FPM 未运行。
后台样式错乱 / 前台图片 403
确认解压的是与 Web 服务对应的安装包(nginx 包在 Apache 下伪静态不生效,反之亦然),且 php artisan storage:link 已由安装向导执行成功(public/storage 可访问)。
安装向导提示目录不可写
重做“设置目录权限”:所有者 www,storage/ 与 bootstrap/cache/ 可写。
裸机(非宝塔)部署、纯静态托管与安全加固清单,见部署指南;模板与后台功能见左侧导航其余章节。