写在前面:欢迎来踩我的个人博客~:earnshawn.cn

1 背景

本人服务器到期,且目前网络上大多数的攻略均基于github进行搭建个人网站,本人当时就想着用自己服务器,查阅资料时,很少有人提及如何将hexo网站:https://hexo.io/zh-cn/ 部署到个人网站上,我也因此踩了很多坑。因此这次服务器到期,想着从0到1开始搭建,内容包括:服务器相关内容下载,部署方式,备案等,希望能够帮助到有需要的人。

服务器版本为:ubuntu22.04

PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.5 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

另:自行购买服务器和域名,基于hexo等框架搭建网站的网上相关基础教程很多,这里不再过多赘述。

2 服务器环境准备

1)安装 Nginx 和 Git

Nginx 用来驱动网站,Git 用来接收 Hexo 推送的代码。

sudo apt update
sudo apt install git nginx -y

2)创建一个专属的 git 用户

新建一个名为 git 的用户。

sudo adduser git

3)配置 SSH 免密登录

在本地电脑上(不是服务器): 打开终端(Windows 用 Git Bash),查看是否已有公钥:

cat ~/.ssh/id_rsa.pub

如果没有输出内容,先运行 ssh-keygen -t rsa -C "你的邮箱" 一路回车生成。 复制打印出来的那一长串内容(以 ssh-rsa 开头)。

回到服务器端:git 用户配置该公钥:

su - git
cd ~
mkdir .ssh
vim .ssh/authorized_keys

将刚才本地复制的公钥粘贴进去。按i编辑,粘贴后按esc退出编译模式输入:wq保存并退出

赋予正确的权限(必须是以下权限,否则免密会失效):

chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

输入 exit 退回到 root 用户模式。

3 配置网站目录与Nginx

1)创建网站根目录

这是存放 Hexo 生成的 HTML 页面的地方。

sudo mkdir -p /var/www/hexo

将该目录的所有权交给 git 用户,这样 Git Hook 才有权限把文件写进去:

sudo chown -R git:git /var/www/hexo
sudo chmod -R 755 /var/www/hexo

2)配置 Nginx 路由

告诉 Nginx 你的网站文件在哪里。 打开 Nginx 的默认配置文件:

vim /etc/nginx/sites-available/default

找到 server { ... } 块,将其中的 root 路径修改为你刚才创建的目录,修改后大致如下(其他注释掉的内容可以不管):

server {
    listen 80;
    listen [::]:80;

    # 同时接纳带www的域名、不带www的顶级域名,以及你的服务器IP
    server_name example.com www.example.com 123.45.67.89;

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

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

i编辑,粘贴后按esc退出编译模式输入:wq保存并退出

重启 Nginx 让配置生效:

sudo systemctl restart nginx

4 搭建 Git 裸仓库与 Hook 脚本

1)创建裸仓库 (Bare Repository)

裸仓库没有工作区,专门用来接收推送的代码。

su git
cd ~
git init --bare blog.git

2)编写 Git Hook 脚本

我们要用到的是 post-receive 钩子,它会在服务器接收完推送的代码后立即执行。

vim ~/blog.git/hooks/post-receive

在里面写入以下两行代码:

#!/bin/bash
git --work-tree=/var/www/hexo --git-dir=/home/git/blog.git checkout -f

(这段代码的意思是:把推送到 /home/git/blog.git 的代码,强制 (-f) 检出到工作目录 /var/www/hexo 中。)

5 本地 Hexo 部署

本处不介绍如何基于hexo搭建个人网站(本人用的butterfly主题 https://butterfly.js.org/ 推荐~)了,要做的话内容很多,相关的博客就更多了。

1)安装 Git 部署插件

如果以前没装过,需要先安装:

Bash

npm install hexo-deployer-git --save

2)修改 _config.yml

打开本地 Hexo 根目录的 _config.yml,拉到最底部,修改 deploy 配置:

YAML

deploy:
  type: git
  # 格式为:git用户@你的服务器IP:裸仓库路径
  repo: git@你的服务器IP:/home/git/blog.git
  branch: master

3)启动

在本地终端执行清理、生成和部署命令:

