配置服务器远程 Git
第一步
安装 git :
$ sudo apt-get install git
第二步
创建一个 git 用户,用来运行 git 服务:
$ sudo adduser git
第三步
创建证书登录,将自己电脑的公钥 ~/.ssh/id_rsa.pub 文件里的内容添加到服务器的 /home/git/.ssh/authorized_keys 文件中
Windows:C:\Users\XXX\.ssh\ XXX为用户名
id_rsa.pub具体的生成方法,可以参考这里。
第四步
初始化 Git 仓库,这里将其放在 /var/repo/blog.git 目录下的:
$ sudo mkdir /var/repo
$ cd /var/repo
$ sudo git init --bare blog.git
使用 --bare 参数,Git 会创建一个裸仓库,裸仓库没有工作区,只为共享而存在。
第五步
新建部署目录 /var/www/html 存储部署的内容
$ cd /var/
$ sudo mkdir www
$ cd www
$ sudo mkdir html
在push的时候可能会有权限问题,更改目录权限
$ cd /var/
$ sudo chmod -R 777 /www
$ cd www
$ sudo chmod -R 777 /html
第六步
配置 git hooks,关于 hooks 的详情内容可以参考这里。
这里使用 post-receive ,这个 hook 会在整个 git 操作过程完结以后被运行。
在 blog.git/hooks 目录下新建一个 post-receive 文件:
$ cd /var/repo/blog.git/hooks
$ sudo vim post-receive
在 post-receive 文件中写入如下内容:
$ git --work-tree=/var/www/html --git-dir=/var/repo/blog.git checkout -f
注意将 /var/www/html 换成自己的部署目录。
上面的 git 命令可在每次 push 之后,把博客最新状态更新到部署目录中,达到自动部署的目的。
为 post-receive 文件设置可执行权限:
chmod +x post-receive
第七步
设置 blog.git 目录的拥有者为 git 用户:
$ sudo chown -R git:git blog.git
第八步
禁用 git 用户的 shell 登录权限。
出于安全考虑,让 git 用户不能通过 shell 登录,通过编辑 /etc/passwd 实现,在 /etc/passwd 中找到类似下面的一行:
git:x:1001:1001:git,,,:/home/git:/bin/bash
将其改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
这样 git 用户可以通过 ssh 正常使用 git,但是无法登录 shell。
至此,服务器端的配置就完成了。
本地配置
配置 hexo 博客可以自动 deploy 到服务器上
修改 hexo 目录下的 _config.yml 文件,找到 [deploy] 条目,并修改为:
deploy:
type: git
repo: git@服务器地址:/var/repo/blog.git
branch: master
要注意切换成你自己的服务器地址,以及服务器端 git 仓库的目录。
至此,hexo 自动部署已经全部配置好了。