1. 技术文章/

个人网站搭建全记录:从零到HTTPS上线

·1729 字·4 分钟

概述 #

本文完整记录了个人网站从零搭建的全过程,包括环境配置、博客框架、Web服务器、域名注册、HTTPS配置等各个环节。

最终架构 #

用户 ──HTTPS──▶ 腾讯云安全组 ──▶ Caddy (443/80) ──▶ Hugo静态文件
                              DNSPod (DNS解析)

技术栈 #

组件选择说明
服务器腾讯云轻量云4核/3.6G/40G,Ubuntu 24.04
博客引擎HugoGo语言编写,极速编译,无运行时依赖
主题自建简洁主题支持亮/暗色自适应,响应式设计
Web服务器Caddy v2自动HTTPS,配置简洁,自带Let’s Encrypt
域名tttjhgan.topDNSPod注册,DNSPod解析
HTTPSLet’s EncryptCaddy自动申请与续签
搭建方式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.77600
Awww49.232.56.77600

5.3 HTTPS 配置 #

Caddy 检测到配置中使用域名后,自动执行以下操作:

  1. 监听端口 443(HTTPS)
  2. 向 Let’s Encrypt 请求 TLS 证书
  3. 自动续签(证书有效期内)
  4. HTTP(80端口)自动 308 重定向到 HTTPS

前提条件:腾讯云安全组需要放行 443 端口。


第六章:安全加固 #

6.1 安全组配置(腾讯云) #

入站规则至少放行:

端口协议来源用途
22TCP0.0.0.0/0SSH 远程登录
80TCP0.0.0.0/0HTTP 访问
443TCP0.0.0.0/0HTTPS 访问

6.2 SSH 安全建议 #

  • 关闭密码登录,仅允许密钥认证
  • 禁止 root 直接登录
  • 使用非默认端口(可选)

6.3 Cloudflare 安全(可选) #

如需额外 CDN 和 DDoS 防护,可切换到 Cloudflare DNS:

  • 提供全球 CDN 加速
  • 自动 HTTPS 证书
  • DDoS 基础防护
  • Web 应用防火墙

第七章:经验总结 #

踩过的坑 #

  1. GitHub 被墙:国内服务器 HTTPS 访问 GitHub 不稳定,改用 SSH 协议解决
  2. 端口 443 被挡:腾讯云安全组默认关闭 443,需手动放行
  3. Caddy 自动跳 HTTPS:配置域名后 Caddy 自动跳转 HTTPS,未开 443 会导致死循环
  4. 权限问题:Caddy 以低权限用户运行,需注意 web 目录的可读性
  5. 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"

道阻且长,行则将至。