自动化部署第一序章之git私服

首先你需要有一台root权限的服务器, 我接下来的操作将依托centos操作系统操作

创建git裸仓库

上面看到的repo目录中的wx.git实际上是一个裸仓库,我们用下面的命令来生成这样一个仓库。

  1. cd /www/repo
  2. git init --bare wx.git

执行上面这些命令后,你就能看见下面说的目录,部署目录是你自己的项目目录

文件结构和目录

我自己的项目结构是这样的,每一个仓库对应一个项目,例如public/wx项目对应repo/wx.git仓
├── public
| └── wx // 这是我们的web代码部署目录
| |── index.php
│ ├── test2.ph
│ ├── test3.php
│ └── test.php
└── repo // 这个是我们的仓库目录
└── wx.git // 这个对应wx项目的仓库
├── branches
├── config
├── description
├── HEAD
├── hooks // post-receive钩子代码写在这里面
├── index
├── info
├── objects
└── refs

进入wx.git,你能看见hooks文件目录,内容如下:

├── applypatch-msg.sample
├── commit-msg.sample
├── post-commit.sample
├── post-receive
├── post-receive.sample
├── post-update.sample
├── pre-applypatch.sample
├── pre-commit.sample
├── prepare-commit-msg.sample
├── pre-rebase.sample
└── update.sample

我们将post-receive.sample复制一份post-receive,并且编写代码如下

  1. # 指定我的代码检出目录DIR=/www/public/wxgit --work-tree=${DIR} clean -fd
  2. # 直接强制检出git --work-tree=${DIR} checkout --force
  3. example
  4. # WORK_TREE='/www/wwwroot/wxgit.kevinfei.com/'
  5. # git --work-tree="${WORK_TREE}" reset --hard

创建git用户

接下来我们需要创建git用户组和用户,用于git服务的操作

用户基本信息:存储在 /etc/passwd 文件中;
用户密码信息:存储在 /etc/shadow 文件中;
用户群组基本信息:存储在 /etc/group 文件中;
用户群组信息信息:存储在 /etc/gshadow 文件中;
用户个人文件:主目录默认位于 /home/用户名,邮箱位于 /var/spool/mail/用户名。

如果你不清楚这些文件的用途,没关系,我们可以通过命令来执行创建用户操作

  1. #创建 git 用户组
  2. example : [root@localhost ~]# groupadd [选项] 组名
  3. [root@localhost ~]# groupadd git
  4. #创建新 git 用户
  5. example : [root@localhost ~]# useradd [选项] 组名
  6. [root@localhost ~]# useradd git
  7. [root@localhost ~]# passwd git
  8. #为 git 用户设置密码,至此 git 用户才算是创建成功
  9. #删除 git 用户
  10. [root@localhost ~]# userdel -r 用户名
  11. -r 选项表示在删除用户的同时删除用户的家目录。

赋权并创建证书登录

我们给git仓库进行git赋权,用户本地进行拉取和推送代码,并且我们需要先设置web代码部署目录.

  1. [root@localhost ~]# chown -R git:git /www/public/wxgit
  2. [root@localhost ~]# chown -R git:git /www/repo/

需要先在自己的本地创建SSH Key,私钥和公钥

  1. [root@localhost ~]# ssh-keygen -t rsa -C "user@email.com"

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,无需设置密码。
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

添加SSH Key

将本地生成的id_rsa.pub内容追加到git服务器git用户的~/.ssh/authorized_keys , 然后对验证文件进行赋权

  1. [root@localhost ~]# chmod 600 /home/git/.ssh/authorized_keys
  2. [root@localhost ~]# chmod 700 /home/git/.ssh

SSH服务端配置

  1. [root@localhost ~]# sudo vim /etc/ssh/sshd_config
  2. RSAAuthentication yes
  3. PubkeyAuthentication yes
  4. AuthorizedKeysFile /home/git/.ssh/authorized_keys

禁用git用户shell登录

出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:

  1. git:x:1001:1001:,,,:/home/git:/bin/bash
  2. 改为:git:x:1001:1001:,,,:/home/git:/usr/local/bin/git-shell

设置本地git用户配置

  1. git config --global user.name "username"
  2. git config --global user.email "user@email.com"

本地拉取

在本地电脑上,我们添加远程仓库

  1. git init
  2. git remote add origin git@xxx.xxx.xxx.xxx:/www/repo/wx.git

这个时候我们添加了远程仓库,那么我们来测试下push操作

  1. touch index.php
  2. git add .
  3. git commit -m 'test'
  4. git push origin master

可能会提示一个—set-upstream,直接执行下就好了。执行完之后我们登陆服务器,会发现文件已经出现在public/wx/index.php。

post-receive的另一种版本

  1. #!/bin/bash
  2. DEPLOY_PATH="/home/wwwroot/demo"
  3. echo "================================"
  4. echo "service begin pull code"
  5. unset GIT_DIR #这条命令很重要
  6. cd $DEPLOY_PATH
  7. git reset --hard
  8. git pull /home/git/demo.git
  9. time=`date`
  10. echo "service finished pull code at $time"
  11. echo "================================"

其中DEPLOY_PATH=”/home/wwwroot/demo” 的路径下写你的源码路径。

注意点

如果我们没有配置ssh免密码登陆的话,我们需要在push代码的时候输入密码。
如果我们添加的远程仓库不是root@xxx.xxx.xx.xx,例如是git@xx.xx.xx.xx,那么我们要确保 git用户对wx.git目录下的文件有777权限。
上面的操作过程中的文件路径要注意,别做愣复制的小白伸手党。

新增仓库

需要登陆远程服务器进行初始化repo_name.git仓库。
需要手动创建public/repo_name文件夹,并且修改权限为777。
需要重新编写hooks/post-recieve文件,修改里面的DIR路径为public/repo_name。


点赞 ( 0 )

8 条评论

  1. air ticket

    This is a topic that's near to my heart... Many thanks! Where are your contact details though?

  2. lowest airfares possible

    I am truly thankful to the holder of this web page who has shared this fantastic paragraph at at this place.

  3. find cheap flights

    I am regular visitor, how are you everybody? This article posted at this web page is really fastidious.

  4. how to book cheap flights

    I every time spent my half an hour to read this web site's articles or reviews all the time along with a cup of coffee.

  5. last minute flights

    We're a group of volunteers and opening a brand new scheme in our community. Your website offered us with useful information to work on. You've done an impressive process and our whole neighborhood will be thankful to you.

  6. gamefly

    That is a very good tip especially to those new to the blogosphere. Short but very precise info… Thanks for sharing this one. A must read article!

  7. Leandro

    whoah this weblog is magnificent i like reading your posts. Keep up the great work! You already know, lots of persons are searching round for this info, you could help them greatly.

  8. gamefly

    I enjoy, lead to I found just what I was having a look for. You've ended my four day long hunt! God Bless you man. Have a nice day. Bye

发表评论

人生在世,错别字在所难免,无需纠正。

插入图片
s
返回顶部