个人网站搭建全记录:从零到HTTPS上线
概述 #
本文完整记录了个人网站从零搭建的全过程,包括环境配置、博客框架、Web服务器、域名注册、HTTPS配置等各个环节。
最终架构 #
用户 ──HTTPS──▶ 腾讯云安全组 ──▶ Caddy (443/80) ──▶ Hugo静态文件
│
DNSPod (DNS解析)
技术栈 #
| 组件 | 选择 | 说明 |
|---|---|---|
| 服务器 | 腾讯云轻量云 | 4核/3.6G/40G,Ubuntu 24.04 |
| 博客引擎 | Hugo | Go语言编写,极速编译,无运行时依赖 |
| 主题 | 自建简洁主题 | 支持亮/暗色自适应,响应式设计 |
| Web服务器 | Caddy v2 | 自动HTTPS,配置简洁,自带Let’s Encrypt |
| 域名 | tttjhgan.top | DNSPod注册,DNSPod解析 |
| HTTPS | Let’s Encrypt | Caddy自动申请与续签 |
| 搭建方式 | Hermes AI Agent | 全程微信对话指挥 |
第一章:服务器准备 #
1.1 基础环境 #
服务器到手时已预装:
- Ubuntu 24.04 LTS
- Caddy Web 服务器(v2.11.4)
- SSH 远程登录(端口22)
1.2 安装 Hugo #
sudo apt-get install hugo
hugo version
# 输出: hugo v0.123.7+extended linux/amd64
1.3 创建博客项目 #
hugo new site blog --format yaml
cd blog
第二章:博客主题 #
2.1 主题选择 #
由于服务器在中国境内,GitHub 的 HTTPS 连接不稳定,无法直接下载现成的 Hugo 主题。因此决定自建一个简洁主题,满足以下需求:
- 亮色/暗色模式自动切换(跟随系统)
- 响应式设计,移动端友好
- 代码高亮、标签分类、分页导航
- 中文排版优化
2.2 主题文件结构 #
themes/simple/
├── theme.toml # 主题元信息
├── layouts/
│ ├── index.html # 首页
│ ├── 404.html # 404页面
│ └── _default/
│ ├── baseof.html # 基础模板
│ ├── single.html # 文章页
│ └── list.html # 列表页
2.3 解决 GitHub 连接问题 #
腾讯云机房对 GitHub 的 HTTPS 做了限制,但 SSH 协议正常。解决方案:
# 1. 生成 SSH 密钥对
ssh-keygen -t ed25519 -C "blog-server" -f ~/.ssh/github_blog
# 2. 添加到 GitHub Settings → SSH and GPG keys
# 3. 配置 Git 全局走 SSH
git config --global url."git@github.com:".insteadOf "https://github.com/"
配置完成后,即可正常 clone 主题和代码。
第三章:内容创作 #
3.1 文章结构 #
博客内容全部使用 Markdown 编写,存放在 content/posts/ 目录下。
每篇文章以 YAML frontmatter 开头:
---
title: "文章标题"
date: 2026-07-03
draft: false
description: "文章摘要"
tags: ["标签1", "标签2"]
categories: ["分类"]
---
3.2 已发布文章 #
| 文章 | 内容 |
|---|---|
| 你好,我是田稼禾 | 自我介绍与博客方向 |
| 从零搭建个人网站 | 本文的前身,建站过程记录 |
| 对接Obsidian知识库 | AI助手读取本地笔记的方案 |
3.3 发布流程 #
每次更新文章只需两步:
cd ~/blog
hugo # 构建静态站点
# Caddy自动服务,无需重启
第四章:Web服务器配置 #
4.1 Caddy 的优势 #
相比 Nginx/Apache,Caddy 最大的优势是自动 HTTPS——它会自动从 Let’s Encrypt 申请和续签 SSL 证书,无需手动干预。
4.2 最终 Caddyfile #
tttjhgan.top {
root * /home/ubuntu/blog/public
file_server
encode gzip
header X-Content-Type-Options nosniff
header X-Frame-Options DENY
header Referrer-Policy strict-origin-when-cross-origin
log {
output file /var/log/caddy/blog.log
}
}
www.tttjhgan.top {
redir https://tttjhgan.top{uri} permanent
}
4.3 常用命令 #
# 重新加载配置
sudo systemctl reload caddy
# 重启服务
sudo systemctl restart caddy
# 查看状态
sudo systemctl status caddy
# 查看日志
sudo journalctl -u caddy --no-pager -n 50
第五章:域名与HTTPS #
5.1 域名注册 #
- 域名:
tttjhgan.top - 注册商: DNSPod(腾讯云)
- 费用: 约 ¥30/年
- DNS 解析: DNSPod 免费版
5.2 DNSPod DNS 记录 #
| 类型 | 主机记录 | 记录值 | TTL |
|---|---|---|---|
| A | @ | 49.232.56.77 | 600 |
| A | www | 49.232.56.77 | 600 |
5.3 HTTPS 配置 #
Caddy 检测到配置中使用域名后,自动执行以下操作:
- 监听端口 443(HTTPS)
- 向 Let’s Encrypt 请求 TLS 证书
- 自动续签(证书有效期内)
- HTTP(80端口)自动 308 重定向到 HTTPS
前提条件:腾讯云安全组需要放行 443 端口。
第六章:安全加固 #
6.1 安全组配置(腾讯云) #
入站规则至少放行:
| 端口 | 协议 | 来源 | 用途 |
|---|---|---|---|
| 22 | TCP | 0.0.0.0/0 | SSH 远程登录 |
| 80 | TCP | 0.0.0.0/0 | HTTP 访问 |
| 443 | TCP | 0.0.0.0/0 | HTTPS 访问 |
6.2 SSH 安全建议 #
- 关闭密码登录,仅允许密钥认证
- 禁止 root 直接登录
- 使用非默认端口(可选)
6.3 Cloudflare 安全(可选) #
如需额外 CDN 和 DDoS 防护,可切换到 Cloudflare DNS:
- 提供全球 CDN 加速
- 自动 HTTPS 证书
- DDoS 基础防护
- Web 应用防火墙
第七章:经验总结 #
踩过的坑 #
- GitHub 被墙:国内服务器 HTTPS 访问 GitHub 不稳定,改用 SSH 协议解决
- 端口 443 被挡:腾讯云安全组默认关闭 443,需手动放行
- Caddy 自动跳 HTTPS:配置域名后 Caddy 自动跳转 HTTPS,未开 443 会导致死循环
- 权限问题:Caddy 以低权限用户运行,需注意 web 目录的可读性
- PEP 668:Ubuntu 24.04 禁止直接 pip 安装包,需使用虚拟环境
心得体会 #
- 静态站点真香——没有数据库、没有运行时、不会被黑、维护成本极低
- Caddy > Nginx——配置简洁太多,自动 HTTPS 太方便了
- AI 助手搭网站——全程通过微信对话指挥完成,从建站到写文章一条龙
后续计划 #
- HTTPS 配置
- 绑定自定义域名
- 接入评论系统(如 Giscus / Waline)
- 配置自动化备份
- 写更多网络安全相关文章
附录:快速部署脚本 #
#!/bin/bash
# deploy.sh - 博客一键发布
cd /home/ubuntu/blog
# 更新内容(如果有git仓库)
# git pull
# 构建
hugo
echo "✅ 发布完成: https://tttjhgan.top"
道阻且长,行则将至。