【问题标题】:Laravel deployment with Git使用 Git 部署 Laravel
【发布时间】:2019-09-13 14:45:42
【问题描述】:

我有一个带有 ubuntu 的 vps,我想使用 Git 部署我的 Laravel 应用程序。 Laravel 有一些用于框架本身的文件夹(app、bootstrap、vendor)和一个用于公共文件(“public”、lol)的文件夹,所以我希望将所有这些框架文件夹放在 apache 服务器的“www”文件夹之外,并且将“public”文件夹的内容复制到“www”。我已经读过关于制作一个钩子,将所有推送的文件复制到 www 文件夹(使用结帐),但我不想将所有文件签出到 www,只是那些在“公共”和其余部分中的文件将文件(laravel 文件)推送到外部。

我的文件夹结构是:

  • myapp(从我的本地仓库推送)
    • Laravel 框架文件夹
    • Laravel 公用文件夹
  • 万维网
    • 来自 laravel 的公用文件夹的内容

我怎样才能实现这种结构?我使用的是一个裸仓库,所以我可以推送它,但由于它是“裸的”,我没有文件的副本,我不能写一个接收后挂钩,比如:清空 www 文件夹并复制所有内容var/myapp/public 给它。 另一种选择是将所有文件(公共和非公共)都放在 www 文件夹中,这样我就可以使用 checkout 方法,但是我在某个地方阅读了将所有应用程序逻辑放在公共 www 文件夹之外更好的地方。

谁能帮帮我?提前致谢。

【问题讨论】:

  • 您是否考虑过创建符号链接?比如 /var/www/ 到 /git/laravel/public/
  • 无论您使用什么网络服务器,无论是 Apache 还是 NGINX 或其他什么,都有 DocumentRoot 或 Root 设置,您可以在其中将其(“www”目录)设置为 public 目录,就是这样那是为了。完成此操作后,public 目录上方的所有内容都在 DocumentRoot 之外。无需复制文件或使用符号链接。只需将 Web 服务器中的单个配置行更改为在公共目录之外提供服务。
  • Sajan 是正确的,曾几何时我想做你所要求的,但后来我意识到没有必要,因为我可以修改 httpd.conf 文件并告诉 apache 我想要我的根目录。根是 httpd.conf 文件中指定的或指定的。用于我正在使用的应用程序。仅仅因为一个目录说 www 并不意味着它的根。如果您有一个具有多个域的虚拟主机设置,则可以以相同的方式设置它们的根。 ** 除非您使用的是共享主机帐户,否则就是另一回事了。
  • 这一切似乎都结束了,只需执行以下操作:在 /srv 下为您的 Web 应用程序代码创建一个文件夹,然后在那里部署您的代码,现在为 apache 创建一个虚拟主机配置(我假设这就是您'正在使用)通常在 /etc/apache2 或 /etc/httpd 中找到的站点可用文件夹中,然后符号链接该配置以存在于启用站点的文件夹中重新启动 apache 并完成,您很少需要编辑 httpd.conf

标签: git laravel-4 web-deployment


【解决方案1】:

通过 git 部署 laravel 网站

@marcanuy 的文章在过去被证明是一个极好的资源,但遗憾的是,link 似乎不再可用了。

所以对于像我这样的菜鸟,我正在进一步解释他的答案

1.在您的服务器中启动一个裸 git 存储库。

在我的设置中,我的主目录中有 git 文件夹和网站文件夹。所以在 git 文件夹中,我创建了一个名为 website.git 的新文件夹。并在里面初始化了一个裸git repo

cd website.git
git --bare init

2。给你的 git 添加一个遥控器,比如网站

本地 git repo 现在有一个远程指向服务器中的 repo。

 git remote add website ssh://<user>@hostname/home/<username>/git/website.git

3.设置后挂钩脚本(来自@marcanuy 回答)

更新工作树路径。在我的情况下 /home/username/website 。也使更新后可执行。

4.将 apache 指向您的 laravel 公共文件夹

现在您可以推送到远程网站,并在没有模糊的情况下对实时网站进行更改。

【讨论】:

    【解决方案2】:

    在你的裸仓库中编辑钩子脚本 /path/website.git/hooks/post-update :

    #!/bin/sh
    work_tree=/website/code/path/mycoolsite
    GIT_WORK_TREE=$work_tree git checkout -f
    cd $work_tree
    composer install
    

    并确保该脚本是可执行的。每次您从本地仓库推送时,此脚本都会将您的文件复制到您选择的目录中,并从您的 composer.json 文件中安装任何新的依赖项。

    然后你可以在你的网络服务器根目录中建立一个符号链接

     ln -s /website/code/path/site/public/ /var/www/mycoolsite 
    

    或者编辑您的 apache 配置文件,将公用文件夹设置为新的 DocumentRoot。

    我在deploying a laravel website with git写了一篇关于它的文章

    【讨论】:

      猜你喜欢
      • 2016-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-19
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      • 2015-04-06
      相关资源
      最近更新 更多