⛳
DockerでZenn CLI環境を整える
更新ログ
- 2021/Jan/04 新規エントリ
このエントリで言いたいこと
Docker上でNode.jsによるZenn執筆環境をつくった。
環境
- MacBook Pro (13-inch, 2019, Four Thunderbolt 3 ports)
プロセッサ:2.4 GHz クアッドコアIntel Core i5
メモリ:16 GB 2133 MHz LPDDR3 - MacOS Big Sur (11.1)
- Docker Desktop (3.0.2(50996))
本論
きっかけ
ブログサービスQrunchが終了したためZennに移行しようとしたが、Node.js環境を入れるのが億劫になっていて放置していた。
ちょうどDockerに興味があったので、この際Docker上でNode.jsを動かしてみようと思った。
想定運用手順
- GitHub連携でブログ公開する。ただし、GitHubへのpushは自プロセスから。
新規ファイル作成、プレビューをDocker上のNode.js環境で行う。 - Dockerはdocker-composeから起動する。
類似案件調査
他にもやってる人いるだろうと思って検索し、以下の2つを参考にすることにした。
どちらもDocker上でGitを呼んでいるので、そこはカスタマイズする。
フォルダ構成
Zenn CLI dockerで簡単構築とほぼ同じ。
zenn-blog
├── articles
│ ├── 00_template.md
│ ├── 4a321e3286b271ed79dc.md
│ └── 95742c7b310169f74213.md
├── books
├── docker
│ └── Dockerfile
├── docker-compose.yml
├── .gitignore
└── workspace.code-workspace
Docker環境
Zenn CLIをインストールするによると、2021/1/4現在Node.js v15以降ではzenn-cliを使えないため、v14をインストールする。
タグ名はdockerhubのNode.jsイメージを参照。
Zennの執筆環境をVSCode + Dockerで作ってみたを参考にroot以外のユーザを作成する。
解釈できなかったオプションパラメータは適宜変更。
adduserの'-S'オプションは分からなかったので削除。
zenn-cliのインストール & 初期化まで行う。
Dockerfile
FROM node:14
ARG USER_NAME
ARG GROUP_NAME
ARG USER_UID
ARG USER_GID
RUN deluser --remove-home node \
&& addgroup --gid $USER_GID $GROUP_NAME \
&& adduser --uid $USER_UID --shell /bin/sh $USER_NAME --ingroup $GROUP_NAME
RUN npm init --yes \
&& npm install -g zenn-cli@latest \
&& npx zenn init
RUN mkdir /home/$USER_NAME/contents \
&& chown -R ${GROUP_NAME}:${USER_NAME} /home/$USER_NAME/contents
USER $USER_NAME
WORKDIR /home/$USER_NAME/contents
docker-compose側で、containerを立ち上げた後にpreviewページを作成する。
docker-compose.yml
version: "3"
services:
node:
build:
context: .
dockerfile: ./docker/Dockerfile
args:
USER_NAME: ak2ume
GROUP_NAME: ak2ume
USER_UID: 1000
USER_GID: 1000
ports:
- "8000:8000"
volumes:
- .:/home/ak2ume/contents:cached
command: npx zenn preview
使い方
containerの立ち上げ
zenn-blog フォルダに移動して以下を実行する。
docker-compose up
立ち上げたあと http://localhost:8000/ にアクセスすれば記事のpreviewを見られる。
エディタでファイル保存すれば、すぐに反映される。
記事の新規作成
上記とは別プロセスでターミナルを起動し、
docker exec -it zenn-blog_node_1 zenn new:article
でslug IDを自動生成したtemplateファイルをarticleフォルダ配下に作成してくれる。
まだ分からないこと
- なし
Discussion