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,点确认后直接失败。

定位过程:

  1. 打开任务日志,报错大意是“主域名格式不正确”——手滑把域名多打了一个点。
  2. 改成正确域名重新创建,这次创建成功,但访问报 404。
  3. 进网站配置看目录,发现代码包解压到了网站根目录外面一层,运行目录指的位置没有入口文件。

修复:把代码移到正确位置(或修改运行目录指向入口文件所在路径),保存后重载网站,curl -I 返回 200。

复盘要点:这个案例里两个问题叠加——一个是输入错误,一个是目录结构不对。一次只改一个地方,改完验证一次,才不会乱了线索。

验证:三个动作确认真的好了

  1. 网站列表中该网站状态为“运行中”;
  2. 从外部访问,返回正常内容:
curl -I http://你的域名/
  1. 在服务器本地直连后端端口(绕过 OpenResty 验证后端本身):
curl -I http://127.0.0.1:你的后端端口/

判断方法:本地通、域名不通,问题在 OpenResty 配置或防火墙;本地就不通,问题在后端服务或运行环境本身。

如果是静态网站,验证更简单:直接在服务器上确认文件存在、默认文档(在网站配置的“默认文档”里设置,类似 index.html、index.php)能对上。静态网站报 404,绝大多数就是文件没传对位置或者默认文档名不匹配,不需要往复杂了想。

本节要点

  • 创建失败先展开任务日志看报错原文,不要凭弹窗猜;
  • 代号、端口、运行环境是三大高频原因,依次排除;
  • 端口占用用 ss -ltnp 查;权限在网站目录设置里改,不要用 0777;
  • PHP 白屏先怀疑扩展,运行环境列表的【扩展】里可以装;
  • 一键部署失败记得查数据库,修好后用“重建”而不是重新装。

更完整的网站创建参数说明,可以参考 1Panel 官方文档:创建网站 一节。

下一节:网站创建好了,访问却报 502、504 或者一直转圈——我们沿着请求的路径一段一段量过去。