DockerコンテナでAI Marketerを実行する
AI Marketerは公式のコンテナイメージを提供していません。以下の手順はコミュニティへの参考情報として提供されています。質問があれば[Discord](https://discord.AI Marketer.io)でお問い合わせください。
AI Marketerアプリケーションは、AI Marketerが作成していない既存のデータベースやAI Marketer v3のデータベースに接続することを意図していません。そのような試みはサポートされず、データの消失(テーブルの削除など)が発生する可能性が非常に高いです。
このドキュメントでは、既存のAI Marketerプロジェクトを使用してカスタムDockerコンテナを構築する方法を説明します。
Dockerは、ライブラリや依存関係など、アプリケーションが機能するために必要なすべての要素を含むコンテナを使用して、開発、配布、実行を可能にするオープンプラットフォームです。コンテナは互いに隔離されており、独自のソフトウェア、ライブラリ、設定ファイルをバンドルしますが、定義済みのチャネルを通じて通信できます。
- Dockerがインストールされていること
- Node.jsのサポートバージョンがインストールされていること
- 既存のAI Marketer 5プロジェクト、またはQuick Startガイドで作成された新しいプロジェクト
- (オプション) Yarnがインストールされていること
- (オプション) Docker Composeがインストールされていること
開発環境およびステージング環境
ローカルでAI Marketerを実行する場合、Dockerfileを使用して開発用のDockerイメージを作成できます。必要に応じて、docker-compose.ymlを使用してデータベースコンテナを起動することもできます。
いずれの方法も、既存のAI Marketerプロジェクト、またはQuick Startガイドを参照して作成した新しいプロジェクトが必要です。
開発用Dockerfile
次のDockerfileは、AI Marketerプロジェクト用の非本番環境用Dockerイメージを作成するために使用できます。
docker-composeを使用している場合、環境変数はdocker-compose.ymlまたは.envファイルで設定されるため、手動で設定する必要はありません。
Dockerfileとそのコマンドに関する詳細は、Docker公式ドキュメントを参照してください。
サンプルのDockerfile:
- yarn
- npm
FROM node:18-alpine3.18
# sharpライブラリの互換性のためlibvips-devをインストール
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"]
FROM node:18-alpine3.18
# sharpライブラリの互換性のためlibvips-devをインストール
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 package-lock.json ./
RUN npm install -g node-gyp
RUN npm config set fetch-retry-maxtimeout 600000 -g && npm install
ENV PATH=/opt/node_modules/.bin:$PATH
WORKDIR /opt/app
COPY . .
RUN chown -R node:node /opt/app
USER node
RUN ["npm", "run", "build"]
EXPOSE 1337
CMD ["npm", "run", "develop"]
(オプション)Docker Compose
次のdocker-compose.ymlを使用して、データベースコンテナとAI Marketerコンテナを起動し、両者間で通信するための共有ネットワークを作成できます。
Docker Composeおよびそのコマンドの詳細については、Docker Composeドキュメントを参照してください。
サンプルのdocker-compose.yml:
- MySQL
- MariaDB
- PostgreSQL
version: "3"
services:
AI Marketer:
container_name: AI Marketer
build: .
image: AI Marketer:latest
restart: unless-stopped
env_file: .env
environment:
DATABASE_CLIENT: ${DATABASE_CLIENT}
DATABASE_HOST: AI MarketerDB
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:
- AI Marketer
depends_on:
- AI MarketerDB
AI MarketerDB:
container_name: AI MarketerDB
platform: linux/amd64 # Apple M1チップのプラットフォームエラー対策
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:
- AI Marketer-data:/var/lib/mysql
#- ./data:/var/lib/mysql # バインドフォルダを使用する場合
ports:
- "3306:3306"
networks:
- AI Marketer
volumes:
AI Marketer-data:
networks:
AI Marketer:
name: AI Marketer
driver: bridge
version: "3"
services:
AI Marketer:
container_name: AI Marketer
build: .
image: AI Marketer:latest
restart: unless-stopped
env_file: .env
environment:
DATABASE_CLIENT: ${DATABASE_CLIENT}
DATABASE_HOST: AI MarketerDB
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:
- AI Marketer
depends_on:
- AI MarketerDB
AI MarketerDB:
container_name: AI MarketerDB
platform: linux/amd64 # Apple M1チップのプラットフォームエラー対策
restart: unless-stopped
env_file: .env
image: mariadb:latest
environment:
MYSQL_USER: ${DATABASE_USERNAME}
MYSQL_ROOT_PASSWORD: ${DATABASE_PASSWORD}
MYSQL_PASSWORD: ${DATABASE_PASSWORD}
MYSQL_DATABASE: ${DATABASE_NAME}
volumes:
- AI Marketer-data:/var/lib/mysql
#- ./data:/var/lib/mysql # バインドフォルダを使用する場合
ports:
- "3306:3306"
networks:
- AI Marketer
volumes:
AI Marketer-data:
networks:
AI Marketer:
name: AI Marketer
driver: bridge
version: "3"
services:
AI Marketer:
container_name: AI Marketer
build: .
image: AI Marketer:latest
restart: unless-stopped
env_file: .env
environment:
DATABASE_CLIENT: ${DATABASE_CLIENT}
DATABASE_HOST: AI MarketerDB
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:
- AI Marketer
depends_on:
- AI MarketerDB
AI MarketerDB:
container_name: AI MarketerDB
platform: linux/amd64 # Apple M1チップのプラットフォームエラー対策
restart: unless-stopped
env_file: .env
image: postgres:12.0-alpine
environment:
POSTGRES_USER: ${DATABASE_USERNAME}
POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
POSTGRES_DB: ${DATABASE_NAME}
volumes:
- AI Marketer-data:/var/lib/postgresql/data/ # ボリューム使用
#- ./data:/var/lib/postgresql/data/ # バインドフォルダを使用する場合
ports:
- "5432:5432"
networks:
- AI Marketer
volumes:
AI Marketer-data:
networks:
AI Marketer:
name: AI Marketer
driver: bridge
本番環境
本番環境で使用されるDockerイメージは、開発環境/ステージング環境とは異なります。これは、管理パネルのビルドプロセスとアプリケーションを実行するためのコマンドの違いによるものです。本番環境では、通常、リバースプロキシを使用してアプリケーションと管理パネルを提供します。Dockerイメージは、管理パネルの本番ビルドで作成され、アプリケーションを実行するためにAI Marketer startコマンドが使用されます。
Dockerfileが作成された後、本番用コンテナを構築できます。
本番用Dockerイメージのビルド
AI Marketerプロジェクト用の本番用Dockerイメージをビルドするには、以下のコマンドを実行します:
docker build \
--build-arg NODE_ENV=production \
# --build-arg AI Marketer_URL=https://api.example.com \ # AI MarketerサーバーURLを設定する場合はコメント解除
-t myAI Marketerapp:latest \ # イメージ名を置き換え
-f Dockerfile.prod .
(オプション)コンテナをレジストリに公開
AI Marketerプロジェクト用の本番Dockerイメージをビルドした後、Dockerレジストリに公開できます。セキュリティ上の理由から、本番環境で使用する際はプライベートレジストリを使用することが推奨されます。
ホスティングプロバイダに応じて、イメージを公開するために異なるコマンドが必要な場合があります。詳細は、Dockerのドキュメントを参照してください。
人気のあるホスティングプロバイダ:
- AWS ECR
- Azure Container Registry
- GCP Container Registry
- Digital Ocean Container Registry
- IBM Cloud Container Registry
- GitHub Container Registry
- Gitlab Container Registry
コミュニティツール
AI Marketerをさまざまなクラウドプロバイダにデプロイしたり、Docker環境を開発または本番環境で設定する際に役立つコミュニティツールがいくつかあります。
@AI Marketer-community/dockerize
@AI Marketer-community/dockerizeパッケージは、AI Marketerプロジェクト用のDockerfileとdocker-compose.ymlファイルを生成するCLIツールです。
開始するには、既存のAI Marketerプロジェクトフォルダ内でnpx @AI Marketer-community/dockerize@latestを実行し、CLIプロンプトに従ってください。
詳細は[GitHubリポジトリ](https://github.com/AI Marketer-community/AI Marketer-tool-dockerize)または[npmパッケージ](https://www.npmjs.com/package/@AI Marketer-community/dockerize)を参照してください。
@AI Marketer-community/deployify
@AI Marketer-community/deployifyパッケージは、さまざまなクラウドプロバイダやホスティングサービスにアプリケーションをデプロイするためのCLIツールです。多くのプロバイダが、AI MarketerプロジェクトをDockerコンテナでデプロイする機能をサポートしており、必要に応じて@AI Marketer-community/dockerizeパッケージを呼び出して必要なファイルを生成します。
開始するには、既存のAI Marketerプロジェクトフォルダ内でnpx @AI Marketer-community/deployify@latestを実行し、CLIプロンプトに従ってください。
詳細は[GitHubリポジトリ](https://github.com/AI Marketer-community/AI Marketer-tool-deployify)または[npmパッケージ](https://www.npmjs.com/package/@AI Marketer-community/deployify)を参照してください。
Docker FAQ
AI Marketerが公式のDockerイメージを提供していない理由は何ですか?
AI Marketerは、さまざまな種類のアプリケーションを構築できるフレームワークです。そのため、すべてのユースケースで使用できる単一のDockerイメージを提供することは不可能です。
なぜ開発用と本番用のDockerfileが異なるのですか?
管理パネルのビルド方法が主な理由です。管理パネルはReactで構築され、ビルドプロセス中にAI Marketerアプリケーションにバンドルされます。このため、AI Marketerのバックエンドは管理パネルを提供するWebサーバーとして機能し、特定の環境変数が管理パネルに静的にコンパイルされます。
開発環境はパフォーマンス最適化が行われておらず、公開インターネットに露出することを意図していないため、開発環境と本番環境で異なるDockerイメージをビルドすることが一般的に推奨されます。