著者:
    作成:2026-06-30最終更新:2026-06-30

    Intlayerのセルフホスティング

    Intlayerは、Intlayer Cloudアカウントを必要とせず、独自のインフラストラクチャ上で完全に実行できます。単一のコマンドで、本番環境に対応したスタックを起動します。

    sh
    curl -fsSL https://intlayer.org/install.sh | sh

    インストーラーは docker-compose.yml.env をダウンロードし、必要なシークレットを自動生成して、すべてのコンテナを docker compose up -d で起動します。

    目次


    アーキテクチャ

    plaintext
                    ┌─────────────────────────────┐ browser ──────▶ │  app  (TanStack Start)  :3000│ ──┐                └─────────────────────────────┘   │ VITE_BACKEND_URL                ┌─────────────────────────────┐   │                │  backend (Fastify/Bun)  :3100│ ◀─┘                └──────────────┬──────────────┘          ┌──────────┬─────────┼──────────┬───────────┐          ▼          ▼         ▼          ▼           ▼     mongo:27017  redis:6379  minio:9000  mailpit:1025  Chromium     (1ノードRS)             (S3 API)     (SMTP)        (インイメージ)                             minio:9001   mailpit:8025                             (コンソール) (ウェブUI)

    Chromium (Puppeteerのスクリーンショット生成に使用) はバックエンドイメージ内にバンドルされており、別のコンテナは必要ありません。


    前提条件

    • Docker ≥ 24 および Docker Compose ≥ v2。いずれかが不足している場合、インストーラーはインストールリンクを表示して終了します。
    • ホスト上でポート 30003100802590009001 が利用可能であること。
    • LinuxまたはmacOSホスト(またはWindows上のWSL2)。

    クイックスタート

    sh
    curl -fsSL https://intlayer.org/install.sh | sh

    インストーラーの動作:

    1. dockerdocker compose が存在するかどうかを確認します。
    2. docker-compose.yml.env.example./intlayer/ にダウンロードします。
    3. .env が存在しない場合、例をコピーし、BETTER_AUTH_SECRETS3_ACCESS_KEY_IDS3_SECRET_ACCESS_KEY 用に openssl rand を介してランダムなシークレットを生成します。
    4. docker compose pull + docker compose up -d を実行します。
    5. URLを表示します: ダッシュボード :3000、API :3100、メールUI :8025、MinIOコンソール :9001

    スタックが起動したら、http://localhost:3000 を開き、最初のIntlayerアカウントを作成してください。


    サービス

    サービス イメージ ホストポート 目的
    app apps/app/Dockerfile からビルド 3000 TanStack Start ダッシュボード (CMS UI)
    backend apps/backend/Dockerfile からビルド 3100 Fastify REST API (/health エンドポイント)
    mongo mongo:7 内部 シングルノードレプリカセット (rs0)
    redis redis:7-alpine 内部 ジョブキュー (BullMQ) とキャッシュ (ioredis)
    minio minio/minio 9000 (S3), 9001 (コンソール) アバターとスクリーンショット用のS3互換オブジェクトストレージ
    mailpit axllent/mailpit 1025 (SMTP), 8025 (ウェブUI) ローカルトランザクションメールシンク

    内部ポート (mongo, redis) は、デフォルトではホストに公開されません。

    MinIOポート 9000 は、アップロードされたアセット (アバター、スクリーンショット) が S3_PUBLIC_URL=http://localhost:9000/intlayer から直接読み込まれるため、ブラウザから到達可能である必要があります。

    環境変数

    インストーラーはすぐに使用できる .env を生成します。以下の表は、すべての変数について説明しています。

    必須 (自動生成またはプロンプトによる入力)

    変数 説明
    NODE_ENV production ランタイム環境
    PORT 3100 バックエンドのリスニングポート
    BACKEND_URL http://localhost:3100 バックエンドAPIの公開URL
    APP_URL http://localhost:3000 ダッシュボードの公開URL
    DOMAIN localhost クッキードメイン
    MONGODB_URI mongodb://mongo:27017/intlayer?replicaSet=rs0 MongoDBの完全な接続URI
    REDIS_URL redis://redis:6379 Redisの接続URL
    BETTER_AUTH_SECRET (生成済み) セッション署名用の32バイトのシークレット
    MAIL_PROVIDER smtp メールトランスポート: smtp または resend
    MAIL_SMTP_HOST mailpit SMTPホスト名 (Mailpitコンテナ名)
    MAIL_SMTP_PORT 1025 SMTPポート
    MAIL_FROM Intlayer <no-reply@localhost> 送信元アドレス
    S3_ENDPOINT http://minio:9000 S3互換エンドポイント
    S3_PUBLIC_URL http://localhost:9000/intlayer ブラウザによるアセット読み込み用の公開URL
    S3_BUCKET_NAME intlayer バケット名
    S3_ACCESS_KEY_ID (生成済み) MinIOアクセスキー
    S3_SECRET_ACCESS_KEY (生成済み) MinIOシークレットキー
    VITE_BACKEND_URL http://localhost:3100 ビルド時にダッシュボードに組み込まれるバックエンドURL
    VITE_DOMAIN localhost ビルド時にダッシュボードに組み込まれるドメイン

    オプション (存在しない場合でも機能は正常に劣化します)

    変数 機能
    OPENAI_API_KEY AIアシストによる翻訳とコンテンツ監査
    STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, STRIPE_* 請求とサブスクリプション管理
    RESEND_API_KEY Resendを介したトランザクションメール (設定されている場合、Mailpitを上書き)
    GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET GitHub OAuthログイン
    GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET Google OAuthログイン
    GITLAB_CLIENT_ID, GITLAB_CLIENT_SECRET GitLab OAuthログイン
    MICROSOFT_CLIENT_ID, MICROSOFT_CLIENT_SECRET Microsoft OAuthログイン
    LINKEDIN_CLIENT_ID, LINKEDIN_CLIENT_SECRET LinkedIn OAuthログイン
    ATLASSIAN_CLIENT_ID, ATLASSIAN_CLIENT_SECRET Atlassian OAuthログイン

    Intlayerプロジェクトの接続

    スタックが稼働したら、intlayer.org の代わりに自己ホスト型のバックエンドとダッシュボードを指すようにプロジェクトを設定します。

    プロジェクト設定

    intlayer.config.ts
    import type { IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      editor: {
        clientId: process.env.INTLAYER_CLIENT_ID,
        clientSecret: process.env.INTLAYER_CLIENT_SECRET,
    
        /**
         * 自己ホスト型CMSダッシュボードのURL。
         * デフォルト: https://app.intlayer.org
         */
        cmsURL: process.env.INTLAYER_CMS_URL, // 例: http://localhost:3000
    
        /**
         * 自己ホスト型バックエンドAPIのURL。
         * デフォルト: https://back.intlayer.org
         */
        backendURL: process.env.INTLAYER_BACKEND_URL, // 例: http://localhost:3100
      },
    };
    
    export default config;

    プロジェクトの .env で環境変数を設定します。

    sh
    INTLAYER_CMS_URL=http://localhost:3000INTLAYER_BACKEND_URL=http://localhost:3100INTLAYER_CLIENT_ID=<your-client-id>INTLAYER_CLIENT_SECRET=<your-client-secret>

    自己ホスト型ダッシュボードの Projects → Access keys (http://localhost:3000/projects) でアクセス認証情報を作成します。

    @intlayer/api SDK

    @intlayer/api SDKをプログラムで利用する場合は、backendURL を明示的に渡します。

    cms.ts
    import { createIntlayerCMS } from "@intlayer/api";import { dictionaryEndpoint } from "@intlayer/api/dictionary";const cms = createIntlayerCMS({  editor: {    clientId: process.env.INTLAYER_CLIENT_ID,    clientSecret: process.env.INTLAYER_CLIENT_SECRET,    backendURL: process.env.INTLAYER_BACKEND_URL, // http://localhost:3100  },});const { data: dictionaries } = await dictionaryEndpoint(cms).getDictionaries();

    アップグレード

    既存のデプロイメントでインストーラーを再実行すると、ローリングアップグレードが実行されます。

    sh
    curl -fsSL https://intlayer.org/install.sh | sh

    これにより、最新のイメージがプルされ、docker compose pull && docker compose up -d でコンテナが再起動されます。既存のボリューム (mongo-dataredis-dataminio-data) は保持され、データ損失はありません。

    ./intlayer/ ディレクトリ内で手動でアップグレードするには:

    sh
    docker compose pulldocker compose up -d

    バックアップと復元

    すべての永続データは、3つの名前付きDockerボリュームに保存されます。

    バックアップ

    sh
    docker run --rm \  -v intlayer_mongo-data:/data \  -v "$(pwd)":/backup \  busybox tar czf /backup/mongo-data.tar.gz /datadocker run --rm \  -v intlayer_redis-data:/data \  -v "$(pwd)":/backup \  busybox tar czf /backup/redis-data.tar.gz /datadocker run --rm \  -v intlayer_minio-data:/data \  -v "$(pwd)":/backup \  busybox tar czf /backup/minio-data.tar.gz /data

    復元

    sh
    docker run --rm \  -v intlayer_mongo-data:/data \  -v "$(pwd)":/backup \  busybox tar xzf /backup/mongo-data.tar.gz -C /# redis-data と minio-data についても同様に繰り返します

    リバースプロキシの使用 (Nginx / Caddy)

    本番環境のデプロイでは、appコンテナとbackendコンテナを直接公開するのではなく、リバースプロキシをそれらの前に配置します。

    Nginxの例

    nginx
    server {    listen 80;    server_name cms.example.com;    location / {        proxy_pass http://localhost:3000;        proxy_set_header Host $host;        proxy_set_header X-Real-IP $remote_addr;    }}server {    listen 80;    server_name api.example.com;    location / {        proxy_pass http://localhost:3100;        proxy_set_header Host $host;        proxy_set_header X-Real-IP $remote_addr;    }}

    公開ドメインに合わせて、以下の .env 変数を更新してください。

    sh
    BACKEND_URL=https://api.example.comAPP_URL=https://cms.example.comDOMAIN=example.comVITE_BACKEND_URL=https://api.example.comVITE_DOMAIN=example.com
    VITE_* 変数はビルド時にダッシュボードイメージに組み込まれます。イメージがビルドされた後に変更した場合、app イメージをリビルドするか (docker compose build app)、ランタイム設定インジェクションを使用する必要があります。

    トラブルシューティング

    最初の起動時にバックエンドがクラッシュループする

    バックエンドが起動する前に、MongoDBとRedisが正常である必要があります。composeファイルは condition: service_healthy とともに depends_on を使用しています。バックエンドの再起動が繰り返される場合は、mongoredis のヘルスチェックがパスしているか確認してください。

    sh
    docker compose psdocker compose logs mongodocker compose logs redis

    ダッシュボードがAPIに到達できない

    VITE_BACKEND_URL が、バックエンドがブラウザから到達可能なURL (Dockerネットワークではなく) と一致していることを確認してください。バックエンドポートを変更したり、リバースプロキシを追加した場合は、ダッシュボードイメージをリビルドしてください。

    sh
    docker compose build appdocker compose up -d app

    メールが送信されない

    デフォルトでは、すべての送信メールはMailpitによって捕捉されます。送信されたメッセージを確認するには、http://localhost:8025 を開いてください。実際のメールを送信するには、.envMAIL_PROVIDER=resendRESEND_API_KEY=<your-key> を設定し、バックエンドを再起動します。

    sh
    docker compose restart backend

    MinIOバケットが見つからない

    minio-init ワンショットサービスが実行されなかった場合 (またはMinIOが準備できる前に実行された場合) は、手動でバケットを作成してください。

    sh
    docker compose run --rm minio-init

    役立つリンク