Stellar 从0-1上线属于自己博客
前情提要
如果你也对拥有一个自己的网站感兴趣的话,可以参考我的这篇文章。
它不只是一个用来发布技术文章的网站,也可以存放学习笔记、项目记录、摄影作品、书影音和生活碎片。相比只在内容平台上发布文章,个人博客的意义在于:页面如何排列、照片怎样出现、文章如何分类,甚至一个按钮的颜色,都可以由自己决定。
写在前面
这篇文章记录我使用 Hexo + Stellar + 宝塔面板 + Nginx + Twikoo,从零开始搭建并上线个人博客的完整过程。它不是一份只展示成功结果的说明书,也包含我真正遇到过的问题:配置文件报错、部署速度很慢、域名解析不会选、评论在本地正常但其他人无法使用、关闭代理后请求失败,以及图片太大导致网站加载缓慢。
如果你也准备搭建自己的第一个博客,希望这篇记录能让你少绕一些路。
一、先理解博客是怎样上线的
在开始安装之前,最好先理解整个链路:
1 | 本地编写 Markdown 文章 |
Hexo 本身不是一个一直运行在服务器上的后台程序。它更像一个“网页生成器”:我们在本地写 Markdown,Hexo 将文章、主题和配置转换成 HTML、CSS、JavaScript 等静态文件,然后把这些文件交给 Nginx 展示。
因此,真正需要放到服务器上的,通常是 Hexo 生成的 public 目录中的内容,而不是整个 Hexo 项目。
二、我的技术方案
这次博客使用的主要工具如下:
| 部分 | 选择 | 作用 |
|---|---|---|
| 静态博客框架 | Hexo | 将 Markdown 文章生成静态网页 |
| 博客主题 | Stellar | 提供页面结构、文章样式和组件 |
| 本地环境 | Node.js、Git | 运行 Hexo并管理代码 |
| 云服务器 | CentOS | 存放网站文件 |
| 服务器管理 | 宝塔面板 | 管理站点、目录、Nginx 和证书 |
| Web 服务 | Nginx | 向访客返回网页文件 |
| 域名解析 | DNS | 将域名指向服务器或评论服务 |
| HTTPS | Let’s Encrypt | 为博客启用安全访问 |
| 评论系统 | Twikoo | 为静态博客提供评论功能 |
博客的内容定位是技术、学习与摄影,因此我没有把它做成纯技术文档站,而是在 Stellar 原有结构上加入了偏蓝、清透、低饱和的颜色,以及摄影页、欢迎区、字体和局部动效。
一个很重要的经验是:先让博客正常运行和上线,再逐步做视觉定制。 如果一开始同时修改主题、部署、域名和评论系统,出现错误时会很难判断问题来自哪里。
三、准备本地环境
1. 安装 Node.js 和 Git
先在电脑上安装 Node.js 和 Git。安装完成后,在 PowerShell 中检查:
1 | node -v |
只要都能正常输出版本号,就说明基础环境已经准备完成。
2. 安装 Hexo
1 | npm install -g hexo-cli |
检查 Hexo 是否安装成功:
1 | hexo version |
3. 初始化博客项目
选择一个准备存放博客代码的位置:
1 | hexo init blog |
然后启动本地预览:
1 | hexo server |
浏览器访问:
1 | http://localhost:4000 |
看到 Hexo 默认页面,就说明本地博客已经成功运行。
如果提示端口被占用,可以换一个端口:
1 | hexo server -p 5000 |
这时访问 http://localhost:5000 即可。
四、安装并配置 Stellar 主题
1. 安装主题
在 Hexo 项目根目录执行:
1 | npm install hexo-theme-stellar |
然后打开 Hexo 根目录下的 _config.yml,修改主题:
1 | theme: stellar |
重新生成并预览:
1 | hexo clean |
2. 区分两个配置文件
使用 Stellar 时,经常会接触两个配置文件:
_config.yml:Hexo 整个站点的基础配置,例如网址、目录、部署方式。_config.stellar.yml:Stellar 主题配置,例如导航、侧栏、颜色、评论和字体。
修改时要特别注意 YAML 的缩进。YAML 不使用大括号区分层级,而是依靠空格,所以同一层级的缩进必须保持一致,并且不能在同一个层级重复定义相同的键。
例如,下面的写法会报 duplicated mapping key:
1 | comments: |
正确做法是合并为一个 comments:
1 | comments: |
遇到 YAML 报错时,先看终端给出的行号,不要急着重装主题。大多数情况下只是缩进错误或键名重复。
3. 添加自己的文章
创建一篇新文章:
1 | hexo new "我的第一篇文章" |
文章会出现在:
1 | source/_posts/我的第一篇文章.md |
常见的文章头部信息如下:
1 |
|
之后就可以在下方使用 Markdown 正常写作。
五、定制博客,但不要破坏主题结构
我希望博客既能放技术文章,也能展示摄影作品,因此没有完全照搬现成模板,而是在 Stellar 的基础上做定制。
我主要修改了这些内容:
- 站点标题、副标题和头像;
- 首页欢迎区与导航;
- 偏蓝、清透、低饱和的配色;
- 正文字体、字号和阅读宽度;
- 技术文章的分类颜色;
- 摄影作品页和图片布局;
- 适量的悬停效果与背景动效。
自定义 CSS 可以放在:
1 | source/css/custom.css |
然后通过 Stellar 的注入配置引入。为了避免浏览器一直使用旧缓存,可以在文件地址后添加版本号:
1 | inject: |
每次大幅修改样式后更新版本号,浏览器就会重新请求 CSS 文件。
需要注意的是,Stellar 已经处理了大量响应式布局。修改页面宽度、侧栏距离和定位时,尽量覆盖少量变量或选择器,不要一开始就重写整套布局,否则很容易出现电脑端正常、手机端错位的问题。
六、生成可部署的网站文件
每次准备部署前,执行:
1 | hexo clean |
也可以使用简写:
1 | hexo clean |
成功后,项目根目录会出现 public 文件夹。
先打开 public/index.html 或重新运行本地预览,确认页面没有明显问题。public 中的文件就是接下来需要部署到服务器的成品。
七、通过宝塔和 Nginx上线博客
我的服务器使用 CentOS,并通过宝塔面板管理。对第一次部署博客的人来说,宝塔的图形界面比直接编写 Nginx 配置更容易理解。
1. 在宝塔中新建站点
进入宝塔面板后:
- 打开“网站”;
- 点击“添加站点”;
- 填写自己的域名;
- 选择“纯静态”站点;
- 记录网站根目录,例如
/www/wwwroot/blog.example.com。
这里不需要创建数据库,因为 Hexo 生成的是静态网站。
2. 上传网站文件
进入站点根目录,删除宝塔自动创建的默认页面,然后上传 Hexo 的生成结果。
最容易出错的是目录层级。
正确结构应该是:
1 | /www/wwwroot/blog.example.com/index.html |
而不是:
1 | /www/wwwroot/blog.example.com/public/index.html |
也就是说,要上传的是 public 文件夹里面的全部内容,而不是把 public 文件夹整体再套一层放进去。
上传后可以暂时使用服务器 IP 或宝塔提供的站点访问方式检查页面。若首页显示 404,优先检查站点根目录和 index.html 是否位于正确层级。
八、配置域名解析
域名解析的作用,是告诉浏览器“这个域名应该访问哪台服务器”。
1. 博客主域名使用 A 记录
如果博客部署在自己的云服务器上,通常添加 A 记录:
| 配置项 | 示例 |
|---|---|
| 记录类型 | A |
| 主机记录 | @ 或 blog |
| 记录值 | 服务器公网 IP |
@通常表示根域名,例如example.com;blog表示子域名,例如blog.example.com。
2. 第三方服务自定义域名通常使用 CNAME
A 记录和 CNAME 记录不能混用:
- A 记录指向一个 IPv4 地址;
- CNAME 记录指向另一个域名。
例如,Twikoo 后端若托管在第三方平台,并要求为 twikoo.example.com 添加 CNAME,就应在域名当前实际使用的权威 DNS 平台中添加,而不是一定要在购买服务器的平台添加。
如果某个控制台中只能看到 A 记录,先检查域名的 DNS 服务器到底由哪家平台管理。域名在哪里买、服务器在哪里买、DNS 在哪里管理,可能是三件不同的事。
DNS 修改后不会永远立即生效,通常需要等待解析缓存更新。
九、为博客开启 HTTPS
域名解析生效后,可以在宝塔站点设置中申请 Let’s Encrypt 证书:
- 打开对应站点的“设置”;
- 进入“SSL”;
- 选择 Let’s Encrypt;
- 勾选需要签发证书的域名;
- 申请并部署证书;
- 确认 HTTPS 可以访问后,再开启“强制 HTTPS”。
不要在证书尚未签发成功时急着开启强制 HTTPS,否则可能出现 HTTP 和 HTTPS 都无法正常访问的情况。
同时要检查 Hexo 根目录 _config.yml 中的网址:
1 | url: https://blog.example.com |
修改后重新执行:
1 | hexo clean |
并再次部署生成文件。
十、接入 Twikoo 评论系统
静态博客本身没有数据库和后台,因此不能独立保存评论。Twikoo 的作用就是为静态页面补充评论能力。
在 Stellar 中,通常需要启用 Twikoo,并填写后端地址 envId。具体字段以当前主题配置为准,核心逻辑类似:
1 | comments: |
具体操作可以参考这篇文章
十一、解决图片过大和部署缓慢
摄影博客很容易出现一个问题:原图清晰,但体积也非常大。我最初的部分 JPG 图片接近 10 MB,多张图片一起放入 public 后,会带来三个后果:
hexo deploy上传时间明显增加;- 网页首屏加载缓慢;
- 手机流量消耗大,图片解码也更慢。
博客展示图通常不需要保留相机原图的完整尺寸。更合理的做法是:
- 保留原图作为本地备份;
- 另存一份博客展示版本;
- 将长边控制在适合网页展示的范围;
- JPG 使用适度压缩,或转换为 WebP;
- 在保证观感的前提下,将单张图片尽量控制在几百 KB 到 1~2 MB 内;
- 为图片设置懒加载,避免进入页面时一次加载全部照片。
可以先检查生成目录中最大的文件。在 PowerShell 中执行:
1 | Get-ChildItem .\public -Recurse -File | |
如果部署突然变得很慢,先检查是否刚加入了大图、视频或字体文件,再考虑是不是服务器或 Git 出了问题。
另外,如果服务器在国内而电脑开启了绕行海外的代理,上传流量可能走更远的路径,反而导致部署速度下降。遇到 Broken pipe、Connection reset by peer 或 send-pack disconnect 时,可以关闭代理后重试,并先压缩过大的静态资源。
十二、我的日常更新流程
博客上线后,每次更新文章可以遵循固定流程:
1 | # 1. 本地预览 |
也可以简写为:
1 | hexo clean |
如果暂时使用宝塔手动上传,就在生成后压缩 public 中的内容,再上传并解压到站点根目录。等整个流程稳定以后,再配置 Git 自动部署,不需要在第一次上线时同时解决所有自动化问题。
建议同时用 Git 保存 Hexo 源码,但不要只保存生成后的 public。真正重要的是:
source/中的文章和图片;_config.yml;_config.stellar.yml;source/css/custom.css;- 自己添加的页面、数据和脚本;
package.json与锁文件。
不要将服务器密码、宝塔安全入口、Token、私钥和数据库凭据写进公开仓库或教程截图。
十三、常见问题速查
1. YAMLException: duplicated mapping key
同一个 YAML 文件的同一层级出现了两个相同键名。根据报错行号找到它们,将配置合并,不要只删除其中一段需要的内容。
2. 本地样式修改有效,线上没有变化
依次检查:
- 是否重新执行了
hexo clean和hexo generate; - 是否上传了最新
public; - CSS 引用路径是否正确;
- 是否被浏览器或 CDN 缓存;
- 是否更新了
custom.css后的版本号。
3. 服务器首页显示 404
检查 index.html 是否直接位于站点根目录,而不是位于多套一层的 public 中;同时检查宝塔站点设置中的根目录是否正确。
宝塔某个端口的根路径返回 404,也不一定代表面板服务没有运行。如果忘记正确入口,可以在服务器终端使用宝塔提供的管理命令查看,而不要把安全入口公开在文章或截图中。
4. 评论只有自己能用
不要只在一台电脑和同一个网络下测试。关闭代理,使用手机流量或其他网络访问,并检查 Twikoo 后端域名在这些环境中是否可达。
5. 部署速度突然很慢
优先检查最近新增的图片、视频和字体大小;再检查代理路径、服务器网络和 Git 连接。不要把所有问题都归因于 Hexo。
6. hexo server 提示端口被占用
关闭之前未退出的 Hexo 进程,或者使用其他端口:
1 | hexo server -p 5000 |
十四、上线前检查清单
正式分享博客地址前,我建议逐项检查:
- 首页、文章页、分类页、标签页可以打开;
- 电脑端和手机端布局正常;
- 域名 A 记录已指向正确服务器;
- HTTPS 证书有效,HTTP 能正确跳转;
- Hexo 中的
url已改为正式 HTTPS 域名; - 图片路径、字体和自定义 CSS 没有 404;
- 评论可以在无代理网络和手机流量下提交;
- 页面中没有暴露 Token、密码和后台入口;
- 大图已经压缩,首屏加载速度可以接受;
- 源码和文章已经用 Git 或其他方式备份;
- 用无痕窗口测试过一次完整访问流程。
使用建议
完成这些内容之后就可以开始装修你自己的个人空间了,hexo里面有非常多的主题可以供你选择,欢迎加入博客的世界。