laravel - 使用 php-fpm 重启 Laravel 部署到 apache
问题描述
我对 laravel 和 CI/CD 的概念很陌生。但我已经投入了最后 24 小时的时间来启动和运行某些东西。实际上我使用gitlab.com作为 repo。我在那里配置了 CI/CD 功能。
部署应在SRV1
已为其相应用户配置证书的情况下完成。然后SRV1
应该使用部署器从 gitlab 存储库中克隆必要的文件。SRV1
gitlab repo 也有来自用户的公钥。这条链工作得很好。
问题是,部署后我需要重新启动 php-fpm 以便它可以重新初始化其符号链接并更新其绝对路径缓存。
我看到了通过在 php-fpm 中设置一些 cgi 设置来克服这个问题的各种方法。但是这些对我不起作用,因为它们都使用 nginx,而我使用的是 apache。
有没有其他方法可以告诉 php-fpm 与 apache 重新初始化其路径或在更改后重新加载?将部署者用户添加到 sudoers 列表并调用 service restart php-fpm 的方法对我来说看起来很 hacky...
谢谢
更新1:
实际上我发现了这个:https ://github.com/lorisleiva/laravel-deployer/blob/master/docs/how-to-reload-fpm.md
看起来,部署者有一些技术可以做到这一点。但这需要部署者用户有权访问 php-fpm 重新加载。对我来说看起来有点不安全。
我没有找到任何其他解决方案。有一些 nginx 告诉 nginx 总是重新评估真实路径。显然,对于 Apache,它应该是“followSymLink”,但它不起作用。
实际上我创建了一个在 root 下运行的 bash 脚本。此脚本始终每 10 秒检查一次“当前”符号链接中的更改。如果有变化-> 重新加载 php-fpm。不好,当然很丑,但应该可以。
仍然对其他提案开放。
解决方案
我通过添加一个清除 APCU 和 OPCACHE 的 php 文件在我的服务器上解决了这个问题:
<?php
if (in_array(@$_SERVER['REMOTE_ADDR'], ['127.0.0.1', '::1']))
{
apcu_clear_cache();
apcu_clear_cache('user');
apcu_clear_cache('opcode');
opcache_reset();
echo "Cache cleared";
}
else
{
die("You can't clear cache");
}
那么你必须在更新符号链接后用 curl 调用它:
/usr/bin/curl --silent https://domain.ext/clear_apc_cache.php
我使用 Gitlab CI/CD 它现在对我有用
推荐阅读
- django - Django中具有唯一约束的软删除
- javascript - 使用 json.stringify 的 Anagram 解决方案,这是解决问题的正确方法吗
- javascript - 如何从文本中删除字符串
- linux - 使用 awk 处理具有不同字段数的多个文件
- c# - 根据兄弟节点选择 XML 节点
- c# - 在通过反射调用方法后加载程序集/dll 时,方法调用会引发“对象与目标类型不匹配”异常
- npm - 为什么 npm 会出现奇怪的错误?
- javascript - 对于部署在 Netlify 上的 3D 模型,ProgressEvent.total 为 0,但在本地环境中工作
- java - CSV 日期到 arraylist_Java
- javascript - 如何在角度材料表中获得间隙