Cet article détaillera comment créer une image Docker.

Principe

  1. Utilisez Hugo pour créer le site et générer des fichiers statiques.
  2. Utilisez Nginx comme serveur pour gérer les requêtes.

Fichier Docker

Créez un Dockerfile à la racine du site.

 1###############
 2# Build Stage #
 3###############
 4FROM razonyang/hugo as builder
 5
 6WORKDIR /src
 7COPY . /src
 8
 9ARG HUGO_ENV=production
10ENV HUGO_ENV=${HUGO_ENV}
11
12# Base URL
13ARG HUGO_BASEURL=/
14ENV HUGO_BASEURL=${HUGO_BASEURL}
15
16# Module Proxy
17ARG HUGO_MODULE_PROXY=
18ENV HUGO_MODULE_PROXY=${HUGO_MODULE_PROXY}
19
20# NPM mirrors, such as https://registry.npmmirror.com
21ARG NPM_CONFIG_REGISTRY=
22ENV NPM_CONFIG_REGISTRY=${NPM_CONFIG_REGISTRY}
23
24# Install dependencies
25RUN npm install
26RUN npm install -g @fullhuman/postcss-purgecss rtlcss
27
28# Build site
29RUN hugo --minify --gc --enableGitInfo
30
31# Set the fallback 404 page if defaultContentLanguageInSubdir is enabled, please replace the `en` with your default language code.
32# RUN cp ./public/en/404.html ./public/404.html
33
34###############
35# Final Stage #
36###############
37FROM nginx
38COPY --from=builder /src/public /app
39COPY deploy/nginx/default.conf /etc/nginx/conf.d/default.conf
  • La construction comporte deux étapes, une étape de construction et une étape de publication. L’étape de publication contient uniquement les fichiers statiques générés, en gardant la taille de l’image Docker aussi petite que possible.
  • Si defaultContentLanguageInSubdir est activé, veuillez le décommenter et le modifier à la demande.
  • Le paramètre HUGO_BASEURL permet de spécifier le baseURL du site lors du build, et est généralement utilisé lorsque le baseURL est différent de la configuration, vous pouvez donc le supprimer vous-même si vous n’en avez pas besoin.
  • HUGO_MODULE_PROXY et NPM_CONFIG_REGISTRY sont des paramètres de construction facultatifs qui peuvent être supprimés s’ils ne sont pas nécessaires.

##Nginx

Créez un deploy/nginx/default.conf à la racine du site :

 1server {
 2    listen       80;
 3    listen  [::]:80;
 4    server_name  localhost;
 5    
 6    root   /app;
 7
 8    location / {
 9        index  index.html index.htm;
10    }
11
12    location ~* ^/([^/]+) {
13        index  index.html index.htm;
14        error_page 404 = @error;
15    }
16
17    error_page 404 /404.html;
18    location @error {
19        try_files /$1/404.html /404.html =404;
20    }
21}

Construire

1$ docker build -t mysite \
2  --build-arg HUGO_BASEURL=https://example.com \
3  .
  • mysite : le nom de l’image.
  • HUGO_BASEURL:le baseURL.

Pour les utilisateurs situés en Chine continentale, vous devez spécifier HUGO_MODULE_PROXY et NPM_CONFIG_REGISTRY pour créer l’image avec succès et rapidement :

1$ docker build -t mysite \
2  --build-arg HUGO_BASEURL=https://example.com \
3  --build-arg HUGO_MODULE_PROXY=https://goproxy.cn \
4  --build-arg NPM_CONFIG_REGISTRY=https://registry.npmmirror.com \
5  .

Déploiement

Il existe de nombreuses façons de déployer une image Docker, telles que docker run, k8s, etc. Cet article n’expliquera que docker run.

Courir

1$ docker run \
2  -p 2333:80 \
3  --name mysite \
4  --restart=always \
5  mysite

Pour les tests locaux, vous devez modifier le paramètre baseURL ou le paramètre de build HUGO_BASEURL, par ex. http://localhost:2333.

Arrêt

1$ docker stop mysite

Commencer

1$ docker start mysite

Retirer

1$ docker rm mysite