1

我有一个带有 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 文件夹之外的地方。

谁能帮我一把?提前致谢。

4

2 回答 2

1

通过 git 部署 laravel 网站

@marcanuy 的文章在过去被证明是一个极好的资源,但遗憾的是,该链接似乎不再可访问。

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

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 公用文件夹

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

于 2014-10-21T16:54:36.093 回答
0

在你的裸仓库中编辑钩子脚本 /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。

我写过一篇关于用 git 部署 laravel 网站的文章

于 2014-01-24T15:42:36.903 回答