疫情发生之后,阿里云开启了一个免费领取学生机VPS的活动,可以免费使用半年的VPS。我有幸领到一个,然后想想不能晾在那里,机器性能又太差几乎啥也干不了,所以打算把博客迁回来,这样就没有延迟了。
流程
- 服务端搭建
- 客户端配置更改
- 发布
阿里云服务端配置
领取到机器之后,首先选择机器的操作系统,我装的是ubuntu16,因为搭建的是web应用,所以需要去安全组里面打开80端口。
服务端首先我们需要装两个软件:Git和Nginx,用来保存博客和转发代理。
git安装
1 | sudo apt-get install git |
Nginx安装
1 | sudo apt-get install nginx |
安装完后分别输入git —version、nginx -v,出现相应版本号即为安装成功
安装好这两项之后,我们需要新建一个专门推送更新博客的用户,然后配置对应的博客存放文件夹和web访问文件夹。
新建推送用户
1 | useradd git |
找到1
2## Allow root to run any commands anywhere
root ALL=(ALL) ALL
在下面添加一行1
git ALL=(ALL) ALL
保存退出后改回权限:1
chmod 400 /etc/sudoers
然后给新加的用户git设置权限,编辑/etc/passwd将:git:x:1003:1003:,,,:/home/git:/bin/bash 改成:git:x:1003:1003:,,,:/home/git:/usr/bin/git-shell 这样git就只能使用git-shell而不能使用bash。
git服务器打开RSA认证1
vim /etc/ssh/sshd_config
修改为以下权限1
2
3RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
设置ssh免密证书
如果开发的电脑是windows系统,找到user/.ssh文件下的id_rsa.pub文件,拷贝其中公钥,粘贴到authorized_keys
可以执行ssh命令测试是否可以免密登录
创建远程仓库
首先在新建一个repo文件夹做仓库,设置权限1
2
3sudo mkdir /var/repo/
sudo chown -R $USER:$USER /var/repo/
sudo chmod -R 755 /var/repo/
然后新建blog仓库1
2cd /var/repo
git init --bare hexoBlog.git
配置Nginx托管目录
新建一个文件夹用于托管nginx的转发,并设置权限。1
2
3sudo mkdir -p /var/www/hexo
sudo chown -R $USER:$USER /var/www/hexo
sudo chmod -R 755 /var/www/hexo
然后配置nginx1
2#ubuntu配置命令是这个,centOS不一样
sudo vim /etc/nginx/sites-available/default
找到root配置项,改为/var/www/hexo,只修改root行就可以了1
2
3
4
5
6
7
8
9
10
11
12
13server {
listen 80 default_server; listen [::]:80 default_server ipv6only=on;
root html;
index index.html index.htm;
}
#改为
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /var/www/hexo;
index index.html index.htm;
}
保存退出,重启 Nginx 服务,使改动生效1
2# ubuntu的命令,其他系统也不一样
sudo /etc/init.d/nginx restart
可以测试ip访问一下,如果配置前能访问配置后无法访问说明修改成功了。
创建Git钩子
钩子,就是用来触发关键事件的工具。当我们提交的时候,git钩子可以自动的将我们提交的博客转输到nginx的文件夹下,这样就可以简化很多工作了。
1 | sudo vim /var/repo/hexoBlog.git/hooks/post-receive |
在文件中添加以下内容1
2#!/bin/bash
git --work-tree=/var/www/hexo --git-dir=/var/repo/hexoBlog.git checkout -f
保存退出,并修改权限使其成为可执行文件1
chmod +x /var/repo/hexoBlog.git/hooks/post-receive
这样子服务端的配置就完成了,我在配置这里的部分花费了好多时间。
客户端(本地)配置
因为在本地已经有hexo的博客源码,我只需要修改配置文件_config.yml就可以直接推送到VPS。找到deploy部分,修改repo链接。
1 | deploy: |
修改完成后,测试部署一下1
hexo g && hexo d
然后http访问一下就完成了
问题
主要问题是客户端无法deploy到服务端,钩子没有自动触发两个问题,下面说一下解决方案。
无法deploy服务端
爆出错误类似22端口未打开,和Error: spawn git ENOENT等等。两个步骤去解决,本地下载一个git程序,使用git bash去推送。然后再重新设置一下服务端的/var/repo/hexoBlog.git文件权限。可能是推送的文件地址无法git用户无法访问导致。
git钩子没有触发
推送成功后,浏览器还是无法访问。这种时候钩子触发失败,也是文件权限的问题,重新设置一下/var/www/hexo文件夹的访问权限,让钩子可以访问文件夹。
参考博客
https://www.jianshu.com/p/271a1649a853
https://www.jianshu.com/p/e1ccd49b4e5d
https://www.jianshu.com/p/86e80be14d8f
https://blog.csdn.net/qq_35561857/article/details/81590953
https://www.jianshu.com/p/70bf58c48010
对于客户端的配置我基本没写,因为我本地之前已经配置好了。要是需要配置本地可以看一下参考博客。