
记自己建立博客的曲折历程(三)
前言
提示
- 本文有非常重要的内容:Umami 在静态网站上无中转直接读取 API 并显示数据
- 此过程包含不少访问国外网站的要求,如无法访问,请使用 Watt Toolkit 等加速软件。
- 若有公网 IP 服务器,可以直接把 SSL 证书添加到 Nginx 反向代理中进行访问,详见 第一步 配置 Nginx
- 本文章为 Solitude 主题的配置提供方法,因此从 Solitude 派生的其他主题都可使用此方法,若主题不是 Solitude 且没有内置的 Umami 统计显示,请自行修改网页代码!(博主通过自己的文件、AI 以及其他教程摸索出了 Solitude 主题下的网站结构)
- 本文章与前一篇记自己建立博客的曲折历程有联系。
要求
- 一台可正常运行的 Linux 主机(以 Ubuntu 为例)
- 能访问 Github 的网络 ( 可能需要 Watt Toolkit 等加速 )
- 一定的英语和 Linux 命令行知识储备
- 一个自己的域名
第一步 使用 Nginx 把本地 Umami 进行反向代理
下载 Nginx
执行命令安装 Nginx (Ubuntu 方法)
1 | sudo apt update |
开启 Nginx
1 | sudo systemctl enable --now nginx |
访问 localhost:80,若出现 Welcome to Nginx 字样,则表示安装成功
配置 Nginx
编辑 /etc/nginx/sites-enabled/default
1 | server { |
保存后重启 Nginx
1 | sudo systemctl restart nginx |
第二步 获取 SSL 证书
若已经有证书 fullchain.pem 和 privkey.pem 可以跳过此步。
这里使用 Let’s Encrypt (Certbot) 方案,每 60 天内需要更新一次,本文章包括处理自动更新的方法。
下载 Certbot
运行命令以安装 Certbot
1 | sudo apt - get install certbot python3 - certbot - nginx |
1 | sudo yum install epel - release -y |
方案一 DNS
通过添加 DNS TXT 记录来证明域名所有权,支持通配符域名,无需服务器运行或开放端口,但需要有 DNS 控制权限。
输入命令
1 | sudo certbot certonly --manual --preferred-challenges dns -d <umami-api.example.com(替换为你的域名)> |
按步骤设置 DNS,需要比较好的网络条件
方案二 HTTP 检测本地(Frp 方案谨慎选择)
Let’s Encrypt 会要求在网站指定路径下创建一个特定文件,然后通过访问该文件来验证域名控制权。
需要服务器开放 80 端口到公网!使用 Frp 的用户不建议选择此方案。
输入命令
1 | # 关闭 Nginx 以防端口被占用 |
设置 Certbot 自动续期
创建 Certbot 定时服务
1 | sudo nano /etc/systemd/system/certbot-renew.service |
编辑文件(尖括号内根据实际修改)
1 | [Unit] |
创建定时器
1 | sudo nano /etc/systemd/system/certbot-renew.timer |
编辑文件(根据实际修改)
1 | [Unit] |
启动 Certbot 自动更新
1 | sudo systemctl enable --now certbot-renew.timer |
测试
1 | # 手动触发一次证书更新 |
注意:关闭、重启 Certbot 服务都选择 certbot-renew.timer,而不是 certbot-renew.service!
第三步 使用 Nginx 反向代理到外网
方案一 Frp
在 Frp 服务端(商)配置内网穿透,协议为 HTTPS,内网端口为上文 Nginx 配置中提示的端口,检查是否有 https2http 字段。在 https2http 字段下配置
1 | plugin_crt_path = fullchain.pem # 证书文件的路径 |
完成服务端(商)配置后,按照要求绑定域名
配置 Frp 服务并自动随 Certbot 更新而更新
1 | sudo nano /etc/systemd/system/frp.service |
编辑文件(尖括号内根据实际修改)
1 | [Unit] |
启用 Frp 并设置开机启动
1 | sudo systemctl enable --now frp.service |
方案二 公网
不注释并按情况修改 Nginx 配置中的文本
1 | listen 443 ssl; |
注释掉 Nginx 配置中的文本
1 | listen 80; |
按照自己的情况,将公网 IP 连接到自己的域名
第四步 处理 Umami API 并应用
以下步骤均为 Solitude 主题环境!
回到 Hexo 所在电脑
配置并处理问题
由于 Solitude 在 Umami 加载失败时不显示该块内容,我们在这里添加错误提示与正在加载的功能
更改 <主题文件夹>\layout\includes\widgets\page\about\other.pug 中的 when 'custom' 字段,可以根据后文 常用 Javascript 时间段获取 自行修改
1 | when 'umami' |
在 <博客根目录>\source\_data\about.yml 中添加以下字段
1 | # 网站统计数据展示模块 |
在 <主题文件夹>\source\css\_page\_about\statistic.styl 中的 #statistic 中添加以下字段
1 | .statistic-error |
重启 Hexo ,访问本地网页,检查是否正常
常用 Javascript 时间段获取
- 基础日期获取
1 | const now = new Date(); // 当前时间 |
- 常用时间范围
1 | const now = new Date(); |
- 本周相关
1 | const now = new Date(); |
- 本月相关
1 | const now = new Date(); |
- 今年相关
1 | const now = new Date(); |
- 相对时间计算
1 | const now = new Date(); |
- 格式化日期函数
1 | function formatDate(date, format = 'YYYY-MM-DD') { |
- 时间戳转换
1 | // 获取时间戳(毫秒) |
- 日期比较
1 | const date1 = new Date(2024, 0, 15); |



