VPSのサムネイル

VPS

DockerでStrapi 5プロジェクトを立ち上げる方法

公開日: 2024.9.25

Version 3系から公式Dockerイメージが更新されていないStrapi 5プロジェクトをDockerで立ち上げる方法を解説します。

編集ノート:SERVERSUSでは、パートナーリンクからコミッションを得ています。コミッションが記事の意見や、サービスの評価に影響を与えることはありません。

現在のバージョンのStrapi公式コンテナイメージはない

記事作成時のStrapiはバージョン5系ですが、このバージョンのStrapi公式コンテナイメージは用意されていません。

古いバージョンはDockerHubに公式イメージが公開されていましたが、バージョン3系で止まっています。

strapi/strapi

Strapi 5系をDockerで使う条件

まずは、DockerでStrapi 5プロジェクトを立ち上げる条件を見ていきましょう。

  1. Dockerがインストールされていること
  2. 対応するバージョンのNode.jsがインストールされていること
  3. 既存のStrapi 5プロジェクト、またはクイックスタートガイドを使用して作成した新しいプロジェクトがあること

Dockerfileからイメージをビルドするのにかなりのマシンパワーを使うため、ある程度のスペックのあるサーバー、PCで実行するのをお勧めします。また、ビルドでメモリを大量に使うので、Dockerのメモリ使用量に制限をかけている場合、「JavaScript heap out of memory」でビルドがエラーになることがあります。

作業マシンが低スペックの場合は、8コア・8GBメモリ程度のVPSを時間レンタルしてビルドして、イメージをGithubの自身のコンテナ・レジストリにアップロードすると時短になります。

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の新着ガイド

もっと見る