Cet article détaillera comment créer une image Docker.
Principe
- Utilisez Hugo pour créer le site et générer des fichiers statiques.
- 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
defaultContentLanguageInSubdirest activé, veuillez le décommenter et le modifier à la demande. - Le paramètre
HUGO_BASEURLpermet de spécifier lebaseURLdu site lors du build, et est généralement utilisé lorsque lebaseURLest différent de la configuration, vous pouvez donc le supprimer vous-même si vous n’en avez pas besoin. HUGO_MODULE_PROXYetNPM_CONFIG_REGISTRYsont 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:lebaseURL.
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
baseURLou le paramètre de buildHUGO_BASEURL, par ex.http://localhost:2333.
Arrêt
1$ docker stop mysite
Commencer
1$ docker start mysite
Retirer
1$ docker rm mysite