Hugo 部署方案

本篇文章用于记录 hugo 博客部署过程。
文章内容包括服务器配置,github 配置,以及网络配置,记录并保存 hugo 部署流程中用到的各种指令。

方案一 vercel 托管自动部署与集成 (推荐)

下面的方案二是我一开始的部署配置,使用方案二部署不到一个星期我租的的香港的 Liththouse 就被某信部给 ban 了。(心情复杂)真想把那个审核人员给 #¥@……%@# 一顿!不过也感谢你,帮我省了400大洋还让我找到了更优的部署方案,即 vercel 托管。

vercel 托管

vercel 真是一个良心平台,不仅完全免费托管,而且不限速!使用起来非常方便,不用配置任何乱七八糟的服务器环境,只需要一个 github 仓库里面放好你的 hugo 项目即可。具体步骤就不详细记录了,以下列出几个参考链接供大家学习使用。

知乎:vercel是什么神仙网站?
Hugo | 用Vercel完成blog自动化部署
Hugo部署到Vercel

几点使用 Tips

  • vercel 创建项目时不用纠结 hugo extended 版本
  • 注意 git 上如果用 submodule 配置的主题同样需要上传到 github
  • 你每次git push到仓库后 vercel 就会自动帮你编译更新(炒鸡方便有没有)
  • github 仓库可以设为私有
  • 你的项目文件不要太大,最好将图片等资源用 CDN 维护

存储桶+ DCDN 使用

本站点目前使用阿里云的存储桶和海外 CDN 服务。
大致流程:

  • 需要一个海外的 bucket
  • 境外 DCDN 服务(不可包含境内,境内 CDN 需要备案)
  • 可自定义三级域名用 CNAME 记录解析到 DCDN
  • DCDN 直接回源 OSS
  • 添加 SSL 证书,开启 HTTPS

方案二 服务器部署

配置腾讯云 Lighthouse

一开始服务器的选择还是纠结很久,关注了多家服务器提供商的几台相似配置的服务器。
有国外 vultr 和 bandwagon 的 vps 和国内的阿里云ECS,腾讯云CVM。经过几番比较最终选择了腾讯云的海外轻量应用服务器,使用体验确实香。

Ubuntu 配置

由于Ubuntu系统权限限制严格,腾讯云的lighthouse系统初始不会分配root用户而是ubuntu用户。
因此需要手动修改配置文件开启root用户连接服务器。登入默认分配的系统用户后设置root密码后配置ssh连接修改相关参数后重启ssh服务,这样就可以直接使用root用户登入服务器了。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 设置密码
sudo passwd root

sudo vi /etc/ssh/sshd_config

# 修改如下参数
PermitRootLogin yes
PasswordAuthentication yes

sudo service ssh restart

创建一个自己的用户分配sudo权限之后安装一下tmux,然后将保存在cos的几个祖传配置传过来。

1
2
3
4
5
sudo apt-get update
sudo apt-get install tmux

# 在上一台服务器操作
scp .bashrc .vimrc .tmux.conf HKLighthouse:

安装与配置Nginx

Nginx安装

具体安装步骤请查看文档

1
2
3
4
5
sudo apt update
sudo apt install nginx

# 验证安装
nginx -v # 查看版本

之后可以访问一下服务器IP地址的80端口测试Nginx是否正常运行。

Nginx 配置

Nginx的配置文件位于/etc/nginx/nginx.conf Nginx 服务器配置文件被储存在/etc/nginx/sites-available目录下,该目录的配置文件都会被被启用。

Nginx 常用指令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 查看进程
ps aux|grep nginx
# 重启服务
nginx -s reload
# 停止服务
nginx -s quit
# 启动服务
systemctl start nginx
# 设置开机自动启动
systemctl enable nginx
# 查看监听状态
sudo netstat -lnpt|grep nginx
# 查看nginx运行状态
systemctl status nginx
# 重启nginx服务
systemctl restart nginx

修改配置文件

按道理来说把站点配置信息放在sites-availableconf.d目录下面会更规范一些。 由于之前对 nginx 不是很了解,就直接在nginx.conf里修改了。 实际在nginx.conf下的配置的如下内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
http {
        ......
        server {
            listen 443;
                ......
            location / {
                index index.html index.htm;
            }
        }
}

与在./conf.d./sites-enabled/如下写法是一样的配置效果。

1
2
3
4
5
6
7
server {
    listen 443;
    ......
    location / {
        index index.html index.htm;
    }
}

我的 Nginx 配置如下

vim 编辑 nginx.conf 文件。
秉着我的服务器我做主原则,直接给 nginx 配置 root 权限👻。
实际菜鸡不懂linux权限使用规则,root 就完事了。
http连接301重定向到https上,证书文件直接放在 nginx.conf 同一目录下即可,也可以创建一个文件夹单独存放,路径信息是相对于 conf 文件的作如下修改即可 filename/xxx. icu_bundle.crt

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
	server {
		server_name _;
		return 302 https://www.domain.icu$request_uri;
	}

	server {
        	listen  80;
        	server_name *.domain.icu domain.icu;
        	return 301 https://www.domain.icu$request_uri;
    	}
    server {
      		listen 443 ssl http2;
        	ssl_certificate       domain.icu_bundle.crt;    #指定证书位置,默认在当前目录寻找
        	ssl_certificate_key   domain.icu.key;    #指定私钥位置
        	ssl_protocols         TLSv1.2 TLSv1.3;
			ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
			ssl_prefer_server_ciphers on;
        	server_name www.domain.icu;
        	location / {
            		root  /home/niku/myblog/public;
            		index  index.html index.htm;
        	}
        	error_page  404 /404.html;
        	location = /404.html {
            		root  /home/niku/myblog/public;
        	}
    	}

修改完成后需要重新加载配置文件,重启nginx服务,指令如下:

1
2
3
nginx -s reload
systemctl status nginx
systemctl restart nginx

Hugo 文件同步方案

看到一些博主用Github Action + 同步软件实现自动部署流程。我的开发环境是windows,因此直接使用 FTP 将站点在本地编译后同步到VPS对应目录即可。

参考

若文章有误可通过评论方式指出,非常感谢!

0%