系统:Ubuntu系统,使用的Hugo版本:0.121.0,使用的Hugo主题:PaperMod

确保服务器的防火墙已允许HTTP(80端口)访问。如果你使用的是云服务商的轻量级服务器,需要在云平台控制台安全组中打开80端口

申请好域名后提前进行网站备案,备案成功后与云服务器的ip地址进行解析

一、安装搭建过程

1. 更新并安装必要的依赖

确保你的服务器环境是最新的,并安装Nginx来作为反向代理

sudo apt update && sudo apt upgrade -y
sudo apt install nginx git -y

2. 安装Hugo

通过下载Hugo的0.121.3版本来安装

2.1

# 下载Hugo
wget https://github.com/gohugoio/hugo/releases/download/v0.121.3/hugo_extended_0.121.3_Linux-64bit.deb

# 安装Hugo
sudo dpkg -i hugo_extended_0.121.3_Linux-64bit.deb

如果服务器不能直接访问github,可以下载好安装包,再上传到服务器上,然后解压并安装

# 解压安装包
tar -zxvf hugo_0.121.0_Linux-64bit.tar.gz

# 移动hugo到/usr/local/bin目录,以便全局使用
sudo mv hugo /usr/local/bin/

2.2确认安装是否成功

hugo version

3. 创建博客项目

选择一个目录来存储博客项目,并初始化Hugo项目

#指定目录路径
hugo new site myblog
#创建站点,如果想在当前目录中创建站点,使用 . 表示当前目录
hugo new site .

4.下载Papermod主题

将Papermod主题克隆到项目中

git init
git submodule add https://github.com/adityatelange/hugo-PaperMod.git themes/PaperMod

如果服务器不能直接访问github,可以下载papermod安装包上传并解压

# 解压主题文件
unzip hugo-PaperMod-master.zip

# 将解压后的文件夹移动到themes目录并重命名为PaperMod
mv hugo-PaperMod-master themes/PaperMod

在config.toml中启用Papermod主题

theme = "PaperMod"

5.配置网站

config.toml文件中,根据需要进行网站的基本配置,例如标题、作者、默认语言等。对于Papermod主题,推荐添加如下设置

baseURL = "https://www.liuzh.work"
languageCode = "zh-cn"
title = "博客名称"
theme = "PaperMod"

# 启用的一些Papermod特性
[params]
  ShowReadingTime = true
  ShowShareButtons = true
  ShowPostNavLinks = true
  dateFormat = "2006年01月02日"  # 添加日期格式设置

6.创建内容

使用命令创建一篇新的博客文章

hugo new posts/我的第一篇文章.md

用文本编辑器编辑content/posts/我的第一篇文章.md,并将草稿状态设为false,以便在构建网站时发布此页面

7.本地测试

在服务器上进行本地测试

hugo server -D

通过http://localhost:1313访问,确保站点正常显示

8.构建静态文件

生成网站的静态文件(如果熟练,可以省略第七步,将文件内容写好后,直接生成静态文件)

hugo

静态文件会生成到public目录中

9.配置Nginx

为申请的域名设置Nginx配置

sudo nano /etc/nginx/sites-available/liuzh.work

添加一下内容

server {
    listen 80;
    server_name www.liuzh.work;

    location / {
        root /home/issac/myblog/public;
        index index.html;
    }
}

启用站点并重启Nginx

sudo ln -s /etc/nginx/sites-available/liuzh.work /etc/nginx/sites-enabled/
sudo systemctl restart nginx

10.测试并上线

打开浏览器访问 http://www.liuzh.work 测试。如果一切设置正确,你的Hugo博客站点应该可以正常访问了

二、安装过程出现的问题

1、在安装完成后,通过浏览器访问www.liuzh.work不成功

解决办法:云服务器默认是没有开启80端口的,可以在云服务器安全组中添加入向规则,允许HTTP(80端口访问)

除了上面的解决方法外,其他设置不正确也可能造成访问不成功:

(1)在本地命令行中使用 pingnslookup 命令,查看域名是否正确解析到服务器的ip地址

ping www.liuzh.work
nslookup www.liuzh.work

(2)确保Nginx配置文件中指向的是Hugo生成的 public 文件夹,并且配置文件已经被Nginx加载,重新打开Nginx配置文件 /etc/nginx/sites-available/liuzh.work,确认以下内容正确:

server {
    listen 80;
    server_name www.liuzh.work;

    location / {
        root /home/your-username/myblog/public; # 请替换 your-username 为实际的用户名
        index index.html;
    }
}

更改了配置后,需要重启Nginx

sudo systemctl restart nginx

(3)测试Nginx配置

使用 nginx -t 检查Nginx配置是否有效:

sudo nginx -t

如果显示 syntax is ok,说明配置文件没有问题

(4)检查Hugo生成的文件

确保在 /home/your-username/myblog/public 文件夹中确实有Hugo生成的静态文件。如果 public 文件夹为空,说明可能在执行 hugo 命令时未正确生成静态文件。

可以重新执行以下命令来生成静态文件:

hugo

2、Nginx配置完成后,通过浏览器还是访问不了,通过执行以下命令,确认Nginx是否成功加载了Hugo站点的页面内容:

curl http://localhost
curl http://www.liuzh.work

通过执行curl http://localhot的返回结果,可以看到Nginx的默认站点配置仍在生效,而非我的Hugo站点,通过执行curl http://www.liuzh.work的返回结果,显示403错误,这通常是因为Nginx没有权限访问Hugo生成的public目录,或者public目录的路径在Nginx配置中设置不正确。

解决办法:

(1)确认 /etc/nginx/sites-available/liuzh.work 文件中的 root 路径是否正确(root 指向的路径应该是Hugo生成的public目录)。

(2)检查目录权限,确保Nginx用户有权访问myblog/public目录,可以通过以下命令修改目录权限

sudo chmod +x /home/issac
sudo chmod +x /home/issac/myblog
sudo chmod -R 755 /home/issac/myblog/public
sudo chown -R www-data:www-data /home/issac/myblog/public

完成上述修改后,重新加载Nginx配置:

sudo systemctl restart nginx

3、备案成功后,直接访问www.liuzh.work是可以成功访问的,但是访问网站上的测试博客(子页面)时,访问失败

原因:网站未设置HTTPS,用户或浏览器在默认情况下尝试通过 HTTPS 访问网站,但是站点当前只支持 HTTP,因此当强制 HTTPS 时会遇到访问失败的问题。

解决方案:首先确保443端口开放,然后执行下面的步骤。

(1)在阿里云、腾讯云或华为云的 SSL 证书管理页面申请免费证书,通常会要求域名验证.

(2)证书颁发后,下载证书文件,并手动配置到 Nginx 的 HTTPS 配置中。

(3)更新Nginx配置:将私钥文件和证书文件放在/etc/nginx/ssl目录下,将证书文件路径添加到 Nginx 配置文件中

server {
    listen 443 ssl;
    server_name www.liuzh.work;
    
    ssl_certificate /path/to/your-cert.crt; #安全证书文件路径
    ssl_certificate_key /path/to/your-cert.key; #私钥文件路径

    location / {
        root /home/issac/myblog/public;
        index index.html;
        try_files $uri $uri/ =404;
    }
}

# 如果要将 HTTP 重定向到 HTTPS,可以添加以下配置
server {
    listen 80;
    server_name www.liuzh.work;
    return 301 https://$host$request_uri;
}

重新启动 Nginx,即可使 HTTPS 生效。