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

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

创建git裸仓库

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

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

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

文件结构和目录

我自己的项目结构是这样的,每一个仓库对应一个项目,例如public/wx项目对应repo/wx.git仓

  1. ├── public
  2. | └── wx // 这是我们的web代码部署目录
  3. | |── index.php
  4. ├── test2.ph
  5. ├── test3.php
  6. └── test.php
  7. └── repo // 这个是我们的仓库目录
  8. └── wx.git // 这个对应wx项目的仓库
  9. ├── branches
  10. ├── config
  11. ├── description
  12. ├── HEAD
  13. ├── hooks // post-receive钩子代码写在这里面
  14. ├── index
  15. ├── info
  16. ├── objects
  17. └── refs

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

  1. ├── applypatch-msg.sample
  2. ├── commit-msg.sample
  3. ├── post-commit.sample
  4. ├── post-receive
  5. ├── post-receive.sample
  6. ├── post-update.sample
  7. ├── pre-applypatch.sample
  8. ├── pre-commit.sample
  9. ├── prepare-commit-msg.sample
  10. ├── pre-rebase.sample
  11. └── 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 ~]# chown 600 /home/git/.ssh/authorized_keys
  2. [root@localhost ~]# chown 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 )

0 条评论

发表评论

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

插入图片
s
返回顶部