2.1 网站创建失败与运行环境异常
先给一个判断
创建网站失败,先看任务日志的报错原文,别看弹窗猜。 1Panel 创建网站是异步任务,点完“确认”之后弹出的日志窗口会把失败原因写清楚——端口被占用、代号已存在、域名格式不对,日志里全是明牌。大部分人卡住,是因为只看到一个红色的“失败”两个字,没有展开日志看第二行、第三行。
创建网站这件事在 1Panel 里分两段:“把网站配置写进 OpenResty” 和 “让后端服务跑起来”。第一段失败,是代号、域名、端口、OpenResty 的问题;第二段失败,才是运行环境、应用容器、数据库的问题。排查前先分清是哪一段。
现象:四种典型的“建不起来”
| 现象 | 表现 | 第一眼往哪看 |
|---|---|---|
| A | 点了确认,任务日志直接报错 | 任务日志的报错原文 |
| B | 网站创建成功了,访问却 502 / 404 / 白屏 | 运行环境状态、网站目录、代码位置 |
| C | 创建时运行环境下拉框为空、选不了 | 运行环境列表,环境可能没建或已停止 |
| D | 一键部署应用装到一半失败 | 应用安装日志、数据库实例状态 |
A 和 C 是“创建环节”的问题,B 和 D 是“起来之后”的问题。先分清是哪一段,再动手,方向错了会越搞越乱。
定位:三步把问题圈出来
第一步:看任务日志。 创建失败后页面会弹出日志窗口;也可以去 日志审计 → 任务日志,按时间找到这条任务,打开详情看完整输出。把报错原文复制出来,排错的起点就在这里。
第二步:看 OpenResty。 1Panel 的所有 HTTP 网站都跑在应用商店安装的 OpenResty 上。网站列表上方的工具栏可以停止、启动、重启 OpenResty,也能查看它的当前状态和日志。OpenResty 不正常,创建网站这一步本身就可能失败。
第三步:看运行环境。 创建“运行环境”类型的网站,前提是已经建好了对应环境(PHP、Node.js、Java、Go、Python、.NET)。到运行环境列表确认环境存在、状态正常。
# 在服务器上快速确认 OpenResty 容器状态
docker ps --filter "name=openresty" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
# 确认 80/443 在监听(网站正常对外的前提)
ss -ltnp | grep -E ':80 |:443 '
一份创建前的检查清单
与其创建失败再排查,不如点“确认”之前先过一遍这五项:
| 检查项 | 怎么确认 | 出事的表现 |
|---|---|---|
| OpenResty 正常 | 网站列表上方工具栏看状态 | 所有网站一起出问题 |
| 代号没冲突 | 想一个新的,或者查现有网站目录 | 创建直接失败 |
| 端口空闲 | ss -ltnp \| grep 端口 |
网站起不来 |
| 域名解析已生效 | ping 你的域名 看指向对不对 |
创建成功但访问到别处 |
| 运行环境已就绪 | 运行环境列表确认状态 | 下拉框为空、白屏 |
这张表看着简单,能挡掉一半以上的创建失败。尤其是域名解析——A 记录刚加、本地 DNS 还没生效,创建 HTTPS 网站时证书验证也会跟着失败(详见 2.3 节)。
修复:逐个击破
原因一:代号重复或目录已存在
创建网站时必须填代号,它就是网站目录的文件夹名称。同一个位置下用过这个代号,再建就会冲突,任务日志会直接提示。
处理:换一个代号,或者先把旧网站删除。删除网站会一并删除网站目录,动手前一定先备份(网站列表 → 更多 → 备份列表 → 备份),并把备份下载到本地。
原因二:端口被占用
运行环境网站要指定服务端口,TCP/UDP 代理要监听外部端口。端口被别人占着,网站起不来:
# 查端口被谁占了(把 8080 换成你的端口)
ss -ltnp | grep 8080
# 或者
lsof -i :8080
处理:换一个空闲端口,或者停掉占用端口的进程。注意两点:第一,TCP/UDP 代理创建前,官方文档明确要求确认监听端口未被占用,并在主机防火墙和云安全组中放行;第二,改完端口要同步检查防火墙和安全组,不然端口空出来了照样访问不了。
原因三:运行环境不存在或已停止
现象 C 最典型:创建网站的表单里,“运行环境”下拉框是空的,根本选不了。
处理:先到运行环境列表创建环境。以 PHP 为例,创建时选 PHP 版本和扩展;本地 PHP 环境需要服务器上先装好 php-fpm,面板里会提示。环境建好后再回头创建网站。
一个高频坑:PHP 网站报 500 或白屏,百分之八十是扩展没装。运行环境列表里有【扩展】按钮,可以查看、安装、卸载扩展。对照表:
| 网站程序 | 必备扩展 | 常见报错表现 |
|---|---|---|
| WordPress | mysqli、gd、zip、imagick | 安装插件时报缺函数 |
| Laravel | mysqli/pdo_mysql、mbstring、fileinfo、gd | 白屏、500 |
| ThinkPHP | pdo_mysql、mbstring、gd | 页面报驱动不存在 |
| Discord/邮件类应用 | sockets、imap | 发邮件功能失效 |
扩展装完后,在运行环境的【配置】里确认已加载,再去网站列表上方重载 OpenResty(比重启好,不中断现有连接)。
原因四:目录权限不对
网站目录的运行用户和用户组在 网站配置 → 网站目录 里设置。权限不对的表现很典型:网站能打开,但上传文件失败、缓存目录写不进、后台偶发 500。
# 查看网站目录属主和权限(路径换成你的网站目录)
ls -ld /opt/1panel/www/sites/*/
处理:在网站配置的“网站目录”页面设置运行用户/用户组;也可以在文件管理里点权限列(类似 0755、0644)修改,目录可勾选“同时修改子目录权限”。别图省事全改 0777,那是把门锁拆了防盗,详见 5.3 节。
原因五:一键部署的数据库没就绪
一键部署 WordPress、Halo 这类应用,安装时会自动创建数据库。如果数据库实例本身异常,应用就会装到一半失败。
处理:到数据库列表确认实例状态正常、root 密码可用(列表上方的【连接信息】可以查看和修改)。解决数据库问题后,到应用商店的已安装列表,用【重建】让应用基于当前配置重新创建容器——重建会删除容器重新创建,配置了持久化的数据会保留,但直接改动容器内其他文件的修改会丢失。
一个完整的复现与修复
现象:创建一个 PHP 运行环境网站,代号 blog,点确认后直接失败。
定位过程:
- 打开任务日志,报错大意是“主域名格式不正确”——手滑把域名多打了一个点。
- 改成正确域名重新创建,这次创建成功,但访问报 404。
- 进网站配置看目录,发现代码包解压到了网站根目录外面一层,运行目录指的位置没有入口文件。
修复:把代码移到正确位置(或修改运行目录指向入口文件所在路径),保存后重载网站,curl -I 返回 200。
复盘要点:这个案例里两个问题叠加——一个是输入错误,一个是目录结构不对。一次只改一个地方,改完验证一次,才不会乱了线索。
验证:三个动作确认真的好了
- 网站列表中该网站状态为“运行中”;
- 从外部访问,返回正常内容:
curl -I http://你的域名/
- 在服务器本地直连后端端口(绕过 OpenResty 验证后端本身):
curl -I http://127.0.0.1:你的后端端口/
判断方法:本地通、域名不通,问题在 OpenResty 配置或防火墙;本地就不通,问题在后端服务或运行环境本身。
如果是静态网站,验证更简单:直接在服务器上确认文件存在、默认文档(在网站配置的“默认文档”里设置,类似 index.html、index.php)能对上。静态网站报 404,绝大多数就是文件没传对位置或者默认文档名不匹配,不需要往复杂了想。
本节要点
- 创建失败先展开任务日志看报错原文,不要凭弹窗猜;
- 代号、端口、运行环境是三大高频原因,依次排除;
- 端口占用用
ss -ltnp查;权限在网站目录设置里改,不要用 0777; - PHP 白屏先怀疑扩展,运行环境列表的【扩展】里可以装;
- 一键部署失败记得查数据库,修好后用“重建”而不是重新装。
更完整的网站创建参数说明,可以参考 1Panel 官方文档:创建网站 一节。
下一节:网站创建好了,访问却报 502、504 或者一直转圈——我们沿着请求的路径一段一段量过去。
