本站的网络架构示意图如下:
整个网站的搭建分为几部分:
在腾讯云上可以注册域名,并生成域名对应的 SSL 证书。
注册完域名后,点击 DNS 条目进入域名管理页面,可以添加域名的后端服务地址:
在 DNS 的列表页可以点击 SSL 图标,为域名生成证书:
生成证书后可以在 SSL 证书管理页面找到对应的证书条目,并将证书下载下来:
由于本网站使用 HTTPS 对外提供服务,因此,NGINX 上需要配置好域名的证书,否则进行 HTTPS 卸载时会失败。
本网站在 NGINX 代理上做了两个路由分发,因此 NGINX 的监听转发配置了两条:
server {
listen 443 ssl;
server_name bowenerchen.com www.bowenerchen.com;
ssl_certificate /xxxxx/bowenerchen.com_bundle.crt; # 指向你的证书文件
ssl_certificate_key /xxxxx/bowenerchen.com.key; # 指向你的私钥文件
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
# 启用 HSTS(HTTP Strict Transport Security):这可以防止中间人攻击,强制客户端使用 HTTPS 连接
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# 禁用 SSL 压缩:防止 CRIME 攻击
ssl_prefer_server_ciphers on;
# 设置合适的 SSL 会话缓存:提高性能同时保持安全
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
location = /hello {
proxy_pass http://xxxxx;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location / {
root /xxxxx/public;
index index.html;
error_page 404 /404.html;
}
}
https://bowenerchen.com/hello
https://bowenerchen.com/
本静态博客网站基于开源工具 Hugo 进行生成,网站的生成与部署过程流程为:
hugo 的安装可以参考这里:安装指引。
总的来说:
brew install hugo
sudo apt install hugo
sudo dnf install hugo
CGO_ENABLED=1 go install -tags extended github.com/gohugoio/hugo@latest
安装完成后可以在本地查看 hugo 的版本:
注意这里需要安装 extended 的版本,Hugo Extended版本在基础版本上进行了功能扩展,具备以下特性:
本地笔记本安装完 hugo 客户端后,就可以使用 hugo 在本地创建博客站点了:hugo new site local_blogs
。
此时在 local_blog 目录下可以看到生成了文件,其中包括 hugo.toml 或者 hugo.yaml 文件:
hugo 的支持toml
、yaml
、json
三种配置文件,具体的配置说明可以参考:Configure Hugo
Hugo 有很多主题可以选择,可以在这里查看 Hugo 主题的封面效果。
本站点使用的是下载量比较高的 PaperMod 主题。
下载 PaperMod 主题的方式为:
cd local_blog
git clone https://github.com/adityatelange/hugo-PaperMod themes/PaperMod --depth=1
git submodule add --depth=1 https://github.com/adityatelange/hugo-PaperMod.git themes/PaperMod
更多的安装配置可以参考:PaperMod 的安装指引。
baseURL: "https://bowenerchen.com/"
title: BowenerChen的博客站
pagination:
pagerSize: 10
theme: PaperMod
languageCode: zh
defaultContentLanguage: zh
enableEmoji: true
enableGitInfo: true
enableRobotsTXT: true
buildDrafts: false
buildFuture: false
buildExpired: false
minify:
disableXML: true
minifyOutput: true
permalinks:
posts: "/posts/:slug/"
# 添加菜单
menu:
main:
- name: 所有文章
url: archives/
weight: 10
- name: 搜索
url: search/
weight: 20
- name: 系列
url: series/
weight: 30
- name: 标签
url: tags/
weight: 40
- name: 类别
url: categories/
weight: 50
outputs:
home:
- HTML
- RSS
- JSON # 添加此项以启用搜索
# 设置文章分类 https://gohugo.io/content-management/taxonomies
taxonomies:
tag: tags
series: series
category: categories
params:
ShowReadingTime: true
showtoc: true
tocopen: true
enableInlineShortcodes: true
ShowBreadCrumbs: true
ShowPostNavLinks: true
ShowCodeCopyButtons: true
author: 'bowenerchen'
title: '梵高先生'
description: ''
hidemeta: false
hideSummary: false
# 添加搜索参数,参考 https://fusejs.io/api/options.html
fuseOpts:
isCaseSensitive: false
includeMatches: true
shouldSort: true
location: 0
distance: 1000
threshold: 0.4
minMatchCharLength: 0
keys: ["title", "permalink", "summary", "content"]
profileMode:
enabled: true
title: "做一天和尚撞一天钟" # optional default will be site title
subtitle: " 其实我不太懂编码,但也不是完全不懂,我稍微懂一点点。"
imageUrl: "imgs/vango.jpeg" # optional
imageTitle: "梵高先生" # optional
imageWidth: 120 # custom size
imageHeight: 120 # custom size
buttons:
- name: "xxxx"
url: "xxxx"
socialIcons:
- name: xxx
url: "xxxxx" # 个人Github地址
菜单配置中有几个功能需要特殊配置:
操作命令为:hugo new content/posts/my_article.md
文章直接存放在posts目录下,所有文章处于同一层级,便于对文章进行统一管理和批量操作,如批量修改文章的某些属性、进行全站搜索等。
但随着文章数量增多,可能会导致目录结构较为混乱,不便于按类别或主题对文章进行区分和查找。
操作命令为:hugo new content/posts/xxxx/index.md
直接在 index.md 中写文章内容,index.md中需要插入的图片等,直接使用相对路径的形式,放在 xxx 目录下。
比如写本篇博客时,目录结构为:
使用相对路径在文章目录下存放和链接图片:
Hugo的Front Matter是位于文章顶部的一段元数据,用于定义文章的各种属性和配置。
它以特定的分隔符开始和结束,常见的格式有YAML、TOML和JSON,且必须放在文章的开头部分,以便Hugo能够正确解析。
以下是一些常见的Front Matter字段:
title
:文章的标题,是文章的重要标识,在网站的页面展示、标题栏等位置通常会显示该标题。date
:文章的发布日期,格式通常为YYYY-MM-DD
,可以精确到时分秒,如YYYY-MM-DDTHH:MM:SS±HH:MM
。Hugo会根据这个日期对文章进行排序等操作,常用于文章列表按时间顺序展示。lastmod
:文章的最后修改日期,格式与date
类似。可以让读者了解文章的最新更新情况,对于一些时效性较强或需要经常更新的内容很重要。description
:文章的简短描述,通常用于搜索引擎结果页面、文章摘要等地方,能帮助用户快速了解文章的主要内容,对SEO也有一定作用。keywords
:文章的关键词,用于搜索引擎优化和文章分类等。多个关键词之间可以用逗号或空格分隔,方便搜索引擎根据这些关键词对文章进行索引和分类。draft
:表示文章是否为草稿状态。值为true
时,文章在正常生成静态文件时不会被包含在内,只有使用hugo -D
命令时才会生成。hidden
:如果设置为true
,文章可能不会在正常的文章列表等位置显示,但可以通过直接访问URL等方式查看,常用于一些不希望公开展示但又需要保留的文章。toc
:是否生成文章的目录。设置为true
时,Hugo会根据文章的标题层级自动生成目录,方便读者快速浏览文章结构。images
:用于指定文章的特色图片或相关图片列表,这些图片可能会在文章列表、文章详情页的特定位置展示,提升文章的视觉效果。categories
:文章所属的类别,用于对文章进行分类组织。可以是单个类别,也可以是多个类别组成的列表,方便用户按类别浏览文章,也有助于网站的内容管理和SEO。tags
:文章的标签,与关键词类似,但更侧重于对文章内容的细化描述和分类。用户可以通过点击标签查看相关主题的文章集合,增加文章的关联性和可发现性。weight
:用于指定文章的权重,在一些排序或展示规则中,权重较高的文章可能会优先展示或排在更靠前的位置,可用于调整文章在列表中的顺序等。series
:表示文章所属的系列,用于将多篇相关的文章归为一个系列,方便读者按系列阅读相关文章,增强文章之间的关联性和系统性。aliases
:文章的别名,可用于设置多个URL指向同一篇文章,常用于网站改版、URL调整等情况,避免旧的链接失效,同时也可以方便用户通过不同的URL访问文章。在项目根目录下执行 hugo
命令,Hugo 会读取文章内容和配置信息,将其转换为静态文件,并输出到public目录中。
根目录下会生成 public 目录,里面会存放渲染好的静态文件:
如果是要发布到生产环境的文章,在渲染前需要将这篇文章的 FrontMatter 中的 draft
字段设置为 false。
将Hugo渲染后的静态文件发布到服务器上,有多种方式可供选择,以下是几种常见的方法:
public
目录下的所有静态文件上传到服务器指定的网站根目录或相应的发布目录中。public
目录下的文件同步到服务器上的指定目录。如rsync -avz --delete public/ user@server:/var/www/html
,其中-avz
表示以归档模式、详细输出、压缩传输,--delete
表示删除目标目录中不存在于源目录的文件。.travis.yml
文件,配置Hugo的安装、构建和部署脚本。当代码有更新推送到代码仓库时,Travis CI会自动触发构建流程,生成静态文件,并通过配置好的部署脚本将文件上传到服务器。scp
命令将public
目录下的文件传输到服务器上的指定目录,如scp -r public/ user@server:/var/www/html
。传输完成后,在服务器上根据需要进行一些文件权限设置等操作,确保网站能够正常访问。文章列表效果:
文章内容展示效果:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。