使用Git来部署一个Web站点

转载自:http://rmingwang.com/using-git-to-deploy-a-web-site.html

  • 远程仓库实际上和本地仓库没啥不同,纯粹为了7×24小时开机并交换大家的修改。
  • GitHub就是一个免费托管开源代码的远程仓库,如果你既不想公开源代码,又舍不得给GitHub交保护费,那就只能自己搭建一台Git服务器作为私有仓库使用。

1. 下面我们以ubuntu server为例,介绍一下如何使用Git来管理项目代码,并且部署代码的web站点目录。

2. 1. 准备工作:

  1. 1台拥有SSH权限的服务器 (LNMP,git,ssh安装配置
  2. 一台装有git客户端的PC (本文实际在windows下的msysgit操作)

3. LNMP,git,ssh安装配置

    1
    2
    3
    4
      # 安装LNMP
      $ wget -c http://soft.vpser.net/lnmp/lnmp1.0-full.tar.gz && tar zxvf lnmp1.0-full.tar.gz && cd lnmp1.0-full && ./ubuntu.sh
      # 安装Git ssh
      $ sudo apt-get install git git-core ssh

windows下安装 msysgit

4. 2.在你的web服务器上建立git裸仓库、编写hooks、导入用户公钥、设置目录权限

在服务器上建立一个用户,这里命名为git,修改git的密码,并禁用shell登录

    1
    2
    3
    4
    5
    6
    7
    8
    9
      $ sudo useradd git
      # 修改git的密码
      $ passwd git<
      # 禁用shell登录
      $ sudo vi /etc/passwd
      修改
      git:x:1001:1001:,,,:/home/git:/bin/bash
      为
      git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。

初始化Git仓库,建立git 裸仓库,设置hook脚本(web目录需要git用户有权限,否则git的hook脚本将没有办法执行操作)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
      $ cd /opt
      $ mkdir git
      $ cd git
      $ sudo git init --bare demosite.git
      # 文件夹权限
      $ sudo chown -R git:git demosite.git
      $ cd /demosite.git/hooks
      $ sudo vi post-receive
      写入以下内容
      #!/bin/sh
      GIT_WORK_TREE=/home/wwwroot/www.demosite.com git checkout -f
      # 写入权限
      $ chmod +x post-receive
      # 建立web目录,如果目录不存在,git不会创建目录的
      $ mkdir /home/wwwroot/www.demosite.com -p
      # web目录的文件夹权限
      $ sudo chown -R git:git /home/wwwroot/www.demosite.com

创建证书登录

收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
客户端用户证书生成请参考下文。

5. 3.在git客户端生成公钥、导入服务器、coding 、add、commit、push

生成公钥,导入服务器

    1
    2
    3
    4
    5
      $ ssh-keygen -t rsa -C "your_email@youremail.com"
      一路回车或者设置密码
      windows下回提示在哪里生成了密钥
      windows8下提示在C:\Users\username\.ssh 下,linux的话会在~/.ssh下
      进入目录,打开id_rsa.pub,复制里面的key,添加到上文提到的web服务器的/home/git/.ssh/authorized_keys里。

clone coding add commit push

    1
    2
    3
    4
    5
    6
    7
    8
      $ git clone git@serverip:/opt/git/demosite.git
      Cloning into 'demosite'...
      warning: You appear to have cloned an empty repository.
      $ cat 'hello world!' &gt; index.html
      $ git add index.html
      $ git commit -m'first commit'
      $ git remote add origin ssh://git@serverip:/opt/git/demosite.git
      $ git push origin master

这里使用公钥来做权限验证,运行git里的hook的脚本权限为git用户的权限,当然你也可以使用自己在server上的用户来进行git操作,前面对于git用户的操作和客户端公钥的生成则可以省略,在git上脚本的执行权限则是你登录用户的权限,相应的origin的设置应该为:

    1
      $ git remote add origin ssh://yourusername@serverip:/opt/git/demosite.git

这时候每次push将需要输入密码验证。

忽略某些文件
你可以在你的顶层工作目录中添加一个叫”.gitignore”的文件,来告诉Git系统要忽略 掉哪些文件,下面是文件内容的示例:
使”git add .” 和”git commit -a” 变得实际可用。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      # 以'#' 开始的行,被视为注释.
      # 忽略掉所有文件名是 foo.txt 的文件.
      foo.txt
      # 忽略所有生成的 html 文件,
      *.html
      # foo.html是手工维护的,所以例外.
      !foo.html
      # 忽略所有.o 和 .a文件.
      *.[oa]
      #Eclipse
      .settings/*
      .buildpath
      .project
赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址