很早就想开始写博客了。今天也是终于动手:靠着 Amazon 新用户那点免费额度,开了一台小机器,用 Hugo + Nginx 把站搭起来。静态站不折腾数据库,刚好适合我这种「先上线再说」的性格。
下面按真实操作顺序记,命令能抄就抄。环境按当时来:
| 项目 | 版本 |
|---|
| 云厂商 | Amazon Web Services(免费套餐) |
| 系统 | Ubuntu 20.04 LTS |
| Hugo | v0.82.1 Extended |
| Web | Nginx |
一、先说白嫖:Amazon 免费额度
新账号送的 Free Tier,大致能白嫖一台小 EC2 一年(每月大约 750 小时,够一台机 7×24 开着)。我选的是:
- 系统镜像:Ubuntu Server 20.04 LTS
- 实例规格:免费档里的 t2.micro / t3.micro(内存不大,跑静态博客绰绰有余)
- 磁盘:先用默认那点,博客纯静态,先不纠结扩容
- 安全组:先放行 22(SSH) 和 80(HTTP),有域名再说 443
控制台点「启动实例」,选密钥对,把 .pem 下好——只给你下一次,丢了就哭去。权限收紧后再登录(以 Linux / macOS 为例,Windows 用 PowerShell 也差不多):
1
2
| chmod 400 ~/Downloads/your-key.pem
ssh -i ~/Downloads/your-key.pem ubuntu@你的公网IP
|
第一次进去看到 Ubuntu 欢迎语,心里那句「这台机暂时是我的了」还是挺爽的。提醒自己:免费也不是无限,别乱开大盘、别挂一堆吃流量的服务,省得账单吓一跳。
二、服务器初始化:先把屋子收拾干净
登录后先更新软件源,装一堆「做人要有」的基础工具:
1
2
3
4
5
6
7
| sudo apt update
sudo apt upgrade -y
sudo apt install -y \
nginx git curl wget unzip \
ca-certificates ufw \
software-properties-common
|
时区改成中国,不然日志时间会对不上脑子:
1
2
| sudo timedatectl set-timezone Asia/Shanghai
timedatectl
|
防火墙开起来(别把自己锁门外,先放 SSH):
1
2
3
4
5
6
| sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status
|
Nginx 装完一般就在跑了,确认一下:
1
2
| sudo systemctl enable --now nginx
systemctl status nginx
|
浏览器先访问 http://公网IP,能看到 Nginx 欢迎页,说明 80 端口和安全组都通了。这一步过了,后面才有底气折腾博客。
三、安装 Hugo Extended 0.82.1
apt 源里的 Hugo 往往偏旧,我直接下官方包。2021 年 4 月 20 号刚出的 0.82.1,今天拿来用刚刚好:
1
2
3
4
5
6
7
| cd /tmp
HUGO_VER=0.82.1
wget https://github.com/gohugoio/hugo/releases/download/v${HUGO_VER}/hugo_extended_${HUGO_VER}_Linux-64bit.deb
sudo dpkg -i hugo_extended_${HUGO_VER}_Linux-64bit.deb
hugo version
|
期望看到类似:
1
| hugo v0.82.1+extended linux/amd64 ...
|
有 extended 字样就对了,以后主题要编译 SCSS 也不慌。
四、创建站点、装主题、写第一篇
站点放在 /var/www 下面,目录干净点:
1
2
3
4
5
6
7
| sudo mkdir -p /var/www
sudo chown -R $USER:$USER /var/www
cd /var/www
hugo new site myblog
cd myblog
git init
|
主题我先用社区里常见的轻量主题(以 PaperMod 为例,换成你喜欢的也行):
1
| git submodule add https://github.com/adityatelange/hugo-PaperMod.git themes/PaperMod
|
写配置文件 config.toml(0.82 时代还是 toml 居多):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| cat > config.toml << 'EOF'
baseURL = "http://你的公网IP/"
languageCode = "zh-cn"
title = "dmaxの小屋"
theme = "PaperMod"
hasCJKLanguage = true
[params]
description = "个人博客记录"
defaultTheme = "auto"
ShowReadingTime = true
[[menu.main]]
name = "首页"
url = "/"
weight = 10
[[menu.main]]
name = "归档"
url = "/archives/"
weight = 20
EOF
|
创建文章:
1
| hugo new posts/hello-world.md
|
编辑 content/posts/hello-world.md,把 draft: true 改成 false,写点内容保存。然后构建:
1
2
| hugo --minify
ls public
|
看到一堆 index.html、css、文章目录,说明静态站已经「烤」好了。
五、把 Nginx 指到 public
丢掉默认站点,换成我们的博客根目录:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| sudo tee /etc/nginx/sites-available/myblog << 'EOF'
server {
listen 80;
server_name _;
root /var/www/myblog/public;
index index.html;
location / {
try_files $uri $uri/ =404;
}
location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg|woff2?)$ {
expires 7d;
add_header Cache-Control "public";
}
}
EOF
sudo ln -sf /etc/nginx/sites-available/myblog /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx
|
再打开 http://公网IP,应该能看到博客首页,而不是 Nginx 默认页。这一刻——白嫖机 + 静态生成器 + 几行配置——个人站就活了。
六、以后怎么更新文章
流程固定成肌肉记忆:
1
2
3
4
5
| cd /var/www/myblog
hugo new posts/又一篇.md
# 编辑 Markdown,确认 draft: false
hugo --minify
# Nginx 直接读 public,一般不用重启
|
想偷懒可以丢个脚本:
1
2
3
4
5
6
7
8
| cat > /var/www/myblog/deploy.sh << 'EOF'
#!/bin/bash
set -e
cd /var/www/myblog
hugo --minify
echo "已发布 -> /var/www/myblog/public"
EOF
chmod +x /var/www/myblog/deploy.sh
|
七、有域名之后再说(今日预告)
今天先用公网 IP 顶着。等域名备案/解析好了,再改 baseURL,并可以上 Let’s Encrypt:
1
2
3
| sudo apt install -y certbot python3-certbot-nginx
# 把 Nginx 的 server_name 和 Hugo 的 baseURL 改成域名后:
sudo certbot --nginx -d 你的域名.com
|
HTTPS 小锁亮起来,博客才算「像样」一点。那是下一篇的事。
小结
今天完成的事:
- 用 Amazon 免费额度开了 Ubuntu 20.04 小机器
- 初始化:更新、防火墙、Nginx、时区
- 安装 Hugo Extended 0.82.1
- 建站、装主题、生成
public - Nginx 反代(其实是直出)静态文件,公网可访问
工具链很轻:没有 MySQL,没有 PHP,没有 Docker。免费机磁盘和内存都金贵,这种玩法刚刚好。
博客名叫 dmaxの小屋——小屋虽小,钥匙在自己手里。先写到这里,今晚值得吃顿好的。