下面是一份相对完整的 Hugo 部署教程,帮助你在 Ubuntu 24.04 的云服务器(以 wzc 用户身份登录)上搭建并发布个人博客。该教程涵盖了 Hugo 安装、创建站点、使用主题、编译生成、以及通过 Nginx 或直接 Hugo Server 来对外提供服务等步骤。你可以根据实际需求选择性地精简或扩展其中的流程。
[TOC]
1. 一、准备工作
-
通过 SSH 登录到服务器
ssh wzc@<服务器IP地址>
成功登录后,后续所有命令均在这个远程终端环境下执行。
-
更新系统软件包
sudo apt update && sudo apt upgrade -y
-
安装必备工具
一般来说,后续会用到git
来管理 Hugo 项目或拉取主题。如果系统中尚未安装,执行:sudo apt install git -y
2. 二、安装 Hugo
2.1. 方法 A:使用 APT 包管理器
Ubuntu 24.04 的官方仓库中通常已经包含了较新的 Hugo 版本,可以直接通过 apt 安装:
sudo apt install hugo -y
安装完成后可通过以下命令确认版本和是否成功安装:
hugo version
如果能看到类似 hugo vX.X.X-xxxx ...
说明安装成功。
2.2. 方法 B:从 Release 页面手动安装(可选)
如果你想要安装 Hugo 的最新版本,可以从其 GitHub Release 下载对应的 .deb
或 .tar.gz
包手动安装。这种方法适用于需要最新功能或 apt 仓库版本过旧时使用。示例:
# 根据官网最新版本选择下载链接(示例:hugo_extended_0.120.0_Linux-64bit.deb)
wget https://github.com/gohugoio/hugo/releases/download/v0.120.0/hugo_extended_0.120.0_Linux-64bit.deb
# 安装
sudo dpkg -i hugo_extended_0.120.0_Linux-64bit.deb
# 检查
hugo version
(请将上面示例中的版本号替换为发布时的最新版。)
3. 三、新建 Hugo 站点
-
选择工作目录
为便于管理,你可以在 wzc 用户的家目录下新建一个文件夹,例如~/myblog
或者~/hugo
来存放你的网站。这里以~/myblog
为例:cd ~ mkdir myblog cd myblog
-
初始化 Hugo 站点
使用hugo new site
命令来初始化站点结构:hugo new site blog
此时会在
~/myblog/blog
下自动创建一系列文件夹和配置文件,常见目录结构包括:├── archetypes ├── assets ├── content ├── layouts ├── static └── config.toml (或 config.yaml / config.json)
-
初始化 Git 仓库(可选)
如果你想用 Git 管理整个 Hugo 站点,可以在blog
目录下执行:cd blog git init git add . git commit -m "Initial commit"
这样后续可方便地进行版本控制或推送到 GitHub/Gitee 等代码托管平台。
4. 四、选择并配置主题
-
查找主题
Hugo 官方主题库: themes.gohugo.io
你可以在这里找一个自己喜欢的主题,比如常见的文档风 / Blog 风格主题,选择后复制其 Git 仓库地址。 -
添加主题到项目
以 Ananke 为例,在blog
文件夹下执行:git submodule add https://github.com/theNewDynamic/gohugo-theme-ananke.git themes/ananke
(也可以直接
git clone
到themes/ananke
下,或下载 zip 后手动解压到themes/ananke
。) -
修改配置文件
编辑config.toml
(如果你使用的是config.yaml
或者config.json
,下面示例需要做相应转换):baseURL = "http://example.com/" # 改成你自己的域名或IP languageCode = "zh-cn" title = "我的Hugo博客" theme = "ananke"
其他配置信息,比如菜单、导航、SEO 设置等,可以根据主题文档进行自定义。
5. 五、创建内容并本地预览
-
新建文章
在blog
目录下:hugo new posts/hello-world.md
默认会在
content/posts
目录生成hello-world.md
文件,可打开编辑:--- title: "Hello World" date: 2024-12-29T12:00:00+08:00 draft: true --- 这是我的第一篇文章,使用 Hugo。
将
draft
设置为false
可以在发布时被包含。 -
本地预览
Hugo 带有内置的开发服务器,可以让你在服务器上实时预览站点:hugo server -D
-D
选项表示包含 draft 草稿文章。- 启动后会显示一个本地访问地址,如
http://localhost:1313/
。 - 如果你希望外网通过 ECS 的 IP 地址访问预览,可以使用
--bind 0.0.0.0 --baseURL http://<服务器IP>:1313/
启动,让其监听所有网卡。
例如:
hugo server -D --bind 0.0.0.0 --baseURL http://<服务器IP>:1313/
然后通过浏览器访问
http://<服务器IP>:1313/
就能看到你的 Hugo 站点的实时预览。
6. 六、生成静态文件
在确认内容、配置都没问题后,就可以生成静态文件用于正式部署:
hugo
执行成功后,会在 blog/public
目录下生成所有静态页面文件。你可以把 public
目录下的文件发布到任何静态 Web 服务器(Nginx、Apache 等)上即可对外访问。
7. 七、使用 Nginx 对外提供服务
7.1. 1. 安装 Nginx
sudo apt update
sudo apt install nginx -y
安装完成后,Nginx 会自动启动,可以查看状态:
systemctl status nginx
7.2. 2. 配置 Nginx
-
创建网站目录
一种常见做法是把 Hugo 生成的public
文件复制或同步到/var/www/<your_site>
下,也可以直接将 Hugo 的public
目录设为网站根目录。下面以/var/www/myhugosite
为例:sudo mkdir -p /var/www/myhugosite sudo chown -R www-data:www-data /var/www/myhugosite
-
将 Hugo 输出的静态文件复制过去
在~/myblog/blog
目录下执行:hugo # 把生成的 public 文件夹内容拷贝到 /var/www/myhugosite cp -r public/* /var/www/myhugosite/ # 注意复制后,最好确保文件属主属组为 www-data sudo chown -R www-data:www-data /var/www/myhugosite
-
配置 Nginx 虚拟主机
创建一个新的配置文件,比如/etc/nginx/sites-available/myhugosite.conf
:server { listen 80; server_name example.com; # 改成你的域名或者服务器IP root /var/www/myhugosite; index index.html; # 如果需要处理一些 404 或者特定规则可以在此处添加 location / { try_files $uri $uri/ =404; } }
建立符号链接使其生效:
sudo ln -s /etc/nginx/sites-available/myhugosite.conf /etc/nginx/sites-enabled/
-
测试并重启 Nginx
sudo nginx -t sudo systemctl reload nginx
现在,你访问
http://example.com
(或 IP 地址)即可看到 Hugo 生成的网页内容。
7.3. 3. 配置 HTTPS(可选但强烈推荐)
如果你已经有自己的域名并正确解析到 ECS 服务器,可以通过 Certbot 免费申请并自动配置 HTTPS 证书:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.com
根据命令行提示进行操作,最终可以获得有效的 SSL/TLS 证书并自动更新。
8. 八、使用 Hugo Server 直接对外提供服务(可选)
如果你不想使用 Nginx,也可以让 Hugo 自带的 Server 在 80 或其他端口直接对外提供服务。但这并不是生产环境的最佳做法,原因是 Hugo Server 不等同于专业的 Web 服务器,而且 SSL 证书、负载均衡、缓存等功能 Hugo Server 并不直接提供。不过若你只是轻量使用或临时展示,可这样操作:
# 以 80 端口对外 (需要 sudo 权限,因为端口 < 1024)
sudo hugo server -D --bind 0.0.0.0 --baseURL http://<服务器IP> --port 80
注意:端口 80 一般被系统占用,需要先停止 Nginx,否则会冲突。
9. 九、后续优化建议
-
自动化部署
- 你可以通过 Git + CI/CD(GitHub Actions、Gitee Pages、GitLab CI 等)来实现每次提交更新后,自动在服务器上拉取代码并
hugo
编译。 - 或者写一个简单的脚本,把代码更新 +
hugo
+ 复制到/var/www/myhugosite
的流程自动化。
- 你可以通过 Git + CI/CD(GitHub Actions、Gitee Pages、GitLab CI 等)来实现每次提交更新后,自动在服务器上拉取代码并
-
多站点或子目录部署
- 如果你计划维护多个站点或者想在子目录下部署 Hugo,可以在 Nginx 里配置多个 server 块或 location 块。
- Hugo 的
baseURL
配置也需要做相应调整。
-
主题自定义
- 若需要深度定制主题,可以编辑
themes/xxx/layouts/
或在layouts
下创建同名文件覆盖主题默认模板,实现更灵活的定制化。
- 若需要深度定制主题,可以编辑
-
安全与备份
- 生产环境建议定期备份
/var/www/myhugosite
以及你的 Hugo 源码(~/myblog/blog
),防止意外丢失。 - 建议使用防火墙、Fail2Ban 等措施,确保服务器安全。
- 生产环境建议定期备份
-
升级 Hugo
- 定期升级 Hugo 和系统依赖,以获取最新特性和安全补丁。
- 如果遇到 Hugo 大版本更新,需要留意主题或插件的兼容性。
10. 结语
通过上述步骤,你就能在 Ubuntu 24.04(ECS 服务器)上,以 wzc 用户身份,在家目录下搭建并部署一个基于 Hugo 的个人博客 / Wiki 站点。若有进一步需求(如搜索功能、评论系统、定制导航栏等),可查看所用主题或 Hugo 官方文档,往往能通过 配置 或 短代码(shortcodes)扩展来实现。
祝你搭建顺利,玩得开心!