安装本地环境
本地启动hexo
- 下载生成个人博客所需要的软件/环境:git,node.js
- Hexo 的安装与配置
- 创建一个空文件夹(如命名 blog),之后的所有操作都在这个文件夹里进行
- 安装 hexo:
cnpm install -g hexo-cli
- 查看是否安装成功:
hexo v
- 初始化 blog 目录:
hexo init
。 - 生成项目:
hexo generate
或者hexo g
。这一步是把 md 文件生成 html 文件 - 启动本地服务:
hexo server
或者hexo s
。访问:http://localhost:4000/
安装遇到的问题:
我把我安装的文件,直接拖到/blog/source/_posts 目录下,接着我运行hexo s
和hexo g
都会报如下错误:
YAMLException: unidentified alias
因为heox g
生成博文,是会检查你的文件有没有按照 hexo 的格式。其格式要求为:
---
title: Hello World
date: 2013/7/13 20:46:25
---
只要添加上面格式,就不会报错了
设置git并且生成SSH
设置 git 用户名和邮箱
# 设置
$ git config --global user.name "username"
$ git config --global user.email "email"
# 查看
$ git config user.name
$ git config user.email
- 加–global 是为所有 git 项目设置,不加则是在当前目录的 git 项目设置
- Git 首次安装必须设置一下用户签名,否则无法提交代码。 **
这里设置用户签名和登录 GitHub(或其他代码托管中心)的账号没有任何关系,因为不部署在GitHub上面**。
签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁进行的!
生成SSH
配置SSH密钥,实现免密登录(在后面首次提交时需要验证一次服务器密码)
ssh-keygen -t rsa -C "上面配置的git邮箱地址"
连续敲回车确定,然后看到提示秘钥以保存在.ssh路径下(如果没有出现提示就多敲几次回车)。
在提示的路径下找到id_rsa文件,复制文件内容,下面配置Git时会用到、
SSH秘钥存放在如下目录:
- Windows:
C:\Users\你的用户名\.ssh
- MACOS:
/Users/你的用户名/.ssh
生成如下两个文件:
id_rsa.pub
id_rsa
安装服务器环境
安装相关软件
yum install curl-devel expat-devel gettext - devel openssl-devel zlib-devel perl-devel
Hexo 支持将生成的静态博客部署到 Git 仓库,如 GitHub Pages、GitLab Pages 等。在这个过程中,Hexo 可能会依赖于 Git 客户端,而安装这些开发库往往是为了编译安装 Git 客户端,因为:
- curl-devel:Git 在与远程仓库进行数据传输时,可能会使用到
curl
库来处理 HTTP/HTTPS 协议的请求。安装curl-devel
可以确保 Git 能够正确地与远程仓库进行通信,支持从远程仓库拉取和推送代码。 - expat-devel:
expat
是一个用于解析 XML 数据的库。在 Git 处理一些与 XML 相关的配置文件或者数据时,可能会用到expat
库。例如,在处理一些复杂的远程仓库配置时,可能会涉及到 XML 格式的数据解析。 - gettext-devel:
gettext
是用于实现软件国际化和本地化的工具集。Git 作为一个广泛使用的版本控制系统,需要支持多语言,因此会依赖gettext
库。安装gettext-devel
可以确保 Git 在编译时能够正确支持多语言环境。 - openssl-devel:
openssl
是一个开源的加密库,Git 在进行安全的数据传输时,如通过 SSH 协议连接到远程仓库,需要使用openssl
进行加密和解密操作。安装openssl-devel
可以确保 Git 能够正确处理加密通信,保护数据传输的安全性。 - zlib-devel:
zlib
是一个通用的压缩库,Git 在存储和传输数据时,会对文件进行压缩以节省存储空间和网络带宽。安装zlib-devel
可以确保 Git 能够正确地进行数据压缩和解压缩操作。 - perl-devel:Git 有一些脚本和工具是用 Perl 语言编写的,安装
perl-devel
可以确保这些 Perl 脚本能够正常运行,并且在编译 Git 时能够正确处理相关的依赖。
安装git
yum install -y git
**-y
**:是一个选项参数,表示在执行安装操作时,自动回答所有提示问题为 “是(yes)”。使用该选项后,当 yum
在安装过程中遇到需要用户确认的提示(例如询问是否继续安装、是否接受软件包的许可证等)时,会自动选择 “是”,无需用户手动干预,从而实现自动化安装。
添加用户和设置密码
[root@14uuZ ~]# useradd xsl 或者 adduser xsl
[root@14uuZ ~]# passwd xsl
更改用户 xsl 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
adduser
和 useradd
都用于在 Linux 或类 Unix 系统中创建新用户。
useradd
命令位于/usr/sbin
目录下,通常需要超级用户(root 用户)权限才能执行。它会在系统中创建一个新的用户条目,包括用户的主目录、用户组、用户配置文件等。adduser
:在 Debian、Ubuntu 等系统里是 Perl 脚本,提供友好交互界面,**底层调用useradd
**;在 CentOS 等系统中是useradd
的软链接。
passwd
是一个在 Linux、Unix 以及类 Unix 系统中广泛使用的命令,主要用于更改用户的密码。
给用户添加权限
配置权限需要修改sudoers文件。
/etc/sudoers
文件是sudo
命令的配置文件,用于定义哪些用户或用户组可以使用sudo
命令以超级用户(root)权限执行某些命令。[root@14uuZ ~]# chmod 740 /etc/sudoers
- chmod:这是 Linux 和类 Unix 系统中用于修改文件或目录权限的命令。
740
:这是权限设置的参数,采用数字表示法。在这种表示法中,每个数字对应一组权限,分别是文件所有者、所属用户组和其他用户的权限。每个数字由三个二进制位组成,从左到右分别代表读(r,对应值为 4)、写(w,对应值为 2)、执行(x,对应值为 1)权限。- 数字 7 表示
4(读)+ 2(写)+ 1(执行)
,即文件所有者拥有读、写和执行权限。 - 数字 4 表示
4(读)
,即所属用户组拥有读权限。 - 数字 0 表示没有任何权限,即其他用户没有读、写和执行权限。
- 数字 7 表示
增加xsl用户的权限
[root@14uuZ ~]# vim /etc/sudoers
使用
set nu
可以显示行号找到100行附近,添加xsl的配置
把sudoers文件改成只能模式
[root@14uuZ ~]# chmod 0440 /etc/sudoers
通常
/etc/sudoers
的推荐权限是0440
,即文件所有者和所属用户组有读权限,其他用户无权限。可以使用以下命令设置:
配置SSH秘钥
切换为git用户,配置SSH(把本地配置的秘钥复制到服务器)
### 切换用户
[root@14uuZ ~]# su xsl
### 创建 .ssh 文件夹
[xsl@14uuZ root]$ mkdir ~/.ssh
### 将本地生成的id_rsa.pub文件公钥复制进去
[xsl@14uuZ root]$ vim ~/.ssh/authorized_keys
### 对 /home/xsl/.ssh/authorized_keys 赋予读写权限
[xsl@14uuZ root]$ chmod 600 /home/xsl/.ssh/authorized_keys
### 对 /home/xsl/.ssh 赋予读写执行权限
[xsl@14uuZ root]$ chmod 700 /home/xsl/.ssh
服务器端的 SSH 配置可能不允许使用你提供的密钥进行身份验证,所以需要去检查 /etc/ssh/sshd_config
文件,确认以下配置项是否正确:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
如图,下面的PubkeyAuthentication yes
就没有打开

