在 Docker Container 上撰寫 Hugo Blog
TL;DR Hugo 介紹: Hugo 是一個開源的靜態網站產生器,擁有極快的網站架設速度,適合用於建立網站的框架。 Docker 設定與建置: 提供了詳細的 Dockerfile 以及如何使用它來建構 Hugo 的 Docker image,並且說明如何啟動、停止和刪除容器。 Hugo 的基本用法: 包括 Hugo 的安裝測試、命令查看、建立網站、處理草稿和過期內容、以及開發和測試網站的方法。 部署網站: 提到如何在準備部署網站時,透過 Hugo 建立網站,並且說明了在簡單的託管環境中如何上傳文件,以及使用 CI/CD 工作流程進行網站部署的常見做法。 附加功能: 也介紹如何使用 LiveReload 進行即時重新載入和自動重定向,以提升開發體驗。 Docker Setup 首先建立 dockerfile, 能夠建立 image, 使用這個 image 建立 container. FROM golang:alpine as builder ENV GOGC=50 # gcc/g++ are required to build SASS libraries for extended version RUN apk update && \ # [自選] 編譯 Image 時間較短 apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community hugo && \ # [自選] 編譯 Image 時間太長 # apk add --no-cache gcc g++ musl-dev git && \ # go install -tags extended github.com/gohugoio/hugo@latest && \ # [自選] 確認 hugo 安裝路徑及版本 $(which hugo) && hugo version ######################################################## FROM alpine:latest as base LABEL maintainer="yingchao <yingchao.tw@google.com>" # 更新 apt 及安裝套件. RUN apk update && apk add --no-cache \ ca-certificates \ libc6-compat \ libstdc++ \ procps \ shadow \ curl \ sudo \ git \ # [自選] vim 套件安裝,會增加 image. vim ######################################################## FROM base as user_config ARG USER ARG USERID ARG GROUPID ARG PASSWORD # 在 OSX 環境上,一般用戶 UID 為 501,小於預設 UID_MIN 1000 RUN echo -e "UID_MIN 500\nUID_MAX 60000" > /etc/login.defs; # 確認群組是否存在,如不存在則建立群組,在 docker 編譯失敗時,暫存中會有上一次編譯的群組名稱。 RUN if ! getent group $GROUPID > /dev/null 2>&1; then \ groupadd -g $GROUPID $USER; \ else \ groupmod -n $USER $(getent group $GROUPID | cut -d: -f1); \ fi # 新增用戶並設定 UID 及 GID RUN useradd -m -u $USERID -g $GROUPID -s /bin/bash $USER # 設定用戶密碼 RUN echo "$USER:$PASSWORD" | chpasswd RUN echo "%$USER ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers RUN addgroup $USER wheel ######################################################## FROM base as final # 設定環境變數 ARG USER ENV PROJECT=/home/$USER/usbridge COPY --from=user_config /etc/sudoers /etc/passwd /etc/group /etc/ COPY --from=user_config /home/$USER /home/$USER COPY --from=builder /usr/bin/hugo /usr/bin/hugo COPY .profile /home/$USER/ # [自選] 編譯 Image 時間太長 # COPY --from=builder /go/bin/hugo /usr/bin/hugo # 登入非 root 用戶 USER $USER CMD ["/bin/sh", "-l"] # 設定工作目錄 WORKDIR $PROJECT # 轉 HUGO 預設 PORT 1313 EXPOSE 1313 Build docker build 命令用於從 Dockerfile 構建 Docker image。 docker build 命令通過讀取 Dockerfile 中定義的指令,逐步構建 image,並將最終結果保存到 local 端的 image 中。 ...