DockerでStrapi 5プロジェクトを立ち上げる方法
公開日: 2024.9.25
Version 3系から公式Dockerイメージが更新されていないStrapi 5プロジェクトをDockerで立ち上げる方法を解説します。
現在のバージョンのStrapi公式コンテナイメージはない
記事作成時のStrapiはバージョン5系ですが、このバージョンのStrapi公式コンテナイメージは用意されていません。
古いバージョンはDockerHubに公式イメージが公開されていましたが、バージョン3系で止まっています。
Strapi 5系をDockerで使う条件
まずは、DockerでStrapi 5プロジェクトを立ち上げる条件を見ていきましょう。
- Dockerがインストールされていること
- 対応するバージョンのNode.jsがインストールされていること
- 既存のStrapi 5プロジェクト、またはクイックスタートガイドを使用して作成した新しいプロジェクトがあること
Dockerfileからイメージをビルドするのにかなりのマシンパワーを使うため、ある程度のスペックのあるサーバー、PCで実行するのをお勧めします。また、ビルドでメモリを大量に使うので、Dockerのメモリ使用量に制限をかけている場合、「JavaScript heap out of memory」でビルドがエラーになることがあります。
作業マシンが低スペックの場合は、8コア・8GBメモリ程度のVPSを時間レンタルしてビルドして、イメージをGithubの自身のコンテナ・レジストリにアップロードすると時短になります。
【2024年版】大規模サイトの運用も視野に!「vCPU・8コア」のVPSサービスを徹底比較!どれがベスト?
構成次第では大規模サイトの運用も視野に入る8コアプランのVPS。2024年版の最新情報をもとに、コスト、性能、機能など、複数側面から評価し、ベストなサービス・プランを紹介します。
DockerでStrapi 5プロジェクトを立ち上げる
ローカルでStrapi 5プロジェクトを作成する
まずは、ローカルでプレーンなStrapi 5プロジェクトを立ち上げます。
というのも、Dockerイメージを作成するのに、稼働しているStrapiプロジェクトのpackage.jsonなどのファイルが必要だからです。既存のStrapi 5プロジェクトがある場合は、そちらを使うことができます。
yarn create strapi
Need to install the following packages:
[email protected]
Ok to proceed? (y) y
Strapi v5.0.0 🚀 Let's create your new project
? Please log in or sign up. Skip
? Do you want to use the default database (sqlite) ? No
? Choose your default database client mysql
? Database name: strapi
? Host: 127.0.0.1
? Port: 3306
? Username: admin
? Password: ********
? Enable SSL connection: No
? Start with an example structure & data? Yes
? Start with Typescript? Yes
? Install dependencies with npm? Yes
? Initialize a git repository? No
Dockerfileを作成し、イメージをビルドする
続いて、Strapi 5のDockerイメージを作成します。作業は先ほどのStrapiプロジェクトディレクトリ内で行います。ここは地味に重要です。
また、DockerfileはStrapiプロジェクトディレクトリに、以下のように作成します。
FROM node:18-alpine3.18
# Installing libvips-dev for sharp Compatibility
RUN apk update && apk add --no-cache build-base gcc autoconf automake zlib-dev libpng-dev nasm bash vips-dev git
ARG NODE_ENV=development
ENV NODE_ENV=${NODE_ENV}
WORKDIR /opt/
COPY package.json yarn.lock ./
RUN yarn global add node-gyp
RUN yarn config set network-timeout 600000 -g && yarn install
ENV PATH /opt/node_modules/.bin:$PATH
WORKDIR /opt/app
COPY . .
RUN chown -R node:node /opt/app
USER node
RUN ["yarn", "build"]
EXPOSE 1337
CMD ["yarn", "develop"]
Dockerfile、package.json、yarn.lockが同じディレクトリにあることを確認してから、
docker build -t strapi .
でイメージをビルドします。
docker-composeの準備する
DBなどなるべく本番で使える環境を構築したいので、docker-composeを使ってコンテナ群として管理します。
services:
strapi:
container_name: strapi
build: .
image: strapi:latest
restart: unless-stopped
env_file: .env
environment:
DATABASE_CLIENT: ${DATABASE_CLIENT}
DATABASE_HOST: strapiDB
DATABASE_PORT: ${DATABASE_PORT}
DATABASE_NAME: ${DATABASE_NAME}
DATABASE_USERNAME: ${DATABASE_USERNAME}
DATABASE_PASSWORD: ${DATABASE_PASSWORD}
JWT_SECRET: ${JWT_SECRET}
ADMIN_JWT_SECRET: ${ADMIN_JWT_SECRET}
APP_KEYS: ${APP_KEYS}
NODE_ENV: ${NODE_ENV}
volumes:
- ./config:/opt/app/config
- ./src:/opt/app/src
- ./package.json:/opt/package.json
- ./yarn.lock:/opt/yarn.lock
- ./.env:/opt/app/.env
- ./public/uploads:/opt/app/public/uploads
ports:
- "1337:1337"
networks:
- strapi
depends_on:
- strapiDB
strapiDB:
container_name: strapiDB
platform: linux/amd64 #for platform error on Apple M1 chips
restart: unless-stopped
env_file: .env
image: mysql:5.7
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_USER: ${DATABASE_USERNAME}
MYSQL_ROOT_PASSWORD: ${DATABASE_PASSWORD}
MYSQL_PASSWORD: ${DATABASE_PASSWORD}
MYSQL_DATABASE: ${DATABASE_NAME}
volumes:
- strapi-data:/var/lib/mysql
#- ./data:/var/lib/mysql # if you want to use a bind folder
ports:
- "3306:3306"
networks:
- strapi
volumes:
strapi-data:
networks:
strapi:
name: Strapi
driver: bridge
各種設定パラメータは.envで管理します。
# データベースの設定
DATABASE_CLIENT=mysql
DATABASE_HOST=strapiDB
DATABASE_PORT=3306
DATABASE_NAME=strapi
DATABASE_USERNAME=admin
DATABASE_PASSWORD=password
# JSON Web Tokenの署名用シークレット
JWT_SECRET='your-random-jwt-secret'
# 管理者用JWTの署名用シークレット
ADMIN_JWT_SECRET='another-random-admin-secret'
# アプリケーション用の鍵リスト(カンマ区切り)
APP_KEYS='random-key1,random-key2,random-key3,random-key4'
# 実行環境の設定(productionまたはdevelopment)
NODE_ENV=production
# MySQLの設定(strapiDBコンテナ用)
MYSQL_USER=admin
MYSQL_ROOT_PASSWORD=password
MYSQL_PASSWORD=password
MYSQL_DATABASE=strapi
ここまできたら、dockerコンテナを立ち上げれば完了です。
docker-compose up -d
「サーバーIP:1337」でアクセスするとstrapiサーバーが立ち上がっているはずです。
価格は記載がある場合を除き、すべて税込みです。
関連キーワード
VPSの新着記事
- VPS「4倍の処理能力」の実力は?シンVPSの最安値プランをベンチマーク比較 2024.7.23
- VPSVPSのDockerアプリケーションイメージでEC-CUBEサイトを超速で構築する方法 2024.7.20
- VPSVPSの低価格プランを選ぶ際のポイントと注意点 2024.6.4
- VPSドメインが無料になるVPSはあるのか? 2024.5.27
- VPSVPSサーバーの「時間課金」の仕組みをわかりやすく解説 2024.5.23
- VPSNextcloudのOSS版とEnterprise版の違いまとめ 2023.12.26
- VPSどちらを選ぶべき?ownCloudとNextcloudのOSS版の違いを徹底比較! 2023.12.25
- VPSVPSで採用されている主なLinux OSの種類と特徴まとめ 2023.12.21