说明

云服务器:阿里云
系统:Ubuntu 22.04 64位 UEFI版
终端:腾讯云 OrcaTerm

温馨提示

如果按步骤来,出现了问题,有可能是版本不够或不兼容等问题,这种情况下建议直接cv给ChatGPT。照理说我的步骤应该没大问题,如果还是不行,可以换个教程噢![送花花]

环境安装

更新软件包列表

1
sudo apt update

node.js安装

1
sudo apt install nodejs

确认 Node.js 是否已成功安装以及版本号

1
node -v

安装npm

1
sudo apt install npm

确认 npm 是否已成功安装以及版本号

1
npm -v

:::details 若想升级nodejs,请戳这里

如果你的阿里云服务器上已经安装了 nvm(Node Version Manager),你可以使用 nvm 来方便地管理 Node.js 的版本。如果没有安装 nvm,你可以按照以下步骤进行安装:

1
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.38.0/install.sh | bash

确认 nvm 命令已经生效后,可以使用以下命令安装新版本的 Node.js(例如,安装 Node.js 14)

1
2
3
4
5
6
nvm install 14

如果无法使用nvm命令,建议手动执行以下命令来启用 nvm
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # 这行命令加载 nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # 这行命令加载 nvm 的自动补全功能

安装完成后,使用以下命令切换到新安装的 Node.js 版本:

1
nvm use 14

使用以下命令验证 Node.js 是否成功升级到指定版本:

1
node -v

如果你有 Node.js 项目,可能需要重新安装项目的依赖包:

1
npm install

:::

git安装

1
sudo apt install git

确认 Git 是否已成功安装以及版本号

1
git --version

Nginx安装

1
sudo apt install nginx

启动 Nginx 服务

1
sudo systemctl start nginx

检查 Nginx 服务状态

1
sudo systemctl status nginx

hexo安装

1
npm install hexo

如果你只是想在当前项目中使用 Hexo,并且不需要在其他项目中使用 Hexo,那么只执行第一个命令即可。这样可以避免全局安装的复杂性和潜在的冲突问题。否则执行下一个命令

1
sudo npm install -g hexo-cli

验证

1
hexo

配置git环境

创建git用户

1
adduser git

切换到git用户

1
su git

ssh连接

创建.ssh目录

1
mkdir ~/.ssh && chmod 700 ~/.ssh

创建公钥保存文件

1
touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys

保存公钥
使用 Vim 编辑器打开 authorized_keys 文件

1
vim ~/.ssh/authorized_keys

将ssh连接的公钥复制到authorized_keys文件中就可以通过ssh 连接git用户了

:::details 若不会生成公钥的请看这里

在用户主目录下,查询是否存在“.ssh”文件

  • 如果有,再看文件下有没有id_rsa和id_rsa.pub这两个文件,如果也有,可直接到下一步。
  • 如果没有,创建.ssh文件即可
    桌面右键打开git bash
    输入以下命令
    1
    ssh-keygen -t rsa -C "youxiang@qq.com"
    引号内是github注册使用的邮箱(不知道其他邮箱有没有影响,我的公钥一开始是用在github上的)
    全部回车即可
    再查看.ssh时,已经有“id_rsa”,“id_rsa.pub”文件。(id_rsa是私钥,不能泄露;id_rsa.pub是公钥,可以公开。)

:::

将id_rsa.pub里的复制到authorized_keys文件即可
vim基础操作在这里不多赘述

创建git仓库

创建一个名为blog的git仓库(名字可自取)

1
2
3
mkdir /var/repo
cd /var/repo
git init --bare blog.git

配置git-hooks

即配置git推送后执行的脚本
进入文件

1
vim /var/repo/blog.git/hooks/post-receive

添加

1
2
#!/bin/sh
git --work-tree=/var/www/hexo --git-dir=/var/repo/blog.git checkout -f

设置权限

1
chmod +x /var/repo/blog.git/hooks/post-receive

改变 blog.git 目录的拥有者为 git 用户

1
chown -R git:git blog.git

创建静态文件目录

1
2
3
mkdir /var/www/hexo
chown -R git:git /var/www/hexo
chmod -R 755 /var/www/hexo

命令说明

  • 创建静态文件目录
  • 链接git仓库
  • 配置权限
    这样git仓库更新便会自动同步到hexo目录下

限制git用户的shell

上面创建的git用户可以通过ssh连接,进行任何操作。为了安全性,我们需要将git用户的活动限制在与Git相关的范围

1
sudo vim /etc/shells

在最后一行添加

1
/usr/bin/git-shell

现在你可以使用 chsh 命令修改任一系统用户的shell权限了

1
sudo chsh git