hexo clean && hexo g && hexo d

若暂时没有配置域名,则直接浏览器输入服务器ip地址即可

至此,hexo网站已经部署到了服务器上

6 DNS解析

DNS(Domain Name System)本质上是互联网的“分布式通讯录”。当用户在浏览器输入域名时,背后会经历一个层层递进的查询过程:

  1. 本地缓存/递归查询:浏览器先看自身缓存,再看操作系统(如 hosts 文件),然后询问本地宽带运营商的 DNS 服务器(Local DNS)。
  2. 迭代查询:如果 Local DNS 也没有记录,它会依次向 根域名服务器 (Root) -> 顶级域名服务器 (TLD, 如 .com) -> 权威域名服务器 (如腾讯云 DNSPod) 发起询问,最终拿到对应的 IP 地址并返回给用户。

在配置解析时,最常用的记录类型有以下几种:

  • A 记录 (Address)最核心。将域名直接指向一个 IPv4 地址(例如你之前配置的 152.136.230.157)。
  • CNAME 记录 (Canonical Name):别名解析。将域名指向另一个域名。常用于接入 CDN 加速或 GitHub Pages。
  • AAAA 记录:将域名指向一个 IPv6 地址。
  • TXT 记录:主要用于验证域名所有权(比如申请 SSL 证书时)或设置企业邮箱防伪(SPF 记录)。

第一步:在域名控制台添加解析记录

登录域名注册商的 DNS 控制台,确保至少添加以下两条 A 记录,让主域名和带 www 的域名都能访问:

主机记录 记录类型 线路类型 记录值 (服务器 IP) TTL
@ A 默认 xxx.xxx.xxx.xxx 600 (10分钟)
www A 默认 xxx.xxx.xxx.xxx 600 (10分钟)

第二步:配置服务器端的 Web 服务 (Nginx)

DNS 把流量引导到了 xxx.xxx.xxx.xxx 这台服务器,但服务器上可能运行着多个网站或应用(比如你的 Hexo 博客主页、HPC 性能监控面板等)。服务器需要通过 Nginx 的反向代理来“认领”这些请求。

进入服务器,编辑 Nginx 配置文件(若跟我一致,则在/etc/nginx/sites-available/default)

server {
    listen 80;
    # 这里的 server_name 必须与你 DNS 解析的域名严格一致
    server_name yourdomain.com www.yourdomain.com; 

    # 将请求路由到你的静态博客目录或后端服务
    location / {
        root /var/www/hexo_blog/public; # 你的网页存放路径
        index index.html index.htm;
    }
}

7 ICP备案及公安备案

ICP备案在腾讯云搜索ICP关键词即可搜索到:https://console.cloud.tencent.com/beian/manage

公安备案需在ICP备案完成后才可开始(注意勾选公安联网备案授权),均可根据指引完成。

时间线:

提交后一天腾讯云客服会打电话确认,若信息等符合要求则会提交管局,当天或者第二天会生成验证码在icp备案网站进行确认。以陕西省举例,管局审核三天即可成功备案。
icp备案

备案完成后即可根据指引在全国互联网安全管理服务平台进行公安备案

8 SSL证书

1)开启443端口

腾讯云服务器默认未开启443端口,需手动开启(为后续申请ssl证书作准备)

在腾讯云服务器控制台中找到防火墙

点击左上角的 【添加规则】,补上这条记录:

  • 应用类型/协议:选择 HTTPS 或者自定义 TCP
  • 端口:填写 443
  • 来源:选择 全部IPv4地址(或者填 0.0.0.0/0)。
  • 策略允许
    在这里插入图片描述

2)安装 Certbot

Certbot 在安装时会自动在系统里安插一个定时任务这个定时任务会每天在后台悄悄运行两次。它的逻辑是:

  • 如果证书离过期还有 30 天以上,直接退出。
  • 如果证书离过期不足 30 天了,它就会自动向机构申请新证书,下载下来,并自动帮你重新加载 Nginx 使新证书生效。

在服务器上依次运行以下命令:

# 更新软件包列表
sudo apt update

# 安装 Certbot 以及它的 Nginx 专用插件
sudo apt install certbot python3-certbot-nginx -y

