Hexo博客实现自动部署阿里云服务器
准备工作
- 搭建Nginx服务器:
- 搭建Git环境:
nginx配置
在/etc/nginx/vhosts
下,新建blog.conf
:
server{
listen 80;
root /usr/share/nginx/blog;
server_name aliyun-ip*****;
index index.html index.htm index.php default.html default.htm default.php;
location ~ .*\.(ico|gif|jpg|jpeg|png|bmp|swf)$
{
access_log off;
expires 1d;
}
location ~ .*\.(js|css|txt|xml)?$
{
access_log off;
expires 12h;
}
location /{
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/blog.access.log combined;
error_log /var/log/nginx/blog.error.log warn;
}
chown -R git:gitgroup blog
GIT账户/组
接下来我们 创建一个git用户组和用户,用来运行git服务:
groupadd gitgroup
useradd git -g gitgroup
passwd git
''''''
禁用shell登录
为安全考虑,git用户不允许登录shell,从而只能用 git clone,git push 等登录。
cat /etc/shells // 查看 git-shell 是否在登录方式里面
which git-shell // 查看是否安装
vi /etc/shells
添加上2步显示出来的路径,通常在 /usr/bin/git-shell
修改/etc/passwd
中的权限:
vi /etc/passwd
- git:x:500:500::/home/git:/bin/bash
+ git:x:500:500::/home/git:/usr/local/git/bin/git-shell
这样用户用git账户ssh连接后只能使用git命令了.
各种配置配完再禁
创建证书登录
首先在用户本地主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa
和id_rsa.pub
这两个文件,如果已经有了,可直接跳到下一步。如果没有:
ssh-keygen -t rsa -C "aliyun_test_git_id_rsa" -f aliyun_test_git_id_rsa
把本地生成的公钥aliyun_test_git_id_rsa.pub,导入到远程服务器/home/git/.ssh/authorized_keys
文件里,一行一个。
远程服务器如果没有该文件创建它:
su git # 这步很重要,不切换用户后面会很麻烦
cd /home/git/
mkdir .ssh
chmod 755 .ssh
touch .ssh/authorized_keys
chmod 644 .ssh/authorized_keys
把本地公钥复制到远程服务器(确保相应的权限
):
cat aliyun_test_git_id_rsa.pub >> authorized_keys
# 确保权限
# chmod 700 ~/.ssh -R;
# chmod 600 ~/.ssh/authorized_keys
打开 RSA 认证
然后就可以去Git服务器上添加你的公钥用来验证你的信息了。在Git服务器上首先需要将/etc/ssh/sshd_config
中将RSA认证打开,即:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
保存并重启 sshd 服务:
/etc/rc.d/init.d/sshd restart
设置用户信息
git config --global user.name "leeze"
git config --global user.email "leeze0216@163.com"
git config --global core.autocrlf false // 禁用自动转换,这个不设置后面上传时会出现警告,如下
初始化Git仓库
su git # 这步很重要,不切换用户后面会很麻烦
首先我们选定一个目录作为Git仓库:
cd /home/git
mkdir gitrepos
# chown git:gitgroup gitrepo/
在服务器初始化一个远程 Git 裸仓库 (git init –bare)
裸仓库与 git init 初使化的仓库不太一样,裸仓库其实相当于通过克隆来的仓库里的.git文件夹,整个裸仓库中只有git索引(index),不包含工作目录。要实现 Push to Deploy,首先我们需要一个裸仓库,进入/home/USER/repos/,创建如下:
cd /home/git/gitrepos
git init --bare blog-bare.git # Git 裸仓库
# chown -R git:gitgroup blog-bare.git
测试git仓库
另找空白文件夹,执行:
git clone git@server_ip:/home/git/gitrepos/blog-bare.git
如果能把空仓库拉下来,就说明 git 仓库搭建成功了
配置 Git Hook
- post-update
- post-receive
将目录切换至 /home/USER/repos/xxx-bare.git/hooks
,用 cp post-update.sample post-update
复制并重命名文件后 vim post-update
修改,增加执行脚本:
#!/bin/sh
unset GIT_DIR
DIR_ONE=/usr/share/nginx/blog/ #此目录为服务器页面展示目录
cd $DIR_ONE
git init
git remote add origin /home/git/gitrepos/blog-bare.git
git clean -df
git pull origin master
注意: 一定要unset GIT_DIR清除变量, 不然会引起remote: fatal: Not a git repository: ‘.’错误。
post-update
添加执行权限:
chmod +x post-update
将目录切换至 /home/USER/repos/xxx-bare.git/hooks
,用 cp post-receive.sample post-receive
复制并重命名文件后 vim post-receive
修改,增加执行脚本:
#!/bin/sh
git --work-tree=/usr/share/nginx/blog/ --git-dir=/home/git/gitrepos/blog-bare.git checkout -f
post-receive
添加执行权限:
chmod +x post-receive
本地配置
修改Hexo博客根目录下_config.yml
文件
deploy:
- type: git
repo: git@aliyun-ip:/home/git/gitrepos/blog-bare.git
branch: master
hexo clean hexo g hexo d
后,网站更新了。