Hexo 迁移至云服务的记录

这篇文章不是专门分享服务器搭建、CentOS 系统等等,只是记录一下迁移 Hexo 的过程~~~

服务器

腾讯云 CentOS 7.2 64位 个人云服务器 用于测着玩儿

标准型SA2 | SA2.SMALL1 | 北京 | 1核| 1GB | 1Mbps

CentOS

用到的文件命令:

  1. 在当前路径创建一级目录
1
mkdir test 
  1. 在当前路径创建多级目录
1
mkdir -p mytest/test1/test1_1 
  1. 在创建目录的同时给新建的目录赋权限
1
mkdir -m 777 testmod 
  1. 修改一个目录的权限
1
chmod 700 -R test

PS:参考自

Nginx

  1. 安装

1
yum install nginx
  1. 测试 nginx 配置文件

1
2
3
4
5
nginx -t

#结果ok,会打印如下
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
  1. 配置相关

查看/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
46
47
48
49
50
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
worker_connections 1024;
}

http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;

include /etc/nginx/mime.types;
default_type application/octet-stream;

# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;

server {
listen 80;
listen [::]:80;
server_name _;
root /usr/share/nginx/html;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

error_page 404 /404.html;
location = /404.html {
}
"/etc/nginx/nginx.conf" 84L, 2336C 1,1 Top
  1. 启动、停止、查看状态、开机自启动

1
2
3
4
5
6
systemctl start nginx.service
systemctl stop nginx.service
systemctl reload nginx.service
systemctl status nginx.service
service nginx start
systemctl enable nginx

​ 启动以后类似下面的输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: active (running) since Wed 2021-06-30 21:25:38 CST; 4s ago
Process: 2231 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Process: 2228 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
Process: 2227 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
Main PID: 2233 (nginx)
CGroup: /system.slice/nginx.service
├─2233 nginx: master process /usr/sbin/nginx
└─2235 nginx: worker process

Jun 30 21:25:38 VM-0-13-centos systemd[1]: Starting The nginx HTTP and reverse proxy server...
Jun 30 21:25:38 VM-0-13-centos nginx[2228]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Jun 30 21:25:38 VM-0-13-centos nginx[2228]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Jun 30 21:25:38 VM-0-13-centos systemd[1]: Started The nginx HTTP and reverse proxy server.

Hexo 个人博客部署到 CentOS 个人服务器

  1. 安装 Git Nginx

升级 CentOS 所有包,包括系统版本内核升级

1
2
yum -y update
yum install -y git nginx
  1. Nginx 配置

  • 创建文件目录, 用于博客站点文件存放, 并更改目录读写权限
1
2
mkdir -p /home/blog/www/hexo
chmod -R 755 /home/blog/www/hexo
  • 配置 Nginx 服务器
1
vim /etc/nginx/nginx.conf

通过 vim 查找 listen 80 找到如下代码, 并修改

1
2
3
4
5
6
7
8
......
server {
listen 80; # 默认监听80端口,先不用管
listen [::]:80;
server_name www.xxx.com; # 填写个人域名,有的话就写,没有也可以保持 _
root /home/blog/www/hexo;
}
......
  • 添加测试首页
1
vim /home/blog/www/hexo/index.html #路径就是自己新建的博客路径

测试页的内容可以简单类似这样:

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="UTF-8">
</head>
<body>
<p>Nginx Bazinga!</p>
</body>
</html>

访问服务的 ip 或者 域名,能看到 Nginx Bazinga! 就表示 Nginx 基本成功了。

  1. 下载 Nodejs

Nodejs 我也不是很懂,通过 yum 安装的并不是最新版本,网上有些资源说是要指定 源 ?

1
2
3
4
yum install -y nodejs

# 可以查看版本号的话,表示安装成功了。
node -v
  1. git

  • 首先要安装 Git,前面我们已经安装过了~

    新建一个存放 hexo git 内容的目录

1
mkdir -p /home/blog/git
  • 初始化为 git 仓库
1
2
cd /home/blog/git
git init --bare ATommyGirl.git
  • 创建 Git 钩子 (hook), 用于指定 Git 的源代码 和 Git 配置文件
1
2
3
4
5
vim /home/blog/git/ATommyGirl.git/hooks/post-receive

# 钩子内容如下
#!/bin/bash
git --work-tree=/home/blog/www/hexo --git-dir=/home/blog/git/ATommyGirl.git checkout -f
  • 保存并退出后, 给该文件添加可执行权限
1
chmod +x /home/blog/git/ATommyGirl.git/hooks/post-receive
  1. 本地 hexo 配置

本地如何搭建 hexo 网上资料非常多。基于我们上面的操作,在本地博客文件夹根目录中的 _config.yml 配置文件增加一个 deploy 就可以了。

1
2
3
4
5
deploy:
type: git
repo: root@your_server_ip:gitpath/git #用户名@域名或IP 地址:自己的git路径
branch: master
message:

我有多个提交的地址:

PPS:参考自01参考自02

Nginx 部署 SSL 证书

  1. 购买、申请 SSL 证书,我用的是腾讯一年免费的证书。
  2. 不同的服务器需要不同格式的公私钥文件,腾讯云自动帮忙生成了,根据部署类型使用对应的文件,我的是 Nginx:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.
├── Apache
│   ├── 1_root_bundle.crt
│   ├── 2_tommygirl.cn.crt
│   └── 3_tommygirl.cn.key
├── IIS
│   └── tommygirl.cn.pfx
├── Nginx
│   ├── 1_tommygirl.cn_bundle.crt
│   └── 2_tommygirl.cn.key
├── Tomcat
│   └── tommygirl.cn.jks
├── tommygirl.cn.csr
├── tommygirl.cn.key
└── tommygirl.cn.pem
  1. 我在 /etc/nginx/ 新建了两个文件夹 servers certs 来放配置信息和证书文件,只是不知道这样是否符合”国际惯例”😂
1
2
mkdir /etc/nginx/servers
mkdir /etc/nginx/certs
  1. 从本地把证书拷贝到云服务器上
1
2
scp -P 22 1_tommygirl.cn_bundle.crt username@host:/etc/nginx/certs
scp -P 22 2_tommygirl.cn.key username@host:/etc/nginx/certs
  1. 添加 ssl 配置
1
vim /etc/nginx/servers/tommygirl.cn #文件名自定义
1
2
3
4
5
6
7
8
9
10
11
12
13
14
server {
listen 443 ssl;
server_name tommygirl.cn;
ssl_certificate certs/1_tommygirl.cn_bundle.crt;
ssl_certificate_key certs/2_tommygirl.cn.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
root /home/blog/www/hexo;
index index.html index.htm;
}
}

这个时候应该可以通过 https 来访问网站了。

  1. http 自动转换 https,也是修改 Nginx 的配置,添加一个重定向,rewrite 还有其他的一些参数……
1
2
3
4
5
6
server {
listen 80;
listen [::]:80;
server_name tommygirl.cn;
rewrite ^(.*)$ https://tommygirl.cn;
}