Docker+Laravel+Jenkins测试阶段证书故障排查求助
解决Laravel测试环境迁移时的TLS证书及MySQL命令废弃问题
核心问题分析
执行php artisan migrate '--env=testing' --seed时出现两个关键问题:
- TLS/SSL错误:
ERROR 2026 (HY000): TLS/SSL error: self-signed certificate in certificate chain,这是导致数据库schema加载失败的直接原因 - 命令废弃提示:
mysql命令已废弃(建议使用/usr/bin/mariadb),虽不直接阻断流程,但需消除警告避免潜在问题
解决方案步骤
一、修复TLS/SSL自签名证书错误
方案1:测试环境直接禁用SSL(推荐)
测试环境通常无需严格的SSL加密,可直接在配置中关闭:
- 编辑测试环境变量文件
.env.testing,添加或修改:MYSQL_SSL_MODE=disable - 或者修改
config/database.php中testing数据库连接的配置:'testing' => [ 'driver' => 'mysql', // 其他原有配置... 'sslmode' => 'disable', ],
方案2:信任自签名证书(需保留SSL场景)
如果必须保留SSL连接,需将自签名CA证书加入系统信任库:
- Debian/Ubuntu系统:
- 将CA证书文件复制到系统证书目录:
sudo cp /path/to/your/ca-cert.pem /usr/local/share/ca-certificates/ - 更新证书信任链:
sudo update-ca-certificates
- 将CA证书文件复制到系统证书目录:
- RHEL/CentOS系统:
- 复制证书到锚点目录:
sudo cp /path/to/your/ca-cert.pem /etc/pki/ca-trust/source/anchors/ - 提取并更新信任链:
sudo update-ca-trust extract
- 复制证书到锚点目录:
- 同时在Laravel数据库配置中指定CA证书路径:
'testing' => [ 'driver' => 'mysql', // 其他原有配置... 'options' => [ PDO::MYSQL_ATTR_SSL_CA => '/path/to/your/ca-cert.pem', ], ],
二、消除MySQL命令废弃警告
方案1:创建软链接兼容原有命令
通过软链接让mysql命令指向mariadb,无需修改应用配置:
sudo ln -s /usr/bin/mariadb /usr/bin/mysql
方案2:修改Laravel配置指定命令路径
直接在数据库配置中指定使用mariadb命令:
'testing' => [ 'driver' => 'mysql', // 其他原有配置... 'binary' => '/usr/bin/mariadb', ],
验证修复
执行原迁移命令确认问题解决:
php artisan migrate --env=testing --seed
内容的提问来源于stack exchange,提问作者Jack Kitley
相关产品推荐
相关产品推荐

