1Panel 避坑/使用指南-比1Panel官方教程还有用

当加入HSTS预加载列表检测失败时

你应该点击对应网站的配置按钮

随后点击配置文件

找到类似下面这行

如果找不到,你可以按下Ctrl + F打开查找,并输入"Strict-Transport-Security"

输入内容后点击一下next即可自动定位到该行

请重点观察本行是否有"includeSubdomains; preload"的字样,以及max-age等号后的数字是否大于31536000(1年,但推荐63072000)

如果未来1Panel更新了其他原生兼容的web服务器(而不是ols这样的社区套壳),请参考此文章来做出对应web服务器的配置修改

WordPress启用HSTS,增强用户信任和网站安全性-风屿岛 (biliwind.com)

接入CDN、WAF后提示网页重定向次数过多

请首先尝试将CDN、WAF的上游(回源)服务器配置为https地址

上图为雷池WAF的示例

如果依然不行,请尝试将此处改为“http可直接访问”

从其他环境迁移到1Panel后出现403错误

请仔细检查你的网站根目录中是否含有一个叫做“.user.ini”的文件


如果有,删除它,因为它可能包含了错误的执行位置限制路径

1Panel是否可以和宝塔共存

可以,你可以在服务器上同时安装1Panel和宝塔,也可以在1Panel中安装宝塔,或者在1Panel中安装1Panel

但这么做的前提是你已经引入了第三方应用商店

为什么雨云有宝塔虚拟主机却没有1Panel虚拟主机

因为宝塔虚拟主机使用了LXD技术,这是宝塔所支持的,但1Panel依赖docker,LXD虚拟化中不能运行docker容器化,所以不支持

雨云的云服务器、游戏云是支持的,因为其使用了KVM技术

为什么存储空间越用越少

可能是由于未使用的docker镜像占据了大量空间

以上操作可以释放镜像,但当镜像过多时,1Panel有bug

此bug复现方式很简单,当你所在的页面没有状态是“未使用”的镜像时,点击清理镜像会无效

临时修复方法是寻找其他分页,找到有“未使用”状态的镜像后再次清理即可清理全部未使用镜像

但是此方法可能会删掉你创建的运行环境镜像

1Panel申请证书时莫名其妙失败

此方法多半由于站点是由反向代理访问的,解决方法是不在服务器上生成证书,而是使用第三方服务生成

需要多个相同PHP版本但不同扩展的运行环境

此操作在宝塔上并不可行,但1Panel可以这样做

如果你的a应用需要PHP80+扩展X,b应用需要PHP80+扩展Y,但扩展X和扩展Y不支持共存,那么你可以使用两个运行环境

你只需要在创建运行环境时修改镜像名即可

创建完成后的两个运行环境互相独立,互不影响

需要的扩展不在官方支持列表中

根据官方文档介绍,如果你要找的PHP扩展不在扩展选择列表中,可以手动输入然后选择第一个

如扩展“zip”不在此列表中,我可以手动输入zip并选择第一个

但如果不在PHP扩展列表中,那么需要手动安装

以魔方财务开心版为例,需要安装一个叫做idcsmart.so的扩展,但其并不在官方的扩展列表中,所以我们需要按照正常流程创建完运行环境和网站,并且在容器页面根据镜像名、容器名以及运行时间来判断哪个是刚刚创建的网站的容器

假设这个容器就是要增加自定义插件的容器

首先要点击容器名

向下拉,复制MergedDir后面引号中的内容

访问这个目录,分别点进/usr/local/lib/php/extensions目录中,之后打开里面这个no开头的文件夹

将自定义扩展上传至此目录

在对应网站的PHP配置文件行末添加一个引用语句即可

一般情况下,需要添加的内容为

extension=你的扩展名

注意是包含扩展名的全名

也有可能是

extension=/path/to/extension/你的扩展名

注意,此路径需要根据实际进行修改,例如此处可以修改为

extension=/usr/local/lib/php/extensions/no-debug-non-zts-20200930/idcsmart.so

之后重启此容器即可
注意,这种方式添加的扩展会在重建容器后丢失

创建网站时为什么要填写PHP-FPM端口

image

新手可能会问,这是我网站的访问端口吗?我是需要反向代理这个端口吗?

都不是,这是web服务器与PHP通信用的端口,宝塔默认使用套接字连接,所以你压根看不到这个设置,而1Panel使用TCP连接,所以需要这个端口来让PHP与web服务器进行通信

我只能使用openresty吗

1Panel官方支持且能用的web服务器只有openresty

虽然官方有ols web服务器,但这东西是从社区搬过来的,并没有做出适配,你需要自己为ols写配置文件、编译lsphp等,1Panel中的任何操作都无法同步进ols中

当然,你可以使用nginx、openresty、tengine等基于nginx(或完全兼容nginx配置文件的web服务器)

首先你需要他们的docker镜像,但是我建议使用dockerfile构建一个并加入lua模块

之后找到openresty的docker容器,点击编辑

之后选择你刚刚构建好的镜像,点击确认完成替换

容器编辑需要重建容器

其实某些操作并不需要重建,而是使用update语句

image

证据:未持久化的数据并没有丢失,且更改生效,并且运行时间也正常(没有几秒前启动等明显的重启痕迹)

MySQL、Redis等无法连接

这多数出现在PHP网站项目中或任何1Panel的应用中

这是因为1Panel中的所有docker部署的应用都会默认归为一个名为1panel-network的桥网络中

并且1Panel在创建数据库等容器时指定了host名,所以需要通过mysql:3306,redis:6379来连接,而不是使用127.0.0.1这样的回环IP,因为回环IP只是相对于运行环境所在容器的,并不是相对于主机的,所以无法建立连接

openresty属于一种特殊的应用,它默认是host网络,即与服务器主机共享一个IP地址,但此共享并不是NAT(网络地址转换)共享IP,而是让容器内的进程直接获得与宿主机相同的网络权限,可以直接占用宿主机的网络端口,直接使用宿主机的IP地址,所以在反向代理时可以使用127.0.0.1

无法使用mysql:3306作为数据库连接地址

这种问题一般出现在某些项目中,原因是项目的验证逻辑认为mysql并不是一个有效的网络地址,而类似127.0.0.1,example.com才是有效的网络地址,我们可以将mysql的ip地址填进去

找到你的MySQL容器,即可看到此容器在这个桥网络中的内网IP地址,使用此地址连接即可(但不稳定,易受到外界因素干扰,如容器非正常顺序启动)

如果不希望使用此方法,可以将你的应用改为host网络,这样就可以使用127.0.0.1这样的回环IP进行连接(我在赫兹监控上使用的就是这种方法)

使用服务器级cron代替wp-cron执行时未找到文件

你很可能将cron目录填写错了

这虽然是正确的网站目录,但却是从容器中映射出来的,在容器中执行cron时肯定找不到这个路径

正确的方法是使用cron时选择网站所在的PHP容器,并且使用以下的执行命令

php /www/sites/www.example.com/index/wp-cron.php
2 个赞

写的非常好

还有一个,如果你使用的是 DNSPod 作为 DNS 解析服务,那么很可能会遇到无法通过 DNS 方式签发证书的问题。

值得一提的是,DNSPod API 早已被弃用,被腾讯云 API 所取代。

相关文档连接

相关 Issues

1Panel

go-acme/lego (即 1Panel 使用的 ACME 客户端库)