在Ubuntu 20.04上安装Hexo博客

在Ubuntu 20.04上安装Hexo博客

Hexo 是一个基于 Node.js 的静态博客平台。借助于 hexo ,我们可以用 Markdown 编辑器撰写文章。它借助预先构建的主题将博客文章转换为静态 HTML 文件。hexo 与其他博客平台不同,因为它使用静态文件而不是动态加载。所以,在这里我们将介绍如何在 Ubuntu 20.04 系统上安装 hexo 。

0x00 升级系统软件

更新系统以安装更新:

1
2
sudo apt update -y
sudo apt upgrade -y

0x01 安装Node.js 和 Hexo

使用下面的命令在 Ubuntu 20.04 上安装 node.js 。可以打开这个网页安装最新版nodesource

1
2
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt install nodejs

验证安装的版本:

1
node --version

执行以下命令以在 Ubuntu 20.04 上安装 Hexo

1
sudo npm install hexo-cli -g

安装后,创建一个新目录来安装 Hexo

1
sudo mkdir -p /var/www/hexo

给它适当的权限:

1
2
sudo chown -R $USER:$USER /var/www/hexo
sudo chmod -R 755 /var/www/hexo

现在切换到 hexo 目录并初始化它。

1
2
cd /var/www/hexo 
hexo init

最后,执行下面的命令安装 hexo

1
npm install

0x02 安装必要的插件

对我来说,安装一个加密的插件是十分必要的。注意这个插件必须使用HTTPS协议,否则输入密码后按回车会没有反应。 参考

1
cd /var/www/hexo  && npm install --save hexo-blog-encrypt

0x03 安装Nginx和SSL证书

执行下面命令来安装 nginx:

1
sudo apt install nginx

编辑 hexo 配置文件

1
sudo nano /etc/nginx/sites-available/hexo.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
# 主服务器配置,处理 HTTPS 流量
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name antitopquark.website;

root /var/www/hexo/public;
index index.html index.htm;

ssl_certificate /etc/letsencrypt/live/antitopquark.website/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/antitopquark.website/privkey.pem;

ssl_protocols TLSv1.2 TLSv1.3;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # 适当调整会话缓存大小
ssl_session_tickets off;

ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;

# 安全头配置
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

location / {
try_files $uri $uri/ =404;
}

error_log /var/log/nginx/hexo_error.log;
access_log /var/log/nginx/hexo_access.log;
}

# 将 HTTP 流量重定向到 HTTPS
server {
listen 80;
listen [::]:80;
server_name antitopquark.website;

if ($host = antitopquark.website) {
return 301 https://$host$request_uri;
}

return 404; # 如果主机名不匹配,则直接返回404
}

然后保存并退出文件。创建配置文件的软链接:

1
sudo ln -s /etc/nginx/sites-available/hexo.conf /etc/nginx/sites-enabled/

现在,通过下面的命令安装 certbot :

1
sudo apt install certbot

点击以下命令生成证书,然后创建 DHParams 证书。

1
sudo certbot certonly --standalone -d xxx.com

保存文件并验证语法:

1
sudo nginx -t

重启nginx:

1
sudo systemctl restart nginx

在检验nginx语法的时候遇到了报错:nginx: [emerg] BIO_new_file(“/etc/ssl/certs/dhparam.pem”) failed (SSL: error:80000002:system library::No such file or directory:calling fopen(/etc/ssl/certs/dhparam.pem, r) error:10000080:BIO routines::no such file)

我去了对应文件夹看了一下,文件夹是存在的,也就是dhparam密钥不在。可以通过如下的命令来生成:

1
root@/etc/ssl/certs# openssl dhparam -out dhparam.pem 2048

0x04 自动拉取和部署

在 Ubuntu 上编写一个定时执行 git pull 命令的脚本是相对简单的。你可以使用 Linux 中内置的 cron 任务来完成这个任务。以下是一种方法:

创建一个新的 shell 脚本文件,比如 git_pull.sh

1
touch git_pull.sh

编辑该文件,添加以下内容:

1
2
3
4
5
6
7
#!/bin/bash

# 进入你的 Git 仓库目录
cd /path/to/your/git/repository

# 执行 git pull 命令
git pull && hexo -c && hexo -g

确保将 /path/to/your/git/repository 替换为你实际的 Git 仓库路径。

保存并退出编辑器。授予脚本执行权限:

1
chmod +x git_pull.sh

现在,你可以使用 cron 来设置定时任务。打开 crontab 编辑器:

1
crontab -e

在编辑器中,添加一行来调度你的脚本执行时间。例如,如果你想每小时执行一次 git pull,你可以添加以下内容:

1
0 * * * * /path/to/git_pull.sh >/dev/null 2>&1

这个设置会在每小时的第 0 分钟执行 git_pull.sh 脚本。确保将 /path/to/git_pull.sh 替换为你实际的脚本路径。

保存并退出编辑器。cron 会在你指定的时间自动运行脚本,然后执行 git pull 命令。