Hugo 部署方案

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

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

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

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

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

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

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

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

由于 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:

具体安装步骤请查看文档

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

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

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

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

 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;
    }
}

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

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

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

0%