uiuifree.com

- サイト制作のノウハウと最適化を目指して-

2022.4.11Strapi4をDockerで運用するときのDockerfileの書き方を紹介

Strapi4をDockerで運用するときのDockerfileの書き方を紹介

前提

Strapiが4系になっていて久々にバージョンアップするかと意気込んでたら、3系と違いDBも公式Dockerも提供してなかったので新規で運用作り直しました。自分で管理しやすいように構成を変更しています。

デプロイ環境

TruenasのDocker環境にデプロイしてStrapiを稼働させます。Volume先がシンボリックリンクがNGとなっており、Strapiの環境すべてをマウントして運用はできませんでした。

node環境

バージョン管理としてnodenvを使用中

Strapi公開までの流れ

Strapiのインストール

ローカル環境にStrapiをインストールまでの手順を紹介します。 まずはディレクトリ整備を諸々

mkdir ./strapi-project/
cd strapi-project/
echo 16.14.2 > .node-version

公式ドキュメントに従いStrapiをインストール

yarn create strapi-app app

MySQLで運用をしていますので、Choose your installation typeはQuickstart (recommended) を選択

アカウントとコンテンツの作成

インストールが完了したら自動的にブラウザが立ち上がり、アカウント作成画面になります。 strapi_account

ContentTypeの作成など諸々行い、本番で運用したい状態まで持っていきます。

Dockerfileの作成

Dockerfileは次のように作成します。コンセプトとしては全てローカルで作ってしまって本番環境ではpublicフォルダのみvolume mountを行います。 コンテンツタイプなど変更するケースもあると思いますが、基本的にはローカル環境で完結させ追加で出来たファイルをまとめてBuildして、そのまま運用を行います。

FROM node:16.14.2-alpine
WORKDIR /app
COPY ./app /app
RUN yarn install
RUN npm install --ignore-scripts=false --verbose sharp

EXPOSE 1337
CMD [ "yarn", "start" ]

動作確認

docker build -t my-image:latest .
docker run -p 1337:1337 -v ./public:/app/public/  --env ADMIN_JWT_SECRET=hogehoge my-image:latest

MySQLの接続情報なども環境変数として設定を推奨、変数名はdatabase.jsに記載されています。

cat app/config/database.js 

まとめ

元々は全ファイルvolume mountして運用していましたが、公開ファイル以外でimageを作って運用するほうが圧倒的に楽でした。 全ファイルしてしまうとバージョンアップの際に考慮することが増え結果として3系の時は放置してしまっていましたが、この構成だとimageの差し替えで運用できるのが良いかと思います。

ちなみにv3からv4に移行する時に過去記事の移行はスマートに出来なかったので、新旧のデータベース用意して無理やりInsertで流し込みました。

目次
PROFILE

このサイトを運営してるuiuifreeです。
渋谷のベンチャー企業で2年ほど新規事業を担当した後にフリーランスエンジニアにキャリア転換。
求人サイトの開発が多くエンジニア/看護師/保育士などの分野でサイトを運営しています。

アウトプット中の技術

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)