docker-hexo

Hexo をDocker Compose を使って動かしてみました。

Dockerfile の準備

node:alpine をベースにテーマで使用するモジュール群と、Web から更新するためのhexo-adminを追加しています。

./Dockerfile
FROM node:alpine

MAINTAINER ktkr3d <ktkr3d@gmail.com>

WORKDIR /hexo

RUN \
apk add --no-cache git openssh-client \
&& npm install hexo-cli -g \
&& hexo init . \
&& npm install \
&& npm install hexo-generator-sitemap --save \
&& npm install hexo-generator-feed --save \
&& npm install hexo-generator-searchdb --save \
&& npm install hexo-deployer-git --save \
&& npm install hexo-tag-bootstrap --save \
&& npm install hexo-generator-search --save \
&& npm install hexo-admin --save

VOLUME ["/hexo/source", "/hexo/themes", "/root/.ssh"]

EXPOSE 4000

COPY hexo-deploy.sh /hexo/hexo-deploy.sh
COPY docker-entrypoint.sh /docker-entrypoint.sh

ENTRYPOINT ["/docker-entrypoint.sh"]

CMD ['/bin/bash']

エントリポイントシェル

docker-entrypoint.sh
#!/bin/sh

umask 0000

git config --global user.name $GIT_USER_NAME
git config --global user.email $GIT_USER_EMAIL

/usr/bin/env hexo server

hexo-admin モジュール用のデプロイシェル

https://github.com/vladpurga/hexo-admin-deploy-command

./hexo-deploy.sh
#!/usr/bin/env sh
hexo deploy

Docker イメージのビルド

$ docker build -t local/hexo .

Docker Compose の準備

GIT_USER_NAMEGIT_USER_EMAILにdeploy するためのユーザ情報を設定します。
リスタート時に自動起動するようにrestart: alwaysを指定しました。

./docker-compose.yml
version: '2'
services:
hexo-server:
restart: always
image: local/hexo
container_name: hexo-server
ports:
- "4000:4000"
volumes:
- /etc/localtime:/etc/localtime:ro
- $HOME/.ssh:/root/.ssh
- $PWD/source:/hexo/source
- $PWD/themes:/hexo/themes
- $PWD/_config.yml:/hexo/_config.yml
environment:
- GIT_USER_NAME=ktkr3d
- GIT_USER_EMAIL=ktkr3d@gmail.com

既存Hexo 環境のコピー

以下の構成になるように、_config.ymlsource/themes/を既存のHexo 環境からコピーします。コピーしないとHexo のデフォルトの状態になります。

.
├── Dockerfile
├── README.md
├── _config.yml
├── docker-compose.yml
├── docker-entrypoint.sh
├── hexo-deploy.sh
├── source/
└── themes/

起動と停止

$ docker-compose up -d
$ docker-compose down

Web からのアクセス

  • プレビュー画面
    http://localhost:4000/
  • 管理画面
    http://localhost:4000/admin/
    ポストの追加、ページの追加、デプロイ等できるらしいけれどあまり使ったことない。
    移行した環境などで、初めてGitHubにデプロイする場合は、初回一回はコマンドで対話的に実行するとよい。

コマンドでのアクセス

普通にHexo のコマンドをDocker 経由で実行します。

$ docker exec -it hexo-server hexo new post "Test"
$ docker exec -it hexo-server hexo generate
$ docker exec -it hexo-server hexo deploy