安装服务器和设置防火墙
$ 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;