所以,我在验证SSH秘钥的时候报如下错误:
Connection closed by xx.xxx.xxx.xxx port 22
验证SSH是否生效
ssh -v xsl@你的服务器ip
执行过程中出现选择,一律选择yes
运行的时候会要求输入密码
debug1: Next authentication method: password
xsl@xx.xxx.xxx.xxx's password:
这个密码是xsl的密码,因为我们访问的也是xsl@你的服务器ip
当出现Welcome
的时候,说明登录成功了
Welcome to Alibaba Cloud Elastic Compute Service !
创建git仓库
为hexo博客创建一个目录,赋予所有权限并设置所有者为git
[root@14uuZ ~]# mkdir /home/hexo
[root@14uuZ ~]# chown xsl:xsl -R /home/hexo
[root@14uuZ ~]# chmod -R 755 /home/hexo
chown
是 “change owner” 的缩写,是 Linux 和类 Unix 系统中用于更改文件或目录所有者和所属用户组的命令。- **
xsl:xsl
**:这里冒号分隔的两部分分别代表用户和用户组。在这个命令里,xsl
既作为新的文件所有者,也作为新的所属用户组。也就是说,执行该命令后,目标文件或目录的所有者会变成xsl
用户,所属用户组会变成xsl
用户组 - **
-R
**:它是--recursive
的简写形式,是一个选项参数。当使用这个选项时,chown
命令会递归地作用于指定目录及其内部包含的所有子目录和文件。 - **
chmod
**:用于修改文件或者目录的读写权限
创建git仓库
[root@14uuZ /]# mkdir /home/repo
[root@14uuZ /]# cd /home/repo
[root@14uuZ repo]# git init --bare hexo.git
初始化空的 Git 版本库于 /home/repo/hexo.git/
创建Git钩子
[root@14uuZ repo]# vim /home/repo/hexo.git/hooks/post-receive
点击键盘“i”建进入编辑模式,然后通过方向键编辑,将以下代码复制进去
git --work-tree=/home/hexo --git-dir=/home/repo/hexo.git checkout -f
点击Esc后输入:wq保存退出
修改repo的权限
[root@14uuZ repo]# chown -R xsl:xsl /home/repo/hexo.git/hooks/post-receive
[root@14uuZ repo]# chmod +x /home/repo/hexo.git/hooks/post-receive
[root@14uuZ repo]# chown -R xsl:xsl /home/repo
[root@14uuZ repo]# chmod -R 755 /home/repo
- +x:是
chmod
命令的一个选项,其中+
表示添加权限,x
代表执行权限。所以+x
的作用就是为指定的文件或目录添加执行权限。
将本地文件部署到服务器上
在Windows端博客目录下安装部署插件(本地):
npm install hexo-deployer-git --save ## 或者 cnpm install hexo-deployer-git --save
然后,将本地仓库与远程仓库关联:
$ git remote add origin xsl@47.119.183.234:/home/repo/hexo.git
修改Hexo配置文件_config.yml的推送地址(本地):
deploy: type: git repo: git@你的ip地址:/home/repo/hexo.git branch: master
执行下列命令,将静态资源推送到服务器(本地):
# hexo clean 清理 D:\00-blog>hexo clean INFO Validating config INFO Deleted database. INFO Deleted public folder. # hexo g 生成静态资源 D:\00-blog>hexo g INFO Validating config INFO Start processing INFO Files loaded in 3.63 s INFO Generated: archives/2019/index.html INFO Generated: archives/index.html # hexo d 推送到远程 D:\00-blog>hexo d INFO Validating config INFO Deploying: git INFO Clearing .deploy_git folder... INFO Copying files from public folder... INFO Copying files from extend dirs... # 推送的过程会要求我们输入 xsl 的密码 Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'www.linnote.space' (ED25519) to the list of known hosts. xsl@www.linnote.space's password:
安装Nginx
- 安装
yum install -y nginx
启动
systemctl start nginx.service
修改配置文件
vim /etc/nginx/nginx.conf
修改内容如下
server { listen 80; listen [::]:80; server_name 修改一:改成对应服务器的IP; root 修改二:改成服务器的hexo的仓库:/home/hexo; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; error_page 404 /404.html; location = /404.html { }
重启Nginx
systemctl restart nginx.service
访问:
ip或者域名
。目前只能通过http
协议去访问。无法使用https
的协议访问。但是,目前大多数浏览器,当我们输入网址的时候,都会自动转成https
的协议。而如果使用https
协议,需要申请SSL证书。一般通过宝塔面板就可以免费申请SSL证书。如果不用宝塔面板,使用Certbot
也可以申请,但申请完之后,需要去Nginx 做一些配置,非常麻烦。
Nginx Proxy Manager
安装
[root@14uuZ ~]# mkdir /home/npm
[root@14uuZ ~]# cd /home/npm/
[root@14uuZ npm]# vim docker-compose.yml
[root@14uuZ npm]# docker compose up -d
docker-compose.yml文件
# version: '3' # 从 Docker Compose v2 开始,version 字段已不再必要
services:
npm: # 是服务(容器)的名称,可以根据需要自定义
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # 不建议修改端口
- '81:81' # 可以把冒号左边的 81 端口修改成你服务器上没有被占用的端口
- '443:443' # 不建议修改端口
volumes:
- ./data:/data # 点号表示当前文件夹,冒号左边的意思是在当前文件夹下创建一个 data 目录,用于存放数据,如果不存在的话,会自动创建
- ./letsencrypt:/etc/letsencrypt # 点号表示当前文件夹,冒号左边的意思是在当前文件夹下创建一个 letsencrypt 目录,用于存放证书,如果不存在的话,会自动创建
- /home/hexo:/home/hexo # 将宿主机的 /home/hexo 挂载到容器内的 /home/hexo
一定要挂载/home/hexo:/home/hexo
,否则Nginx Proxy Manager
的容器会报错
### 进入到容器
[root@14uuZ npm]# docker exec -it npm-npm-1
"docker exec" requires at least 2 arguments.
See 'docker exec --help'.
Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
Execute a command in a running container
### 进入到容器后,查看nginx的错误日志
[root@14uuZ npm]# cat /var/log/nginx/error.log
### 发现报如下错误
2025/02/22 16:12:28 [error] 13457#13457: *29 open() "/home/hexo/wordpress/wp-admin/setup-config.php" failed (2: No such file or directory), client: 172.70.242.8, server: linnote.space, request: "GET /wordpress/wp-admin/setup-config.php HTTP/1.1", host: "linnote.space"
2025/02/22 16:12:28 [error] 13457#13457: *29 open() "/home/hexo/404.html" failed (2: No such file or directory), client: 172.70.242.8, server: linnote.space, request: "GET /wordpress/wp-admin/setup-config.php HTTP/1.1", host: "linnote.space"
### 从 Nginx 错误日志可知,主要问题是 Nginx 无法在 /home/hexo 目录下找到请求的文件
### 这注意是因为我没有把 宿主机的 /home/hexo 挂载到容器内的 /home/hexo
登录
访问http://ip:81
,默认登陆名和密码:
Email: admin@example.com
Password: changeme
第一次登录的时候需要修改登录用户密码
配置
点击 “Add Proxy Host”(添加反向代理主机)按钮。配置信息如下

Forward Port(转发端口) 是8080。也可以是9999,只要这个端口号未被占用就可以。此端口仅为占位,实际不会用于转发到其他服务。因为我们主要是访问静态资源。
接着申请SSL证书,如果不申请,https
就无法访问。

点击 “Advanced”(高级)选项卡,在 “Custom Nginx Configuration”(自定义 Nginx 配置)文本框中添加以下内容:
location / {
root /home/hexo;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
这段配置的具体含义如下:
location /
:匹配所有的请求路径。root /home/hexo
:把请求的根目录设定为/home/hexo
。index index.html index.htm
:将默认的索引文件设置为index.html
或者index.htm
。try_files $uri $uri/ /index.html
:按顺序尝试访问请求的文件,如果文件不存在,就尝试访问对应的目录,若都不存在则返回/index.html
。

访问顺序
当客户端访问 linnote.space
时,Nginx 会按照如下步骤处理请求:
- 匹配 location 块:Nginx 会查找与请求路径匹配的
location
块。由于location /
是一个通用匹配,会匹配所有请求路径,所以 Nginx 会使用这个location
块来处理请求。 - 查找资源:依据
root
和try_files
指令,Nginx 会在/home/hexo
目录下查找请求的资源。例如,若请求的是/page.html
,Nginx 会尝试访问/home/hexo/page.html
文件。 - 8080 端口的处理:在当前配置下,
Forward Port
设置的 8080 端口不会被优先使用。因为location /
块已经明确指定了如何处理请求,Nginx 会直接从/home/hexo
目录获取资源,而不会将请求转发到 8080 端口。
总结:由于配置了location,会先访问root目录(根目录) /home/hexo
,而不会去访问8080端口。
成功访问

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1909773034@qq.com