在托管服务器上使用symlink的Apache部署不起作用

ffx8fchx  于 11个月前  发布在  Apache
关注(0)|答案(1)|浏览(68)

以下是我的问题的背景:我们有托管服务器(Hetzner),并试图实现零停机时间部署与符号链接。以下是我们在每次推送时所做的:我们将新代码部署到一个新目录中,更改文档根目录的符号链接以指向该新目录,保留最后4个版本并删除旧版本,通过curl(opcache_reset())调用一个php文件来清除opcache。问题是随机的:有时它工作得很好,有时我们会遇到500个HTTP错误和一些“无法重新声明”错误,似乎它试图在同一时间内提供2个版本,正如你在这里看到的:enter image description here
问题是,我们正在为另一个应用程序做同样的事情,但这个应用程序运行在Symfony上,我们没有任何问题。
我们在Apache上运行,PHP 8.1已激活OPCache,并使用以下php配置:enter image description here
我试图改变opcache配置(validate_timestamps 0/1,use_cwd等),但它没有解决我的问题。
我还尝试在重置opcache后添加一个composer clear-cache命令,也不起作用。
我尝试在.htacces文件中将+FollowSymlinks更改为+SymLinksIfOwnerMatch,不起作用。
奇怪的是,它可以工作10背靠背推,然后不工作,这是完全随机的。
如果你有一个想法或解决方案,这将是伟大的!- 谢谢-谢谢

bpzcxfmw

bpzcxfmw1#

this Stackoverflow question中有一种推荐的方法来做到这一点,但在我们的托管服务器中,我有有限的方法来自定义Nginx设置。所以我发现我需要让PHP的opcache重新验证缓存的路径。虽然您可以使用PHP FPM的php.ini设置全局地执行此操作,但我的服务器(由Runcloud管理)有一个特定的位置来覆盖/etc/php-extra/<web_application_name>.conf中的PHP设置。
最终目标是设置php设置opcache.revalidate_path=1,您可能需要从Hetzner那里了解推荐的方法。我的应用程序中的本地php.ini文件无法正常工作。
This post has a good write upthis one talks about realpath caching

相关问题