首页 > 解决方案 > 使用 php-fpm 重启 Laravel 部署到 apache

问题描述

我对 laravel 和 CI/CD 的概念很陌生。但我已经投入了最后 24 小时的时间来启动和运行某些东西。实际上我使用gitlab.com作为 repo。我在那里配置了 CI/CD 功能。

部署应在SRV1已为其相应用户配置证书的情况下完成。然后SRV1应该使用部署器从 gitlab 存储库中克隆必要的文件。SRV1gitlab 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。不好,当然很丑,但应该可以。

仍然对其他提案开放。

标签: laravelgitlabcontinuous-deployment

解决方案


我通过添加一个清除 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 它现在对我有用


推荐阅读