生产环境支持 nginx / Apache / 宝塔面板任一,按需求选择三种模式之一。
生产环境要求
- PHP 8.5+(扩展:sqlite3 或 pdo_mysql、gd、fileinfo、mbstring)
- MySQL 5.7+/8.0(可选,默认 SQLite)
- nginx 或 Apache
模式一:纯静态托管(推荐)
后台「设置 → 静态化设置」开启静态优先,fy:build 生成 build/ 目录后,直接将该目录托管到任意静态服务器(nginx/CDN),后台部署在内网或子域名。
server {
root /www/fengyuncms/build;
index index.html;
location / { try_files $uri $uri/index.html $uri.html =404; }
}内容更新后执行 php artisan fy:build 重新生成。
模式二:同域混合(静态优先 + 动态兜底)
nginx 伪静态(静态文件命中直出,未命中转发 Laravel):
location / {
try_files $uri $uri/index.html $uri.html /index.php?$query_string;
}
# 媒体目录只作静态直出,脚本后缀一律 403(必须位于 location ~ \.php$ 之前)
location ~* ^/storage/.*\.(php\d*|phtml|phar)(/|$) {
return 403;
}PHP 走 php-fpm 或 php-cgi,入口为 public/index.php。此模式下新发布内容即时可见,无需手动构建。
模式三:宝塔面板
新建站点
PHP 版本选 8.5+。
指定网站目录
指向项目根目录或 public/(推荐 public/)。
配置伪静态
粘贴上述 nginx 规则。
设置运行目录与权限
storage/ 与 bootstrap/cache/ 可写。
上线检查清单
-
.env中APP_ENV=production、APP_DEBUG=false -
storage/与bootstrap/cache/可写 - 已执行
php artisan fy:compile(编译主题)与php artisan fy:build(生成静态页) - 已配置定时任务:
php artisan schedule:run(每分钟,驱动定时发布) - HTTPS 已启用(后台「站点设置」可配置强制跳转)
安全加固建议
防篡改 / 只读锁定:storage/ 以外的全部文件运行期均不变,可整体锁定;storage/ 必须保持可写(框架缓存、编译视图、会话、日志、上传文件)。
| 分类 | 路径 |
|---|---|
| 可锁定 | app/ config/ routes/ resources/ lang/ plugins/ vendor/、database/ 下的 *.php、根目录 .htaccess artisan composer.json composer.lock .env.example、public/ 其余文件 |
| 必须可写 | storage/ 全部、bootstrap/cache/、.env(仅安装阶段;安装完成后转入锁定) |
| 按需 | build/(启用静态化时)、database/database.sqlite(SQLite 模式,建议按扩展名只放行 *.sqlite)、public/themes/(仅当允许后台在线编辑主题模板) |
public/themes/是storage/之外唯一会被后台写入的目录(「主题管理 → 保存并编译」直接写模板源文件)。锁定它可阻断管理员账号被盗后的模板注入,代价是在线编辑模板不可用,改模板需走部署流程- 若防篡改工具支持按扩展名放行,
storage/下只放行 jpg/png/webp/gif/pdf/zip,让放行目录也写不进可执行文件 - 上传文件由服务端内容检测决定存储扩展名并随机重命名(不可能落出
.php);Web 层再禁/storage下脚本执行作双保险:Apache 规则已随包内置(根目录与 public/ 的 .htaccess),nginx 需将伪静态中的location ~* ^/storage/...一并加入
常见问题
访问白名单页面 404 确认 rewrite 规则已生效(Apache 需开启 mod_rewrite 并允许 .htaccess 覆盖)。
后台登录后立即退出
检查 SESSION_DOMAIN 与 APP_URL 是否一致(均不带路径后缀或均为完整域名)。
上传图片 403
确认 storage/app/public 已链接至 public/storage(php artisan storage:link 或手动创建目录联接)。
关于 SEO/GEO 能力(sitemap、JSON-LD、llms.txt、.md 镜像)的配置与验证,见SEO 与 GEO。