关于网站

本网站于2024年5月4日开始使用

主要用于记录学习笔记,想法,项目和生活

使用安知鱼主题

于2025年1月4日将域名解析回阿里云购买的域名yzf522.cn

并完成导航栏各个组件的功能

域名yzf522.github.io已经完成了他的使命

访客量和访问量将不进行同步到yzf522.cn

文章上传

1
hexo new 文章标题

文章是.md格式,在Blog文件夹中的source/_posts中

1
2
hexo g
hexo d

git bash生成(g)、上传(d)

1
hexo clean && hexo generate && hexo deploy

本地启动 hexo

1
2
3
hexo cl
hexo g
hexo s

从github部署到服务器

前置条件确认

  1. 阿里云 CentOS 服务器已购买,公网 IP 已记录,安全组开放端口:22(SSH)、80(HTTP)、443(HTTPS)、8888(宝塔面板)
  2. 域名已完成 ICP 备案,且解析记录已修改为指向服务器公网 IP(A 记录 @www
  3. 本地已安装 Git,博客代码托管在 GitHub,且能正常拉取 / 推送
  4. 原 Vercel 绑定的域名已解绑(Vercel 控制台删除域名关联,避免解析冲突)

1.宝塔终端命令安装Git 客户端(CentOS 系统)

1
yum install -y git

(如果是 Ubuntu 系统,替换为 apt install -y git

验证安装成功:执行 git --version,若输出版本号(如 git version 2.39.1)则完成。

2.搜索安装 Node.js和Nginx

1
2
3
4
5
6
7
# 安装 Node.js 16.x 版本
curl -sL https://rpm.nodesource.com/setup_16.x | sudo bash -
sudo yum install -y nodejs

# 验证安装
node -v
npm -v

3.服务器端:创建网站 + 配置 HTTPS

添加站点

  • 宝塔左侧 网站 > 添加站点
  • 填写信息:
    • 域名:输入你的域名(如 yourdomain.com
    • 根目录:默认 /www/wwwroot/yourdomain.com
    • PHP 版本:选择 纯静态
  • 点击 提交,系统自动生成 Nginx 配置

配置 HTTPS 证书

步骤 1:宝塔终端创建验证目录

1
2
3
4
5
6
7
8
9
# 进入站点根目录
cd /www/wwwroot/yzf522.cn

# 创建Let's Encrypt验证目录(递归创建)
mkdir -p .well-known/acme-challenge

# 赋予www用户权限(宝塔默认运行用户)
chown -R www:www .well-known/
chmod -R 755 .well-known/

步骤 2:修改 Nginx 配置放行验证请求

  1. 宝塔→网站→yzf522.cn→「配置文件」(Nginx 配置);

  2. server { listen 80; ... }块内,**location /上方** 添加:

    1
    2
    3
    4
    5
    6
    # 放行SSL验证请求(核心:避免后续证书申请失败)
    location ^~ /.well-known/acme-challenge/ {
    root /www/wwwroot/yzf522.cn;
    default_type text/plain;
    allow all;
    }
  • 进入站点详情页 → SSL 证书
  • 选择 Let's Encrypt → 勾选域名 yourdomain.comwww.yourdomain.com
  • 点击 申请证书 → 宝塔自动验证并配置 HTTPS,同时开启 强制 HTTPS

申请 Let’s Encrypt 证书时遇到了文件验证失败(404 错误)

1
ping www.yzf522.cn

确保返回的 IP 是你的阿里云服务器公网 IP,如果不是,回到域名注册商控制台修正 A 记录。

上传本地博客文件到服务器(核心)

解压压缩包(覆盖当前目录)

  1. 右键点击yzf522-blog.zip→选择「解压」;

  2. 修复目录权限(规避后续操作报错)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 解除可能存在的user.ini不可变属性(宝塔文件)
    chattr -i /www/wwwroot/yzf522.cn/user.ini 2>/dev/null

    # 递归将目录所有者设为www:www(宝塔运行用户)
    chown -R www:www /www/wwwroot/yzf522.cn

    # 递归设置权限(目录755,文件644)
    find /www/wwwroot/yzf522.cn -type d -exec chmod 755 {} \; 2>/dev/null
    find /www/wwwroot/yzf522.cn -type f -exec chmod 644 {} \; 2>/dev/null

部署 Hexo 博客(生成静态文件)

1
\# 进入站点根目录 cd /www/wwwroot/yzf522.cn # 以www用户权限安装依赖(基于package.json) sudo -u www npm install

.生成静态文件(还原本地博客的所有页面)

1
2
# 以www用户权限执行,避免权限问题
sudo -u www hexo clean && sudo -u www hexo generate --force

4. 配置 Nginx 指向静态文件目录

  1. 宝塔→网站→yzf522.cn→「修改」;
  2. 找到「根目录」,将默认的/www/wwwroot/yzf522.cn改为/www/wwwroot/yzf522.cn/public
  3. 点击「提交」,宝塔自动重载 Nginx 配置。

验证迁移结果(最终验收)

  1. 浏览器访问https://yzf522.cnhttps://www.yzf522.cn
  2. 核心验证点:
    • ✅ 地址栏显示「小锁」(HTTPS 生效);
    • ✅ 首页和本地博客完全一致;
    • ✅ 点击任意文章链接(如/2024/05/06/关于网站/),能正常加载(无 404);
    • ✅ 图片、导航、评论等功能和本地一致。

八、日常维护流程(迁移后更新博客)

本地修改博客后,按以下步骤同步到服务器:

步骤 1:本地操作(写文章 / 改主题)

1
2
3
4
5
6
7
# 1. 本地新建/编辑文章
hexo new "新文章标题"
# 编辑source/_posts/新文章标题.md
hexo server # 本地预览效果

# 2. 本地重新生成静态文件(可选,验证效果)
hexo clean && hexo generate

步骤 2:重新打包上传

  1. 本地重新打包:zip -r yzf522-blog.zip .
  2. 宝塔→文件→/www/wwwroot/yzf522.cn→上传新的yzf522-blog.zip→解压(覆盖);

步骤 3:服务器重新部署

1
2
3
4
# 宝塔终端执行
cd /www/wwwroot/yzf522.cn
sudo -u www npm install # 若新增依赖需执行
sudo -u www hexo clean && sudo -u www hexo generate --force

本地一键部署到服务器

步骤 1:本地安装部署插件

安装 Git 部署插件

1
npm install hexo-deployer-git --save

在服务器上创建 Git 仓库

登录服务器,执行以下命令:

1
2
3
4
5
6
7
8
9
10
11
12
# 1. 创建裸仓库目录(注意是 repo,不是 reho)
mkdir -p /var/repo/blog.git

# 2. 进入该目录并初始化为裸仓库
cd /var/repo/blog.git
git init --bare

# 3. 创建网站实际存放目录(如果还没建)
mkdir -p /www/wwwroot/blog

# 4. 编辑 post-receive hook 脚本
vim /var/repo/blog.git/hooks/post-receive

写入

1
GIT_WORK_TREE=/www/wwwroot/yzf522.cn git checkout -f

步骤 2:添加执行权限(Git 钩子必须)

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

修改本地 _config.yml 的部署配置(替换你的服务器 IP):

1
2
3
4
deploy:
type: git
repo: root@your-server-ip:/var/repo/blog.git
branch: main

上传

1
hexo clean && hexo g && hexo d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 安装 Git(已装可跳过)
yum install git -y
# 创建裸仓库目录
mkdir -p /www/git/blog.git && cd /www/git/blog.git
git init --bare
# 创建钩子文件
cat > /www/git/blog.git/hooks/post-receive << 'EOF'
#!/bin/bash
SOURCE_DIR="/www/wwwroot/blog-source"
DEPLOY_DIR="/www/wwwroot/yzf522.cn"
git --work-tree=$SOURCE_DIR --git-dir=/www/git/blog.git checkout -f main
cd $SOURCE_DIR && npm install && hexo clean && hexo generate -d $DEPLOY_DIR
EOF
# 赋予执行权限
chmod +x /www/git/blog.git/hooks/post-receive
mkdir -p /www/wwwroot/blog-source

直接部署到服务器

一、迁移核心问题总结(按场景分类,避坑关键)

1. 环境与权限问题

  • 普通用户无系统操作权限(yum/install/systemctl 失败),需切换 root 或用 sudo;
  • Git/博客目录权限不匹配,导致钩子脚本执行失败、文件无法复制;
  • 阿里云 AliLinux 3 特殊环境:默认仓库无 Nginx、YUM 排除 Nginx 安装、$releasever 变量识别错误。

2. 配置冲突问题

  • 宝塔面板残留配置(HTTPS 强制跳转、站点路径绑定)覆盖 Nginx 主配置;
  • Nginx 多配置文件冲突(default.conf 与自定义 hexo.conf 重复绑定域名);
  • Hexo 路由规则(try_files)拦截 Let’s Encrypt 验证路径(/.well-known/acme-challenge/)。

3. HTTPS 与域名问题

  • 域名解析多 IP 冲突(错误 IP 导致证书验证 404);
  • 浏览器 HSTS 缓存强制 HTTP 跳 HTTPS,未配置证书时无法访问;
  • Certbot –nginx 模式与 Hexo 路由冲突,验证失败。

4. 部署流程问题

  • 钩子脚本冗余(重复执行 npm install/hexo g),导致 command not found;
  • 本地 Hexo 配置错误(repo 路径格式错误、主题静态资源绝对路径)。

二、最优迁移方案(零踩坑版,适用于 Hexo+安知鱼主题+纯 Linux 服务器)

前置准备

  • 服务器:CentOS/AliLinux 3,已开放 22(SSH)、80(HTTP)、443(HTTPS)端口;
  • 本地:Hexo 博客已配置安知鱼主题,静态资源用相对路径(/images/xxx.png);
  • 域名:完成实名认证,仅保留指向服务器公网 IP 的 A 记录(@ 和 www),TTL 设为 10分钟。

步骤 1:服务器环境初始化(root 用户执行)

1
2
3
4
5
6
7
8
9
10
11
12
13
# 1. 更新系统+安装必备工具
yum update -y && yum install git epel-release -y

# 2. 安装 Nginx(解决 AliLinux 3 仓库问题)
yum install nginx -y --disableexcludes=all # 绕过 YUM 排除规则
systemctl start nginx && systemctl enable nginx
systemctl status nginx # 确认 active (running)

# 3. 安装 Node.js+Hexo(钩子脚本依赖)
curl -fsSL https://rpm.nodesource.com/setup_18.x | bash -
yum install -y nodejs
npm install -g hexo-cli --registry=https://registry.npm.taobao.org
hexo -v # 验证安装成功

步骤 2:创建 Git 仓库与自动部署钩子

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
# 1. 创建 git 用户+授权(避免 root 风险)
useradd git && passwd git # 设密码(本地部署需用)
mkdir -p /var/www/hexo # 博客静态文件目录
chown -R git:git /var/www/hexo && chmod -R 755 /var/www/hexo

# 2. 创建 Git 裸仓库
su - git
mkdir -p ~/hexo_blog.git && cd ~/hexo_blog.git
git init --bare
exit

# 3. 配置钩子脚本(简化版,仅复制静态文件)
vi /home/git/hexo_blog.git/hooks/post-receive
# 粘贴以下内容:
#!/bin/bash
REPO=/home/git/hexo_blog.git
TMP_DIR=/tmp/hexo_temp
TARGET_DIR=/var/www/hexo
rm -rf $TMP_DIR && mkdir -p $TMP_DIR
git --work-tree=$TMP_DIR --git-dir=$REPO checkout -f master
rm -rf $TARGET_DIR/* && cp -r $TMP_DIR/* $TARGET_DIR/
rm -rf $TMP_DIR
echo "部署成功"

# 4. 赋予执行权限
chmod +x /home/git/hexo_blog.git/hooks/post-receive
chown -R git:git /home/git/hexo_blog.git

步骤 3:Nginx 配置(绑定域名+兼容 HTTPS+Hexo 路由)

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
# 1. 删除默认配置,避免冲突
mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak

# 2. 创建站点配置文件
vi /etc/nginx/conf.d/hexo.conf
# 粘贴以下内容(替换 yzf522.cn 为你的域名):
server {
listen 80;
server_name yzf522.cn www.yzf522.cn;
# 放行 Let's Encrypt 验证路径(后续申请证书用)
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/hexo;
}
# 暂时不跳转 HTTPS,先确保 HTTP 可访问
root /var/www/hexo;
index index.html index.htm;
charset utf-8;
# 安知鱼主题静态资源缓存
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000";
access_log off;
}
# 解决 Hexo 刷新 404
location / {
try_files $uri $uri/ /index.html;
}
}

# 3. 验证配置+重启 Nginx
nginx -t && systemctl restart nginx

步骤 4:本地 Hexo 配置与部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 1. 编辑本地 Hexo 根目录 _config.yml
deploy:
type: git
repo: git@服务器IP:/home/git/hexo_blog.git # 格式:git@IP:仓库路径
branch: master
message: "Site updated: {{ now('YYYY-MM-DD HH:mm:ss') }}"

# 2. 编辑安知鱼主题配置 _config.zhiyu.yml
cdn:
enable: false # 关闭 CDN,避免路径问题
avatar: /images/avatar.png # 相对路径
background: /images/bg.jpg

# 3. 安装部署依赖+执行部署
npm install hexo-deployer-git --save
hexo clean && hexo g && hexo d # 输入 git 用户密码

步骤 5:配置 HTTPS(永久解决跳转问题)

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
# 1. 安装 Certbot+申请证书(webroot 模式,避免路由冲突)
yum install -y certbot python3-certbot-nginx
certbot certonly --webroot -w /var/www/hexo -d yzf522.cn -d www.yzf522.cn
# 按提示输入邮箱→同意条款→不共享邮箱→验证成功

# 2. 升级 Nginx 配置为 HTTPS
vi /etc/nginx/conf.d/hexo.conf
# 替换为以下内容:
server {
listen 80;
server_name yzf522.cn www.yzf522.cn;
return 301 https://$host$request_uri; # 强制跳 HTTPS
}
server {
listen 443 ssl;
http2; # 单独启用 HTTP2(避免新版 Nginx 警告)
server_name yzf522.cn www.yzf522.cn;
# SSL 证书路径(Certbot 生成的默认路径)
ssl_certificate /etc/letsencrypt/live/yzf522.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yzf522.cn/privkey.pem;
# SSL 优化配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
ssl_session_timeout 10m;
# 其余配置(根目录、路由、缓存)与步骤 3 一致
root /var/www/hexo;
index index.html index.htm;
charset utf-8;
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000";
access_log off;
}
location / {
try_files $uri $uri/ /index.html;
}
}

# 3. 验证+重启 Nginx
nginx -t && systemctl restart nginx

# 4. 配置证书自动续期(90 天有效期)
echo "0 0 * * * root certbot renew --quiet --renew-hook 'systemctl restart nginx'" >> /etc/crontab
certbot renew --dry-run # 测试续期成功

步骤 6:最终验证

  1. 浏览器打开隐私窗口,访问 https://yzf522.cn,显示绿色小锁+安知鱼主题;
  2. 测试路由:点击分类/标签/文章,刷新无 404;
  3. 验证 HTTP 跳转:访问 http://yzf522.cn,自动跳 HTTPS。

三、下次迁移快速复用要点

  1. 环境依赖:优先用 root 用户安装 Git/Nginx/Node.js,避免权限踩坑;
  2. 配置模板:保存 hexo.confpost-receive 脚本,下次直接复制修改域名;
  3. HTTPS 捷径:用 certbot certonly --webroot 模式,避开 Nginx 配置冲突;
  4. 域名解析:迁移前先清理多余 IP 记录,仅保留服务器 IP;
  5. 本地配置:备份 _config.yml_config.zhiyu.yml,下次替换服务器 IP 即可部署。

按此方案迁移,可避开 99% 之前遇到的权限、配置冲突、HTTPS 验证等问题,全程 30 分钟内完成。