成功后运行下列命令

sudo certbot --nginx -d yourdomain.cn -d www.yourdomain.cn

运行上面的命令后,屏幕上会问你几个简单的问题:

  1. Enter email address (used for urgent renewal and security notices):
    • 输入常用邮箱(证书快过期时会发邮件提醒你),回车。
  2. Please read the Terms of Service… (Y)es/(N)o:
    • 输入 Y 同意服务条款,回车。
  3. Would you be willing, once your first certificate is successfully issued, to share your email… (Y)es/(N)o:
    • 是否愿意分享邮箱给电子前哨基金会发广告。输入 N 拒绝,回车。

最关键的一步来了(可能会问,也可能在新版本中默认直接执行): 是否要将所有的 HTTP 流量重定向到 HTTPS(Redirect - Make all requests redirect to secure HTTPS access)。

  • **选择 Redirect(通常是输入 2)!**以后别人就算只输入 earnshawn.cn,也会被自动强制跳转到安全的 https://earnshawn.cn
  1. 检查定时任务是否正在运行
sudo systemctl status certbot.timer
  1. 模拟一次自动续期
sudo certbot renew --dry-run

9 CDN加速

CDN 的本质是空间换时间。它通过在网络各处部署大量的缓存服务器(节点),将源站的内容分发到这些节点上。

  1. 用户发起请求: 当你输入网址时,DNS 解析不再直接返回服务器 IP。
  2. 智能调度: 调度系统会根据你的地理位置、运营商(移动/电信等)、当前节点负载,分配一个离你最近、最快的节点 IP。
  3. 缓存命中:
    • 如果该节点有你要的内容,直接返回(命中),速度极快。
    • 如果节点没有,它会代替你去服务器取一次(回源),存一份在本地后再发给你,方便下一个人。

本文以腾讯云CDN分发网络进行CDN加速:https://console.cloud.tencent.com/cdn

优点: 节点就在省内,访问速度极快(通常延迟在 30ms 以内)。

缺点: 必须备案。超出免费额度后按流量计费。

1)填写配置

填写指南:

  1. 源站类型
  • 选择: 自有源(保持默认)
  • 解释: Hexo 博客文件目前存在自己的腾讯云轻量或 CVM 服务器上,所以属于“自有源”。
  1. 回源协议
  • 选择: HTTPS
  • 解释: 既然你刚才已经拿到了 earnshawn.cn 的 SSL 证书并在 Nginx 部署成功,这里选 HTTPS 可以确保 CDN 节点和你的源站服务器之间也是加密传输,安全性最高。
  1. 源站地址

在中间那个长方框里填入以下内容:

  • 输入框: 填写服务器的公网 IP(例如 123.123.123.123)。
  • 端口(中间小框): 填写 443(对应 HTTPS)。
  • 权重(右侧小框): 不填写
  1. 回源 HOST
  • 填写: earnshawn.cn
  • 解释: 这个非常关键。当 CDN 去你的服务器拿数据时,它会告诉 Nginx:“我要找 earnshawn.cn 这个网站”。如果你这里填错了,服务器可能会返回 404 或默认页。

2)推荐配置

填写结束到下一步后结束后根据自己的需求修改腾讯云给出的CDN推荐配置

填写SSL证书,由于我们采用了certbot自动申请和续费证书,所以需要在自己的服务器上找到证书的相关信息,以下是我的路径,

需要把 www.earnshawn.cn 改为你自己的域名

sudo cat /etc/letsencrypt/live/www.earnshawn.cn/fullchain.pem
sudo cat /etc/letsencrypt/live/www.earnshawn.cn/privkey.pem

注意:certbot续费后需要更新ssl证书

3)配置DNS

需要修改DNS解析记录,腾讯云有一键修改可以使用。若没有使用,可以去你的 DNS 解析后台(DNSPod)自行解析。

可以看到前后效果
在这里插入图片描述
在这里插入图片描述

延时从20ms降低到了2ms

10 总结

至此,网站已经部署好了,且配置好了域名,DNS解析,备案等。最后欢迎大家留言自己的网站互踩~

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