Strapiが4系になっていて久々にバージョンアップするかと意気込んでたら、3系と違いDBも公式Dockerも提供してなかったので新規で運用作り直しました。自分で管理しやすいように構成を変更しています。
TruenasのDocker環境にデプロイしてStrapiを稼働させます。Volume先がシンボリックリンクがNGとなっており、Strapiの環境すべてをマウントして運用はできませんでした。
バージョン管理としてnodenvを使用中
ローカル環境に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) を選択
インストールが完了したら自動的にブラウザが立ち上がり、アカウント作成画面になります。
ContentTypeの作成など諸々行い、本番で運用したい状態まで持っていきます。
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で流し込みました。