Hexo 博客转移到阿里云

之前小站一直托管在 Github Pages 中,然而国内访问实在太慢,百度也无法收录。正好趁着疫情,在阿里云撸了一台轻量应用服务器。记录下转移过程。

这里服务器选择的系统是 CentOS 7.3

配置过程大致如下:搭建 Git 私库 –> 搭建 Nginx 服务器 –> 启用 https 访问

搭建 Git 私有库

博客是由 Hexo 在本地生成然后通过 Git 部署到服务器端的,所以要在服务器端搭建一个 Git 私有库

安装 Git

1
$ yum install -y git

创建用户并配置仓库

1
2
3
4
5
6
7
8
9
useradd git
passwd git # 设置密码
su git # 这步很重要,不切换用户后面会很麻烦

cd /home/git/
mkdir -p projects/blog # 项目存在的真实目录
mkdir repos && cd repos
git init --bare blog.git # 创建一个裸露的仓库
cd blog.git/hooks

vi post-receive,创建 hook 钩子函数,输入内容如下

1
2
#!/bin/sh
git --work-tree=/home/git/projects/blog --git-dir=/home/git/repos/blog.git checkout -f

添加完毕后修改权限

1
2
3
chmod +x post-receive
exit # 退出到 root 登录
chown -R git:git /home/git/repos/blog.git # 添加权限

测试 Git 仓库是否可用

在本地电脑 clone 远程仓库

1
git clone git@server_ip:/home/git/repos/blog.git

如提示

1
2
git@server_ip: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
fatal: 无法读取远程仓库

则需要在服务器端打开 ssh 允许密码登录,修改 /etc/ssh/sshd_configPasswordAuthentication 项为 yes

建立 ssh 信任关系

在本地电脑

1
2
ssh-copy-id -i ~/.ssh/id_rsa.pub git@server_ip
ssh git@server_ip # 测试能否登录

禁用 Git 用户的 shell 登录权限

为了安全起见禁用 git 用户的 shell 登录权限,从而只能用 git clone,git push 等登录

1
2
3
4
5
cat /etc/shells # 查看 git-shell 是否在登录方式里面
which git-shell # 查看是否安装

# 添加上步显示出来的路径,通常是 /usr/bin/git-shell
vi /etc/shells

修改 /etc/passwd 中的权限,只需将原来的 /bin/shell 修改为 /usr/bin/git-shell

1
2
- git:x:1000:1000::/home/git:/bin/shell
+ git:x:1000:1000:,,,:/home/git:/usr/bin/git-shell

Hexo 部署到私有库

修改博客根目录_config.yml 文件中 deploy 设置

_config.yml
1
2
3
4
deploy:
- type: git
repository: git@xxx.xxx.xxx.xxx:/home/git/repos/blog.git
branch: master

在博客根目录运行 hexo g -d 部署到阿里云服务器私有库

搭建 Nginx 服务器

安装 Nginx

1
yum -y install nginx

启动 Nginx,浏览器访问服务器 IP

1
nginx

成功!

配置 Nginx

本站全站使用 https 访问

1
nginx -s stop  # 停止 Nginx

将 SSL 证书和私钥放在 /home/git/ 目录下

修改 /etc/nginx/nginx.conf server 部分为如下配置

/etc/nginx/nginx.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
server {
# 重定向 http 请求
listen 80;
server_name morooi.com;
rewrite ^ https://$http_host$request_uri? permanent;
}

# Settings for a TLS enabled server.
server {
listen 443 ssl http2;
# listen [::]:443 ssl http2;
server_name morooi.com;
root /home/git/projects/blog;

ssl_certificate "/home/git/morooi.com.crt";
ssl_certificate_key "/home/git/morooi.com.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

# HSTS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains;preload" always;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

#减少点击劫持
add_header X-Frame-Options DENY;
#禁止服务器自动解析资源类型
add_header X-Content-Type-Options nosniff;
#防XSS攻击
add_header X-Xss-Protection 1;

location / {
}

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

检查配置是否正确 nginx -t

1
2
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

通过检测~

重载配置 nginx -s reload

访问成功!


主要参考:

  1. 带你跳过各种坑,一次性把 Hexo 博客部署到自己的服务器
  2. Nginx 配置 HTTPS 服务器

Hexo 博客转移到阿里云

https://morooi.com/2020/toaliyun/

作者

SJ Zhou

发布于

2020-02-26

更新于

2022-08-16

许可协议

评论