0

基本上我已按照此链接的步骤操作:https ://docs.gitlab.com/ee/ci/examples/laravel_with_gitlab_and_envoy/

我使用的是 apache 服务器而不是 NGINX,这是唯一的区别。

所以有一个特使文件将在下面执行:

  • 克隆存储库
  • 运行作曲家
  • 更新符号链接

envoy 文件的代码与: https ://docs.gitlab.com/ee/ci/examples/laravel_with_gitlab_and_envoy/#full-script相同,但 git url 更改和根目录更改。

所以设置是这样的:example.com(虚拟网址)指向我的应用程序目录,即 /var/www/html/deployer-home/current/public

current是一个符号链接,它将指向 /var/www/html/deployer-home/releases/1,如果我将上传新版本,符号链接将更改为/var/www/html/deployer-home/releases/2

如果我会ls -l在服务器中这样做,那么符号链接会显示/var/www/html/deployer-home/releases/2example.com仍然指向/var/www/html/deployer-home/releases/1

我已经尝试过,service apache2 restart但它的域指向仍然没有得到更新。reboot只有当我在服务器中执行时它才会更新。

那么如何解决这个问题呢?我不想为每个版本重新启动服务器。

4

5 回答 5

1

我假设您正在使用 FPM 运行 PHP。尝试使用以下命令重新启动您的 FPM 服务:

service php7.4-fpm restart

(如果需要,使用正确的版本更新)

为什么 ?

曾几何时,PHP 作为 Apache 模块 (mod-php) 运行,但现在在单独的服务中运行。如果您想应用一些 PHP 配置更改,或者想要使用新的文件系统信息启动 PHP 进程,重新启动 Apache 是不够的(甚至不需要)。

于 2022-02-18T13:15:43.623 回答
0

您可以优雅地重新启动 Apache v1.x 或 v2.x httpd 守护进程

您需要向 Apache 服务器发送 USR1 信号:

这个 (USR1) 信号导致父进程建议子进程在当前请求后退出(或者如果他们没有提供任何服务,则立即退出)。父级重新读取其配置文件并重新打开其日志文件。随着每个孩子的死亡,父母用新一代配置中的孩子替换它,立即开始服务新请求。

您可以按如下方式运行配置文件语法测试:

apachectl configtest
apachectl -t

以 root 用户身份键入以下命令:

apachectl -k graceful

或者

apache2ctl -k graceful

使用 Systemd 时重新加载 HTTPD 配置文件而不重新启动 Apache:

# CentOS/RHEL/Fedora Linux
sudo systemctl reload httpd
# Debian/Ubuntu Linux
sudo systemctl reload apache2
于 2022-02-17T12:54:46.773 回答
0

您可以创建.htacess文件

<IfModule mod_rewrite.c>
  RewriteEngine On
  Options +FollowSymLinks
  Options SymLinksIfOwnerMatch 
</IfModule>
于 2022-02-22T06:20:19.917 回答
0

我真的认为这种使用符号链接的做法很糟糕。原因是当您更改符号链接时,很可能存在超出开始但尚未完成的请求。这些请求将如何工作取决于正在发生的事情,但通常它们会被某种破坏

更好的方法是简单地更新您的网络服务器配置以指向一个新的文档根目录,然后优雅地重新加载/重新启动网络服务器。这将允许当前运行的任何请求正常完成,并且任何新请求都将从新文档根目录提供。这有效地让你的蛋糕吃起来 - 让两个文档根都有效。在很短的时间内,所有请求都将从新的文档根目录中获得服务,并且您不太可能遇到任何奇怪的错误。

符号链接很棒,我经常使用它们,但是使用它们来切换 webroot 而不仅仅是更新 webserver 配置并不是一个好的用例。

注意 - 我倾向于做网络服务器配置的方式是有一个非常小的包含文件,它只包含一行。该文件可以通过脚本/自动化轻松操作,然后重新加载网络服务器配置。

于 2022-02-21T14:54:31.597 回答
0

您是否尝试在使用取消链接创建第二个符号链接之前删除第一个符号链接?

unlink /var/www/html/deployer-home/releases/1
于 2022-02-21T23:57:45.820 回答