Docker中的Hugo
2017-06-25 10:42:28 +08 字数:934 标签: Docker HugoHugo的安装 ¶
其实,Hugo的安装并不麻烦,尤其是在Mac上。
brew install hugo
HomeBrew的一个特点,是保持更新。 在其它环境下,想要获取最新发布的Hugo,就没那么容易了。 需要先去Hugo的Releases,查找对应的发布包,然后下载、安装。
问题往往出现在下载上。 由于GitHub的Releases,是托管在AWS上的,而中国又有众所周知的网络问题, 于是在下载稍大的文件时,会出现概率性的失败。
于是,孤就有了制作一个Docker镜像的想法。
Docker镜像 ¶
只是孤第二次发布Docker镜像,上次是GitBook。
Hugo是Golang写的,并且官方Releases的发布包也很齐全。 孤没有选择从源码编译,而是直接下载安装。 由于是Docker Hub自动编译,所以避免了中国区特有的网络问题。
在镜像的最后,使用hugo server
来作为Docker容器持续运行的进程。
思路就是这么简单,制作过程也比较顺利。 最终,发布于此——yanqd0/hugo。
Dockerfile ¶
最新Dockerfile,见Docker Hub上的相关页面。 以下展示第一版初稿,当时用的还是Hugo的0.23版本。
FROM alpine:3.6
MAINTAINER Yan QiDong <yanqd0@outlook.com>
ENV HUGO_VERSION=0.23 \
HUGO_USER=hugo \
HUGO_SITE=/srv/hugo
ENV HUGO_URL=https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_Linux-64bit.tar.gz
ADD ${HUGO_URL} /tmp/
RUN tar -xzf /tmp/*.tar.gz -C /tmp \
&& mv /tmp/hugo /usr/local/bin/ \
&& rm -rf /tmp/* \
&& adduser ${HUGO_USER} -D
USER ${HUGO_USER}
WORKDIR ${HUGO_SITE}
VOLUME ${HUGO_SITE}
EXPOSE 1313
CMD ["hugo", "server", "--bind", "0.0.0.0"]
敬请欣赏,不多解释。
只是下载或更新的话,使用docker pull yanqd0/hugo
即可。
使用docker-compose ¶
在Hugo项目的根目录,放一个docker-compose.yml
文件。
然后就可以通过简单的docker-compose up
,在任意环境中把Hugo跑在1313端口。
version: '3'
services:
hugo:
image: yanqd0/hugo
volumes:
- .:/srv/hugo
ports:
- 1313:1313
然而,这里有一个失策。
Hugo是一个静态网站生成器,hugo server
只是一个调试用的方式。
Hugo provides its own webserver which builds and serves the site. While hugo server is high performance, it is a webserver with limited options. Many run it in production, but the standard behavior is for people to use it in development and use a more full featured server such as Nginx or Caddy.
hugo server
will avoid writing the rendered and served content to disk, preferring to store it in memory.
所以,生产环境下要另外想办法。
使用docker run ¶
利用Docker,来执行静态网站生成命令,也是可行的。
#!/usr/bin/env bash
docker run --rm -v ${PWD}:/srv/hugo yanqd0/hugo hugo
缺点 ¶
Docker的优点,是环境干净。 而孤为了制作最小镜像,没有安装Git,没有安装Pygments…… 导致hugo本身的功能受到限制。