然后在Login Shell [/bin/bash]: 后输入git-shell路径/usr/bin/git-shell
这样,git用户就只能使用ssh连接对Git仓库进行推送和拉取操作,而不能登录机器并取得普通shell命令

测试

1
git clone git@服务器ip:/var/repo/blog.git

成功即代表配置正确

hexo配置

1
2
3
4
deploy:
type: git
repository: git@ip:/var/repo/blog.git
branch: master

nginx配置

为了能让浏览器能直接访问静态页面,需要使用nginx将端口或域名指向hexo静态文件目录
温馨提示:不同版本的nginx或系统,nginx的配置文件不一定相同,根据具体情况来修改配置

1
vim /etc/nginx/sites-available/default
1
2
3
4
5
6
7
8
9
10
11
server {
listen 80;
listen [::]:80;
root /var/www/hexo; # 修改的地方
server_name laoyuyu.me www.laoyuyu.me; # 如果需要改域名访问,修改server_name 为域名便可
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
}

重启服务

1
service nginx restart 

部署

直接在你的blog文件中右键打开git bash

1
2
3
hexo clean
hexo g
hexo d

自己遇到的一些错误

遇到

1
2
3
4
5
6
7
 ! [remote rejected] HEAD -> master (unpacker error)
error: failed to push some refs to '47.120.10.130:/var/repo/blog.git'
FATAL Something's wrong. Maybe you can find the solution here: https://hexo.io/docs/troubleshooting.html
Error: Spawn failed
at ChildProcess.<anonymous> (C:\Users\zhaoy\Desktop\blog-aurora\node_modules\hexo-util\lib\spawn.js:51:21)
at ChildProcess.emit (node:events:517:28)
at cp.emit (C:\Users\zhaoy\Desktop\blog-aurora\node_modules\cross-spawn\lib\enoent.js:34:29)

在终端输入

1
chown -R git:git /var/repo/blog.git

遇到

我也没有很好的解决方法,应该权限之类的问题,有可能你之前命令输错或者漏步骤了。
实在不行可以重置服务器,换个教程,说不定就行了。

备案说明

你肯定不想让朋友或其他人通过长且复杂的ID来访问你的博客吧。那你就需要一个域名,并对其备案。
而这些都可以在阿里云上完成
具体步骤不详细说明,以下仅提供主要步骤

  • 选择合适的域名,并购买
  • 把域名解析到自己的服务器上
  • nginx添加自己的域名
  • 备案(记得暂停域名的解析)

配置https

配置https可以让你的博客更安全

阿里云,腾讯云的证书都可以,这里以阿里云为示例

放行端口

千万千万要放行443端口,不然你怎么配都没有用,除非你把证书配在了已放行的端口上

证书获取及上传

创建证书->证书申请

然后默认即可,注意证书绑定域名填自己的域名

下一步是DNS验证,如果域名在自己账号下,直接自动DNS验证即可,否则选择手动DNS验证,具体可查看申请阿里云域名SSL证书具体步骤(图文教程)-阿里云开发者社区

拿到证书后,点击下载

会有两个文件.pem.key,将其上传到服务器/etc/nginx/目录下,当然这是默认位置,你可自由选择上传位置。这里推荐使用Xftp

具体教程在这使用Xftp上传文件到Linux服务器_用xftp上传文件如何覆盖之前的文件-CSDN博客

配置Nginx

这里我们选择在nginx.conf中导入其他文件夹中的.conf配置文件,否则如果配置都写在nginx.conf中会显得十分拥挤

在nginx文件目录下的conf.d文件夹中新建一个配置文件,可以叫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
server {
#SSL 默认访问端口号为 443
listen 443 ssl;
#请填写绑定证书的域名
server_name www.example.com;
#请填写证书文件的相对路径或绝对路径
ssl_certificate /etc/nginx/example.com.pem;
#请填写私钥文件的相对路径或绝对路径
ssl_certificate_key /etc/nginx/example.com.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1.2 TLSv1.3;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
#例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。
root /var/www/hexo;
index index.html index.htm;
# 此处的 @router 实际上是引用下面的转发,否则在 Vue 路由刷新时可能会抛出 404
try_files $uri $uri/ @router;
}

# 由于路由的资源不一定是真实的路径,无法找到具体文件
# 所以需要将请求重写到 index.html 中,然后交给真正的 Vue 路由处理请求资源
location @router {
rewrite ^.*$ /index.html last;
}
}

HTTP重定向到HTTPS

/etc/nginx/sites-available/default文件的server 中增加 return 301 https://$host$request_uri;

测试

1
nginx -t

重载Nginx

1
nginx -s reload

至此,你的博客已经支持HTTPS了