ubuntu 系统(已安装服务器环境)使用宝塔 Linux 面板踩坑
安装宝塔 Linux 面板
安装之前需要知道,宝塔面板不会识别系统中已安装的 web 服务器、php 以及 mysql 数据库等的软件。如果想要使用面板安装 nginx、php、和 mysql 等软件,在做好数据备份之后,需要删除当前环境中的这些软件,否则会产生不可知的错误,有可能像我一样,卸载安装好多次才成功。
安装过程理论上不会删除当前的数据库和代码,但如果想要使用面板的数据库管理,需要将原有的数据库备份出来,再从宝塔数据库面板导入,即更换使用的数据库软件。
安装后需要注意,3306 端口默认是不开放的。所以如果使用原来的数据库,并且数据库有对外服务,安装后第一件事就是在安全一栏开放 3306 端口(踩了小坑,之前在其他服务器上安装也遇到过,但没怎么注意)。
nginx、php 启动报错修复
php: error while loading shared libraries: libpng12.so.0: cannot open shared
遇到这种共享库缺失的情况,首先在当前环境中去找这个相关的库文件:
find / -name libpng12.so.0
然后根据之前的教程 Ubuntu20.04 安装 Nginx 软件报错:libgd3 缺少 libpng12-0 依赖,libpng12.so.0 文件到 /lib/x86_64-linux-gnu 下。
cp /opt/libpng12.so.0 /lib/x86_64-linux-gnu
再运行 php -v 发现已经可以返回版本号了。
在安装了 php 7.1 并切换之后,报错:缺失 libwebp.so 库,但在环境中找不到这个库,只能去下载编译安装。
安装之后再运行,发现报错:
php: error while loading shared libraries: libwebp.so.6: cannot open shared
通过 find / -name libwebp.so*
找到了 libwebp.so.7
,
/usr/lib/libwebp.so.7.1.2
/usr/lib/libwebp.so
/usr/lib/libwebp.so.7
所以可能是版本有点高了,这时候有两个办法,一个是将 libwebp.so.7 复制一份为 libwebp.so.6 (考虑到软件兼容性,可能有用),另一个就是下载一个比这个第一点的版本尝试。
试了第一种方法,运行已经好了。
宝塔创建网站(Laravel 项目)适配问题
在安装后 nginx 以及 php 之后,创建新网站,选择项目根目录 public,也可以在创建后设置网站目录,将 public 作为运行目录与项目目录分隔开。
宝塔网站默认地址为 /www/wwwroot
,任何不在该目录下的项目目录都不可以配置成网站的根目录,但可以通过软链绕过这个问题:ln -s /root/laravel /www/wwwroot/laravel
。
Laravel 项目对于日志文件 storage 以及 bootstrap/cache 需要有访问权限。这个在安装之后需要检查一下目录的所有者,宝塔默认的网站运行用户和用户组为 www,这个可以通过 ps aux|grep php-fpm
或 ps aux|grep nginx
查看进程运行者进行确认。
项目访问 403,将 php 切换回 php 7.0。注意,如果项目中存在多个版本的 php,切换时需要注意 软件商店 -> 已安装 切换的版本 php 状态一栏是否已经启动。如果无法直接启动,可以先将其他版本停止运行,再尝试启动目标版本的软件。
此时访问报错,但没有报错详情。查看 .env 文件,发现 APP_DEBUG 为 true,也就是说项目是开发模式,正常来说会输出错误日志。
找到一个教程,说 laravel 项目需要使用 putenv 函数来读取 .env 文件,而宝塔是默认禁用的。软件商店找到 php,设置-> 禁用函数,找到 putenv,右侧删除掉。
此时错误信息显示出来了:The cipher and / or key length are invalid
。找到laravel上传到线上出现The cipher and / or key length are invalid 的Bug调试 教程,php artisan key:generate
重新生成 .env 中的 APP_KEY 即可。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。