使用Nginx和Hugo建立静态网站

安装服务器和设置防火墙

$ sudo apt install nginx ufw
$ sudo ufw allow 22
$ sudo ufw reload

$ sudo ufw allow 'Nginx Full'
$ sudo ufw reload

查看防火墙状态

$ sudo ufw status

配置 Nginx server

$ sudo systemctl start nginx

默认网页根目录在 /var/www/. 创建新站点文件 /etc/nginx/sites-available 使用 example.com:

$ sudo emacs /etc/nginx/sites-available/example.com

粘贴以下内容:

server {
   listen 80; # Configure the server for HTTP on port 80
   server_name example.com; # Your domain name
   root /var/www; # The files for your server
   index index.html; # You will create this file shortly
}

修改文件夹权限

$ sudo chmod 0755 /your/path/to/www

新建 index.html 测试 Nginx 是否正常运行:

$ sudo emacs /var/www/index.html
$ sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
$ sudo systemctl restart nginx

设置 SSL (HTTPS)

$ sudo apt install python3-certbot-nginx
$ sudo certbot --nginx
$ sudo systemctl restart nginx

设置自动更新证书

$ sudo crontab -e

设置为每天 09:00 运行,在最后一行添加如下:

0 9 * * * certbot renew --post-hook "systemctl reload nginx"

更新的时间可以灵活设置。First column specifies the minutes and the second specifies the hour (24h clock).

Note: 由于使用 SSL, 开启 gzip 可能会影响安全。此处跳过。

其他功能配置

启用 HTTPS/2

$ sudo emacs /etc/nginx/sites-available/example.com

listen 443 ssl; # managed by Certbot

替换成

listen 443 ssl http2; # managed by Certbot

重启 Nginx server。

启用客户端缓存

$ sudo emacs /etc/nginx/sites-available/example.com

Copy

将下方代码插入第一个域名解析块末尾:

server{
   # ...
   # Stuff
   # ...

   # Media
   location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|mp4|ogg|ogv|webm|htc)$ {
       expires 30d;
  }

   # CSS and Js
   location ~* \.(css|js)$ {
       expires 7d;
  }

设置 Hugo 站点

安装 Hugo 软件

$ sudo apt install hugo

Copy

创建新站点 $ hugo newsite sitename

下载主题包 $ git clone https://github.com/Track3/hermit.git themes/hermit

修改站点根目录下的配置文件config.toml,以启用新主题 theme = 'hermit'

建立新文章 $ hugo new posts/some-post.md

测试站点运行,在站点根目录下运行如下 $ hugo server -D 使用 -D 选项以显示草稿文章。

编译生成站点文件 $ hugo 将会在站点根目录下新建一个public文件夹,里面包括网站的发布到外部服务器的所有内容。

如果 web 服务器是远程服务器,可以使用rsync软件将网页内容同步过去:

$ rsync -aAXv /path/to/sitename/public/ user@example.com:/var/www/ --delete

上面的命令需要确保user用户对远程服务器的www文件夹有写入权限,并且SSH端口处于开启状态。

使用自定义的 404 页面需要在 Nginx 中设置 /etc/nginx/sites-available/yoursite.com:

error_page 404 /404.html;

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注