使用 Nginx 镜像部署

本节将介绍如何构建站点镜像,以使用 Nginx 作为网络服务器为 Hugo 生成的静态文件提供服务。

Nginx 镜像

Size

我们提供了一个内置的 Nginx 镜像 - hugomods/hugo:nginx,其包含了一个默认配置。若其无法满足你的需求,你完全可以创建你自己的 Nginx 镜像,而本文将以 hugomods/hugo:nginx 举例。

创建 Dockerfile

首先于站点根目录创建 Dockerfile 文件。

Dockerfile
 1#####################################################################
 2#                            Build Stage                            #
 3#####################################################################
 4FROM hugomods/hugo:exts as builder
 5# Base URL
 6ARG HUGO_BASEURL=
 7ENV HUGO_BASEURL=${HUGO_BASEURL}
 8# Build site
 9COPY . /src
10# Replace below build command at will.
11RUN hugo --minify --enableGitInfo
12# Set the fallback 404 page if defaultContentLanguageInSubdir is enabled,
13# please replace the `en` with your default language code.
14# RUN cp ./public/en/404.html ./public/404.html
15
16#####################################################################
17#                            Final Stage                            #
18#####################################################################
19FROM hugomods/hugo:nginx
20# Copy the generated files to keep the image as small as possible.
21COPY --from=builder /src/public /site
  1. build 阶段构建站点并将生成的文件保存于发布文件夹(默认为 /src/public)。
  2. final 阶段将于 build 阶段生成的文件复制到 Nginx 站点目录(hugomods/hugo:nginx 默认站点目录为 /site)。

测试构建的镜像

1docker build \
2  -t user/my-site:test \
3  --build-arg HUGO_BASEURL=http://localhost:8080 \
4  .
1docker build `
2  -t user/my-site:test `
3  --build-arg HUGO_BASEURL=http://localhost:8080 `
4  .
1docker run -p 8080:80 user/my-site:test
  1. -t 指定镜像名称和标签。
  2. --build-arg HUGO_BASEURL=http://localhost:8080 覆盖 baseURL

现在构建的站点可以于 http://localhost:8080/ 进行预览。

构建并推送镜像

当你对测试结果感到满意后,就可以构建生产环境的镜像,然后将其推送到容器仓库,再部署到服务器、K8s 集群等。

1docker build -t user/my-site .