配置服务器远程 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 自动部署已经全部配置好了。