通过GitHub将Web应用程序部署到生产环境

时间:2014-11-06 14:58:19

标签: git deployment github version-control repository

如何为存在于共享目录中的Web应用程序创建单独的Git存储库,以便我可以通过GitHub将它们部署到生产中? Web应用程序设置是常见的惯例,所以如果没有办法实现这一点,我会感到惊讶。

对于每个应用程序,索引文件和资产都位于各自的public_html目录中:

/home/user/public_html/app1
/home/user/public_html/app2
/home/user/public_html/app3

每个网站的应用程序文件都位于各自的上级目录中:

/home/user/app1
/home/user/app2
/home/user/app3

那么在哪里运行git init以获得每个应用程序的回购?以下是挑战:

    git init目录中的
  1. "user"将为其创建一个回购 所有申请
  2. git init中的
  3. "/home/user/public_html/app1"不会 在"/home/user/app1"
  4. 中包含应用程序文件 git init中的
  5. "/home/user/app1"将不包括在内 "/home/user/public_html/app1"
  6. 中的索引和资产

    注意:此问题经过大量编辑后,使用非IIS术语,希望能更好地传达问题。

3 个答案:

答案 0 :(得分:1)

我认为有三种方法可以做到这一点。

第一个是使用git submodule。基本上,您在目录/home/user中创建一个主仓库,它恰好将所有其他存储库等作为子模块。在这种情况下,每个应用需要2个存储库,一个用于app_n,另一个用于public_html/app_n。使用2个应用程序检查以下示例说明:

#Create the repositories etc
cd test && mkdir repositories && cd repositories
mkdir app1 app2 public_html_app1 public_html_app2
cd app1/ && git init && touch file && git add . && git commit -m "msg" && cd ..
cd app2/ && git init && touch file && git add . && git commit -m "msg" && cd ..
cd public_html_app1/ && git init && touch file && git add . && git commit -m "msg" && cd ..
cd public_html_app2/ && git init && touch file && git add . && git commit -m "msg" && cd ..

#Create the master repo and add submodules
cd .. && mkdir deployment && cd deployment
git init && mkdir public_html
git submodule add ../repositories/app1 app1
git submodule add ../repositories/app2 app2
git submodule add ../repositories/public_html_app1 public_html/app1
git submodule add ../repositories/public_html_app2 public_html/app2
git commit -m "creating repo structure"

在上面,部署目录类似于/home/user/目录。

执行此操作的第二种方法是在public_html目录中创建app_n目录,并从那里提供静态资产等。这应该可以使用apache或您正在运行的任何Web服务器轻松配置。

第三种方法是使用symlinks。由于您使用的是IIS,因此无法为您工作(您需要在Windows上浏览虚拟目录)。 实质上,您可以在public_html目录中创建符号链接。仅使用应用程序跟踪您的public_html文件,但是,您可以在public_html目录中创建符号链接。检查以下步骤,为2应用场景重现相同的内容

mkdir -p app1/public_html app2/public_html public_html
ln -sf app1/public_html/ public_html/app1
ln -sf app2/public_html/ public_html/app2

答案 1 :(得分:0)

我建议为/home/user/app1级别的每个应用创建一个git存储库。然后在每个目录中创建一个assets目录。然后,您可以将/home/user/public_html/app1符号链接到/home/user/app1/assets

+---home
    +---user
        +---app1 (git repo)
        |   +---assets
        +---app2 (git repo)
        |   +---assets
        +---public_html
            +---app1 -> /home/user/app1/assets
            +---app2 -> /home/user/app2/assets

git存储库将包含您的应用程序和资产文件,但Web服务器仍然可以访问资产文件。

或者,您可以重新配置Web服务器以直接访问assets目录。

答案 2 :(得分:-1)

所以从我得到的映射的想法是它是这样的:
一些fodlder
|
- > wwwroot文件
|
- >指数
资产
|
- >的Inetpub

所以wwwroot和inetpub在同一个主文件夹中 如果是这种情况,那么你需要在你的主文件夹中启动你的git init(上面标记为“some folder”),如果你的“主文件夹”中有其他文件和文件夹,那么你必须手动将文件添加到你的提交,在这种情况下使用'git add wwwroot / assets / somepicture.png'(带有''offcourse) 如果您选择在这个建议的情况下执行git add --all,您可以将主文件夹中的所有文件添加到您的提交中,这样做不是最好的做法。