本地开发环境一切正常。所有页面都能访问,功能都跑得通。然后我把代码上传到服务器——啪,一堆 500 和 403。
第一步:买服务器 + 装宝塔
服务器买的阿里云,2核4G,几百块一年。系统选的 CentOS 7。然后装宝塔——在服务器终端里复制粘贴官方的一行安装命令,等了大概十分钟,装好了。宝塔会自动给你一个后台地址和登录账号密码。
登录宝塔后台,第一件事是安装 LNMP 环境——Linux + Nginx + MySQL + PHP。这个在宝塔的软件商店里一键安装就行,选好版本等十来分钟。再创建一个站点,填上域名 duoduoke.net,网站的根目录指向我上传的 PHP 文件所在的文件夹。
第二步:Nginx 配置(最折磨人的环节)
我的网站路由结构比较特殊。所有请求先进 api/index.php 这个入口文件,由它来判断该加载哪个页面。这就需要 Nginx 的伪静态配置把所有请求转发给这个入口。
AI 给我写的 Nginx 配置核心只有一行:
try_files $uri /api/index.php?$query_string;
意思就是:先找用户请求的地址有没有对应的文件,有就直接返回。没有就把请求全部交给 api/index.php 处理。
但我的配置一开始写的是:try_files $uri $uri/ /api/index.php?$query_string。多了一个 $uri/。
就是这个多出来的参数,导致了一个诡异的问题——网站的 /download/ 页面一直返回 403。我一开始以为是文件权限的问题,检查了半天权限都对。后来 AI 让我打开 Nginx 错误日志排查,才发现是这个 $uri/ 在搞鬼。去掉就好了。
这种问题如果让我自己排查,可能永远查不到原因。因为我不懂 Nginx 的 try_files 机制。
第三步:这个 500 到底哪出错了
另一个经典的 500 错误发生在管理后台的设置页面。我点了"修改密码"按钮,页面直接崩溃了。但页面上没有任何错误提示——就是一个白屏。
又是靠 AI。它让我打开 PHP 的错误显示(临时),看看页面崩溃的时候执行到了哪一行。结果显示 Class "Auth" not found。
原因是管理后台的 settings.php 文件里用到了 Auth 类(做密码验证和加密的),但这个文件忘了引入 Auth.php。其他页面(比如 login.php)都单独 include 了 Auth.php——只有我新增的这个页面没加。
补一行 require_once __DIR__ . '/../lib/Auth.php'; 就修好了。
这种问题让我自己排查——我甚至不知道"类找不到"是什么意思。但在 AI 的帮助下,几分钟就从"为什么这个页面打不开"定位到了"这个文件少了哪一行"。
第四步:HTTPS
宝塔面板上一键申请 Let's Encrypt 免费 SSL 证书。勾选"强制 HTTPS"之后,所有 http 请求自动跳转到 https。这一步倒没什么波折,很顺利。
但有一个后续问题——本地开发的时候用的是 http,线上是 https。插件端的 API 地址配置需要区分环境。AI 帮我设计了一个环境切换方案:一个常量控制开发和生产环境,打包时自动切换 API 地址。
关于运维的感想
部署是最让人沮丧的环节。因为"本地能跑、线上不行"这种情况太常见了。而且线上的排错比本地难——你看不到服务器上的文件,不知道怎么打开错误日志,甚至连错误信息都没有。
但这也是 AI 最好用的场景之一。你不懂服务器——但你只需要把现象告诉 AI("页面返回 500 了""错误日志里写了这些""我改了什么配置"),AI 就能帮你排查。它不需要你懂——它懂。