# NexCMP 1.6.1 — full documentation > Complete NexCMP documentation in one file. Source: https://nexcmp.com/ja/docs/ · generated 2026-11-02. --- # NexCMPとは {#what-is-nexcmp} NexCMPは、クラウドインフラストラクチャを販売可能な製品へと変えるために**お客様自身のサーバー**にインストールするソフトウェアです。以下の機能を提供します。 - ユーザーが登録、クレジットの追加、仮想マシンやその他のサービスの注文、コンソールの操作、スナップショットの取得、サポートへの問い合わせを行える**カスタマーポータル** - 顧客、プラン、価格、決済、インフラストラクチャ、設定を管理する**管理コンソール**(`/admin`) - **請求管理**:顧客ごとのウォレット、時間単位または月単位の課金、請求書、プロモーション、リソースクォータ - **ホワイトラベルリセラー**:独自のドメインで貴社のリソースを販売する他のブランド - 自動化のための**API**、コマンドラインツール(`cmp`)、MCPサーバー - オプションの**AI Chat**(サポートアシスタント)および**AI Agent**(自然言語での仮想マシン管理)。 ## 接続先 {#what-it-connects-to} NexCMP自体は仮想マシンをホストしません。仮想マシンをホストするプラットフォームを制御します。*ソース*(プロバイダーとも呼ばれます)は以下のいずれかです。 | Source | 一般的な用途 | ガイド | |---|---|---| | Apache CloudStack | ゾーン、ネットワーク、仮想ルーター、パブリックIPを備えたプライベートまたはパブリッククラウド | [CloudStack](https://nexcmp.com/ja/docs/infrastructure/cloudstack/) | | Proxmox VE | すでに運用している単体サーバーまたはクラスター | [Proxmox VE](https://nexcmp.com/ja/docs/infrastructure/proxmox/) | その他のモジュールには、それぞれ独自のインフラストラクチャ([ベアメタルサーバー](https://nexcmp.com/ja/docs/infrastructure/dedicated/)、[VPNおよびプロキシノード](https://nexcmp.com/ja/docs/infrastructure/vpn-proxy-nodes/)、[S3オブジェクトストレージ](https://nexcmp.com/ja/docs/infrastructure/s3/)、[Kubernetesおよびプライベートクラウド](https://nexcmp.com/ja/docs/infrastructure/kubernetes-and-private-cloud/))が必要です。これらをまとめた1つの表については、[Infrastructure requirements](https://nexcmp.com/ja/docs/infrastructure/requirements/)を参照してください。 ## アーキテクチャ {#how-it-is-built} NexCMPは、1台のUbuntuサーバー上で2つのsystemdサービスとして動作する単一のプログラムです。 - `nexcmp` — Webサーバー:カスタマーポータル、管理コンソール、API、セットアップウィザード - `nexcmp-vmd` — バックグラウンドワーカー:プロビジョニングジョブ、CloudStackまたはProxmoxとの同期、課金処理 データは`/var/lib/nexcmp`(SQLiteデータベースとファイル)、設定は`/etc/nexcmp`、プログラムは`/opt/nexcmp`に保存されます。詳細については[Architecture](https://nexcmp.com/ja/docs/infrastructure/architecture/)を参照してください。 ## 次のステップ {#where-to-go-next} 1. [requirements](https://nexcmp.com/ja/docs/getting-started/requirements/)をご確認ください。 2. ライセンスを取得します — [License and purchase](https://nexcmp.com/ja/docs/getting-started/license-and-purchase/)。 3. [Install](https://nexcmp.com/ja/docs/getting-started/installation/)を実行した後、[setup wizard](https://nexcmp.com/ja/docs/getting-started/setup-wizard/)を実行します。 4. プラットフォームを接続します:[CloudStack](https://nexcmp.com/ja/docs/infrastructure/cloudstack/)または[Proxmox VE](https://nexcmp.com/ja/docs/infrastructure/proxmox/)。 --- # NexCMPサーバーの要件 {#requirements-for-the-nexcmp-server} このページでは、NexCMPを実行するサーバーについて説明します。CloudStack、Proxmox VE、その他のインフラストラクチャに必要な要件については、[インフラストラクチャ要件](https://nexcmp.com/ja/docs/infrastructure/requirements/)をご覧ください。 ## サーバー {#server} | 項目 | 要件 | インストーラーによるチェック | |---|---|---| | オペレーティングシステム | Ubuntu **22.04** または **24.04** | はい — それ以外の場合はエラーで停止します | | CPUアーキテクチャ | x86_64 | はい | | メモリ | 最小2 GB(インストーラーは約1.8 GB未満を拒否します) | はい | | 空きディスク | `/`に最小8 GBの空き容量 | はい | | 権限 | root(`sudo`) | はい | | パッケージ | `curl`、`ca-certificates`、`zstd`、`tar`、`openssl`、`python3`、`openssh-client` — 自動的にインストールされます | 不足している場合はインストールされます | | HTTPS対応 | `nginx`および`certbot` — `--no-nginx`を渡さない限り、自動的にインストールされます | 不足している場合はインストールされます | ::: tip サイジング 小規模な環境(数百人のお客様)であれば、2 vCPU / 4 GB RAMで快適に動作します。ディスク使用量は、SQLiteデータベースと、オプションのアップデートおよびバックアップコピーが大半を占めます。本番環境では20 GB以上を見込んでください。 ::: ## ネットワーク {#network} | 方向 | ポート | 用途 | |---|---|---| | インバウンド | 80/tcp | Let's Encryptの検証とHTTPSへのリダイレクト | | インバウンド | 443/tcp | カスタマーポータル、管理コンソール、API | | インバウンド | 3000/tcp | 初回インストールのセットアップウィザードおよび緊急アクセス専用 — [インストール](https://nexcmp.com/ja/docs/getting-started/installation/#the-panel-port-3000)を参照 | | アウトバウンド | `nexcmp.com`への443/tcp | ライセンスのアクティベーション、毎日のライセンス確認、アップデート | | アウトバウンド | CloudStack API / Proxmox APIへの接続 | プロビジョニングと同期 | | アウトバウンド | 有効にする決済、メール、AIプロバイダーへの443/tcp | Stripe、PayPal、SMTP、AIプロバイダーなど | Let's Encryptに証明書を直接発行させるには、サーバーに**グローバルIPv4アドレス**が必要です。ドメインがCloudflareでプロキシされている場合は、[DNSとCloudflare](https://nexcmp.com/ja/docs/getting-started/dns-and-cloudflare/)をご覧ください。 ## DNS - 1つの**メインドメイン**(例: `cloud.example.com`) — ポータルは`https://cloud.example.com/`、管理コンソールは`https://cloud.example.com/admin`になります。 - オプション: `admin.`および`partner.`。これらの名前がサーバー(またはCloudflare)に名前解決される場合、インストーラーはそれらを証明書に追加します。 - ドメインは、ライセンスに登録されているものと一致している必要があります。 ## このサーバーでは不要 {#not-required-on-this-server} NexCMPは通常の特権のないサービスユーザー(`nexcmp`)として実行されます。実行時にroot権限、Docker、独立したデータベースサーバー、Redis、またはハイパーバイザーソフトウェアは**一切必要ありません**。 --- # ライセンスと購入 {#license-and-purchase} > **管理画面での場所:** System › Admin › License & updates (`/license`) NexCMPは、[NexCMPアカウント](https://nexcmp.com/licenses)で管理する**ライセンスキー**によってアクティベートされます。エディションと現在の価格は[nexcmp.com/pricing](https://nexcmp.com/pricing)に掲載されています。このページでは、ライセンス取得後の動作について説明します。 ## ライセンスの取得 {#get-a-license} 1. [nexcmp.com](https://nexcmp.com/register)でアカウントを作成し、メールアドレスを確認します。 2. エディションを選択する: - **NexCMP Free** — 独自のASNと、自社名義で登録されたサブネットを持つネットワーク事業者向け。[nexcmp.com/deploy](https://nexcmp.com/deploy)から申請を送信します(企業名、ASN、サブネット、パネルドメイン)。アカウントのメールアドレスは、パブリックレジストリ(WHOIS)にASNまたはサブネットとして登録されている企業ドメインのものである必要があります。すべての申請は審査され、結果がメールで通知されます。ライセンスキーは承認後にのみ表示されます。 - **NexCMP Source** — ASN不要の買い切り型アップグレード。[nexcmp.com/pricing](https://nexcmp.com/pricing)をご覧ください。 3. ライセンスページを開きます。**ライセンスキー**(形式 `NXC-XXXXX-XXXXX-XXXXX-XXXXX`)、**メインドメイン**、およびすぐに使えるインストールコマンドが表示されます。 ::: warning キーを厳重に管理する ライセンスキーでインストールをアクティベートします。パスワードと同様に扱い、チケット、チャット、スクリーンショットなどに貼り付けないでください。 ::: ## ライセンスの内容 {#what-a-license-contains} | 項目 | 意味 | |---|---| | メインドメイン | ポータルが稼働するホスト名。アクティベーション時にキーがこのドメインに紐付けられます。 | | リセンドメイン | ホワイトラベルポータルとして提供される追加のホスト名 — [Resellers](https://nexcmp.com/ja/docs/customers/resellers/)をご覧ください。 | | アップデート期限 | **アップデートおよびバグ修正**を受信できる期限の日付。Freeライセンスは承認された日から**1年間**有効で、ライセンスページにて年間$99で更新できます。セキュリティ修正はこの期限を過ぎても常に提供されます。 | | ステータス | `active`、または一時停止 / 期限切れ / 無効化。 | ## 無料期間の1年が終了する場合 {#when-the-free-year-ends} ソフトウェアは「Updates until」の日付を過ぎても**動作し続けます**。顧客、サービス、課金への影響はありません。新しい機能リリースやバグ修正アップデートの受信は停止しますが(セキュリティ修正は引き続き届きます)、継続するには[nexcmp.com/licenses](https://nexcmp.com/licenses)のライセンスページで年間$99で更新してください。更新により現在の終了日に12ヶ月が追加されます。NexCMP Freeにはバグ修正のみが含まれ、技術サポートやアプリは含まれません。 ## NexCMP Sourceで追加される内容 {#what-nexcmp-source-adds} Sourceライセンスは、$1,999の一回限りのライセンスアップグレードです。完全なソースコード、お客様向けにビルドおよびブランディングされたすべてのNexCMPアプリ(Android、iOS、Windows、macOS、Linux、Chrome / Edge / Brave、Firefox)、および専門エンジニアによる30営業日分のサポート(VMware、WHMCS、その他のパネルからの無料移行、またはゼロからの完全なセットアップ)が含まれます。新しいソースのリリースは12ヶ月間含まれており、その後(年間$99で)の更新は任意であり、ダウンロードしたソースはお客様のものとして保持されます。[Source license terms](https://nexcmp.com/legal/source-license/)をご覧ください。 ## インストールのライセンス確認方法 {#how-the-installation-checks-its-license} - インストール時に、サーバーはお使いのドメインのキーをアクティベートし、**署名付きトークン**を受け取ります。 - トークンは**24時間**ごとに自動的に更新されます。**14日間**有効な状態が維持されるため、短時間のインターネット回線切断であれば問題ありません。 - すべてのリリースとトークンは、プログラムに組み込まれた Ed25519 署名により検証されるため、改ざんされたダウンロードは拒否されます。 管理コンソールまたは `sudo nexcmp status` を使用して、いつでも状態を確認できます。 ## ライセンスが無効な場合 {#if-the-license-is-not-valid} トークンの期限切れ、ライセンスの停止、またはドメインの不一致が発生した場合: - お客様は**新しいサービスを作成できなくなり**、管理コンソールにバナーが表示されます。 - すでに実行中のサービス、**請求および既存のお客様には影響ありません**。 - 原因を修正し(サーバーをインターネットに再接続し、[nexcmp.com/licenses](https://nexcmp.com/licenses)で更新)、License & updatesの**Check now**をクリックします。 ## 新しいサーバーまたはドメインへの移行 {#moving-to-a-new-server-or-domain} 同じキーと登録済みドメインを使用して新しいサーバーでアクティベーションを行います([Installation](https://nexcmp.com/ja/docs/getting-started/installation/) を参照)。登録済みドメインを変更するには、まず [nexcmp.com/licenses](https://nexcmp.com/licenses) のライセンスページで行ってから、新しい `--domain` を指定してインストーラーを再度実行します。 --- # NexCMP のインストール {#install-nexcmp} インストーラーは、ライセンスサーバーから提供される単一のスクリプトです。マシンのチェック、ライセンスのアクティベーション、プログラムのダウンロードと検証、サービスのインストール、および(オプションで)Let's Encrypt 証明書を使用した nginx のセットアップを行います。 ## 始める前に {#before-you-start} - [requirements](https://nexcmp.com/ja/docs/getting-started/requirements/) を満たすサーバーと root アクセス権限。 - [license page](https://nexcmp.com/licenses) からの**ライセンスキー**と**メインドメイン** — [License and purchase](https://nexcmp.com/ja/docs/getting-started/license-and-purchase/) を参照してください。 - ドメインの DNS レコード — [DNS and Cloudflare](https://nexcmp.com/ja/docs/getting-started/dns-and-cloudflare/) を参照してください。先にインストールしてから後で DNS を修正することもできます。インストーラーが不足している項目を通知するため、そのまま再度実行するだけです。 ## インストール {#install} 1. サーバーにログインし、root になります(または `sudo` を付与します)。 2. ライセンスページからコマンドを実行します。外観は以下のようになります: ```bash curl -fsSL https://nexcmp.com/install.sh | sudo bash -s -- \ --license NXC-XXXXX-XXXXX-XXXXX-XXXXX \ --domain cloud.example.com \ --email admin@example.com ``` 3. チェックマークが表示されるまで待ちます。クリーンインストールには数分かかります。初回起動時にはデータベーススキーマが作成されるため、低速なディスクでは最大 1 分ほどかかることがあります。 4. 最後にまとめをお読みください。ポータルおよび管理画面の URL、**セットアップコード**、および次の手順が表示されます。 ![ポータル URL、管理画面 URL、および1回限りのセットアップコードを表示して完了するインストーラー](https://nexcmp.com/ja/docs/images/getting-started/installation-01-finish.webp) ## パラメータ {#parameters} | パラメータ | デフォルト | 意味 | |---|---|---| | `--license KEY` | 初回インストール時に必須 | ライセンスキー。 | | `--domain NAME` | 初回インストール時に必須 | メインドメイン。ライセンスと一致している必要があります。`https://` および末尾のパスは削除されます。 | | `--email ADDRESS` | なし | Let's Encrypt の有効期限通知用の連絡先メールアドレス。指定しない場合、証明書はメールアドレスなしで登録されます。 | | `--port N` | `3000` | パネルのローカルポート(1~65535)。 | | `--no-nginx` | オフ | nginx / TLS のインストールや設定を行いません。独自ののリバースプロキシを実行している場合や、まず NexCMP を確認したい場合に使用します。 | | `--behind-cloudflare` | 自動検出 | 「ドメインが Cloudflare でプロキシされている」モードを強制します。通常は DNS から検出されます。 | | `--channel NAME` | `stable` | リリースチャネル。 | パラメータを指定せずにインストーラーを**再度実行**すると、保存された設定(`/etc/nexcmp/install.conf`)が再利用され、データ、設定、アカウントを維持したまま安全にアップグレードされます。それこそが `sudo nexcmp update` が行っていることです。 ## インストーラーの動作 {#what-the-installer-does} 1. **マシンのチェック** — Ubuntu 22.04/24.04、x86_64、2 GB 以上の RAM、8 GB 以上の空きディスク。 2. **必要なパッケージをインストール**します(`curl`、`zstd`、`openssl`、`python3`、`openssh-client` など)。 3. **サービスユーザー** `nexcmp` および以下のディレクトリを作成します:`/opt/nexcmp`(プログラム、root所有、サービスからは読み取り専用)、`/etc/nexcmp`(設定)、`/var/lib/nexcmp`(データ)、`/var/log/nexcmp`。 4. ドメインの**ライセンスを有効化**し、このマシンの固定インスタンスIDを保存します。 5. **利用可能な最新のリリースをダウンロード**し、SHA-256およびEd25519署名を検証します。有効な署名がないリリースは拒否されます。新しく実行中のバージョンをダウングレードすることはありません。 6. **設定とsystemdユニット**(`nexcmp`、`nexcmp-vmd`、`nexcmp-update`)を書き込んでサービスを起動し、`/healthz`からの応答を待ちます。 7. **nginxとTLSをセットアップ**します(`--no-nginx`でない限り):certbot(webrootチャレンジ)を使用して、ドメインおよびその名前も名前解決する場合は`admin.` / `partner.`用のLet's Encrypt証明書を取得します。DNSがまだこのサーバー(またはCloudflare)を指していない場合は、このステップをスキップしてその旨を表示します。 8. URLと、管理者がまだ存在しない場合は**セットアップコード**を含む**サマリーを表示**します。 ## パネルのポート(3000) {#the-panel-port-3000} - 初回インストール時、パネルは `0.0.0.0:3000` でリッスンするため、`http://:3000/setup` でセットアップウィザードを開くことができます。 - ウィザードが完了し**かつ**TLSが有効になると、パネルは `127.0.0.1` でのみリッスンし、nginxが `https://` をそこにプロキシします。 - 緊急時(nginxの故障、DNSの誤設定など)には、一定時間ポートを開くことができます:`sudo nexcmp open-port 30`(30分間、その後自動的に閉じます)。またはSSHトンネルを使用します:`ssh -L 3000:127.0.0.1:3000 `を実行し、`http://127.0.0.1:3000/`にアクセスします。 ::: warning プレーンHTTP ポート3000はプレーンHTTPです。信頼されたネットワーク上でのセットアップウィザード、またはSSHトンネル経由でのみ使用してください。開放したままにしないでください。 ::: ## パブリックドメインなしでのインストール(ラボまたはテスト) {#installing-without-a-public-domain-lab-or-test} まだDNSがないマシンにインストールすることもできます: ```bash curl -fsSL https://nexcmp.com/install.sh | sudo bash -s -- \ --license NXC-XXXXX-XXXXX-XXXXX-XXXXX --domain lab.example.com --no-nginx ``` その後、SSHトンネル経由でウィザードを開きます(`ssh -L 3000:127.0.0.1:3000 `、`http://127.0.0.1:3000/setup`にアクセス)。DNSが設定されたら、`--no-nginx`なしでインストーラーを再実行します。 ## DockerおよびKubernetes {#docker-and-kubernetes} 公開されたコンテナイメージはありません。インストーラー(ネイティブなsystemdインストール)がサポート対象のインストール方法です。 ## 確認 {#verify} ```bash sudo nexcmp status ``` バージョン、`nexcmp: active`、`nexcmp-vmd: active`、`healthz: ok`、およびウィザードが完了するまではセットアップコードが表示されるはずです。[setup wizard](https://nexcmp.com/ja/docs/getting-started/setup-wizard/)に進みます。 何らかの問題が発生した場合は、[Installation errors](https://nexcmp.com/ja/docs/troubleshooting/installation-errors/)を参照してください。 --- # DNSとCloudflare {#dns-and-cloudflare} NexCMPには1つのDNS名(**メインドメイン**)が必要であり、2つのモードで動作します。 ## モードA:DNSが直接サーバーを指す場合 {#mode-a-dns-points-straight-at-the-server} 1. **A**レコード `cloud.example.com → `(およびサーバーがIPv6を持つ場合は**AAAA**レコード)を作成します。 2. 使用する場合のオプション:同じIPを指す `admin.cloud.example.com` および `partner.cloud.example.com`。 3. [installer](https://nexcmp.com/ja/docs/getting-started/installation/)を実行(または再実行)します。名前がサーバー自身のパブリックIPに名前解決されることを検出し、ポート80でのHTTP-01チャレンジを通じてLet's Encrypt証明書を取得します。 ## モードB:ドメインがCloudflareによってプロキシされている場合 {#mode-b-the-domain-is-proxied-by-cloudflare} オレンジ色のクラウド(**Proxied**)を指定して同じレコードを作成します。インストーラーは、名前がCloudflareのアドレスのみに名前解決されることを検出し、Cloudflareモードに切り替えます: - nginxは引き続きサーバー上の80/443でリッスンします; - 訪問者の実際のIPは`CF-Connecting-IP`ヘッダーから読み取られます(Cloudflareの公開レンジからの接続に**のみ**適用されるため、他のユーザーに偽装されることはありません)。 - 証明書はLet's Encryptを通じて取得されます(Cloudflareがチャレンジをオリジンに転送します)。それがまだ不可能な場合は、"Full"モードが機能するように**自己署名オリジン証明書**が作成され、後からインストーラーを再実行することでLet's Encryptにアップグレードされます。 `--behind-cloudflare`を使用してこのモードを強制できます。 ::: important CloudflareでのSSL/TLSモードの設定 Cloudflareで**SSL/TLS › Overview**に移動し、インストーラーがLet's Encrypt証明書を報告したら**Full (strict)**を選択します。自己署名オリジン証明書を使用する場合は**Full**を使用します。**Flexible**はリダイレクトループを引き起こします。 ::: ::: tip "Always Use HTTPS"が有効な場合、Cloudflareは検証リクエストをオリジンのポート443に送信します。インストーラーは、最初に一時的な自己署名証明書を作成し、次にLet's Encryptを再試行することでこれに対処します。 ::: ## 確認 {#check-it} ```bash dig +short cloud.example.com # A record (a Cloudflare address in mode B) curl -I https://cloud.example.com/healthz sudo certbot certificates # certificate name, domains and expiry ``` 証明書はcertbotのタイマーによって自動的に更新されます。更新にはwebroot`/var/www/nexcmp-acme`を使用するため、(直接またはCloudflare経由で)ポート80にアクセス可能な状態を維持する必要があります。 ## よくある問題 {#common-problems} | 症状 | 原因 | 対処法 | |---|---|---| | インストーラーに「DNS … does not point to … (nor to Cloudflare) — skipping nginx/TLS」と表示される | DNSレコードが欠落している、誤っている、または伝播していない | レコードを修正し、伝播を待ってからインストーラーを再実行してください。 | | ブラウザに`ERR_TOO_MANY_REDIRECTS`がCloudflareの背後にあると表示される | SSLモードが**Flexible**になっている | **Full (strict)**(または**Full**)を設定してください。 | | Cloudflareのエラー 525/526 | オリジン証明書が拒否された | 自己署名オリジン証明書の場合は**Full**を使用し、Let's Encryptの場合は**Full (strict)**を使用します。 | | 訪問者のログがすべてCloudflareのIPになる | Cloudflareモードになっていない | `--behind-cloudflare`を指定してインストーラーを再実行してください。 | 詳細は[Installation errors](https://nexcmp.com/ja/docs/troubleshooting/installation-errors/)をご覧ください。 --- # セットアップウィザード {#setup-wizard} > **管理画面での場所:** ウィザードは`/setup`にある独立したページで、最初の管理者が作成されるまでのみ表示されます。その後は、同じチェック機能がSystem › Admin › Start(`/setup`)の下に配置されます。 ウィザードは、新規インストールを4つの短いステップで動作するパネルへと変換します。ポート3000(`http://:3000/setup`)またはTLSがすでに有効な場合は`https:///setup`で提供されます。 ::: warning ステップ3の後にウィザードが消える 管理者が作成されるとウィザードは閉じられ、セットアップコードは削除されます。その後パネルにアクセスするには管理コンソールを使用してください。 ::: ## ステップ0 — セットアップコード {#step-0-—-setup-code} インストールの最後に、**1回限りのセットアップコード**が表示されます。次のコマンドで再確認できます。 ```bash sudo nexcmp status ``` **Setup code**に貼り付けて**Continue**をクリックします。このコードはウィザードを保護するため、開放されたポートを見つけた誰もがコードなしで管理者を作成することはできません。 ![1回限りのセットアップコード入力を求めるセットアップウィザードのステップ0](https://nexcmp.com/ja/docs/images/getting-started/setup-wizard-00-code.webp) ## ステップ1 — ライセンス {#step-1-—-license} | 項目 | 値 | |---|---| | ライセンスキー | `NXC-XXXXX-XXXXX-XXXXX-XXXXX` — インストーラーによって事前アクティベートされているため、この手順では通常「Activated for cloud.example.com」と表示されます | | メインドメイン | ライセンスに登録されているドメイン | インストーラーがすでにライセンスをアクティベートしている場合、ウィザードがそれを認識して次に進みます。そうでない場合はキーとドメインを入力し、**Activate**をクリックします。エラーは赤色で表示されます — [Installation errors](https://nexcmp.com/ja/docs/troubleshooting/installation-errors/)をご覧ください。 ![メインドメインに対してライセンスがすでにアクティベートされている状態のセットアップウィザードのステップ1](https://nexcmp.com/ja/docs/images/getting-started/setup-wizard-01-license.webp) ## ステップ2 — CloudStack(または後で接続) {#step-2-—-cloudstack-or-connect-later} 2つの選択肢があります: - **今すぐ接続。** CloudStackの**API URL**(`https://cloudstack.example.com/client/api`)、**API key**、**Secret key**を入力し、**Test connection**をクリックしてから、**Zone**、**Guest network for customer VMs**、**Zone display name**、2文字の**Country**を選択します。**Save CloudStack**をクリックします。 - **後で接続。** **Connect later**をクリックします。その他の機能はすべて動作します。後からInfrastructureでCloudStackまたはProxmox VEを接続できます。それまでは、ソースが接続されていないことがヘルスパネルに通知されます。 ![CloudStackのAPI URL、API key、secret keyの各フィールドにサンプル値が入力された状態のウィザードのステップ2](https://nexcmp.com/ja/docs/images/getting-started/setup-wizard-02-cloudstack-form.webp) ::: important 専用のCloudStackアカウントを使用する ROOT管理者キーは使用しないでください。NexCMP用の専用ドメインとアカウントを作成し、そのAPI keyを使用してください — [CloudStack](https://nexcmp.com/ja/docs/infrastructure/cloudstack/#create-a-dedicated-account-and-api-key)をご覧ください。ウィザードは、選択されたネットワークがそのキーのゾーンおよびアカウントに属していることを確認します。 ::: ![Test connection後:ゾーンおよびゲストネットワークのリスト、ゾーン表示名、および国の各フィールド](https://nexcmp.com/ja/docs/images/getting-started/setup-wizard-02b-cloudstack-picked.webp) **Proxmox VE**のみを使用する予定の場合は、**Connect later**を選択し、[Proxmox VE](https://nexcmp.com/ja/docs/infrastructure/proxmox/)に従ってください。 ## ステップ3 — 管理者とブランド {#step-3-—-administrator-and-brand} | 項目 | ルール | |---|---| | 管理者メール(ログイン) | 有効なメールアドレス。これが管理者ユーザー名になります。 | | パスワード | 12文字以上で、英字と数字を含めます。 | | ブランド名 | お客様に表示される名前(デフォルトは「Cloud」)。60文字まで。 | | サポートメール | デフォルトでは管理者メールが使用されます。 | ![管理者メール、パスワード、ブランド名、サポートメールが入力された状態のウィザードのステップ3](https://nexcmp.com/ja/docs/images/getting-started/setup-wizard-03-admin.webp) **Finish setup**をクリックします。パネルが再起動し(約1〜2秒)、ページは`https:///admin/`の管理者ログイン画面へ移動します。そのアドレスがまだ応答しない場合(DNSまたはTLSの保留中)、代わりに現在のアドレス上の`/`へ移動します。 ![パネルが再起動中であるというメッセージが表示された、完了後のウィザード](https://nexcmp.com/ja/docs/images/getting-started/setup-wizard-03-done.webp) ## ウィザードによって設定される内容 {#what-the-wizard-sets-up-for-you} - ブランド名、サイトURL(`https://`)、管理URL(`https:///admin`)、コンソールURL(`https:///console`)、サポートメール、送信者名。 - NexCMPに同梱されているモジュールのデフォルト設定:DDoS & BGP、AI、Web SSHは**オフ**、帯域幅計測は**オン**です。[Modules](https://nexcmp.com/ja/docs/infrastructure/modules/)をご覧ください。 - CloudStackを接続した場合:プロバイダー #1、最初のゾーン、ゲストネットワーク、および顧客サポートのために顧客VMにアタッチされる操作用キーペア。 次:[First login](https://nexcmp.com/ja/docs/getting-started/first-login/)。 --- # 初回ログインと次のステップ {#first-login-and-next-steps} > **管理者画面の場所:** ログインページは`/admin`です。サインイン後のランディングページは Overview › Dashboard です。 ## アドレス {#addresses} | 項目 | URL | |---|---| | カスタマーポータル | `https:///` | | 管理コンソール | `https:///admin` | | IPによるセットアップ / 緊急アクセス | `http://:3000/` ([パネルポート](https://nexcmp.com/ja/docs/getting-started/installation/#the-panel-port-3000)を参照) | | 死活監視 | `https:///healthz` | ## サインイン {#sign-in} 1. `https:///admin` を開きます。 2. ウィザードで作成した管理者のメールアドレスとパスワードを入力します。 3. **Dashboard** に移動します。ライセンスが無効な場合やソースが接続されていない場合、上部にバナーが表示されます。 ![管理者のログインページ](https://nexcmp.com/ja/docs/images/getting-started/first-login-01-login.webp) ## 推奨チェックリスト {#recommended-checklist} 上から順に進めてください。それぞれ対応するページにリンクしています。 | # | タスク | ページ | |---|---|---| | 1 | ご自身の二要素認証を有効にする | [Security](https://nexcmp.com/ja/docs/administration/security/) | | 2 | インフラストラクチャソースを接続する(「あとで接続する」を選択した場合) | [CloudStack](https://nexcmp.com/ja/docs/infrastructure/cloudstack/) または [Proxmox VE](https://nexcmp.com/ja/docs/infrastructure/proxmox/) | | 3 | ゾーンとマシンテンプレート / OSリストを確認する | [Zones](https://nexcmp.com/ja/docs/infrastructure/zones/), [Templates](https://nexcmp.com/ja/docs/infrastructure/templates/) | | 4 | プランと価格を見直す | [Plans](https://nexcmp.com/ja/docs/catalog/plans/) | | 5 | ロゴ、カラー、法務関連ページを設定する | [Branding](https://nexcmp.com/ja/docs/customers/branding/), [Legal](https://nexcmp.com/ja/docs/customers/legal/) | | 6 | 送信メールを設定し、テストメールを送信する | [SMTP and emails](https://nexcmp.com/ja/docs/administration/smtp-and-emails/) | | 7 | 少なくとも1つの決済チャネルを有効にし、トップアップのテストを行う | [Payment channels](https://nexcmp.com/ja/docs/billing/payment-channels/) | | 8 | 販売するモジュールを決定する | [Modules](https://nexcmp.com/ja/docs/infrastructure/modules/) | | 9 | 顧客としてテスト注文を行い、その後削除する | [Ordering](https://nexcmp.com/ja/docs/portal/ordering/) | | 10 | 最初のバックアップを作成する | [Backup and restore](https://nexcmp.com/ja/docs/getting-started/backup-and-restore/) | ## 最初の注文を作成する(スモークテスト) {#create-your-first-order-smoke-test} 1. プライベートブラウジングウィンドウでカスタマーポータルを開き、テストアカウントを登録します。 2. クレジットを追加します(バウチャーまたはテスト決済を使用)。 3. ゾーン内の最小プランを注文します。 4. 管理画面の Services › Virtual Machines に表示されることを確認し、コンソールを開いてから、削除します。 VMが *running* にならない場合は、**Infrastructure › Cloud provider › Sync & errors** を開き、エラーを確認してください。 --- # NexCMPのアップデート {#updating-nexcmp} > **管理画面の場所:** System › Admin › License & updates (`/license`) → *Update* カード。 ## 受け取るもの {#what-you-receive} | リリースタイプ | 配信時期 | |---|---| | セキュリティ修正 | **常時**(「更新期限」日を過ぎた場合も含む) | | 機能リリース | 「更新期限」日**以前**に公開されたもののみ | 両方の日付は **License & updates** で確認できます。ライセンスの更新は [nexcmp.com/licenses](https://nexcmp.com/licenses) から行ってください。 ## 管理コンソールからのアップデート {#update-from-the-admin-console} 1. **System › Admin › License & updates** を開きます。 2. **Update** カードで **Check for update** をクリックします。カードには、現在のバージョン、インストール可能な最新バージョン、該当する場合は *security* タグ、および変更履歴が表示されます。 3. **Update to X.Y.Z** をクリックして確認します。プログラムがリリースをダウンロードし、**SHA-256およびEd25519署名**を検証して、バイナリをアトミックに置き換え(`.bak` コピーを保持)、再起動します。約 **10秒** のダウンタイムが発生します。 4. ページを再読み込みし、License & updates の右上にあるバージョンを確認します。 ![実行中のバージョンと Check for new version ボタンが表示された Update カード](https://nexcmp.com/ja/docs/images/getting-started/updating-01-card.webp) ## コマンドラインからのアップデート {#update-from-the-command-line} ```bash sudo nexcmp update ``` これにより、`/etc/nexcmp/install.conf` から保存されたパラメータを使用して、*現在インストールされているリリース内に同梱されている*インストーラー(その場でダウンロードされるスクリプトではありません)が実行されます。バイナリ、systemdユニット、nginxテンプレート、ノードエージェントが更新され、データ、設定、アカウントは保持されます。 ::: tip ダウングレードは行われません サーバーが実行中のバージョンよりも古いバージョンを提供している場合、インストーラーは実行中のバージョンを維持します。 ::: ## アップデートの前に {#before-you-update} 1. バックアップを取得します:`sudo nexcmp backup` — [Backup and restore](https://nexcmp.com/ja/docs/getting-started/backup-and-restore/) を参照してください。 2. Updateカードの変更履歴をご確認ください。1.3以降の変更点については、VPNエージェントの更新やBare Metalの価格設定ルールを含む[1.6.1までのリリースノート](https://nexcmp.com/ja/docs/getting-started/release-notes/)をご覧ください。 3. トラフィックの少ない時間帯にアップデートを行ってください。実行中の仮想マシンは影響を受けませんが、お客様が数秒間ポータルを利用できなくなります。 ## アップデートの後で {#after-you-update} - `sudo nexcmp status` を実行し、両方のサービスがアクティブであることを確認します。 - 管理ダッシュボードと **Needs attention** ページを開きます。 - データベースの移行は、新しいバージョンの初回起動時に自動的に実行されます。 - VPNノードを運用している場合は、エージェントを個別にアップデートし、使用量の計測値を確認してください。パネルをアップデートすると新しいエージェントが利用可能になりますが、すべてのリモートノードで稼働しているとは限りません。詳細は[VPNノードのデータ通信量枠](https://nexcmp.com/ja/docs/infrastructure/vpn-proxy-nodes/#data-allowance-on-a-vpn-node)をご覧ください。 アップデートが失敗した場合は、[Update errors](https://nexcmp.com/ja/docs/troubleshooting/update-errors/) を参照してください。 --- # リリースノート {#release-notes} > **管理画面での場所:** System › Admin › License & updates(`/license`)、**Update**カード。 本ノートでは、1.3以降**NexCMP 1.6.1**までの変更点を網羅しています。アップデート前には必ずバックアップを作成し、ご使用の環境の**Update**カードに表示されたリリースをご利用ください。コマンドおよび署名検証については[Updating NexCMP](https://nexcmp.com/ja/docs/getting-started/updating/)を参照してください。 ## 1.6.1 - **Bare Metalメトリクス:** 顧客向け**Overview**にCPU、RAM、ディスクアクティビティ、ネットワークタイルと直近の履歴が表示されます。計測値がない場合はダッシュと理由が表示されます。ネットワークの計測にはトラフィックカウンターが必要であり、iDRACのハードウェアインベントリから推定されることはありません。 - **Bare Metalサンプルプラン:** サンプル名には`BM-40C-`が使用されます。編集していない組み込みサンプルプランにはニュートラルな名前が付与されます。編集済みのプランは保持され、参照されているプランはそのコードを維持します。プランを販売可能にする前に、実際のサーバーハードウェアをご確認ください。 - **プラン変更:** 管理者のリクエスト一覧はサーバー側でソートされ、横スクロール時もアクション列が表示されたままになります。 - **バグ報告:** フォームをスクロールしても操作ボタンが表示され続けます。パスワードのマスキング時も前後の診断テキストは保持されます。 - **読み込み:** ページリソースや頻繁に使用される管理者データが先行読み込みされ、画面遷移の遅延が軽減されます。 [Bare Metalのセットアップ、価格設定および顧客向け操作](https://nexcmp.com/ja/docs/infrastructure/dedicated/)と[バグの報告](https://nexcmp.com/ja/docs/administration/report-a-bug/)をご覧ください。 ## 1.6.0 - **Bare Metalセットアップ:** **Safety › Management network connection**でiDRACネットワーク、ISOサーバーアドレス、パネルのコールバックアドレスを入力します。設定が完了するまで、サンプルの値では本番操作がブロックされます。 - **ISOホスティング:** `sudo nexcmp dedicated-setup-iso`で管理ネットワーク用ISO Webサーバーをセットアップします。インストーラーは`--baremetal`またはISOオプションを使用してコンソールとISOツールをインストールできます。必要なツールがない場合、本番操作は`tools_missing`でブロックされます。 - **Bare Metal価格:** 新規または未使用の環境はUSD価格から開始されます。すでにVNDの価格データが存在する環境ではVNDが維持され、引き続きUSD/VNDレートが必要になります。アップデートによって既存の価格がドルとして再解釈されることはありません。 - **顧客サーバーページ:** 事前更新、請求サイクルの変更予約、プラン変更リクエスト、請求書の閲覧、インストール後のOSログイン情報の確認が可能です。新しい所有者が以前の所有者のパスワードを見ることはできません。 - **顧客プロファイル:** 概要、サービス、請求、クォータ、セキュリティ、サポート、アフィリエイト、ログの8つのタブに整理されています。サービスは検索およびソートが可能な単一のテーブルに集約されています。 - **サービスアクション:** ロック、ロック解除、返金なしでの解約、返金ありでの解約で共通のダイアログを使用します。返金は元のウォレットまたはクレジット割り当てに戻され、決済プロバイダーへの自動返金は行われません。 [専用サーバー](https://nexcmp.com/ja/docs/infrastructure/dedicated/)および[顧客管理](https://nexcmp.com/ja/docs/customers/managing-customers/)をご覧ください。NexCMPでは、BYOIPおよびBare Metalサーバーへの顧客サブネットのアタッチは引き続きご利用いただけません。 ## 1.5.2 メイン管理者は**Report a bug**(**Docs**の横)を開き、個別のサインインなしでライセンスアカウントにチケットを送信できます。診断情報は任意です。スタッフ、顧客、AIアシスタントはこの操作からレポートを送信できません。[Report a bug](https://nexcmp.com/ja/docs/administration/report-a-bug/)を参照してください。 ## 1.5.1 - **VPN使用量:** エージェントノードはパネルにトラフィックを報告します。GB許容量を使い切ったサブスクリプションは遮断され、帯域幅のアップグレードまたは新しい請求期間の開始後に再び利用可能になります。使用状況の報告がないノードには**Not measured**と表示され、GBに基づく遮断は行われません。 - **VPNエージェント:** バージョン1.5.1では、未確認の使用量を再試行し、シャットダウン時に最終トラフィックを送信し、エンドポイントの停止時に開いている接続を切断します。パネルだけでなくリモートエージェントも更新してください。 - **廃止されたVPNアドオン:** High IP Reputation、High Concurrency、High Priority Networkは販売終了となりました。これらの料金は既存サブスクリプションの今後の更新金額から削除されます。過去の請求期間への返金は行われません。アドオンがカタログから削除されていた場合は、更新金額を手動で確認してください。 - **プロトコルラベル:** IPv4 HTTPプロキシは平文HTTPです。IPv4アドレスはローテーションしません。IPv6プロキシのポート443はSOCKS5を提供し、HTTPSプロキシエンドポイントではありません。 - **新規セットアップ:** データベース初期化時にパネルとワーカー間の一時的なマイグレーション競合が再試行されるため、最初のプロバイダーを保存する際に再起動は不要です。 [VPNおよびIPv6プロキシノード](https://nexcmp.com/ja/docs/infrastructure/vpn-proxy-nodes/)をご覧ください。 ## 1.5.0 **AI Models**は、デフォルトで無効になっているオプションのゲートウェイおよび請求モジュールです。自身で運用している、または再販が許可されているモデルソースを追加し、モデルを同期し、価格とルートを設定し、モデルを有効化してから販売を開始します。プロバイダーアカウント、モデル、価格は同梱されていません。AI ChatおよびAI Agentモジュールとは分かれています。[AI Models](https://nexcmp.com/ja/docs/infrastructure/ai-models/)をご覧ください。 ## 1.4.2 IPv6プロキシノードのインストールには、リリースパッケージに含まれるデーモンとネットワークスクリプトを使用します。パネルでのパスワードベースのSSHインストールには`sshpass`が必要です。パネルがローテーションスケジュールを実行し、ノードセットアップによってゲートウェイアドレスが割り当てから除外されます。BrandingでカスタムVPNサービス表示名を設定できます。[VPNおよびIPv6プロキシノード](https://nexcmp.com/ja/docs/infrastructure/vpn-proxy-nodes/)をご覧ください。 ## 1.4.0–1.4.1 - **AI管理:** 管理者向けAI Chat、個人用AIアカウント、管理者APIキー、管理者MCPサーバー、OAuthコネクター、構成のインポート/エクスポート、セットアップチェックリストが利用可能です。[AIによる構成](https://nexcmp.com/ja/docs/configure-with-ai/overview/)をご覧ください。 - **ライセンス:** FreeおよびSourceワークフローには公式ビルドとカスタムソースビルドが含まれます。アカウント、ライセンス、ダウンロード、ドキュメントには`nexcmp.com`を使用します。[ライセンスと購入](https://nexcmp.com/ja/docs/getting-started/license-and-purchase/)をご覧ください。 - **ドキュメントリンク:** 管理画面の**Docs**から現在のページのガイドを開くことができます。 - **通貨:** 新規インストールではデフォルトでお客様の言語に従います。USD/VNDは公開為替レートテーブルまたは独自に設定した固定レートから取得されます。[通貨と為替レート](https://nexcmp.com/ja/docs/catalog/currency-and-exchange-rates/)をご覧ください。 - **混在ソースゾーン:** CloudStackとProxmox VEがゾーンを共有している場合でも、パブリックのCloud Server価格が機能します。プランはそれぞれ固有のインフラストラクチャソースを使用します。 - **オファリングから算出される価格:** パーセンテージは販売価格に対するマージンです。原価$60に対して40%のマージンを設定すると、端数処理前で$100になります。 ## アップグレードチェックリスト {#upgrade-checklist} 1. バックアップを作成し、**Update**カードを確認してアップデートを実行し、`sudo nexcmp status`を実行します。 2. GBに基づく遮断機能に依存する前に、VPNエージェントを更新し、ノードが計測されたトラフィックを報告していることを確認してください。 3. Bare Metalを使用する場合は、販売開始や本番運用の前に、管理ネットワークの各項目、必要なツール、価格単位、テンプレート、サンプルプランを確認してください。 4. 顧客プロファイルを開いてサービス一覧を確認します。返金を伴う解約を確定する前に、金額と元の支払い割り当てを確認してください。 5. オプションモジュールは、インフラストラクチャの準備が整うまでオフのままにしてください。AI Models については、プロバイダー、価格が設定されたモデル、およびお客様のリクエストの成功を確認してから販売を開始してください。 --- # Backup and restore {#backup-and-restore} > **管理画面での場所:** System › Admin › Backup(`/backup`)は DDoS & BGP モジュールが有効な場合にのみ表示されます。標準インストールの場合は、以下のコマンドラインを使用してください。 ## バックアップされる内容 {#what-is-backed-up} `sudo nexcmp backup` は以下の内容を含む圧縮アーカイブを1つ作成します: | パーツ | コンテンツ | |---|---| | `data/**/*.db` | `/var/lib/nexcmp` 内のすべての SQLite データベース。SQLite のオンラインバックアップ API を使用してコピーされるため、パネルの実行中であっても整合性が保たれます | | `files.tar` | `/var/lib/nexcmp` 内のその他すべてのファイル(設定ファイル、ブランディングのアップロード、`secrets/`)。ただし、データベースと `updates/` フォルダは除きます | | `etc/` | `/etc/nexcmp` のコピー(インストーラーの設定、インスタンスID、ポート、バインド) | ::: warning アーカイブにはマスターキーが含まれています `secrets/`には、データベースに保存されているAPIキー、決済クレデンシャル、SMTPパスワードを暗号化するキーが格納されます。アーカイブは権限 `0600` で作成されます。暗号化した上で、サーバー外に保管してください。これらのキーがないと、復元したデータベースの機密情報を復号できません。 ::: ## バックアップの取得 {#take-a-backup} ```bash sudo nexcmp backup # writes to /var/backups/nexcmp sudo nexcmp backup /mnt/nas/nexcmp # or to another directory ``` コマンドは、例えば `/var/backups/nexcmp/nexcmp-backup-20261030-120000.tar.zst` のようにアーカイブのパスを出力します。 ### 定期実行の設定 {#schedule-it} ```bash echo '17 3 * * * root /usr/local/bin/nexcmp backup /var/backups/nexcmp && find /var/backups/nexcmp -name "nexcmp-backup-*" -mtime +14 -delete' | sudo tee /etc/cron.d/nexcmp-backup ``` フォルダーをマシンの外(オブジェクトストレージ、NAS、別のサーバー)へコピーします。 ## 復元 {#restore} **同じバージョン(またはそれ以降)**のNexCMPがインストールされているサーバーに復元します。 1. 同じライセンスとドメインを使用して [インストーラー](https://nexcmp.com/ja/docs/getting-started/installation/) でNexCMPをインストールしますが、セットアップウィザードは実行し**ない**でください。 2. サービスを停止します: ```bash sudo systemctl stop nexcmp-vmd nexcmp ``` 3. 一時ディレクトリにアーカイブを展開します: ```bash sudo mkdir /root/restore && sudo tar --zstd -xf nexcmp-backup-20261030-120000.tar.zst -C /root/restore ``` 4. ファイルを元に戻します: ```bash sudo tar -xf /root/restore/files.tar -C /var/lib/nexcmp sudo cp -a /root/restore/data/. /var/lib/nexcmp/ sudo cp -a /root/restore/etc/. /etc/nexcmp/ sudo chown -R nexcmp:nexcmp /var/lib/nexcmp ``` 5. サービスを開始し、確認します: ```bash sudo systemctl start nexcmp nexcmp-vmd sudo nexcmp status ``` 6. *バックアップ元*のシステムの管理者として `https:///admin` にサインインします。 ::: tip 事前のリハーサル 必要になる前に、予備サーバーでステップ1〜6を一度予行練習してください。一度も復元したことのないバックアップは、単なる希望に過ぎません。 ::: ## 含まれないもの {#not-included} - nginxの設定と証明書(インストーラーによって再生成されます。Let's Encryptの証明書は再発行されます)。 - CloudStack / Proxmox VEのサーバーおよびその上の仮想マシン — これらは独自のツールでバックアップしてください。 --- # NexCMPのアンインストール {#uninstall-nexcmp} ::: warning お客様のアクセス停止 アンインストールすると、ポータルと課金機能が停止します。CloudStackまたはProxmox VE上の仮想マシンは稼働し続けますが、それらを管理または課金する機能は失われます。事前に [バックアップ](https://nexcmp.com/ja/docs/getting-started/backup-and-restore/) を作成してください。 ::: ## プログラムの削除(データの保持) {#remove-the-program-keep-the-data} ```bash sudo nexcmp uninstall ``` これにより、`nexcmp` および `nexcmp-vmd` サービス、nginx のサイトおよびスニペット、`/opt/nexcmp`、そして `nexcmp` コマンドが無効化・削除されます。**データは** `/var/lib/nexcmp` および `/etc/nexcmp` に保持されるため、同じサーバーへの後からのインストールでも、中断したところから再開できます。 ## すべての削除 {#remove-everything} ```bash sudo nexcmp uninstall --purge ``` さらに `/var/lib/nexcmp`、`/etc/nexcmp`、`/var/log/nexcmp`、および `nexcmp` システムユーザーが削除されます。この操作は元に戻せません。 ## アンインストール後 {#after-uninstalling} - Let's Encryptの証明書と `nginx` / `certbot` パッケージはそのまま残ります。必要に応じて `sudo certbot delete --cert-name ` で証明書を削除してください。 - 別の場所でアクティベートする場合は、 [nexcmp.com/licenses](https://nexcmp.com/licenses) のライセンスページでドメインの割り当てを解除してください。 - 不要になった場合は、NexCMP用に作成した専用のCloudStackアカウント / Proxmox APIトークンを削除してください。 --- # `nexcmp` コマンドリファレンス {#nexcmp-command-reference} インストーラーはヘルパーを `/usr/local/bin/nexcmp` に配置します。NexCMPサーバー上で実行してください。システムを変更するコマンドには `sudo` が必要です(API用のカスタマーサイドのツールは別のプログラムです。 [cmp CLI](https://nexcmp.com/ja/docs/developers/cmp-cli/) を参照してください)。 | コマンド | root権限の必要性 | 動作内容 | |---|---|---| | `nexcmp status` | いいえ(`sudo` で詳細を確認可能) | バージョン、サービスのステータス(`nexcmp`、`nexcmp-vmd`)、`/healthz`、ライセンスの概要、パブリックポートの状態、ウィザードが未完了の場合はセットアップコード | | `nexcmp update` | はい | 保存されたパラメータを使用して、インストール済みのリリースに同梱されているインストーラーを実行します — [アップデート](https://nexcmp.com/ja/docs/getting-started/updating/) を参照 | | `nexcmp backup [dir]` | はい | `/var/backups/nexcmp`(または `dir`)へのバックアップ — [Backup and restore](https://nexcmp.com/ja/docs/getting-started/backup-and-restore/) を参照 | | `nexcmp uninstall [--purge]` | はい | サービスとプログラムの削除。`--purge`はデータも削除します — [Uninstall](https://nexcmp.com/ja/docs/getting-started/uninstall/) を参照 | | `nexcmp open-port [minutes]` | はい | **緊急**: すべてのインターフェイス上のパネルポート(デフォルト 3000)で 1〜1440 分間(デフォルト 30)リクエストを待ち受け、その後自動的に閉じます | | `nexcmp close-port` | はい | 今すぐ緊急ウィンドウを閉じる | | `nexcmp fix-owner` | はい | `/var/lib/nexcmp` 内の root 所有のファイルを `nexcmp` ユーザーに戻す | ## `nexcmp status` ```text Version : 1.6.1 nexcmp : active nexcmp-vmd : active healthz : ok License : active · domain cloud.example.com · token valid until 2026-11-12 · updates until 2027-10-30 Public port: 127.0.0.1 only (nginx proxy; emergency: sudo nexcmp open-port) ``` データディレクトリ内のファイルが root 所有である場合(別の `nexcmp` コマンドを `sudo` として root で実行した場合など)、サービスユーザーが読み取れないため `status` は警告を出力します。典型的な症状としてライセンスが HTTP 421 を返します。`sudo nexcmp fix-owner` で修復してください。同じ修復がサービスの起動ごとに自動実行されます。 ## 緊急アクセス {#emergency-access} ドメイン、nginx、または TLS が動作しない場合でも、パネルにアクセスできます: ```bash sudo nexcmp open-port 30 # http://:3000/ for 30 minutes sudo nexcmp close-port # close it earlier ``` より安全で何も開かない方法: `ssh -L 3000:127.0.0.1:3000 user@server` を実行して `http://127.0.0.1:3000/` をブラウズします。 ## 環境変数 {#environment} | 変数 | 用途 | |---|---| | `NEXCMP_BASE` | ライセンスサーバーのベース URL を上書きします(デフォルト `https://nexcmp.com`)。テスト専用です | ファイルとディレクトリ: プログラム `/opt/nexcmp`、設定 `/etc/nexcmp`、データ `/var/lib/nexcmp`、ログ `/var/log/nexcmp` および `journalctl -u nexcmp -u nexcmp-vmd`。 --- # インフラストラクチャの要件 {#infrastructure-requirements} > **管理画面での場所:** Infrastructure(左メニューゾーン)およびモジュールを有効にするための System › Admin › License & updates (`/license`)。 このページでは、各モジュールが NexCMP サーバーの**外側**に必要とするものを示しています。サーバー自体(Ubuntu、メモリ、ディスク、ポート)については [Requirements for the NexCMP server](https://nexcmp.com/ja/docs/getting-started/requirements/) を参照してください。モジュールを有効にするには [Modules](https://nexcmp.com/ja/docs/infrastructure/modules/) を参照してください。 ## モジュール別 {#module-by-module} | モジュール | 最小限のインフラストラクチャ | 詳細 | |---|---|---| | **Virtual Machines on CloudStack** | Apache CloudStack 4.23(検証済み)、KVM、ゲストネットワークとパブリック IP レンジを持つアドバンストゾーン、API キーを持つ専用ドメインとアカウント(ROOT は不可)、少なくとも 1 つの準備済みテンプレートと 1 つのサービスオファリング | [CloudStack](https://nexcmp.com/ja/docs/infrastructure/cloudstack/) | | **Virtual Machines on Proxmox VE** | Proxmox VE 9.x(9.2 で検証済み)、カスタムロールを持つ API トークン、クローン可能なストレージ、ブリッジ、ゲートウェイ付きの IPv4 ブロック、OS およびノードごとの 1 つの cloud-init テンプレート | [Proxmox VE](https://nexcmp.com/ja/docs/infrastructure/proxmox/) | | **OS templates** | CloudStack: libguestfs とイメージ用ウェブサーバーを備えた Linux ビルドマシン。Proxmox VE: ゲストエージェントを備えたクラウドイメージテンプレート | [OS templates](https://nexcmp.com/ja/docs/infrastructure/templates/) | | **Bare metal / Dedicated Server** | パネルから管理ネットワーク経由で HTTPS (Redfish) 経由でアクセス可能な iDRAC 9 搭載の Dell サーバー、そのネットワーク上で ISO ファイルを提供する HTTP サーバー、NexCMP サービス用の書き込み可能な ISO フォルダー | [Dedicated servers](https://nexcmp.com/ja/docs/infrastructure/dedicated/) | | **AI Models** | OpenAI互換またはAnthropic互換のAPIと固有のキーを備えた、再販権限を持つ1つ以上のモデルソース。パネルから各ソースへのアウトバウンドHTTPS(ポート443、パブリックドメイン名)、またはAllowed internal hostsに登録された内部ゲートウェイ。GPUや専用ハードウェアは不要 | [AI Models](https://nexcmp.com/ja/docs/infrastructure/ai-models/) | | **VPN** | パブリック IPv4 アドレスをインターフェイスに持つ、またはそこにルーティングされた 1 つ以上の Linux ホスト(x86_64、systemd、root)、パネルへのアウトバウンド HTTPS | [VPNおよびプロキシノード](https://nexcmp.com/ja/docs/infrastructure/vpn-proxy-nodes/) | | **IPv6 Proxy** | パブリック IPv4 を持ち、ポート 80、443、60001〜65535 が空いており、アウトバウンド通信に対応する /32 から /64 の IPv6 プレフィックスを持つ Linux ホスト(x86_64、systemd、`nft`、`ip`、`ss`、`sysctl`)。一度限りのインストールのためのパスワード認証による SSH アクセス | [VPNおよびプロキシノード](https://nexcmp.com/ja/docs/infrastructure/vpn-proxy-nodes/) | | **Object Storage (S3)** | RADOS Gateway(RGW)、Admin Opsユーザー、ポート443のパブリックHTTPSエンドポイントを備えたCephクラスター | [S3](https://nexcmp.com/ja/docs/infrastructure/s3/) | | **Kubernetes** | Kubernetes Service(CKS)が有効化され、少なくとも1つのKubernetesバージョンISOと、ちょうど2 vCPUおよび2048 MBの無料コントロールプレーンサービスオファリングを備えたCloudStack | [Kubernetes and Private Cloud](https://nexcmp.com/ja/docs/infrastructure/kubernetes-and-private-cloud/) | | **Private Cloud** | VPCオファリングおよび帯域幅プランごとに1つのネットワークオファリング(および固定の1 Mbpsオファリング)を備えたCloudStack | [Kubernetes and Private Cloud](https://nexcmp.com/ja/docs/infrastructure/kubernetes-and-private-cloud/) | | **OS & ISO Images** | セカンダリストレージVMがインターネットにアクセスして顧客の画像(直リンク、リダイレクトなし)をダウンロードできるCloudStack。CloudStackアカウントでテンプレートとISOを登録可能 | [Modules](https://nexcmp.com/ja/docs/infrastructure/modules/) | | **Bandwidth** | デフォルトのソース以外に追加の要件はありません。使用量はCloudStackのVM統計から読み取られます。Proxmox VE上のVMは計測されません | [Bandwidth](https://nexcmp.com/ja/docs/catalog/bandwidth/) | | **AI Chat and AI Agent** | パネルサーバーからアクセス可能な、OpenAI互換のAPI(ベースURL、モデル、キー)。サーバーに追加のソフトウェアは不要です | [AI providers](https://nexcmp.com/ja/docs/ai/ai-providers/) | | **DDoS & BGP** | rootとして実行されるデーモン(BGP、フィルタリング、フロー統計)を備えたエッジルーターホストを必要とするアドオンパッケージ。標準インストールには含まれません | [Modules](https://nexcmp.com/ja/docs/infrastructure/modules/) | | **DDoS Shield** | DDoS & BGPアドオン | [Modules](https://nexcmp.com/ja/docs/infrastructure/modules/) | | **Web SSH terminal** | 個別のSSHプロキシサービスとそれに対するルーティング。標準インストールには含まれません。AI Agentには不要です | [Modules](https://nexcmp.com/ja/docs/infrastructure/modules/) | ## ネットワークパスの概要 {#network-paths-at-a-glance} | 送信元 | 宛先 | ポート | 用途 | |---|---|---|---| | パネルサーバー | CloudStack管理サーバー | 443または8080(公開設定による) | API | | パネルサーバー | Proxmox VEノード | 8006/tcp | APIおよびコンソール | | パネルサーバー | Dell iDRAC | 443/tcp(およびVNCポート、デフォルトは5901) | Redfishおよびコンソール | | iDRAC | ISOウェブサーバー | 任意のHTTPポート(例: 8080) | 仮想メディア | | パネルサーバー | Ceph RGW | 443/tcp | Admin Ops | | パネルサーバー | IPv6プロキシノード | 入力したSSHポート | 初回限りのインストール | | VPNおよびプロキシノード | パネル(nginx経由) | 443/tcp | 登録、ハートビート、設定 | | 顧客 | VPNおよびプロキシノード | IPごとのポート 65001〜65535(VPN); 80、443、60001〜65535(IPv6プロキシ) | サービス自体 | ::: tip 管理ネットワークを非公開に保つ iDRAC およびハイパーバイザーの管理アドレスは、顧客がアクセスできないネットワーク上に配置する必要があります。NexCMP は、許可されたプライベート範囲外の iDRAC アドレスを拒否します。 ::: ## 販売前のチェックリスト {#checklist-before-you-sell} 1. 最初のサービスを支えるインフラストラクチャが接続されており、**Test connection** が緑色になっていること。 2. ゾーンの販売準備が整っていること([Zones](https://nexcmp.com/ja/docs/infrastructure/zones/) を参照): アクティブなバックエンド、プラン、準備されたテンプレートがあること。 3. 決済チャネルが設定されていること([Payment channels](https://nexcmp.com/ja/docs/billing/payment-channels/) を参照)。 4. メール機能が動作すること([SMTP and e-mails](https://nexcmp.com/ja/docs/administration/smtp-and-emails/) を参照)。 5. テスト注文を1件行い、VMを削除したこと。 --- # アーキテクチャ {#architecture} > **管理者画面の場所:** これはリファレンスページです。ここで説明するサービスは`sudo nexcmp status`で確認でき、接続は Infrastructure および System › Settings で設定します。 ## 全体像 {#the-picture} ![NexCMPのアーキテクチャ: 顧客はDNSおよびオプションでCloudflareを介してnginxにアクセスし、nginxはポート3000でパネルにプロキシします。パネルおよびワーカーは、CloudStack、Proxmox VE、iDRAC、Ceph、決済ゲートウェイ、SMTP、AIプロバイダーに発信接続を行い、VPNおよびIPv6プロキシノードはパネルに通信を返します](https://nexcmp.com/ja/docs/images/infrastructure/architecture.svg) ### 図解の説明 {#the-same-diagram-in-words} 1. 顧客または管理者は `https://cloud.example.com`(ポータル)、`https://cloud.example.com/admin`(管理コンソール)を開くか、REST APIを呼び出します。DNSはドメイン名をサーバー、またはそこにプロキシするCloudflareに向かいます。 2. パネルサーバー上の **nginx** はポート80(リダイレクトおよび証明書更新)と443(TLS)でリクエストを待ち受け、すべてのリクエストを `127.0.0.1:3000` の **panel** に転送します。セットアップウィザード完了後、パネルはループバックインターフェイスのみでリクエストを待ち受けます。 3. **panel**(`nexcmp.service`)は、カスタマーポータル、管理コンソール、REST API、セットアップウィザード、およびノードに必要なダウンロード(エージェントバイナリ、インストールスクリプト、`cmp` コマンドラインツール)を提供します。また、1日1回ライセンスの確認を行います。 4. **worker**(`nexcmp-vmd.service`)はローカル専用の `127.0.0.1:8112` でリクエストを待ち受けます。時間のかかる処理やスケジュールされた処理(プロビジョニングジョブ、CloudStackおよびProxmox VEとの同期、課金処理、帯域幅の収集、ブラウザコンソール接続など)を実行します。 5. これら2つのプロセスから、NexCMPは外部への呼び出しを行います: **CloudStack**(管理API)、**Proxmox VE**(ポート8006のAPI、証明書ピン留め)、**Dell iDRAC**(管理ネットワーク上のHTTPS経由のRedfish)、**Ceph RGW**(HTTPS経由のS3およびAdmin Ops)、**決済ゲートウェイ**(Webhook URLも呼び出すStripe、PayPal、USDTおよび銀行振込プロバイダー)、**お客様のSMTPサーバー**、OpenAI互換APIを持つ**AIプロバイダー**、およびオプションの **Telegram**。 6. **VPNノード**は `cmp-agent` を実行します。各ノードはワンタイムトークンで一度登録を行った後、5秒ごとにHTTPS経由でパネルにハートビートを送信し、その応答として設定を受け取ります。**IPv6プロキシノード**はSSH経由でパネルによって一度インストールされた後、パネルから設定を取得します。 7. 状態はSQLiteデータベースと `/var/lib/nexcmp` 内のいくつかのファイルに保存されます。CloudStack、Proxmox、S3、iDRAC、AIプロバイダーの資格情報は、同じ場所にあるマスターキーファイルを使用して暗号化(AES-256-GCM)されて保存されます。 ## サービスとプロセス {#services-and-processes} | プロセス | 実行ユーザー | 待ち受けポート/アドレス | 機能 | |---|---|---|---| | `nginx` | root (workers `www-data`) | 80, 443 | TLS、リダイレクト、パネルへのプロキシ | | `nexcmp` | `nexcmp` | 3000 (初回インストール時はすべてのインターフェイス、以降は `127.0.0.1`) | ポータル、管理コンソール、API、ウィザード、ダウンロード | | `nexcmp-vmd` | `nexcmp` | `127.0.0.1:8112` | ジョブ、同期、課金、帯域幅、コンソール | | `nexcmp-update` | root | なし | 管理コンソールから要求されたアップデートを適用(パスユニットが要求を待機) | | `cmp-agent`(VPNノード上) | root | VPNリスナーポート | パネルへの報告、パブリックIPv4上でのプロキシリスナーの実行 | パネルとワーカーは、root権限もDockerも、独立したデータベースもRedisも持たず、`/var/lib/nexcmp` と `/var/log/nexcmp` を除いて読み取り専用のファイルシステム上で、Linuxの機能を使用しない通常のユーザーとして実行されます。 ## ファイルとその場所 {#files-and-where-they-are} | パス | コンテンツ | |---|---| | `/opt/nexcmp` | プログラム:リリース、`bin/`、テンプレートビルダーなどの共有ファイル。rootが所有し、サービスからは読み取り専用。 | | `/etc/nexcmp` | インストーラー設定(`install.conf`)、ポートとバインド(`nexcmp.env`)。 | | `/var/lib/nexcmp` | SQLiteデータベース、アップロードされたブランディング、エージェントダウンロードフォルダ、ライセンス状態、マスターキーファイル。これらをバックアップしてください。 | | `/var/log/nexcmp` | ログ。 | [Backup and restore](https://nexcmp.com/ja/docs/getting-started/backup-and-restore/) を参照してください。マスターキーファイルはデータベースと一緒にバックアップする必要があります。そうしないと、復元されたデータベースで保存された認証情報を復号できません。 ## 通信の方向 {#who-connects-to-whom} | 方向 | パス | ポート | 備考 | |---|---|---|---| | 顧客からパネルへ | インターネット、DNS、オプションのCloudflare、nginx | 443 | [DNS and Cloudflare](https://nexcmp.com/ja/docs/getting-started/dns-and-cloudflare/) を参照してください。 | | パネルからライセンスサーバーへ | `nexcmp.com` | 443 | アクティベーション、毎日のチェック、およびアップデート。 | | パネルから CloudStack へ | API | 443 または 8080 | VMコンソール、帯域幅、Kubernetes機能は同じエンドポイントを使用します。 | | パネルから Proxmox VE へ | API および WebSocketコンソール | 8006 | SHA-256でピン留めされた証明書。 | | パネルから iDRAC へ | Redfish | 443、VNC 5901 | 管理ネットワークのみ。 | | iDRAC から ISOサーバーへ | HTTP | お客様のポート | iDRACがISOを取得します。 | | パネルから Ceph RGW へ | Admin Ops | 443 | | | パネルからSMTPへ | SMTP | 587 または 465 | | | パネルからAIプロバイダーへ | HTTPS | 443 | AIモジュールが有効な場合のみ。 | | 決済ゲートウェイからパネルへ | Webhook | 443 | Stripe および PayPal からのコールバック。 | | ノードからパネルへ | `cmp-agent` | 443 | 登録、ハートビート、アップグレード。 | | パネルからIPv6プロキシノードへ | SSH | 入力したポート | 初回インストール時のみ。 | ## 重要性 {#why-it-matters} - **アクセス可能なパネルは、攻撃可能なパネルです。** セットアップウィザードの完了後は、ポート 3000 を閉じた状態に維持してください。TLS が有効な場合、インストーラーはこれを自動的に行います。 - **ワーカーが実行中である必要があります**(作成や課金を行うため)。`sudo nexcmp status` に両方のサービスとヘルスチェックが表示されます。 - **アウトバウンドファイアウォールを計画してください。** パネルサーバーのアウトバウンドトラフィックがフィルタリングされている場合は、上記の表にある宛先を許可してください。 - **管理トラフィックはパブリック経由を通らないようにします。** CloudStack、Proxmox VE、iDRAC、Ceph への接続は、パネルサーバーから直接それらのシステムへ向かいます。nginxやCloudflareを経由することは決してありません。 --- # モジュール {#modules} > **管理画面での場所:** System › Admin › License & updates (`/license`)、**Module** カード。 ## 動作内容 {#what-it-does} モジュールとは、全体として有効または無効を切り替えることができるサービスまたは機能です。**オフ**になっているモジュールは管理メニューから非表示になり、お客様は購入できません。また、アドオンであるモジュールの場合、その API ルートは `404 module_disabled` を返します。モジュールを有効にすると機能が露呈するだけであり、その背後にあるインフラストラクチャは引き続き接続する必要があります(最後の列を参照してください)。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | アカウント | 書き込み権限を持つ管理者。読み取り専用スタッフはスイッチを表示できますが、変更することはできません。 | | インフラストラクチャ | 表を参照してください:各モジュールに必要なものが記載されています。 | | 依存関係 | 一部のモジュールは他のモジュールを必要とします(例:DDoS Shield は DDoS & BGP を必要とします)。 | ## インフラストラクチャの準備 {#prepare-the-infrastructure} スイッチ自体には必要ありません。表にリンクされているページの記述に従って、各モジュールのインフラストラクチャを接続してください。 ## NexCMP での接続 {#connect-in-nexcmp} 1. **System › Admin › License & updates** を開き、**Module** カードまでスクロールします。無効にしたモジュールは管理メニューから非表示になり、お客様が購入できなくなることが記載されています。 2. モジュールのスイッチを使用します。ページに **Saved: reloading menu** と表示されて再読み込みされ、メニューが即座に変更されます。 ![License & updates 内の、各モジュールのスイッチを備えた Module カード](https://nexcmp.com/ja/docs/images/infrastructure/modules-01-license-modules.webp) ### モジュール一覧 {#the-modules} | モジュール(表示名) | デフォルト | 追加される機能 | 必要なもの | ページ | |---|---|---|---|---| | **Virtual Machines** | 常時オン | VM カタログ、注文、コンソール、スナップショット | CloudStack または Proxmox VE | [CloudStack](https://nexcmp.com/ja/docs/infrastructure/cloudstack/), [Proxmox VE](https://nexcmp.com/ja/docs/infrastructure/proxmox/) | | **Bandwidth** | **オン** | VM、Kubernetes、S3 のクォータ、アドオン、アラート、超過アクション | 追加なし(CloudStack VM 統計情報) | [Bandwidth](https://nexcmp.com/ja/docs/catalog/bandwidth/) | | **OS & ISO Images** | オフ | お客様自身による OS イメージおよび ISO の登録(GB 単位で課金) | CloudStack、そのセカンダリストレージ VM へのインターネットアクセス | [Requirements](https://nexcmp.com/ja/docs/infrastructure/requirements/) | | **Kubernetes** | オフ | Kubernetes クラスター (CKS) | CKS が有効な CloudStack | [Kubernetes and Private Cloud](https://nexcmp.com/ja/docs/infrastructure/kubernetes-and-private-cloud/) | | **Private Cloud** | オフ | 専用帯域幅プランを備えた VPC | CloudStack VPC およびネットワークオファリング | [Kubernetes and Private Cloud](https://nexcmp.com/ja/docs/infrastructure/kubernetes-and-private-cloud/) | | **Object Storage** | オフ | Ceph RGW上のS3アカウント、従量課金制 | Ceph RGWとS3サービスを持つゾーン | [S3](https://nexcmp.com/ja/docs/infrastructure/s3/) | | **VPN** | オフ | 自社ノード上のVPN | `cmp-agent`を実行中のノード | [VPNおよびプロキシノード](https://nexcmp.com/ja/docs/infrastructure/vpn-proxy-nodes/) | | **IPv6 Proxy** | オフ | 自社ノード上のIPv6プロキシ | IPv6プレフィックスを持つプロキシノード | [VPNおよびプロキシノード](https://nexcmp.com/ja/docs/infrastructure/vpn-proxy-nodes/) | | **Bare Metal** | オフ | iDRAC経由のDell製サーバー:注文、OSインストール、コンソール、電源 | 管理ネットワーク上のiDRAC 9 | [Dedicated servers](https://nexcmp.com/ja/docs/infrastructure/dedicated/) | | **AI Models** | オフ | AIモデルへのアクセスを販売するゲートウェイ: 単一キーでの複数モデル利用、モデルごとの価格設定、利用上限、ログ、ウォレット請求 | 自社で用意するモデルソース: 独自のキーを持つOpenAI互換またはAnthropic互換のAPI | [AI Models](https://nexcmp.com/ja/docs/infrastructure/ai-models/) | | **AI** | オフ | AI Chat(自動サポート)およびAI Agent(自然言語によるVM管理) | OpenAI互換のプロバイダー | [AI providers](https://nexcmp.com/ja/docs/ai/ai-providers/) | | **DDoS Shield** | オフ | お客様向けのIP保護。DDoS & BGPが必要なため、無効時はスイッチも無効のままになります | DDoS & BGPアドオン | 下記 | | **DDoS & BGP** | オフ、**アドオン** | エッジルーターコンソール:BGP、RTBH、XDP、セッション、エッジトラフィック | ルートデーモンを実行するエッジホスト | 下記 | ### どのスイッチが何を行うか {#which-switch-does-what} - **Bare Metal**には2つのレイヤーがあります。モジュールスイッチを有効にすると管理者メニューとAPIが表示されます。顧客への販売は**Services › Dedicated Server**配下にある入力確認付きの別スイッチとなっており、**Infrastructure › Bare Metal › Safety**で**live ops**を有効にするまですべてのiDRACへの書き込みがブロックされます。[Dedicated servers](https://nexcmp.com/ja/docs/infrastructure/dedicated/)を参照してください。 - **Kubernetes**、**Private Cloud**、**VPN**、**IPv6 Proxy**、**Images**の場合、サービスページのモジュールスイッチと販売スイッチは同じ設定に作用します。 - **AI**では、**System › Settings › AI provider**でのプロバイダー設定も必要です。 - **AI Models**には2つのレイヤーがあります。モジュールのスイッチによって管理メニューとAPIが表示されます。顧客への販売はAI Modelsページの最上部にある独立した販売スイッチとなっており、デフォルトではオフです。詳細は[AI Models](https://nexcmp.com/ja/docs/infrastructure/ai-models/)をご覧ください。 ### 起動時に読み込まれるモジュール {#modules-read-at-start-up} 3つの機能は通常のスイッチではありません。これらは**サービスの起動時に1度だけ**読み込まれ、標準インストールには含まれないインフラストラクチャが必要です。 | 機能 | 設定 | 状態 | 必要なもの | |---|---|---|---| | DDoS & BGP | `module_ddos` | オフ時は**Add-on package**、オン時は**Installed**として表示されます。コンソールにスイッチはありません。 | rootとして実行されるエッジルーターデーモン(BGP、RTBH、XDP、フロー統計)。パネルは特権を持たないユーザーとして実行されるため、これらを実行できません。 | | AI | `module_ai` | 通常のスイッチです。ルートはすぐに追従します。AI Chatのバックグラウンドジョブ(チケット調査、スケジュールされた返信)は、サービスの次回再起動時に開始されます。コンソールには再起動が推奨される旨が表示されます。 | AIプロバイダー。 | | Web SSHターミナル | `feature_ssh_web` | デフォルトではオフ、コンソールにスイッチなし | 独立したSSHプロキシサービスとそのルート。これがない場合、ポータルのConsoleタブにはVNCのみが表示されます。**AI Agentには不要です**:パネル自身が作成するSSH接続を介してコマンドを実行します。 | 起動設定を変更した後は、サービスを再起動してください:`sudo systemctl restart nexcmp nexcmp-vmd`。 ## 確認 {#verify} 1. 再読み込み後、モジュールのメニュー項目が表示(または非表示)されます。 2. 顧客向けモジュールの場合、サインインした顧客に対してポータルに新しいメニュー項目が表示されます。オフになっているモジュールは何も表示されないか、「近日公開(coming soon)」と表示されます。 ## 制限と注意点 {#limits-and-notes} - モジュールをオフにしても何も削除されません。実行中のVM、クラスター、S3アカウント、サブスクリプションは稼働および課金が継続され、お客様が新しく作成できなくなるだけです。 - クォータページには、モジュールがオンになっているサービスのみがリストされます。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | メニュー項目が表示されなかった | ページが再読み込みされなかった | 管理コンソールを再読み込みしてください。 | | DDoS Shieldスイッチが無効になっている | DDoS & BGPがインストールされていない | DDoS ShieldにはDDoS & BGPアドオンが必要です。 | | 「This module is an add-on package and cannot be switched here」(HTTP 409または422) | あなた(またはスクリプト)がDDoS & BGPの切り替えを試みた | アドオンパッケージであるため、スイッチはありません。 | | "DDoS ShieldにはDDoS & BGPアドオンが必要です" | DDoS Shieldの場合も同様 | 先に関数をインストールしてください。 | | モジュールルートが404を返す `module_disabled` | モジュールがオフになっている | モジュールをオンにしてください。 | | AI Chatは応答するがチケット調査が始まらない | AIモジュールが再起動なしでオンにされた | `sudo systemctl restart nexcmp nexcmp-vmd`. | | 読み取り専用スタッフは保存できない | ロールが読み取り専用である | 管理者アカウントを使用してください。 | --- # ゾーン {#zones} > **管理画面での場所:** Infrastructure › Datacenter › Zone(`/infra/zones`)。ゾーンの詳細ページは`/infra/zones/`です。 ## 動作内容 {#what-it-does} **ゾーン**とは、お客様が注文時に選択するロケーション(国、都市、およびフラグ)と、そこで販売されるサービスです。これはプラットフォームの裏側にあるゾーン、クラスター、ノードとは切り離された、販売用の概念です。ゾーンの裏側には、CloudStackゾーン、Proxmox VEクラスター、IP範囲を持つVPNノード、S3バックエンドなどの**インフラストラクチャ**をアタッチします。 ゾーン1は[setup wizard](https://nexcmp.com/ja/docs/getting-started/setup-wizard/)によって作成され、入力した表示名と国が設定されます。さらに多くの場所にインフラストラクチャがある場合や、VPNやS3に独自のロケーションを持たせる場合は、ゾーンを追加してください。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | 権限 | 管理者アカウント。読み取り専用スタッフのロールでは閲覧のみ可能で、変更はできません。 | | インフラストラクチャ | ゾーンには何もアタッチされるまで何も販売されません(以下の「Which service sells where」を参照)。 | | 依存関係 | VMの場合は[CloudStack](https://nexcmp.com/ja/docs/infrastructure/cloudstack/)または[Proxmox VE](https://nexcmp.com/ja/docs/infrastructure/proxmox/)、VPNの場合は[VPN and proxy nodes](https://nexcmp.com/ja/docs/infrastructure/vpn-proxy-nodes/)、オブジェクトストレージの場合は[S3](https://nexcmp.com/ja/docs/infrastructure/s3/)。 | ## インフラストラクチャの準備 {#prepare-the-infrastructure} 不要です。ゾーンはNexCMP内のレコードです。 ## NexCMP での接続 {#connect-in-nexcmp} ### ゾーンの作成 {#create-a-zone} 1. **Infrastructure › Datacenter › Zone**を開き、**Add zone**をクリックします。 2. フォームに以下を入力します: | 項目 | 入力例 | 備考 | |---|---|---| | Country | `United States` | フラグを選択します。 | | City | `New York` | オプションです。 | | Name (Vietnamese)、Name (English) | `New York` | お客様に各言語で表示される名前です。 | | Slug | `us-new-york` | a-z、0-9、ハイフン、2〜32文字。独自に入力するまでは国と都市から自動入力されます。 | | Visibility | Public | **Public** ゾーンはすべてのお客様に表示され、**Hidden** ゾーンは管理者のみが指定できます。 | | 順序 | `0` | リストでは数値が小さいものが先になります。 | | このゾーンで販売されるサービス | Virtual Machines (VM), VPN, Object Storage (S3) | 1つ以上チェックしてください。 | | 有効 | On | **Off** にすると、お客様からゾーンが非表示になります。 | | デフォルト | オフ | 選択していないお客様に対してあらかじめ選択されるゾーンです。デフォルトとなるゾーンは常に正確に1つです。 | ![国、都市、スラッグ、サービスにチェックが入った状態の Add zone ダイアログ](https://nexcmp.com/ja/docs/images/infrastructure/zones-01-add-zone.webp) 3. **Create zone**をクリックします。リストには、国旗、所有者、サービス、状態、およびVM、プラン、紐付けられたインフラストラクチャの数が表示されます。 ![デフォルトゾーンと2つ目のゾーンが表示されたゾーン一覧](https://nexcmp.com/ja/docs/images/infrastructure/zones-02-list.webp) ### 紐付けられているものの確認 {#look-at-what-is-attached} 行をクリックしてゾーンを開きます。**Provider infrastructure** タブには、紐付けられた各バックエンドのプロバイダー、種類(CloudStackまたはProxmox VE)、リージョン、状態、優先度が一覧表示されます。**VPN infrastructure** タブには、ゾーンのVPN範囲とノードが一覧表示され、VPNプールへのリンクが含まれます。 ![Provider infrastructure タブが表示されたゾーン詳細](https://nexcmp.com/ja/docs/images/infrastructure/zones-03-detail.webp) ### サービスごとの販売場所 {#which-service-sells-where} | サービス | ゾーンへの組み込み方法 | |---|---| | CloudStack上の仮想マシン | ウィザード(または**Infrastructure › Cloud provider › CloudStack**)によってCloudStackがzone 1にアタッチされます。 | | Proxmox VE上の仮想マシン | クラスタの **Clusters** タブで、**Attach cluster to zone**をクリックします。クラスタは**既存の**ゾーン(通常はCloudStack経由で販売を行うゾーン)に参加します。 | | VPN | パブリックIP範囲を報告するVPNノードは、その国のゾーンを作成(または参加)し、範囲をVPNプールに追加します。**VPN IP pools** で、範囲のゾーンとノードを割り当てることもできます。 | | IPv6 Proxy | 新しいIPv6プロキシノードは、**off** 状態のゾーンを作成します。お客様が選択できるように、ここでゾーンを有効にしてください。 | | Object Storage (S3) | ゾーンでS3サービスにチェックを入れ、**Ceph S3 (RGW)**でバックエンドを関連付けます。 | ### ゾーンが仮想マシンを販売できる条件 {#when-can-a-zone-sell-virtual-machines} ゾーンに有効で販売可能なバックエンドが1つ以上あり、**かつ**表示可能なプランが1つ以上あり、**かつ**そのバックエンド上に準備完了のテンプレートが1つ以上存在する状態になるまで、そのゾーンには**not ready to sell VMs**タグが表示されます。顧客向けの注文フォームには、準備が整ったゾーンのみが一覧表示されます。 ## 確認 {#verify} 1. ゾーンが正しい国旗とともに **On** としてリストに表示されます。 2. 詳細ページに、想定しているバックエンドまたはVPN範囲が表示されます。 3. VMの場合:**not ready to sell VMs** タグが消えていることを確認します。カスタマーポータルで注文を開始し、そのゾーンが提供されていることを確認します。 ## 制限と注意点 {#limits-and-notes} - このNexCMPのリリースでは、お客様は**デフォルトゾーン**(ゾーン1)で仮想マシンを注文します。その他のゾーンは、VPN、IPv6 Proxy、Object Storage用、またはインフラストラクチャが整う前にロケーションを準備するために使用され、ゾーンリストの下のメモにも同様のことが記載されています。 - バックエンド、VM、プラン、VPN範囲など、何も紐付けられていない場合にのみゾーンを削除できます。デフォルトゾーンは削除できません。削除するには、まず別のゾーンをデフォルトに設定してください。 - リセラーが所有するゾーンは、有効・無効の切り替えや表示・非表示の変更のみ可能であり、その他のフィールドはロックされています。 - スラッグは内部参照の一部です。一度選択したら変更できません。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | 「ゾーン名は必須です」/「国を選択してください」/「サービスを1つ以上選択してください」 | 必須項目が入力されていません | 名前を入力し、国を選択してサービスにチェックを入れてください。 | | 「無効なスラッグです(a-z、0-9、-、2〜32文字)」 | スラッグに他の文字が含まれているか、長さが正しくありません | 小文字、数字、ハイフンのみを使用してください。 | | 「not ready to sell VMs」タグ | そのゾーンにアクティブな販売可能なバックエンド、プラン、または準備完了したテンプレートがありません | インフラストラクチャをアタッチし、プランとテンプレートを追加してください。[Plans](https://nexcmp.com/ja/docs/catalog/plans/)と[Templates](https://nexcmp.com/ja/docs/infrastructure/templates/)をご覧ください。 | | "still attached"により削除が無効化されている | ゾーンにバックエンド、VM、プラン、またはVPN範囲が存在します | 最初にそれらを削除するか移動してください。 | | "Default zone"により削除が無効化されている | ゾーンがデフォルトに設定されています | 別のゾーンをデフォルトに設定してください。 | | 顧客にゾーンが表示されません | 非表示、非アクティブ、またはサービスにチェックが入っていません | VisibilityをPublicに、ActiveをOnにし、サービスにチェックを入れてください。 | | バックエンドフォームにS3ゾーンが不足している | ゾーンでS3サービスにチェックが入っていません | ゾーンを編集し、**Object Storage (S3)**にチェックを入れてください。 | --- # CloudStack > **Where in the admin:** Infrastructure › Cloud provider › CloudStack › API connection (`/infra/cloudstack?tab=connect`)。最初の接続は、[setup wizard](https://nexcmp.com/ja/docs/getting-started/setup-wizard/)のステップ2でも行えます。 ## 動作内容 {#what-it-does} NexCMPは、Apache CloudStackクラウド上で動作する仮想マシンの販売を行います。CloudStack APIを介してVMのデプロイ、起動、停止、サイズ変更、スナップショット、削除を行い、ゾーンからパブリックIPアドレスを割り当て、課金と帯域幅の使用量を読み取り、管理コンソールにキャパシティと稼働状態を表示します。ハイパーバイザーの信頼できる情報源はCloudStackであり、NexCMPはその上のストアフロント、課金、ポータルとして機能します。 CloudStackをメインのVMソースとする(または予定している)場合は、このページを使用してください。その隣の2つ目のソースについては、[Proxmox VE](https://nexcmp.com/ja/docs/infrastructure/proxmox/)をご覧ください。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | CloudStack version | 4.23がテスト済みのリリースです。VMコンソールには4.18以降が必要であり、実行中のVMのCPU/RAMのライブスケーリングにはKVMを使用する4.23が必要です。 | | Zone type | 顧客VM用のゲストネットワークを少なくとも1つと、空きアドレスを持つパブリックIP範囲を持つゾーン。 | | Hypervisor | KVMがテスト済みのハイパーバイザーです。 | | アカウント | NexCMP用に作成された**専用のドメインとアカウント**。ROOT管理者キーは絶対に使用しないでください。 | | API reachability | パネルサーバーは、管理サーバーのAPI URL (`https://cloudstack.example.com/client/api`) にHTTP(S)経由で到達できなければなりません。VMコンソール、帯域幅、Kubernetes機能も同じエンドポイントを使用します。 | | Optional read-only key | 2つ目の読み取り専用キーを使用すると、管理コンソールにホスト、ストレージ、システムVM、パブリックIP範囲を表示できます。VMの販売には不要です。 | | Public IP | ゾーン内の空きパブリックIPv4アドレス。NexCMPが販売できるプレフィックスは、Sales IP poolsで設定されます。 | | Templates | パスワードが有効な準備完了テンプレートが少なくとも1つ、およびアカウントから見えるサービスオファリングが少なくとも1つ必要です。[Templates](https://nexcmp.com/ja/docs/infrastructure/templates/) を参照してください。 | | ストレージ | アカウントのボリューム用のプライマリストレージ、およびスナップショットやイメージを販売する場合はセカンダリストレージ。 | | 依存関係 | なし。Kubernetes、Private Cloud、Images、Bandwidthはこのページに依存します。 | ::: warning ROOT管理者キーを使用しない NexCMP 専用のドメインとアカウントを作成します。これにより、キーはそのドメインにのみ到達し、キーが漏洩した場合でもクラウドの残りの部分に影響を与えません。また、セットアップウィザードでは、選択したネットワークがゾーンと、キーを所有するアカウントの**両方**に属していることも確認されます。 ::: ## インフラストラクチャの準備 {#prepare-the-infrastructure} コマンドは、CloudStack管理者としてログインした [CloudMonkey](https://cloudstack.apache.org/) (`cmk`) を使用します。例の名称と山括弧内のプレースホルダーを置き換えてください。 ### 専用アカウントとAPIキーの作成 {#create-a-dedicated-account-and-api-key} 1. NexCMPが所有するすべてを保持するドメインを作成します。 ```bash cmk create domain name=nexcmp ``` 出力内の `id` に注意してください。これは以下で `` として使用されます。 2. アカウントに付与するロールを探します。 ```bash cmk list roles type=DomainAdmin filter=id,name ``` | ロール | 選択するタイミング | |---|---| | **Domain Admin** (推奨) | フル機能セット: VM、ネットワーク、Kubernetes用プロジェクト、VPC、イメージ。アクセス範囲はその `nexcmp` ドメインで停止します。 | | User | VMライフサイクルのみ。グローバル設定 `allow.user.expunge.recover.vm` が trueでない限り、通常のユーザーはVMを完全に削除(expunge)できません。その場合、NexCMPはVMを停止し、CloudStackが `expunge.delay` 後に完全に削除します。 | 3. アカウントと最初のユーザーを作成します。推測されにくい強力なパスワードを使用してください。このパスワードは今後入力されることはありません。 ```bash cmk create account name=nexcmp-api username=nexcmp-api \ password='CHANGE-ME-LONG-RANDOM' email=ops@example.com \ firstname=NexCMP lastname=API roleid= domainid= ``` 4. 新しいユーザーのAPIキーペアを生成します。 ```bash cmk list users domainid= username=nexcmp-api filter=id,username cmk generate userkeys id= ``` `apikey` と `secretkey` をコピーします。これらはNexCMPに入力する **API key** および **Secret key** です。NexCMPはこれらを暗号化して保存し、後からは下4桁のみを表示します。 5. ドメインに制限的なリソース制限(インスタンス、ボリューム、パブリックIP、ネットワーク、スナップショット、テンプレート、プロジェクト)が設定されていないことを確認してください。 ```bash cmk list resourcelimits domainid= ``` ### 顧客VM用のゲストネットワークの作成 {#create-the-guest-network-for-customer-vms} お客様のVMは、新しいアカウントに属する1つのゲストネットワークにデプロイされます。仮想ルーター(VR)およびスタティックNAT、ファイアウォール、ポートフォワーディングサービスを備えた孤立ネットワークは、NexCMPがスタティックNATによって各VMにパブリックIPを割り当てるため、正常に動作します。 ```bash cmk list networkofferings state=Enabled guestiptype=Isolated filter=id,name cmk create network name=customers displaytext=customers zoneid= \ networkofferingid= account=nexcmp-api domainid= ``` サービスのデフォルトのエグレスポリシーを確認します。「deny」に設定されている場合、ファイアウォールのエグレスルールが追加されるまで、お客様のVMからのアウトバウンドアクセスは許可されません。 ### サービスプランとテンプレートの表示設定 {#make-offerings-and-templates-visible} - **サービスプラン**と**ネットワークプラン**は、公開されているか、`nexcmp` ドメインに割り当てられている必要があります。そうでない場合、アカウントでそれらをリスト表示または使用できません。 - 少なくとも1つのテンプレートを登録または共有します([Templates](https://nexcmp.com/ja/docs/infrastructure/templates/)を参照)。NexCMPには、準備が完了しており推奨されているテンプレートが表示されます。 ### オプション:インフラストラクチャページ用の読み取り専用キー {#optional-read-only-key-for-infrastructure-pages} **Capacity**、**Host**、**Storage**、**System VM**の各タブ、およびパブリックIP範囲のリストでは、6つのコマンドに対する読み取り権限のみが必要な2つ目のキーを使用します。フル管理者キーを再利用する代わりに、制限付きロールを作成してください: ```bash cmk create role name=nexcmp-readonly type=Admin # is the id printed above for api in listHosts listCapacity listSystemVms listVlanIpRanges listClusters listStoragePools; do cmk create rolepermission roleid= rule=$api permission=allow done cmk create rolepermission roleid= rule='*' permission=deny ``` 次に、そのロールを持つアカウントを(ゾーン全体のデータを読み取るためROOTドメインで)作成し、ステップ4と同様にキーを生成して、次のセクションで**RO API key**として入力します。 ### ネットワークパスの確認 {#check-the-network-path} パネルサーバーから: ```bash curl -fsS -o /dev/null -w '%{http_code}\n' https://cloudstack.example.com/client/api ``` HTTPの応答(4xxを含む)があれば、ポートに到達可能であることを示しています。タイムアウトが発生した場合は、お客様側でのファイアウォールまたはDNSの問題を示しています。 ## NexCMP での接続 {#connect-in-nexcmp} ### セットアップウィザードでの設定 {#in-the-setup-wizard} [setup wizard](https://nexcmp.com/ja/docs/getting-started/setup-wizard/)のステップ2では、同じ値の入力を求められます。**Test connection**をクリックすると、そのキーでアクセスできるゾーンとネットワークの一覧が表示されます。ゾーン、ゲストネットワーク、ゾーンの表示名、国を選択し、**Save CloudStack**をクリックします。そのゾーン内に存在しないネットワークや、キーから見えないネットワークはウィザードで拒否されます。 ![Test connection後のゾーンとネットワークを選択し、CloudStack API URLとキーを入力した状態のウィザードステップ 2](https://nexcmp.com/ja/docs/images/infrastructure/cloudstack-01-wizard-step.webp) ### 後から管理コンソールで行う設定 {#later-in-the-admin-console} 1. **Infrastructure › Cloud provider › CloudStack**を開き、**API connection**タブを選択します。 2. **Connection**カードに入力します: | 項目 | 入力例 | |---|---| | Endpoint API | `https://cloudstack.example.com/client/api` | | APIキー (書き込みアクセス) | `XXXX` (保存済みのキーを維持する場合は空のままにします) | | Secret key | `XXXX` | | RO APIキー / ROシークレットキー | オプション、読み取り専用アカウントのもの | | Zone ID | ゾーンのUUID | ![サンプルエンドポイントとマスクされたキーが表示されたAPI接続タブ](https://nexcmp.com/ja/docs/images/infrastructure/cloudstack-02-connect-form.webp) 3. 保存する前に**Test connection**をクリックします。保存せずに、入力したキーのテストを行います(書き込みキーは`listZones`と`listCapabilities`で、読み取り専用キーは`listSystemVms`でテストされます)。 4. **Save connection**をクリックします。**Enable CloudStack connection**はオンのままにしてください。オフにすると、データを失うことなく、ワーカーがすべてのCloudStackジョブを停止します。 5. **Services › Virtual Machines › Policy › Provisioning**を開き、デフォルトのゲストネットワーク、カスタムプラン、および新しいVMのデフォルトのキーペアを設定します。 ![デフォルトネットワークIDが設定されたVMポリシーのプロビジョニングタブ](https://nexcmp.com/ja/docs/images/infrastructure/cloudstack-04-provisioning.webp) 6. **Infrastructure › Cloud provider › Sales IP pools**を開き、**Configure sales ranges**の下にある**Sellable IP range prefixes**(例:`203.0.113.`)を設定します。ゾーン内の特定のアドレスを絶対に販売してはならない場合は、**Excluded IP prefixes**も設定します。すべての空きアドレスを許可する場合は、プレフィックスを空のままにします。 ![販売可能プレフィックス 203.0.113. が設定された販売用IPプール](https://nexcmp.com/ja/docs/images/infrastructure/cloudstack-05-sales-ip-pool.webp) ### NexCMPの読み書き {#what-nexcmp-reads-and-writes} | 領域 | 読み取り | 変更 | |---|---|---| | VMs | 一覧、状態、利用履歴、コンソールエンドポイント | デプロイ、起動、停止、再起動、再インストール、削除、スケール、パスワードとSSHキーのリセット | | ディスクとスナップショット | ボリューム、VMスナップショット、バックアップ | 作成、アタッチ、デタッチ、リサイズ、削除、スナップショット、復元 | | ネットワーク | ネットワーク、ルーター、パブリックIP、ファイアウォール、ポートフォワーディング、ロードバランサールール | パブリックIPの関連付けと解放、静的NAT、ファイアウォール、ポートフォワーディング、外向きルール、プライベートクラウド用のネットワークとACL | | カタログ | サービス、ディスクとネットワークのオファリング、テンプレート、ISO、OSタイプ | テンプレートとISO(イメージ)の登録および削除、カスタムプラン作成時のサービスオファリング | | Kubernetes | サポートされているバージョン、クラスター、設定 | プロジェクト、リソース制限、ネットワーク、クラスター(Kubernetesモジュール) | | 読み取り専用キー | ホスト、クラスター、ストレージプール、システムVM、容量、VLAN IP範囲 | なし | ### ライブCPUとRAM、および帯域幅 {#live-cpu-and-ram-and-bandwidth} - **ホットプラグ。** 稼働中のVMは、テンプレートがそれを許可しており(動的スケーラブル)、ゲストOSが新しいCPUとRAMをオンラインにする場合にのみ、再起動なしでサイズ変更できます。NexCMPは、名前が`vN`で終わりNが6以上であるテンプレート、またはテンプレートの**vCPU/RAM hot-plug**フィールドで手動設定した場合に、Auto Scalingを有効にします。[Templates](https://nexcmp.com/ja/docs/infrastructure/templates/)をご覧ください。 - **帯域幅ソース。** デフォルト設定では、NexCMPはCloudStackのVM統計情報からトラフィックを測定します(`listVirtualMachinesUsageHistory`、5分ごとにポーリングされ、VMネットワークインターフェイスごとに合算されます)。数値にはVM間のトラフィックが含まれるため、エッジルーターのカウント値よりわずかに高くなる場合があります。CloudStackのVM統計情報の収集を有効にしたままにしてください。統計情報の保持期間を超えるギャップはスキップされます。[Bandwidth](https://nexcmp.com/ja/docs/catalog/bandwidth/)をご覧ください。 ## 確認 {#verify} 1. **Test connection**は、ゾーンとCloudStackのバージョンとともに「Write key: OK」を返します。 2. **Infrastructure › Cloud provider › Providers**には、直近のテスト時刻とともにプロバイダーがアクティブであると表示されます。ダッシュボードのヘルスパネルに「CloudStack: not connected」と表示されなくなります。 3. **Sales IP pools**に空きアドレスが表示されます(約1分ごとに更新されます)。 4. カスタマーポータルまたは管理コンソールから小規模なVMを注文し、Runningに達すること、パブリックIPを持つこと、およびコンソールを開けることを確認します。 ## 制限と注意点 {#limits-and-notes} - このNexCMPリリースでは、接続できるCloudStackクラスターは1つです。**Add cloud provider**ダイアログで2つ目のクラスターのキーをテストすることはできますが、保存はできません。 - 1つのCloudStackゾーンがNexCMPのデフォルトゾーンにアタッチされます。複数のゾーンを持つCloudStackは入力したゾーンにスコープされるため、他のゾーンのVM、IP、ネットワークは無視されます。 - CloudStackでゲストネットワークを削除すると、新しいデプロイがすべて失敗するようになります。ネットワークが消滅すると、管理コンソールに赤い通知が表示されます。 - 資格情報はサーバーから外に出ることはありません。APIは最後の4文字のみを返します。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | `listCapabilities: cloudstack 401: unable to verify user credentials and/or request signature` | APIキーまたはシークレットが間違っている、別のユーザーのキーである、またはパネルサーバーの時計に問題がある | `cmk generate userkeys`でキーを再生成し、両方を貼り付けます。パネルサーバーの時間を確認してください。 | | テスト: `listZones: …`またはタイムアウト | パネルサーバーがAPI URLに到達できない | DNS、ファイアウォール、および正確な`/client/api`パスを確認してください。 | | ウィザード: 「このAPIキーに対応するネットワークがそのゾーンに見つかりません」 | 選択したネットワークが別のアカウントまたはゾーンに属している | 専用アカウントでネットワークを作成し(上記参照)、再度**Test connection**を実行します。 | | ウィザード: 「ゾーンとネットワークを選択してください」 | テストが実行されていない、またはゾーンやネットワークが選択されていない | **Test connection**をクリックし、両方のリストから選択します。 | | バナー「CloudStack key not configured」 | キーがまだ保存されていません(「Connect later」) | Connectionカードを入力し、**Save connection**をクリックしてから、**Test connection**をクリックします。 | | バナー「CloudStack connection is OFF」 | **Enable CloudStack connection**スイッチがオフになっている | スイッチをオンにして保存します。 | | 読み取り専用キー: テストでの「unusable …」 | ロールの権限が不足しているか、アカウントが間違っている | 許可されている6つのコマンドを確認し、アカウントがROOTドメインにあることを確認してください。 | | 「Zone public IP ranges not measured yet」または「no public IP ranges declared」 | 読み取り専用キーがないか、ゾーンにパブリック範囲が本当に宣言されていない | 読み取り専用キーを追加するか、CloudStackでパブリックIP範囲を追加してください。 | | "プールが空です — vmdの同期を60秒待機中" | IPリストはワーカーによって1分に1回更新されます | 1分待ってから再読み込みしてください。 | | "範囲 203.0.113. 内のFree IPが枯渇しています" | 販売可能なプレフィックス内のすべてのアドレスが使用されています | ゾーンにアドレスを追加するか、プレフィックスを広げるか、未使用のIPを解放してください。 | | "ネットワークデータの取得に失敗しました(CloudStackが応答しないか、キーの権限が不足しています)" | キーがアクセス権を失ったか、CloudStackが停止しています | **Test connection**を実行し、アカウントが有効になっていることを確認してください。 | | "ゲストネットワークが存在しません" | ネットワークがCloudStackで削除されました | ネットワークを再作成し、Provisioningの設定でデフォルトに指定してください。 | --- # Proxmox VE > **管理画面での場所:** Infrastructure › Cloud provider › Providers (`/infra/providers`)、および概要、クラスター、VM、サーバー、認証情報のタブがあるプロバイダーページ (`/infra/providers/`)。プランは Services › Virtual Machines › Plans & pricing (`/vm/catalog`) で設定します。 ## 動作内容 {#what-it-does} NexCMPでは、CloudStackの代わりまたはそれと並行して、1つ以上のProxmox VEクラスター上で実行される仮想マシンを販売できます。OSテンプレートをフルクローンでクローン作成し、サイズ、定義したプールからのIPアドレス、rootパスワード、SSHキーなどのcloud-initを通じて構成することでVMが作成されます。お客様は、ポータル内で電源制御、コンソール、スナップショット、再インストール、パスワードリセット、メトリクスを利用できます。クラスター、ノード、ソースの名前がお客様に表示されることはありません。 すでにProxmox VEを運用している場合や、価格の異なる2つ目のVMプールを提供する場合に使用します。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | Proxmox VE | PVE 9.x。統合は9.2で検証済みです。`import`ストレージコンテンツと`import-from`ディスクオプション(PVE 8.2以降)が必要です。 | | パネルからのネットワーク | クラスターAPIへのHTTPS (`https://:8006`)。パス、ユーザー名、クエリはありません。パネルとワーカーの両方が接続し、ブラウザーコンソールはパネル経由でプロキシされます。 | | アカウント | **APIトークン**を持つ専用のPVEユーザーと、以下の特権を持つカスタムロール。`root@pam`は絶対に使用しないでください。 | | ストレージ | クローンに対応したVMディスク用ストレージ(例: `local-lvm`)。組み込みテンプレートビルダーの場合は、`local`という名前のストレージ(コンテンツタイプ`import`および`snippets`)。 | | ネットワーク | カスタマーIPが存在するネットワークに到達するLinuxブリッジ(例: `vmbr0`)。VLANタグを入力する場合は、VLAN対応ブリッジを使用してください。 | | IP | そのブリッジにルーティングされたIPv4ブロック(/16〜/30)とゲートウェイ。NexCMPが自身でアドレスを割り当てます。ProxmoxにはIP管理機能がありません。 | | Templates | デプロイするすべてのノード上で、OSごとに1つのcloud-initテンプレートVM(QEMUゲストエージェント付き)。 | | ゾーン | クラスターをアタッチする既存のゾーン。[Zones](https://nexcmp.com/ja/docs/infrastructure/zones/)を参照してください。 | | 依存関係 | なし。 | ## インフラストラクチャの準備 {#prepare-the-infrastructure} 任意のクラスターノード上で、rootとしてコマンドを実行します。 ### 1. 最小権限のロール、ユーザー、APIトークンを作成する {#_1-create-a-least-privilege-role-user-and-api-token} 1. ロールを作成します。特権リストはNexCMPが使用する正確なものであり、ユーザー、ストレージ定義、データセンターを編集するものは含まれていません。 ```bash pveum role add NexCMP -privs "VM.Allocate VM.Clone VM.Config.CDROM VM.Config.CPU VM.Config.Cloudinit VM.Config.Disk VM.Config.HWType VM.Config.Memory VM.Config.Network VM.Config.Options VM.PowerMgmt VM.Audit VM.Console VM.Snapshot VM.Snapshot.Rollback VM.Backup VM.GuestAgent.Audit VM.GuestAgent.Unrestricted Datastore.Audit Datastore.AllocateSpace Datastore.AllocateTemplate Sys.Audit Sys.AccessNetwork SDN.Use SDN.Audit Pool.Audit Mapping.Audit Mapping.Use" ``` クラウドイメージのダウンロードには`Sys.AccessNetwork`が必要です。PVE 9には`VM.Monitor`特権がないため、追加しないでください。 2. ユーザーとトークンを作成します。`--privsep 1`は、トークンの権利がユーザー自身の権限とトークン自体の権限の**積集合**になることを意味します。 ```bash pveum user add nexcmp@pve --comment "NexCMP" pveum user token add nexcmp@pve api --privsep 1 ``` このコマンドはトークン **secret once** (UUID) を1回だけ表示します。今すぐコピーしてください。トークンIDは `nexcmp@pve!api` です。 3. ユーザーとトークンの**両方**にロールを付与します。これは見落とされがちな手順です。特権分離により、ユーザーに権限がない場合、トークンのみが `Datastore.Audit` などの403エラーを受け取ります。 ```bash pveum acl modify / --roles NexCMP --users nexcmp@pve pveum acl modify / --roles NexCMP --tokens 'nexcmp@pve!api' ``` 4. パネルサーバーからテストします: ```bash curl -sk -H 'Authorization: PVEAPIToken=nexcmp@pve!api=' https://192.0.2.10:8006/api2/json/version ``` `version` が含まれるJSONドキュメントは、トークンが機能していることを示します。(`-k` はこのクイックチェック用のみです。NexCMP自体が証明書をピン留めします。詳細は下記をご覧ください。) ### 2. ブリッジとストレージの確認 {#_2-check-the-bridge-and-the-storage} ```bash pvesm status # storages, type, content and free space ip -br link show type bridge ``` - お客様のVMには、NexCMPで入力したブリッジ上に `virtio` 個のネットワークインターフェイスが割り当てられます。VLANを設定する場合は、ブリッジがVLANに対応(VLAN-aware)している必要があります。 - お客様のVMを**ノードの管理用アドレスとは別の**ブリッジまたはVLANに配置してください。同じネットワークを共有している場合、Proxmoxファイアウォールの自動管理IPセットにより、そのネットワーク内のすべてのVMに対してノードのポート22、8006、3128、5900-5999、60000-60050が開放されます。分離できない場合は、管理用ACCEPTルールの上の行に、そのVMサブネットから上記ポートへの明示的なDROPルールを追加してください。 ### 3. ストレージに関する注意事項(LVM-thin) {#_3-storage-notes-lvm-thin} - シン・プールの**ゼロ埋め(zeroing)はデフォルトのまま**にしてください。無効化(`lvchange -Zn`)すると、新しく割り当てられたチャンクに古いデータが残ったままになり、クローンされたVMのパーティションテーブルやファイルシステムが破損する可能性があります。 - 「write cache: disabled」と表示されるディスクは、数 MB/s 程度でしかクローンできません。`hdparm -W /dev/sdX` で確認し、ディスクに停電保護機能がある場合は書き込みキャッシュを有効にしてください。 ### 4. `import` コンテンツの有効化(組み込みテンプレートビルダー用) {#_4-enable-the-import-content-only-for-the-built-in-template-builder} 組み込みビルダーは、クラウドイメージを `local` という名前のストレージにダウンロードし、そこからテンプレートを作成します。そのストレージのコンテンツリストに `import`(および `snippets`)を追加してください。既存のタイプはそのまま維持してください。`--content` はリスト全体を置き換えます: ```bash pvesm status --storage local # note the current content pvesm set local --content iso,vztmpl,backup,import,snippets ``` ### 5. クラウドイメージからのOSテンプレートの構築 {#_5-build-an-os-template-from-a-cloud-image} テンプレートとは、NexCMPがクローンを作成するcloud-init対応VMのことです。各テンプレートは、VM IDとともに **OS key**(`ubuntu-24.04` など)という短いキーで登録されます。クローンは選択されたノード上で実行されるため、**VMを受け取るすべてのノード上に**OSごとに1つのテンプレートを構築してください。 **オプションA(推奨):ご自身で構築する。** 標準のUbuntuおよびDebianのクラウドイメージにはゲストエージェントが含まれておらず、rootログインが許可されていません。また、NexCMPはcloud-initを通じてrootパスワードを設定します。最初にイメージを準備してください: ```bash apt install -y libguestfs-tools wget -O noble.qcow2 https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img virt-customize -a noble.qcow2 --install qemu-guest-agent \ --write /etc/cloud/cloud.cfg.d/99-nexcmp.cfg:$'ssh_pwauth: true\ndisable_root: false\n' \ --write /etc/ssh/sshd_config.d/00-nexcmp.conf:$'PermitRootLogin yes\nPasswordAuthentication yes\n' ``` 次にテンプレートVMを作成します(ID 9000は一例です。テンプレートIDは `vmid from` の値、デフォルトは1000未満にしてください): ```bash qm create 9000 --name tpl-ubuntu-24-04 --memory 2048 --cores 2 --cpu host --ostype l26 \ --scsihw virtio-scsi-single --net0 virtio,bridge=vmbr0 --agent 1 --serial0 socket --vga serial0 qm set 9000 --scsi0 local-lvm:0,import-from=$PWD/noble.qcow2,discard=on,iothread=1 qm set 9000 --ide2 local-lvm:cloudinit --boot order=scsi0 qm template 9000 ``` **オプションB: 内蔵ビルダー。** クラスタタブにある **Create OS template from cloud image** カード(下記参照)は、qcow2イメージをダウンロードし、テンプレートを構築して登録します。これはcloud-initとゲストエージェントフラグ付きでVMを作成しますが、イメージ内部のコンテンツを変更することはしません。ルートログインがすでに許可されゲストエージェントが実行されているイメージを使用するか、cloud-initのvendor-dataスニペットも提供する場合にのみ使用してください。 ゲストエージェントは、**Reset password** およびVMのIPアドレスを表示するために必要です。 ### 6. 証明書のフィンガープリントの確認(オプション) {#_6-know-the-certificate-fingerprint-optional} NexCMPはTLS証明書のSHA-256フィンガープリントをピン留めすることでクラスターを信頼するため、自己署名証明書でも問題ありません。NexCMPがピン留めする値を確認するには: ```bash openssl x509 -in /etc/pve/local/pve-ssl.pem -noout -fingerprint -sha256 ``` ## NexCMP での接続 {#connect-in-nexcmp} 1. **Infrastructure › Cloud provider › Providers** を開き、**Add cloud provider** をクリックします。**Proxmox VE** を選択して以下を入力します: | 項目 | 入力例 | |---|---| | Name | `Proxmox cluster 1` | | Endpoint | `https://192.0.2.10:8006` | | Token id | `nexcmp@pve!api` | | Token secret | `XXXX`(手順1で出力されたUUID) | | Slug | `pve-1`(a-z、0-9、ハイフン、2〜32文字) | | Default node | `pve1`(空欄:最も空きRAMが多いオンラインノード) | | ストレージ | `local-lvm` | | Bridge | `vmbr0` | ![Proxmox VEが選択され、エンドポイント、トークン、ストレージの例が入力されたクラウドプロバイダー追加ダイアログ](https://nexcmp.com/ja/docs/images/infrastructure/proxmox-01-add-provider.webp) 2. **Save & open provider**をクリックし、求められたら理由を入力します。トークンは暗号化されて保存されます。 3. **Overview**タブで**Test connection**をクリックします。最初の接続テスト成功時に**クラスタのTLSフィンガープリントがピン留め**され、以降異なる証明書は拒否されます。 4. **Clusters**タブを開きます。**Node · storage · bridge**カードにはAPIから認識される内容がリストされ、**Cluster configuration**カードには設定が保持されます: | 項目 | 意味 | |---|---| | Default node | 新規VMに使用されるノード。空欄の場合は最も空きRAMが多いオンラインノードを意味します。 | | Storage, Bridge, VLAN | ディスクストレージ、NICブリッジ、および任意のVLANタグ(0はなしを意味します)。 | | CPU type | デフォルトで`host`。ノードのCPU世代が異なる場合は`x86-64-v2-AES`を使用します。 | | vmid from | 顧客VMに割り当てられる最初のVM ID(デフォルトは1000)。 | | Storage ISO, Storage backup | 使用する場合以外は空欄のままにします。空欄の場合、ISOおよびバックアップ機能は提供されません。 | | Template OS | 1行に1つ、`os-key=vmid`(例:`ubuntu-24.04=9000`)。 | | Pinned TLS fingerprint (SHA-256) | 最初のテストによって入力されます。クラスタ証明書を置き換えた後、クリアして再度テストしてください。 | ![サンプルノード、ストレージ、ブリッジ、OSテンプレートリストが表示されたClustersタブのCluster configurationカード](https://nexcmp.com/ja/docs/images/infrastructure/proxmox-03-cluster-config.webp) 5. オプション:上記のオプションBを使用した場合、**Create OS template from cloud image**(OSキー`ubuntu-24.04`、vmid `9000`、ノード`pve1`、qcow2イメージのURL)を入力し、**Create template**をクリックします。数分間バックグラウンドで実行され、結果は監査ログに記録されます。 ![UbuntuイメージのサンプルURLが表示されたCreate OS template from cloud imageカード](https://nexcmp.com/ja/docs/images/infrastructure/proxmox-04-template-from-image.webp) 6. **Add pool**を**Cluster IP pool**内でクリックし、VMがアドレスを取得するプールを作成します: | 項目 | 入力例 | |---|---| | Name | `customers-1` | | CIDR | `198.51.100.0/24` | | Gateway | `198.51.100.1`(VMには絶対に割り当てられません) | | DNS | `1.1.1.1,8.8.8.8`(1〜4個のIPv4アドレス) | | Bridge, VLAN | `vmbr0`, `0` | | Already used IPs | 1行に1つ、`ip note`(例:`198.51.100.10 monitoring`) | NexCMPは、ネットワークアドレス、ブロードキャストアドレス、ゲートウェイ、または予約済みアドレスを割り当てることはありません。同じクラスタのプール同士が重複することはできません。プールは、そのアドレスが一つも使用されていない場合にのみ削除できます。 ![/24の例とゲートウェイが入力されたIPプール追加ダイアログ](https://nexcmp.com/ja/docs/images/infrastructure/proxmox-05-ip-pool.webp) 7. **Attach cluster to zone**で、ゾーンと(オプションで)ノード名を選択し、**Attach to zone**をクリックします。クラスタはすでにVMを販売しているゾーンに参加するため、1つのゾーンにCloudStackとProxmoxを混在させることができます。新しいソースは**デフォルトでは販売されず**、既存プランの動作には影響しません。 ![既存のゾーンが選択されたクラスタのゾーンへのアタッチカード](https://nexcmp.com/ja/docs/images/infrastructure/proxmox-06-attach-zone.webp) 8. **Services › Virtual Machines › Plans & pricing**を開き、**Add plan**をクリックします。**Infrastructure source**でProxmoxクラスタを選択し、CPU、RAM、ディスク、価格を設定します。ProxmoxプランにCloudStackオファリングは必要ありません。両方のソースから同じ構成を販売するには、プランで**Clone**を使用し、別のソースを選択します。プランのディスクはテンプレートのディスク以上の大きさでなければなりません。Proxmoxではディスクを縮小できないためです。 ### 既存VMのインポート {#import-a-vm-that-already-exists} **Servers**タブを開いて、クラスター上のVMを一覧表示します。**Import**は、既存のVMを料金発生なしでお客様アカウントに割り当てます。時間料金、停止中の時間、トラフィックのいずれも請求されません。お客様は起動、停止、再起動、コンソールのオープンを行えますが、削除はできません。削除できるのは管理者のみです。NexCMPはインポート中、クラスターからの読み取りのみを行います。 - クラスターは、そのVMの**ノード名**が設定されたゾーンに紐づけられている必要があります(ノードを空のままにすると、リージョンが設定されていないというエラーがレポートされます)。 - VMを**保護**状態にする(停止、再起動、再インストール、スナップショット復元、破棄、プラン変更が拒否されます)には、コマンドラインから`--protect`を使用してインポートします。 ```bash sudo -u nexcmp /opt/nexcmp/bin/nexcmp px-import --provider pve-1 --server-ref pve1/101 --account-id 12 --hostname web-1 --protect ``` ### Proxmoxでサポートされる機能とサポートされない機能 {#what-is-and-is-not-supported-on-proxmox} | 機能 | Proxmox VE | |---|---| | 作成、電源オン/オフ/再起動、削除 | はい | | CPUとRAMの変更、ディスクの拡張 | はい。ただし、VMを一度停止してから変更し、再起動します(ライブリサイズ不可) | | Snapshots | はい(VMあたり最大5個): 作成、一覧表示、復元、削除 | | 再インストール | はい。テンプレートからVMが再構築され、ID、IP、設定が維持されたまま、新しいパスワードが設定されます | | パスワードのリセット | はい。ゲストエージェント経由 | | コンソール | はい。パネル経由でプロキシされるブラウザコンソール | | メトリック | はい: CPU、メモリ、ネットワーク、ディスク | | ISOマウント、バックアップ、ファイアウォール、IPv6、ポートフォワーディング、IP変更、追加ボリューム、Auto Scaling、DDoS Shield、VPC、帯域幅測定 | 利用できません。お客様のVMページには、ソース側で実行できない機能は表示されません。 | ## 確認 {#verify} 1. **Test connection**がOKを表示し、プロバイダーのステータスがアクティブになります。 2. **Clusters**にノードがオンラインとして表示され、ストレージとブリッジが確認できます。 3. **Cluster IP pool**に、空き、使用中、保留中の数が表示されます。 4. クラスターのアタッチ後、ゾーンのテンプレート(**Services › Virtual Machines › Template**)の下にOSキーが表示されます。 5. クラスターを使用するプランからテスト用VMを注文します。プールからアドレス、rootパスワード、動作するコンソールが割り当てられ、プール上の使用済みアドレスが1つ増加することを確認します。 ## 制限と注意点 {#limits-and-notes} ::: tip ソース混在ゾーン NexCMP 1.4.0 以降、CloudStack と Proxmox VE がゾーンを共有している場合でも、公開 Cloud Server 価格リストが機能するようになりました。各プランは独自の**Infrastructure source**を使用します。クラスターを接続した後、公開価格リストを確認し、ソースごとにテスト注文を行ってください。 ::: - 複数のProxmoxクラスターを追加できます。それぞれが1つのプロバイダーとなります。 - 1つのゾーンはデフォルトのソースを1つ提供します。独自の**Infrastructure source**を持つプランは、そのクラスターがアクティブであり、かつプランのゾーン内にある場合に限り、正確にそのクラスターにデプロイされます。 - CloudStackと同じゾーンの背後にあるクラスターは、CloudStack上のレガシープランを維持します。ローンチ前にエンドツーエンドで注文をテストしてください。 - APIトークンは閲覧できず、置き換えることのみ可能です。**Credentials**タブで置き換えてください:まずProxmoxで新しいトークンを作成し、それを入力して**Test connection**を実行してから、古いトークンを無効化します。 - テスト、同期、およびクラスター情報の各アクションは、管理者1人あたり1分間に6回までに制限されています。 - NexCMPはお客様への請求を行いますが、クラスターのハードウェアおよびライセンス費用はお客様の負担となります。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | テスト: 「Key rejected (wrong access key / secret, or revoked)」またはHTTP 401/403 | トークンIDまたはシークレットが間違っているか、ACLがトークンにのみ付与されている | 2つの`pveum acl modify`コマンド(ユーザー**および**トークン)を再実行し、トークンIDが`user@realm!tokenid`であることを確認します。 | | テスト:「プロバイダーに接続できませんでした」または「タイムアウトしました」 | ファイアウォール、または誤ったホストやポート | パネルサーバーから`https://host:8006`を確認します。 | | テスト:「無効なエンドポイント、または許可リストに含まれていません」 | エンドポイントにパス、ユーザー、クエリが含まれているか、HTTPSではありません | 正確に`https://host:8006`を使用してください。 | | 「クラスターのTLS証明書がピン留めされたフィンガープリントと一致しません」 | クラスター証明書が置き換えられました | Clustersタブの**Pinned TLS fingerprint**をクリアして保存し、**Test connection**を再度実行します。 | | スラッグが拒否されました | a-z、0-9、ハイフン以外であるか、2〜32文字ではありません | `pve-1`のようなものを使用してください。 | | 「トークンIDの形式: user@realm!tokenid と secret が必要です」 | トークンIDまたはシークレットがありません | 両方を入力します。シークレットは、トークン作成時に表示されたUUIDです。 | | 「無効なテンプレート行: …」 | **Template OS**内の行が`key=vmid`ではありません | キーには英字、数字、`.`、`_`、`-`を使用し、vmidは100以上にします。 | | 「OSキー: a-z 0-9 . _ - および vmid ≥ 100」 | **Create template**内の無効なキーまたはID | OSキーを修正し、使用されていないvmidを使用してください。 | | テンプレート作成時の「vmid … はすでに存在します」 | vmidがすでに使用されています | 別のIDを選択してください。 | | 「URLが内部アドレスを指しています」 | イメージURLが内部IPです | 公開URLを使用してください。名前はProxmoxによって解決されます。 | | ダウンロード時にテンプレートタスクが失敗します | ストレージ `local` に `import` コンテンツがありません | `pvesm set local --content …,import,snippets`を実行してから再試行してください。ファイル名は `.qcow2`、`.raw`、`.vmdk`、`.ova`、または `.ovf` で終わる必要があります。 | | 「クラスターにオンラインのノードがありません」または「ノード … はオンラインではありません」 | デフォルトノードが停止しているか、スペルが間違っています | **Default node**を修正するか、空のままにします。 | | 「イメージがクラスターに属していません」 | プランのOSが **Template OS** にありません | リストにキーを追加して保存します。 | | デプロイが待機状態になった後、クローン作成で失敗します | テンプレートVMが選択したノード上にありません | そのノード上でテンプレートを作成するか、**Default node**をテンプレートがあるノードに設定します。 | | 顧客がrootとしてログインできません | イメージがrootログインをブロックしています | オプションAのようにテンプレートを再ビルドします。 | | パスワードリセットが何も行われません | ゲスト内にゲストエージェントがありません | テンプレートに `qemu-guest-agent` をインストールして有効化します。 | | 「名前、CIDR、およびゲートウェイは必須です」 | プールフィールドがありません | 3つすべて入力してください。 | | プール作成時: 「プールと重複しています…」「ゲートウェイは範囲内(ネットワーク/ブロードキャストアドレス以外)である必要があります」または「cidr: ネットワークアドレスは…でなければなりません」 | プールが重複している、ゲートウェイが間違っている、またはCIDRがネットワーク境界上にありません | 空きレンジ、その中のゲートウェイ、およびネットワークアドレスとして記述されたCIDR(例: `198.51.100.0/24`)を使用します。 | | インポート: 「リージョンが設定されていません」 | VMのノード名なしでクラスターがアタッチされています | ノード名を指定してクラスターをゾーンにアタッチします。 | --- # OSテンプレートとISO {#os-templates-and-isos} > **管理者画面の場所:** Services › Virtual Machines › Template(`/vm/templates`)。Proxmoxテンプレートは Infrastructure › Cloud provider › Providers › (cluster) › Clusters でクラスターごとに一覧表示されます。 ## 動作内容 {#what-it-does} テンプレートは、新しいVMの起動元となるオペレーティングシステムイメージです。NexCMPはイメージ自体を保存せず、CloudStackが報告する情報(準備完了、お勧めテンプレート)やProxmoxクラスター用にリストした内容を読み取り、顧客向けの名称、アイコン、ログインユーザーを指定して販売するものを選択できるようにします。このページでは、パスワードログイン、ライブCPUおよびRAMスケーリング、スワップファイル、プランサイズまで拡張するルートディスクなど、NexCMPで正常に動作するイメージの準備方法について説明します。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | CloudStack template builder | `libguestfs-tools`(`virt-customize`、`virt-sparsify`、`guestfish`)、`qemu-utils`、`curl`を備えた約5 GBの空きディスクを持つLinuxマシン。KVMやrootは必要ありません。パッケージのインストールにはインターネットアクセスが必要です(または `--offline` でビルドします)。 | | ビルダーの場所 | パネルサーバー上の `/opt/nexcmp/releases//share/templates/` 内のすべてのリリースに同梱されています。そこで実行する必要はありません。フォルダーを任意のLinuxマシンにコピーしてください。 | | Web server | 作成した `.qcow2` ファイルを公開するために、CloudStackのセカンダリストレージVMがアクセスできる任意のHTTP(S)サーバー。インターネットからアクセスできる必要はありません。 | | CloudStack | テンプレートを登録できる権限を持つアカウント、およびゾーンと一致するOSタイプのID。 [CloudStack](https://nexcmp.com/ja/docs/infrastructure/cloudstack/) を参照してください。 | | Proxmox VE | QEMUゲストエージェントを搭載したCloud-initテンプレートVM(OSおよびノードごとに1つ)。[Proxmox VE](https://nexcmp.com/ja/docs/infrastructure/proxmox/)を参照してください。 | | 依存関係 | 最初に接続された [CloudStack](https://nexcmp.com/ja/docs/infrastructure/cloudstack/) または [Proxmox VE](https://nexcmp.com/ja/docs/infrastructure/proxmox/)。 | ## インフラストラクチャの準備 {#prepare-the-infrastructure} ### CloudStack:テンプレートのビルド {#cloudstack-build-a-template} サポートされているベースイメージ(変更を加える前に、ベンダーイメージがダウンロードされ、チェックサムが検証されます): | Image | `--distro` | Login user | |---|---|---| | Ubuntu 22.04 | `ubuntu-22.04` | `ubuntu` | | Ubuntu 24.04 | `ubuntu-24.04` | `ubuntu` | | Debian 12 | `debian-12` | `debian` | | Rocky Linux 9 | `rocky-9` | `rocky` | その他のディストリビューション: `distros.conf` に行を追加します(イメージURL、チェックサムファイル、ファミリー `deb` または `rpm`)。 1. ビルダーをビルドマシンにコピーして実行します: ```bash cp -r /opt/nexcmp/releases//share/templates ~/templates && cd ~/templates ./build-template.sh --distro ubuntu-24.04 --version v7 --work ./out ``` パネルに登録するオプションの初回起動監視エージェント(HTTPSのみ)を組み込むには `--panel-url https://cloud.example.com` を追加します。追加しない場合、エージェントは追加されません。その他のオプション:ダウンロードしたイメージを使用する場合は `--base `、パッケージのインストールをスキップする場合は `--offline`。 2. 結果として `out/ubuntu-24.04-v7.qcow2` とその `.sha256` が生成されます。ビルドの終了時に `verify-image.sh` が実行され、完成したイメージが読み取り専用で検査され、不適切なイメージの場合は拒否されます( `.unverified` として保持されます)。いつでも再実行できます: `./verify-image.sh out/ubuntu-24.04-v7.qcow2 --no-agent`。 ビルダーがイメージに組み込む内容: | 項目 | Why | |---|---| | `qemu-guest-agent` | CloudStackはVMにCPUやIPについて問い合わせを行い、スナップショットのために quiesce(静止)させることができます。 | | CloudStackデータソースを使用するcloud-init、毎回の起動時の`set_passwords`、SSHパスワードログイン | 生成されたパスワードは仮想ルーターから取得され、**Reset password**が機能します。 | | ホット追加されたCPUおよびRAM用のudevルール | ホット追加されたvCPUとRAMが自動的にオンラインになるため、ライブスケーリングとAuto Scalingが機能します。 | | スワップファイルサービス | ディスクの拡張後、RAMの50%と4 GiBの小さい方の`/swapfile`を作成します。`touch /etc/cmp-swap.disabled`で無効になります。 | | cloud-init `growpart` および `resizefs` | 初回起動時に、小さいルートディスクがプランのディスクサイズまで拡張されます。 | | 空のmachine-id、SSHホストキーなし | すべてのVMが独自のアイデンティティを取得します。 | ::: warning テンプレート名を` `にする NexCMPは、名前が`vN`または`vN.M`で終わり、**Nが6以上**のテンプレートに対して**Auto Scaling**を有効にします(`Ubuntu 24.04 v7`、`Rocky Linux 9 v7.1`)。ビルダーは`--version`に対してこれを強制します。正確な出力名でテンプレートを登録してください。 ::: 3. ファイルを公開し、CloudStackに登録します。ビルドが出力したSHA-256を使用し、ファイルの書き込みが完全に完了してから登録してください: ```bash cmk list ostypes keyword="Ubuntu 24.04" filter=id,description cmk register template name="Ubuntu 24.04 v7" displaytext="Ubuntu 24.04 v7" \ url=https://files.example.com/ubuntu-24.04-v7.qcow2 zoneid= format=QCOW2 hypervisor=KVM \ ostypeid= passwordenabled=true sshkeyenabled=true isdynamicallyscalable=true \ requireshvm=true isextractable=false ispublic=true isfeatured=true \ checksum="{SHA-256}" \ details[0].guest.cpu.mode=host-passthrough details[0].rootDiskController=osdefault ``` - `passwordenabled=true`により、CloudStackでVMのパスワードを生成できるようになります。 - `isdynamicallyscalable=true`により、ライブスケーリングが可能になります。 - 現在のRockyおよびAlmaイメージの起動には`host-passthrough`が必要です。`osdefault`はディスクコントローラーの移植性を維持します。 4. テンプレートが **Download Complete / Ready** に達するまで待ちます。 ベンダーイメージは小さな仮想サイズ(UbuntuおよびDebianは約3.5 GiB、Rockyは10 GiB)を維持します。プランのディスクはテンプレートのディスクより小さくできないことに注意してください。 ### Proxmox VE: テンプレートを作成する {#proxmox-ve-make-a-template} ゲストエージェントをインストールし、rootログインを有効にした状態で、デプロイ先のすべてのノード上にOSごとのcloud-init VMテンプレートを作成し、それを`os-key=vmid`として登録します。完全なコマンドは[Proxmox VE](https://nexcmp.com/ja/docs/infrastructure/proxmox/)にあります。上記のCloudStackビルダーはProxmox用では**ありません**。これはCloudStackデータソース用のcloud-initを設定します。 ### ISO {#isos} お客様は、**Images**モジュール(CloudStack)または専用サーバーモジュールを通じて独自のISOをマウントします。これらは、このページのOSテンプレートとは別物です。[Modules](https://nexcmp.com/ja/docs/infrastructure/modules/)および[Dedicated servers](https://nexcmp.com/ja/docs/infrastructure/dedicated/)を参照してください。 ## NexCMP での接続 {#connect-in-nexcmp} 1. **Services › Virtual Machines › Template**を開きます。**Sync now**をクリックするか、最大15分お待ちください。同期により、CloudStackで準備完了かつフィーチャーされているテンプレートが追加されます。 ![同期されたテンプレートを準備状態およびCPUホットプラグ列とともに一覧表示するテンプレートページ](https://nexcmp.com/ja/docs/images/infrastructure/templates-01-list.webp) 2. 新しいテンプレートの**Edit**をクリックし、お客様に表示される内容を設定します: | 項目 | 入力例 | |---|---| | お客様向け表示名 | `Ubuntu 24.04 LTS` | | OS family | `ubuntu` (アイコンとデフォルトユーザー) | | Version | `24.04` | | Login username | `ubuntu` (Windows: `Administrator`; その他: `root`) | | Icon | 画像URL、パス、または名前 | | 順序 | `10` | | 有効 | On | | vCPU/RAMホットプラグ(ライブスケール) | **Auto by name (v6 or later)**、**Yes**、または **No (needs a restart)** | ![お客様向けの名前、OSファミリー、ログインユーザー、およびホットプラグオプションを設定するテンプレート編集ダイアログ](https://nexcmp.com/ja/docs/images/infrastructure/templates-02-edit.webp) 3. テンプレートを有効にします。CloudStackにリストされなくなったテンプレートは自動的に非表示になり(設定されている場合はTelegramでアラートが通知されます)、NexCMPから削除されることはありません。 ### テンプレートを新しいビルドに置き換える {#replace-a-template-with-a-newer-build} 販売中のテンプレートで **More › Replace with new version** を使用します。新しく、準備が完了しており、現在無効になっているテンプレートを選択します。これにより、販売中のエントリは新しいビルドを指すようになり、名前、順序、アイコンが保持されます。古いエントリは切り戻し用の手段として無効化されます(元に戻すには、新しいエントリで **Replace** を使用します)。実行中のVMは変更されません。新しいビルドのOSファミリーが異なる場合は、最初に確認チェックボックスをオンにしてください。 ## 確認 {#verify} 1. 行には **ready** と、名前が `vN` で N が 6 以上のビルドの場合は **CPU hot-plug: supported** が表示されます。 2. テンプレートからテストVMを1台デプロイし、VM内部を確認します。 - ポータルに表示されるパスワードでログインできること。 - `df -h /` にプランのディスクサイズが表示されること。 - ライブスケール(再起動なしの **Change plan**)の実行後、`nproc` と `free -m` が増加すること。 - `swapon --show` に `/swapfile` がリストされること(スワップに2 GiB未満の空きを加えた容量未満のディスクはスキップされます)。 - `systemctl is-active qemu-guest-agent` が `active` を出力すること。 3. エージェントを組み込んだ場合、初回起動の1分後にパネルの監視対象ホストにVMが表示されます。VMには独自のパブリックIPが必要です。パネルはパブリック送信元IPによってVMを認識します。 ## 制限と注意点 {#limits-and-notes} - ビルダーはLinux専用であり、Linuxイメージを構築します。(Windowsなどの)他のイメージは、他の手段で CloudStack に登録できます。NexCMP は CloudStack が報告する内容を一覧表示します。 - amd64エージェントのみが同梱されており、他のアーキテクチャではエージェントのインストールがスキップされます。 - イメージは `guestfish` でチェックされますが、ビルダーによって起動されることはありません。新しいイメージを販売する前に、必ずテストVMを1台デプロイしてください。 - 初回起動前に `touch /etc/cmp-agent.disabled` を使用して、1台のVMでエージェントをスキップします。後から `systemctl disable --now cmp-agent cmp-agent-install; rm -rf /etc/cmp-agent /usr/local/bin/cmp-agent` で削除し、管理者コンソールでエージェントを削除してください。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | `virt-customize` がパッケージのダウンロードに失敗する | ビルドマシンにアウトバウンドネットワークがない | そのマシンのDNSまたはプロキシを修正するか、すでにパッケージが含まれているベースイメージで `--offline` を使用してビルドします。 | | `libguestfs: error: /usr/bin/supermin exited with error status 1` | ホストカーネルが現在のユーザー(Ubuntu)から読み取り可能になっていない | `sudo chmod +r /boot/vmlinuz*`、またはビルドをrootとして実行します。 | | チェックサムが異なる、またはベンダーのイメージが存在しなくなった | ベンダーが「latest」ファイルを移動している | ご自身でイメージをダウンロードし、ベンダーのチェックサムファイルと照合して確認した上で、`--base` で渡してください。 | | Rocky: より新しいXFSをマウントできない | ホストカーネルが古すぎる | 新しいカーネルを搭載したマシンでビルドします。 | | `--version must be v6 or higher` | 名前が `vN`(N は 6 以上)である必要がある | `--version v7` を使用します。 | | `--panel-url must be a plain https:// URL` | エージェントがダウンロードされてrootとして実行されるため、プレーンHTTPが拒否される | スペース、クォート、クエリ文字列を含まない `https://` URLを使用します。 | | テンプレートが **not ready** のままになる | CloudStack のダウンロードが完了していない | **Download Complete** を待ち、セカンダリストレージVMがそのURLに到達できることを確認します。 | | 行に **no-pass** が表示される | テンプレートが `passwordenabled=true` なしで登録された | そのフラグを指定して再度登録します。 | | CPUホットプラグが **unsupported** と表示される | 名前が `vN`(N は 6 以上)で終わっていない | テンプレートを名前変更するか、イメージにudevルールがある場合は編集で**vCPU/RAM hot-plug**を**Yes**に設定してください。 | | 初回の接続後に「Empty template list」が表示される | 同期が実行されていない | **Sync now** をクリックするか(ワーカーが実行されている必要があります)、15分ごとのサイクルを待ちます。 | --- # 専用サーバー (ベアメタル) {#dedicated-servers-bare-metal} > **管理画面での場所:** Infrastructure › Bare Metal (Servers `/infra/baremetal`, IP Pools, Stock / iDRAC import, Operations, Templates, Customer ISOs, Safety)。プランとサブスクリプション: Services › Dedicated Server (`/dedicated`)。モジュールを有効にするには System › Admin › License & updates (`/license`) を開きます。 ## 動作内容 {#what-it-does} NexCMPは、Redfish APIを介して**iDRAC経由で直接**物理サーバーを管理します。お客様はサーバー全体をレンタルし、電源のオン/オフ、ブラウザコンソールのオープン、ISOのマウント、テンプレートからのOSインストール、ハードウェアやメトリクスの確認を行います。お客様がiDRACのアドレス、ユーザー名、パスワードを目にすることはありません。 独自ラックの専用サーバーを再販するために使用します。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | ハードウェア | **iDRAC 9**およびRedfish APIを搭載したDell製サーバー。 | | 管理ネットワーク | **管理者側で用意します。** パネルサーバーは各iDRACに**HTTPS 443**(およびコンソール用のiDRAC VNCポート、デフォルト**5901**)で到達可能である必要があり、各iDRACは下記のISO Webサーバーに到達できる必要があります。iDRACアドレスは、設定`dedicated_bmc_cidrs`に指定する**プライベート範囲のIPv4アドレス**(RFC 1918、/16以下のプレフィックス)である必要があります。DNS名およびIPv6は使用できません。NexCMPはこのネットワークを作成せず、接続テストも行いません。 | | iDRACアカウント | 各iDRACに**Administrator**権限を持つアカウントが1つ必要です。NexCMPはこれを使用してサーバー情報の読み出しや、許可されている少数のコマンド(電源、仮想メディア、ワンタイムブート、コンソール)を送信します。お客様向けにiDRACアカウントを作成することは決してありません。 | | パネルサーバー上のツール | `xorriso`および`genisoimage`(各サーバーのインストールISOをビルド)と`novnc`(ブラウザコンソール画面)。`sudo apt-get install -y xorriso genisoimage novnc`でインストールするか、インストーラーに実行させます(`--baremetal`を指定して実行、またはISOサーバーオプションを指定)。Bare Metalモジュールがすでに有効な場合は、アップデート時にもこれらがインストールされます。不足しているツールがある場合、**Safety**に赤色の通知で一覧表示され、**live ops**を有効化できなくなり(エラー`tools_missing`)、コンソールやOSインストールでは後からエラーになる代わりにツールが不足している旨が返されます。 | | ISOウェブサーバー | NexCMPのISOフォルダーを各iDRACへ配信する、管理ネットワーク上のプレーンな**HTTP**サーバー。アドレスはプライベートIPv4アドレスと任意のポート(例: `http://10.20.0.2:8080`)で、**パスを含めず**に`dedicated_iso_base_url`に保存されます。バイトレンジをサポートしている必要があります。フォルダーへの書き込みはパネルのワーカーが行うため、通常Webサーバーは**パネルサーバー自体**で稼働し、サーバーが管理ネットワーク上に持つアドレスをリッスンします。NexCMPには設定済みのnginxサイトとワンステップコマンドが同梱されています(下記参照)。 | | ISOフォルダー | ISOファイル用のフォルダー、およびその内部の`pub`(各iDRACが読み取るデータ)と`server`(お客様のISO)。ワンステップコマンドでは`/srv/nexcmp-iso`が使用されます。使用しない場合のデフォルトはインストール時の設定に従います(設定`dedicated_iso_lib_dir`、`dedicated_iso_pub_dir`、`dedicated_iso_server_dir`)。NexCMPワーカーはこれらに対して**書き込み**が可能である必要があります。ワーカーは`/var/lib/nexcmp`を除き読み取り専用ファイルシステムで実行されるため、それ以外の場所にあるフォルダーにはsystemdドロップインが必要です(ワンステップコマンドがこれをインストールします)。 | | コールバックアドレス | `dedicated_callback_base`。インストールするサーバーから到達可能で、パネルを指している`https://`。 | | ストレージ | ISOライブラリおよびお客様が提供したISO用の空きディスク。 | | 依存関係 | モジュール**Bare Metal**、ゾーン、およびサーバーのIPプール。 | ::: warning サンプル値は設定ではありません 新規インストール時には、`dedicated_bmc_cidrs`、`dedicated_iso_base_url`、`dedicated_callback_base`にサンプル値が設定されています(サンプルのプライベートネットワークおよび`https://example.com`)。これらはお客様のネットワークではありません。いずれかがサンプル値のままである間、Bare Metalページには赤色の**Management network not configured**通知が表示され、iDRACのインポートは許可リストチェックで失敗し、**live ops**スイッチをオンにできなくなります(エラー`config_placeholder`)。**Infrastructure › Bare Metal › Safety › Management network connection**でこれら3つの値を設定してください(下記参照)。 ::: ## インフラストラクチャの準備 {#prepare-the-infrastructure} 1. **すべてのiDRACを、お客様が到達できない管理ネットワークに配置**し、それぞれに固定のプライベートIPv4アドレスを割り当てます。パネルサーバーからRedfish APIを確認します: ```bash curl -sk -u 'nexcmp-admin:XXXX' https://10.20.0.11/redfish/v1/Systems | head ``` 2. **iDRACにNexCMP用の管理者アカウントを作成**します(iDRACウェブUI、または`racadm`)。強力で一意なパスワードを使用してください。iDRACの組み込みアカウントを再利用しないでください。 3. **ISOフォルダーを各iDRACに公開 — ワンコマンド。** パネルサーバー上でrootとして、そのサーバーが管理ネットワーク上で持つアドレスとiDRACネットワークを指定して実行します: ```bash sudo nexcmp dedicated-setup-iso --listen 10.20.0.2:8080 --allow 10.20.0.0/24 ``` `--listen`にはこのサーバーのアドレス(プライベートIPv4、省略時はポート8080)を指定する必要があります。`--allow`にはiDRACネットワーク(プライベートCIDR、/16以下、最大8個、カンマ区切り)を指定します。これらのみがダウンロード可能であり、この設定がまだサンプル値の場合はコマンドがこれらを`dedicated_bmc_cidrs`としても使用します。`--dir /path`で別のISOフォルダーを選択できます(デフォルトは`/srv/nexcmp-iso`)。このコマンドは以下の処理を行います: - NexCMPサービスユーザーが所有する、内部に`pub`と`server`を含むフォルダーを作成します。 - グループ`nexcmp-iso`を作成し、そこにnginxユーザーを追加します。これにより、iDRACがISOをマウントしている間にnginxのみがISOを読み取れるようになり、他のユーザーはアクセスできなくなります。 - nginxサイト`nexcmp-iso`(`nginx -t`で検証が通った場合のみ保持、nginxが未インストールの場合はインストール)およびsystemdドロップイン`nexcmp-vmd.service.d/iso.conf`(フォルダー用の`ReadWritePaths`、`SupplementaryGroups=nexcmp-iso`)をインストールします。 - ISO設定(`dedicated_iso_base_url`、3つのフォルダー、グループ)を書き込み、NexCMPワーカーを再起動します。 別の値を指定して再実行することもでき、`sudo nexcmp dedicated-setup-iso --remove`を実行するとnginxサイトとドロップインが削除されます(ISOファイルは残ります)。インストール時に実行することも可能です。インストールコマンドに`--iso-listen`、`--iso-allow`(および`--iso-dir`)を追加してください。このコマンドは管理ネットワークの作成を行わず、iDRACとの通信も**行いません**。値が誤っている場合、アドレスがこのサーバー上に存在しない場合、またはポートが使用中の場合は、変更を加える前にメッセージを表示して停止し、`nginx -t`で拒否されたnginxサイトは保持されません。 4. **ISO Webサーバーが配信するもの。** nginxサイトは`GET`(およびバイト範囲を伴う`HEAD`)を`/pub/.iso`に対してのみ応答し、それ以外には応答しません。ディレクトリリスティングはなく、フォルダー配下の他のパス(ライブラリおよび`server/`にはアクセス不可)や他のメソッドも受け付けず、`--allow`ネットワークからのみ許可されます(それ以外のアクセスは403になります)。NexCMPは、iDRACが読み取る必要のある各ISOを`pub`内のファイルまたは有効期間の短いリンクとして公開します。nginxはリンクとそのリンク先が同一の所有者(サービスユーザー)である場合にのみリンクをたどるため、システムファイルへのリンクは拒否されます。管理ネットワーク上の別のホストから確認してください: ```bash curl -I http://10.20.0.2:8080/ # 403 or 404, never a listing curl -I http://10.20.0.2:8080/pub/ # 403 or 404 ``` `pub`内のテストファイルは、`Range`リクエストに対して206で応答する必要があります。 *手動で設定する場合:* nginxサイトとドロップインは、リリースパッケージ内にテンプレート(`share/dedicated/nginx-iso.conf`および`share/dedicated/vmd-iso.conf`、`/opt/nexcmp/releases//`配下)として同梱されています。これらをコピーし、`__...__`マーカー(リスンアドレス、フォルダー、allow行、グループ)を置き換えて、上記のルールを維持してください。 5. **OSイメージを準備する。** 自己インストール型ISOをライブラリフォルダに配置します(以下の**Templates**を参照)。お客様はリンクからISOを追加することもできます。これらはサーバーにダウンロードされ、iDRACにURLとして渡されることはありません。 ## NexCMP での接続 {#connect-in-nexcmp} ### 1. モジュールを有効にする {#_1-turn-the-module-on} **System › Admin › License & updates**で、**Bare Metal**を有効にします。Infrastructureの下に**Bare Metal**カテゴリが表示されます。[Modules](https://nexcmp.com/ja/docs/infrastructure/modules/)を参照してください。 ### 2. 管理ネットワーク接続を設定する {#_2-set-the-management-network-connection} **Infrastructure › Bare Metal › Safety**を開きます。**Management network connection**カードには、機能するかどうかを決定する3つの値が保持されています。 | 項目 | 設定 | 入力内容 | |---|---|---| | iDRAC network (CIDR) | `dedicated_bmc_cidrs` | お使いのiDRACのプライベートネットワーク(例: `10.20.0.0/24`)。プライベートCIDRのみ、/16以下、最大8個までカンマ区切りで指定できます。これらの範囲内にあるiDRACのみインポート可能です。 | | iDRAC用ISOサーバー | `dedicated_iso_base_url` | `http://[:port]`、パスなし: 前のセクションのISO Webサーバーのアドレス(例: `http://10.20.0.2:8080`)。ワンステップコマンドを使用すると自動で入力されます。 | | Panel callback address | `dedicated_callback_base` | `https://`、パスなし: インストール対象サーバーが完了を報告するために呼び出すアドレス。該当サーバーのネットワークから到達可能である必要があります。`example.com`や`localhost`などは拒否されます。 | フォームは入力中に入力形式をチェックし、サーバーは保存時に再度チェックします。不正な値は理由とともに拒絶され、保存されている値は変更されません。出荷時のサンプル値がそのまま残っているフィールドには赤色の**Not configured**ラベルが表示され、3つの値すべてが有効な値になるまで、すべてのBare Metalページに赤色の通知**Management network not configured**が表示されます。変更は理由とともに監査ログに記録されます。サンプル値を手動で入力し直さない限り、再度保存しても設定完了とはみなされません。 ### 3. セーフティゲートを確認する(現時点では閉じたままにしておく) {#_3-check-the-safety-gate-leave-it-closed-for-now} **Infrastructure › Bare Metal › Safety**を開きます。**Live ops**は、iDRACへのすべての書き込みコマンド(電源、仮想メディア、コンソール、OSインストール)を制御するシステム全体のスイッチです。初期状態は**off**であり、上記の管理ネットワーク接続にサンプルの値が残っている間はオンにできません(スイッチは`config_placeholder`と応答し、該当フィールドの名前を示します)。書き込みはAPIで拒否され、ワーカー内でも再度拒否されますが、ステータスの読み取りは引き続き機能します。2つ目のロックである**ops_locked**が各サーバーを保護します。新規にインポートされたサーバーは、Live opsがオンの場合でも常にロックされています。 ![Live opsがオフの状態でブロックされたアクションの一覧が表示されたSafetyページ](https://nexcmp.com/ja/docs/images/infrastructure/dedicated-01-safety.webp) ### 4. サーバーをインポートする {#_4-import-servers} 1. **Infrastructure › Bare Metal › Stock / iDRAC import**を開きます。 2. **Add one server**の下にiDRACのアドレス、アカウント、パスワードを入力し、**Test connection**をクリックします。テストでは読み取りコマンドのみが送信され、何も保存されません。 | 項目 | 入力例 | |---|---| | iDRACアドレス(URLまたはホスト) | `10.20.0.11` | | アカウント | `nexcmp-admin` | | パスワード | `XXXX` | | ラベル | `rack1-01` (空: 自動生成) | | プールからIPを割り当て | オプション。サーバーのサービスIPプールを選択 | | 販売リストに含める | 準備が整うまでオフ | ![アドレス例と読み取り専用テストの成功を示すStockおよびiDRACインポート](https://nexcmp.com/ja/docs/images/infrastructure/dedicated-02-import-server.webp) 3. **Save to stock**をクリックします。NexCMPはiDRACからモデル、CPU、RAM、ディスク、NIC、サービスタグを読み取ります。サーバーは**ロック**された状態でストックに追加されます。 4. 多数のサーバーを取り扱う場合は**Bulk import**を使用します。1行につき1サーバーとし、フィールドはカンマ、セミコロン、またはタブで区切ります。**Preview**により、許可リスト、iDRACアドレスやサービスタグの重複がチェックされ、ハードウェア情報が読み取られます(一度に最大4台まで)。 ### 5. お客様のISOとISO Webアドレス {#_5-customer-isos-and-the-iso-web-address} **Infrastructure › Bare Metal › Customer ISOs**を開きます。 - **HTTP address serving ISOs to iDRAC**は`dedicated_iso_base_url`であり、Safetyカードと同じ値です(どちらの場所でも編集可能です)。お使いのISO Webサーバーの管理ネットワークアドレスを入力してください。 - **Customer ISO limits**では、1つのISOのサイズ、ISOの合計ストレージ容量、最小空き容量、ISOの保持期間(時間)、最大ダウンロード数、同時ダウンロード数を設定します。 ![iDRAC用HTTPアドレスとISO制限が表示されたCustomer ISOs](https://nexcmp.com/ja/docs/images/infrastructure/dedicated-03-iso-settings.webp) ### 6. OSテンプレート {#_6-os-templates} **Infrastructure › Bare Metal › Templates**を開きます。ライブラリフォルダー内で検出された自動インストールISOが一覧表示されます。ファイルで**Register**をクリックしてOSファミリー、バージョン、アカウントを入力し(ファイル名から事前入力されます)、テンプレートの**Enable**をオンにします。テンプレートを有効化しても処理は何も開始されません。すべてのインストールは引き続きセーフティゲートを通過します。**Unregister**はテンプレート行を削除するだけで、ファイル自体が削除されることはありません。 ![登録済みおよび未登録のISOが表示されたBare Metal Templates](https://nexcmp.com/ja/docs/images/infrastructure/dedicated-04-os-templates.webp) ### 7. IPプール {#_7-ip-pools} **Infrastructure › Bare Metal › IP Pools**を開き、サーバーがサービスアドレスとして取得するIPv4レンジを追加します。各サーバーに1つのアドレスが割り当てられます。インポート時の**Assign an IP from a pool**では、次に空いているアドレスが取得されます。空きアドレスはプールごとにカウントされます。 ![アドレス範囲の例と空き数が表示されたBare Metal IP Pools](https://nexcmp.com/ja/docs/images/infrastructure/dedicated-05-ip-pools.webp) ### 8. プランと販売 {#_8-plans-and-sale} 1. **Services › Dedicated Server › Plans & pricing**を開きます。4つのサンプルプラン(1.6.1 では`BM-40C-`という名称)を編集するか、独自のプランを作成します(価格、請求サイクル、初期費用)。**新規インストールでは、価格はセント単位の米ドルで入力され、ウォレットにはその金額がそのまま請求されます(為替レートは不要です)。**ベトナムドンで価格設定されたプランがすでに存在するインストール環境ではドンが維持され、設定で為替レートが引き続き必要になります(為替レートがない場合、注文は`dedicated_fx_unavailable`で拒否されます)。サンプルプランの初期価格は 0 で**無効**になっています。販売するプランには 0 を超える価格を設定する必要があります。実際にインポートするハードウェアと各プランを照合してください。サンプルプラン名によってサーバーのハードウェアが検出または変更されることはありません。 2. サーバーを開き(Infrastructure › Bare Metal › the server › **Sales**)、**プランを割り当て**て**Sellable**をオンにします。 3. **Live ops** を有効にし(確認入力を行うSafetyページ)、運用したいサーバーのロックを解除します(サーバーの **Lock** タブで、監査ログに記録される理由を入力します)。 4. **Services › Dedicated Server**で販売を有効にします。これには、影響を確認した上で`ENABLE SALES`を入力するという2つの手順が必要です。それまでお客様には注文ページが表示されず、課金もされません。 ![販売スイッチがオフの専用サーバープラン](https://nexcmp.com/ja/docs/images/infrastructure/dedicated-06-plans.webp) ### お客様がサーバーページで実行できる操作 {#what-customers-can-do-on-their-server-page} お客様のサーバーページには、7つのグループ(Overview、Control、Network、Hardware、Billing、Activity、Settings)に分かれた16個のタブがあります。**Billing**グループには以下が含まれます: - **Plan & renewal**: 1〜24か月分を一括で前払いできます。新しい更新日は現在の更新日から計算され、ウォレットから一度に引き落とされます。自動更新(Auto-renew)のオン/オフも切り替え可能です。 - **Billing cycle**: 別の請求サイクル(四半期払いなど)を選択します。**次回**の更新時から適用され、この時点での請求や返金は発生しません。 - **Change plan**: お客様は別のプランへの変更を**リクエスト**できます。リクエスト時点では費用は発生しません。ハードウェアのアップグレードやサーバーの移行を完了した後、**Services › Dedicated Server › Plan changes** で承認または拒否します。アップグレードが承認されると、支払い済み期間の残日数に応じた差額が請求されます。ダウングレードの場合は返金は行われず、次回期間から適用されます。 - **Invoices**: そのサーバーに関するすべての請求書(注文、更新、アップグレード)。 **Plan changes**では、リクエストを ID、日付、ステータス、プラン、またはサーバーで並べ替えることができます。並べ替えはサーバー上の結果全体に適用されます。幅の狭い画面で水平方向にスクロールしても、アクション列は表示されたままになります。 **Overview** の上部にある4つのライブタイルには、過去24時間の小さなグラフとともに **CPU**、**RAM**、**Disk**、**Network** が表示されます。CPU、RAM、Disk は直近の iDRAC ポーリングによる使用率(Disk は空き容量ではなく I/O アクティビティ)で、Network はトラフィックカウンターから取得された現在の送受信速度と当月の合計です。サーバーが停止している場合、iDRAC に接続できない場合、またはマシンがその値を報告しない場合、タイルには **—** と簡単な理由が表示され、架空の 0 が表示されることはありません。これらの測定値は Dell iDRAC から取得され、トラフィックカウンターがない場合、Network タイルは **—** のままになります。タイルはページが開いている間1分ごとに更新され、クリックすると **Hardware** または **Bandwidth** タブが開きます。 **Overview** の **Access** カードには、インストールされたOSのユーザー名とパスワードが表示されます。デフォルトでは非表示になっており、**Show** および **Copy** ボタンが用意されています。これは初回だけでなく毎回のインストール後に確認でき、新しいサーバー所有者に以前の所有者のパスワードが見えることはありません。サーバー内部でOSパスワードを変更した場合でも、このカードにはインストール時に設定されたパスワードが引き続き表示されます。**Bandwidth** タブは、トラフィックカウンターからデータが供給されている場合にのみ表示されます(制限事項を参照)。**Subnet** タブはありません。レンタルサーバーへの独自のIPプレフィックスの持ち込み(BYOIP)は、NexCMPの機能に含まれていません。 ### お客様ができることとできないこと {#what-customers-can-and-cannot-do} | お客様ができること | 不可能なこと | |---|---| | インベントリ、ヘルス、電源状態、メトリクスの確認 | iDRACのアドレス、ユーザー名、パスワードの確認 | | 電源オン、正常シャットダウン、再起動、強制オフ、リセット | iDRACアカウントまたはiDRACネットワーク設定の変更 | | ブラウザコンソールの起動(一度に1セッション) | BIOSまたはRAIDの変更、ログのクリア、ファームウェアのアップデート、iDRACのリセット | | ISOまたはカスタムISOリンクのマウント、1回限りの起動設定、有効化されたテンプレートからのOS再インストール | 未加工のRedfish呼び出しの実行(この機能はNexCMPに存在しません) | NexCMPはお客様用の iDRAC アカウントを作成しません。お客様はポータルの操作機能のみを使用し、iDRAC のアドレスやログイン情報はお客様には一切表示されません。 ## 確認 {#verify} 0. **Safety** で、**Management network connection** カードに赤いラベルが表示されておらず、Bare Metal ページにも赤い通知が表示されていないこと。管理ネットワーク上のホストから `curl -I http:///` を実行してもファイル一覧が表示されないこと。 1. インポートフォームの**Test connection**をクリックすると、モデル、CPU、RAM、サービスタグが返されます。 2. サーバーがハードウェア情報とともに**Servers**に表示されます。**ライブ運用がオフ**の場合、電源操作を実行すると「Server control is temporarily disabled system-wide」というエラーで拒否されます。 3. ライブ運用をオンにし、1台のテストサーバーのロックを解除した後、**Operations**またはサーバーページからサーバーの電源をオフ・オンし、コンソールを開きます。 4. テストプランを使用してテスト注文を行います。サーバーが割り当てられ、OSがインストールされ、インストール完了後にサーバーからパネルへ通知が送信されます。 ## 制限と注意点 {#limits-and-notes} - すべての物理サーバーには、最大で1つの有効なサブスクリプションが関連付けられます。 - 書き込みコマンドは、**live ops** がオンであり、かつサーバーのロックが解除されている**両方の条件**を満たす場合にのみ送信されます。このチェックは、各コマンドの実行直前にワーカー内でも再確認されます。 - **Installing**状態では、注文が完了する前に、新しいOSが指定ポート(SSH 22、Windows 3389、Proxmox 8006)で応答するのを待機します。インストールには制限時間があります(`dedicated_install_timeout_min`、デフォルト150分)。 - 専用サーバーの帯域幅は、標準インストールには含まれないトラフィックカウンターエージェントによって計測されます。これがない場合、何も記録されず、ポータルでは Bandwidth タブが非表示になり、API は `capabilities.bandwidth` を `false` として返します。 - レンタルサーバーに対する管理者アクション(ロック、ロック解除、返金あり/なしでの解約)は、他のすべてのサービスと同じ統一されたアクションであり、返金は支払い元の残高に戻されます。 - サーバーはリセラー間で転売されません。Dedicatedはメインサイトからのみ販売されます。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | アドレスエラーでテストが失敗する | アドレスが`dedicated_bmc_cidrs`内のIPv4リテラルではない(プライベート、/16以下)、またはポートが許可されていない | iDRAC の IPv4 アドレスを使用し、Safety › Management network connection(`dedicated_bmc_cidrs`)配下にそのネットワークを追加してください。DNS名および IPv6 は受け付けられません。 | | 「Management network not configured」という赤い通知が表示される、または live ops スイッチが `config_placeholder` を返す | `dedicated_bmc_cidrs`、`dedicated_iso_base_url`、`dedicated_callback_base` のいずれかに、出荷時のサンプル値が残っている | Safety › Management network connection で実際の値を入力してください。 | | 保存時にフィールドが拒否される | フォーマットが正しくない(CIDRがプライベートでない、または/16より広い、ISOアドレスが `http://[:port]` でない、コールバックが `https://` でない)、または `example.com` などのサンプルアドレスが指定されている | フィールドの下に表示されるメッセージを確認してください。保存されている値は変更されません。 | | `nexcmp dedicated-setup-iso` が何も変更せずに停止する | `--listen` がこのサーバーのアドレスでない、ポートがすでに使用されている、または値が無効である | このサーバーが管理ネットワーク上で持つアドレスを使用するか、別のポートを使用するか、またはメッセージに示された値を修正してください。 | | 「iDRACのTLS証明書が固定値と一致しません - ポーリングと書き込みアクションが停止しました」 | iDRAC証明書が置き換えられた(新しい証明書への変更、iDRACの交換) | サーバーを開き、**Access**タブで2つのフィンガープリントを比較し、意図した変更である場合は**Repin certificate**をクリックします。 | | "サーバー制御はシステム全体で一時的に無効化されています" | ライブオペレーションが無効です | **Safety**で有効にしてください。 | | "このサーバーは操作がロックされています" | サーバーごとのロックが閉じられています | サーバーの **Lock** タブで理由を入力してロックを解除します。 | | "このサーバーで別の操作が実行中です" | 前の操作が完了していません | しばらく待つか、**Operations**を確認してください。 | | "このサーバーではすでに別のコンソールセッションが開いています" | コンソールは同時に1つまでです | もう一方のセッションを閉じてください。 | | "サーバーのコントローラーが一時的に利用できません" | iDRACが応答しません | 管理ネットワークと iDRAC を確認してください。 | | iDRACからの403または404エラーによりISOのマウントに失敗します | Webサーバーがファイルを読み取れないか、ベースアドレスが間違っています | ISO 用 Web サーバーの権限と、iDRAC に ISO を配信する **HTTP address serving ISOs to iDRAC** を確認してください。 | | "選択されたロケーションではこのプランの在庫がありません" | ゾーン内にそのプランの販売可能なサーバーがありません | プランをサーバーに割り当て、**Sellable** をオンにしてください。 | | "現在割り当て可能なIPv4アドレスがありません" | IPプールが空です | プールにアドレスを追加してください。 | | "現在、自動OSインストールを利用できません" | Install prerequisites missing | テンプレートが有効で、ISO フォルダーに書き込み権限があることを確認してください。お客様は ISO とコンソールから引き続きインストールできます。 | | Installation stalls | インストール中のサーバーがコールバックアドレスに到達できません | `dedicated_callback_base` と、サーバーのネットワークから HTTPS 経由でパネルに到達できることを確認してください。 | --- # VPNおよびIPv6プロキシノード {#vpn-and-ipv6-proxy-nodes} > **管理画面での場所:** Infrastructure › VPN & Proxy nodes › Agents & external nodes (`/agents`)、VPN IP pools (`/vpn/pool`)、IPv6 Proxy nodes (`/vpn/proxy6/nodes`)。サービス自体は Services › VPN および Services › IPv6 Proxy にあります。両方のモジュールは System › Admin › License & updates で有効化します。 ## 動作内容 {#what-it-does} NexCMPは、お客様が所有する**IPアドレス**および運用するサーバーから出力されるVPNおよびプロキシアクセスを販売します。2種類のノードが存在します: - **VPNノード。** 小型Goプログラムの `cmp-agent` がLinuxホスト上で実行されます。ホスト上のパブリックIPv4アドレスを検出し、販売される各アドレスでSOCKS5、HTTP、UDPリスナーを開き、顧客が接続したのと同じ**IP**(同じIPでの出口)からトラフィックを送信します。数秒ごとにパネルに報告します。 - **IPv6 proxyノード。** ホストにルーティングするIPv6プレフィックスから顧客にアドレスを付与するプロキシサービスです。パネルがSSH経由で自動インストールします。 サーバーを保有する国でクリーンなIPアドレスを再販するために使用します。 ## 要件 {#requirements} ### VPN node {#vpn-node} | 項目 | 要件 | |---|---| | オペレーティングシステム | systemdおよび4.15以降のカーネル(IPv6 free-bindサポート)を搭載したLinuxディストリビューション。同梱のエージェントバイナリは **x86_64**(amd64)のみです。 | | 権限 | インストールにはrootが必要です。サービスは `CAP_NET_ADMIN`、`CAP_NET_RAW`、`CAP_DAC_READ_SEARCH` のみを保持します。 | | ツール | `curl` または `wget`、および `sha256sum`(インストーラーはファイルのチェックなしでは続行を拒否します)。 | | パブリックアドレス | ホストのインターフェイスに割り当てられたパブリック IPv4 アドレス(1 つの `/32`)、**または** 追加のサブネットとして追加するホストにルーティングされたプレフィックス(IPv4 /16 〜 /32、IPv6 /48 〜 /128)。プライベート、CGNAT、およびドキュメント用レンジは無視されます。 | | ネットワーク、受信 | お客様は販売された各パブリック IP の **ポート 65001-65535**(SOCKS5 および HTTP の場合は TCP、UDP アソシエイトの場合は UDP)に接続します。各エンドポイントは 3 つの連続したポートのセットを使用します。 | | ネットワーク、送信 | パネルのドメインへの HTTPS (443)。エージェントは `ip-api.com`(HTTP)および `ipinfo.io`(HTTPS)で自国の国名もルックアップします(制限時間 3.5 秒)。 | | メール | ポート25への送信接続は常にブロックされ、これを開放する設定はありません。 | | Docker、VPN、および仮想インターフェイス | `docker*`、`veth*`、`br-*`、`cni*`、`flannel*`、`virbr*`、`cali*`、`tun*`、`tap*`、`wg*`、`tailscale*` という名前のインターフェイスはアドレスを提供しません。 | | 依存関係 | モジュール **VPN**、ゾーン(ホストの国から自動作成)、および HTTPS 経由でアクセス可能な NexCMP パネル。 | ### IPv6プロキシノード {#ipv6-proxy-node} | 項目 | 要件 | |---|---| | オペレーティングシステム | systemd を搭載した **x86_64** の Linux。コマンド `systemctl`、`nft`、`ip`、`ss`、`sysctl`、`useradd` が存在する必要があります。存在しない場合、インストールが停止し、不足しているコマンドの名前が表示されます。 | | インストールのためのアクセス | パブリック IPv4 アドレス(プライベート、ループバック、CGNAT アドレスは拒否されます)、SSH ポート、root または `sudo` 権限を持つアカウント、およびその**パスワード**。パスワードはインストールにのみ使用され、保存されません。 | | 空きポート | **80、443、および 60000 より上のすべてのポート**が空いている必要があります。インストインストーラーは、すでに実行中のサービスを停止または変更することはありません。ビジー状態のポートを報告して停止します。 | | IPv6 | ホストがアウトバウンドトラフィックの送信元として使用できる `2000::/3` 内の **/32 と /64** の間のパブリックプレフィックス。ホストに**ルーテッド**配信されるか、NDP プロキシ付きの**オンリンク**で配信されます(下記参照)。 | | ネットワーク | お客様はノードのIPv4のポート80(HTTPプロキシ)、ポート443(SOCKS5)、およびポート60001〜65535(静的IPごとに1ポート)に接続します。ノードには証明書がないため、HTTPSプロキシはありません。トラフィックはIPv6経由でのみ送出され、IPv6アドレスを持つ宛先にのみ送信されます。ノードはHTTPS経由でパネルから設定を取得します。 | | パネルサーバー上のノードソフトウェア | ノードのデーモンおよびネットワークスクリプトはNexCMPのリリースパッケージに含まれています。パネルはインストール時に、インストールフォルダー(`/opt/nexcmp/releases//bin`、またはカスタムビルドの場合は`/opt/nexcmp/bin`)から各ノードへそれらをコピーします。また、パネルサーバーには`sshpass`とSSHクライアントも必要です。インストーラーが`sshpass`を追加しますが、1.4.2より前にインストールされたサーバーでは`sudo apt-get install -y sshpass`を使用して追加します。 | | 依存関係 | **IPv6 Proxy**モジュール、およびノードがコールバックするパネルのURL(**IPv6 Proxy › Settings › Panel URL for nodes**、デフォルトは`https://`)。 | ## インフラストラクチャの準備 {#prepare-the-infrastructure} ### VPN node {#vpn-node-1} 1. **ホストをプロビジョニングし**、サポートされている Linux と、ネットワークインターフェイスに設定するかホストにルーティングして販売するパブリック IPv4 アドレスを設定します。 2. **ルーティングされたブロックを販売する場合**は、ノード追加時に**Extra subnet**として入力するよう計画してください。エージェントはホストがブロック内のすべてのアドレス宛てのトラフィックを受け入れられるようルート`local dev lo`をインストールし、検出したアドレスをレポートします。また、エージェントはホストの実際のルーティングテーブルも読み取り、**ゲートウェイ**アドレスを販売したり捕捉したりすることは決してありません。ブロックにホストのルートのいずれかのネクストホップ(オンリンクブロックのルーターアドレスなど)が含まれている場合、エージェントはその周辺のブロック部分にのみ`local`ルートをインストールしてゲートウェイをパネルに報告し、パネルはそのアドレスをプールおよびすべての割り当てから除外します。追加サブネットが変更された場合やエージェントが停止した場合は、インストールしたルートを削除します。 3. **ファイアウォールを開きます。** パブリックアドレスでのインバウンド TCP および UDP **65001-65535**、およびパネルへのアウトバウンド HTTPS を許可します。 4. **オプション:IP ごとのバイトカウンター。** Conntrack アカウンティング(`net.netfilter.nf_conntrack_acct = 1`)により、監視ロールで IP ごとのバイト数をカウントできます。パネルはエージェントに `acct` コマンドを送信して有効にすることができ、これにより `/etc/sysctl.d/99-cmp-agent.conf` も書き込まれます。VPN ロール自体には必要ありません。 5. **ノードからパネルを確認する:** ```bash curl -fsS -o /dev/null -w '%{http_code}\n' https://cloud.example.com/install.sh ``` ### IPv6プロキシノード {#ipv6-proxy-node-1} IPv6 プレフィックスは、2 つの方法のいずれかでノードに到達します。インストーラーは実際の送信接続で両方をテストし、機能するものを保持します。 | 種類 | 意味 | 設定内容 | |---|---|---| | **ルーテッド** | アップストリームがプレフィックス(例: /48 や /56)を**ノード自身のgetAddress**にルーティングします。アウトバウンドパケットはプレフィックス内の任意のアドレスをソースとして使用でき、応答はノードに戻ります。 | 次のホップがノードであるルーティング済みプレフィックスをプロバイダーに依頼します。ノード側での追加設定は不要です。プロキシサービスはトランスペアレントソケット、固定ポリシーラウティングテーブル、および `nft` を使用します。 | | **On-link** | 与えられた /64 はノードと同じ LAN 上に配置されます。応答は、ノードが使用中の各アドレスに対して近隣探索(**NDP proxy**)に応答する場合にのみ機能します。 | サービスは、そのインターフェイス上でのみ `net.ipv6.conf..accept_ra=2`、`forwarding=1`、および `proxy_ndp=1` を設定し、古い値を記憶し、停止時にそれらを復元し、プールのアドレスの転送をブロックして、ノードがプールのルーターにならないようにします。 | チェックの仕組み: ノードは、候補プレフィックスのランダムなアドレスから、パブリック IPv6 アドレス(ポート 443)への TCP 接続を 6 秒以内に試行します。候補には、/64 以下のプレフィックスを持つインターフェイス上のグローバルアドレス、および /16 と /64 の間の `local`、`unreachable`、または `blackhole` 型のルートが含まれます。/64 より短いプレフィックスは、内部のランダムな /64 が機能する場合、**routed** として受け入れられます。 ::: warning 同じプレフィックスを重複して使用しないでください プレフィックスは他のノードのプレフィックスと重複してはならず、パネル自身の IPv6 プールにすでに属しているプレフィックスよりも広くすることはできません。パネルのプール**内**の /64 は許可されます。重複はインストール結果に「assign range … (node …)」として報告され、そのプレフィックスはスキップされます。 ::: ノードが自身に適用する制限: 顧客はプールアドレスからのメール送信(ポート 25、465、587、2525)を行うことができず、デーモン自身の IPv4 トラフィックは応答、パネル、および DNS に制限されます。 ## NexCMP での接続 {#connect-in-nexcmp} ### VPN node {#vpn-node-2} 1. **System › Admin › License & updates** で、スイッチ **VPN** をオンにします。[Modules](https://nexcmp.com/ja/docs/infrastructure/modules/) を参照してください。 ![VPN および IPv6 プロキシスイッチが表示されたモジュールカード](https://nexcmp.com/ja/docs/images/infrastructure/vpn-proxy-nodes-01-modules.webp) 2. **Infrastructure › VPN & Proxy nodes › Agents & external nodes** を開きます。ノードを追加するには 2 つの方法があります。 **a. SSH 経由でインストールする。** **+ Add server (SSH)** をクリックし、以下に入力します: | 項目 | 入力例 | |---|---| | サーバー IPv4 アドレス | `192.0.2.50` | | SSH ポート | `22` | | SSH ユーザー | `root` | | SSH パスワード | `XXXX` | | 表示名 | `node-ny-1`(空欄: IP にちなんで命名されます) | | サーバーロール | External VPN / Proxy Node | | ゾーン割り当て | GeoIP による自動(ゾーンの作成 / 割り当て)、または既存のゾーン | | 追加サブネット(オプション) | インターフェイスを自動スキャンする場合は空欄にするか、`203.0.113.0/24` などのルーティング済みブロックを指定します | | インストール後に販売用に有効化 | 検出されたすべてのアドレスを販売可能としてマークする場合はオンにします | **Connect & install** をクリックします。パネルは SSH 経由で接続し、一回限り有効なチケットを使用してノード上でワンライナーインストーラーを実行し、ノード名、GeoIP の場所、および検出されたレンジを表示します。 ![サーバーのアドレスとロールの例を示す SSH 経由でのノード追加ダイアログ](https://nexcmp.com/ja/docs/images/infrastructure/vpn-proxy-nodes-02-add-server-ssh.webp) **b. 手動インストール。** **Generate manual install token**をクリックします。コマンドは**1回のみ**表示されます。これをコピーしてノード上で実行します。 ```bash curl -fsSL https://cloud.example.com/install.sh | sudo sh -s -- --token XXXX --name node-ny-1 ``` トークンによるインストールでは、監視用としてのみマシンが登録されます。安全のため、パネルは共有トークンを保持するマシン自身にVPNロールを付与することを許可しません(コマンドに`--roles vpn`を追加しても効果はありません)。マシンがリストに表示されたら、そのマシンを開いて手動で**VPN**ロールを追加してください。SSH経由のインストール(オプションa)では、ノードに最初からVPNロールが付与されます。新しいトークンを生成すると古いトークンは無効になりますが、既に登録されたホストは独自のキーを使用するためそのまま動作し続けます。 ![ワンタイムトークンコマンドを表示するインストールコマンドダイアログ](https://nexcmp.com/ja/docs/images/infrastructure/vpn-proxy-nodes-03-install-command.webp) インストーラーの動作: パネルから `cmp-agent-linux-amd64` をダウンロードし、**SHA-256を検証**し、`/usr/local/bin/cmp-agent` にインストールし、トークンで登録し、`/etc/cmp-agent/agent.json` を書き込み、systemdサービス `cmp-agent` を起動します。削除する場合: `curl -fsSL https://cloud.example.com/install.sh | sudo sh -s -- --uninstall`。 3. 最初のハートビートの後、ノードがリストに表示されます。国はGeoIPによって検出され(ノード自身のルックアップが優先され、次にパネルのデータベースが使用されます)、その国の**ゾーン**が存在しない場合は作成されて公開され、ホストで見つかったアドレスがプール範囲になります。 4. **Infrastructure › VPN & Proxy nodes › VPN IP pools**を開いて範囲、そのゾーンとノードを確認し、各範囲のゾーン、ノード、または**Sellable**スイッチを変更します。**Enable range**では新しい注文で空きIPを使用できるようになり、**Disable range**では新規割り当てのみが停止され、リース中のIPは稼働し続けます。 ![ノードによって報告された範囲を持つVPN IPプール](https://nexcmp.com/ja/docs/images/infrastructure/vpn-proxy-nodes-04-vpn-pool.webp) 5. **Services › VPN**を開き、料金表を設定して販売を有効にします。**Subscriptions**の **Sell VPN** スイッチは、License & updates の VPN モジュールと同じスイッチです。 6. **任意: サービスの名称変更。** **Settings › Branding**の **VPN service display name** で、カスタマーメニュー、注文ページ、詳細ページ、デプロイ一覧における VPN サービスの表示名を変更できます(例: `IPv4 Proxy`、`Datacenter Proxy`、`Static Residential Proxy`。最大40文字、空欄の場合は`VPN`を維持)。変更されるのはラベルのみであり、ルート、データ、API は変更されません。 ### IPv6プロキシノード {#ipv6-proxy-node-2} 1. **System › Admin › License & updates** で、**IPv6 Proxy** をオンにします。 2. **Infrastructure › VPN & Proxy nodes › IPv6 Proxy nodes**を開き、**Add node (SSH)**をクリックします。ノードのIPv4アドレス、SSHポート、ユーザー、パスワード、任意の名前、および**Reason**(監査ログに記録されます)を入力し、**Install**をクリックします。 ![アドレスと理由の例が表示されたIPv6ノードの追加ダイアログ](https://nexcmp.com/ja/docs/images/infrastructure/vpn-proxy-nodes-05-proxy6-add-node.webp) 3. その後、パネルは順番に、マシンとポートのチェック、デーモン、ネットワークスクリプト、サービスユニット、およびノード固有の環境ファイル(ノードトークンとパスワード署名キー)のコピー、使用可能なプレフィックスの**probe**の実行、プールへのプレフィックスの記録、サービスの開始を行い、最初のレポートを最大90秒間待ちます。**Install log**には各ステップが表示されます。 4. 新しいノードは、そのゾーンを(ノードのIPv4のGeoIPから)**off**の状態で作成します。顧客が選択できるように、**Infrastructure › Datacenter › Zone**からゾーンをオンにしてください。 5. ノードごとに合計の**Mbps cap**を設定します(方向ごとに10から100000)。**Services › IPv6 Proxy**で価格表を設定し、販売をオンにします。 6. **IPv6 Proxy › Settings › Panel URL for nodes**を確認します。ノードはこのアドレス(`https://host`、パスなし)を呼び出して設定を取得し、レポートを送信します。空欄の場合は`https://`を意味します。ノード自身のIPv4が変更されずに到達できるよう、アドレスがパネルを直接指しているホストである必要があります。 ::: tip ローテーションスケジュール お客様は30〜600秒の自動ローテーション間隔を設定できます。NexCMPでは、パネルがそのスケジュール(および毎時の接続ログのクリーンアップ)を実行し、ノードは約5秒以内に新しいアドレスを取得します。 ::: ### ノードのレポート送信方法 {#how-a-node-reports} | | VPN node (`cmp-agent`) | IPv6プロキシノード | |---|---|---| | 登録 | HTTPS経由の1回限りのチケットまたはトークン、その後は独自キー | 1回限りのSSHインストール、その後はノードトークン | | ハートビート | **5秒**ごと(モニター専用エージェントの場合は10秒)。パネルで3〜300秒に設定可能です。障害発生後は5秒刻みで最大60秒までバックオフします | ノードは約60秒ごとにレポートを送信し、設定を取得します | | オンラインとして表示 | 過去**60秒以内**のハートビート | 過去**120秒以内**に**alive**であること、そうでない場合は**missed heartbeat** | | 設定変更 | 次回のハートビート時に適用 | 約5秒以内に適用 | | アップデート | パネルから新バージョン、URL、SHA-256を指定して`upgrade`コマンドを送信可能 | ノード行から再インストール | ### VPNノードのデータ通信量枠 {#data-allowance-on-a-vpn-node} NexCMP **1.5.1** 以降、VPN ノードエージェントは各ハートビート時に転送トラフィック量を送信し、パネルはそれを当請求期間のプラン使用量に加算します。同じ数値がお客様(Overview タブおよび Bandwidth タブ)と管理者(VPN › Subscriptions、Used 列、およびノード行)の双方に表示されます。 - **利用停止。** プランが当期のGB上限に達すると、パネルは該当プランのエンドポイントのエージェントへの送信を停止するため、新規接続は拒絶され、確立済みの接続は切断されます。停止処理は1ハートビート以内に行われるため、プランの上限をわずかに超過する場合があります。Unlimited枠のプランが停止されることはありません。 - **再開。** お客様が帯域幅を追加購入するか、次の利用期間が開始されると、1ハートビート以内にプランの提供が再開されます。 - **Not measured**:エージェントが使用状況を送信していないノード(旧バージョンのエージェントなど)は**Not measured**と表示され、GB 容量を理由にプランが停止されることはありません。 - エージェントの**更新**。ノードではエージェント **1.5.1** を使用してください。旧バージョンのエージェントでもカウントは行われますが、失敗したハートビート、停止されたエンドポイント、または再起動時のバイト数が失われる可能性があり、プラン切断時に開いている接続を切断しません。ノードの行(Reinstall)または`upgrade`コマンドで更新してください。 - カウントはプロキシを通過するペイロードが対象となるため、ネットワーク上の実際のバイト数よりもわずかに少なく(約1 %)なります。 ### 提供終了した VPN アドオン {#retired-vpn-add-ons} High IP Reputation、High Concurrency、High Priority Network は、新規注文での提供を終了しました。既存のサブスクリプションでは選択済みのアドオンが保持されますが、更新金額からは提供終了となった料金が除外されます。支払い済みの期間に対する返金はありません。この調整にはアドオンの現在のカタログ価格が使用されます。価格を変更した場合やアドオンを削除した場合は、次回の更新前に対象サブスクリプションの更新金額をご確認ください。 ## 確認 {#verify} 1. ノード行がオンラインになっています。VPNノードの場合、**Agents & external nodes**にそのゾーン、国、ロール、および検出された範囲が表示されます。 2. **VPN IP pools**には空きIPを持つ範囲がリスト表示され、ゾーンの詳細ページにはVPNインフラストラクチャが表示されます。 3. テスト用のVPNまたはプロキシプランを注文します。顧客にはエンドポイント`ip:port`、ユーザー名、パスワードが発行されます。それ経由で接続し、表示されるパブリックIPがノードのIP(例:`curl --proxy socks5h://USER:XXXX@IP:PORT https://ifconfig.me`)であることを確認します。 4. IPv6ノードで、ホスト上で次を実行します: ```bash systemctl is-active nft list tables | grep proxy6 ss -ltn | grep -E ':(80|443|6[0-9]{4})\b' ``` ## 制限と注意点 {#limits-and-notes} - Windowsホストは監視エージェントを実行できますが、VPNロールは実行できません。 - VPNプランのデータ許容量(期間あたりのGB):NexCMP 1.5.1以降、パネルはVPNノードエージェントから報告されたトラフィックを集計し、期間のGBを使い切るとプランのプロキシを切断します(後述の「VPNノードのデータ許容量」を参照)。IPv6 ProxyプランにはGBの許容量はなく、プランごとに速度をMbps単位で制限します。 - VPNプランのIPv4アドレスはローテーションしません。お客様からブラックリスト登録されたIPの報告があった場合、管理者またはリセラーが同一ゾーンからの交換を承認します。ローテーションするのはIPv6 Proxyのみです。 - ハートビートごとに報告される範囲は最大64個です。 - 1つの販売IPにつき3つのポートがVPNエンドポイントセットに使用されます。65001〜65535のポートを使用することで、各IPは限られた数のエンドポイント(178個のポートセット)を提供します。パネルは以前に使用されたセットをスキップします。 - IPv6プロキシノードの削除は、どのプランもそのノード上でIPを保持していない場合にのみ許可されます。これによりノードのレンジとトークンが削除されますが、ホスト上のソフトウェアはアンインストールされません。 - ご自身のVMも配置されているレンジの再販は可能です。VPNは65001〜65535ポートのみを使用するため、他のサービスとIPを共有します。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | "登録に失敗しました(無効なトークン、またはサーバーに到達できません)" | トークンが間違っている、すでに使用されている、またはパネルに到達できません | 新しいトークンを生成するか、SSHインストールを再試行してください。 | | "ファイル署名の不一致 - STOP" | ダウンロードされたエージェントが公開されているSHA-256と一致しません | パネルの `/dl/` フォルダを確認し、途中でダウンロードが書き換えられていないことを確認してください。 | | "このインストーラーはLinux専用です" / "アーキテクチャ…はまだサポートされていません" | Windows、またはx86_64以外のアーキテクチャ(リリースにはx86_64用エージェントのみ同梱) | x86_64 の Linux ホストを使用してください。 | | ノードが表示されない | ノードがHTTPS経由でパネルに到達できません | ノードから `curl https:///install.sh` をテストし、DNSとファイアウォールを確認してください。 | | ノードが間違った国で表示される | 国情報のルックアップに失敗したため、パネルのアドレスデータベースが使用されました | `ip-api.com` および `ipinfo.io` へのアウトバウンドアクセスを許可するか、SSHフォームでゾーンを明示的に選択してください。 | | レンジが検出されません | 非仮想インターフェイスにパブリックIPv4がありません | パブリックアドレスを追加するか、ルーティングされたブロックを **Extra subnet** として入力してください。 | | VPNは機能するが、トラフィックが別のIPから出力される | 販売されたIPがホストに割り当てられていないか、ルーティングされていません | IPがインターフェイス上にあるか、`local … dev lo` でカバーされていることを確認してください。 | | "パネルサーバーにsshpassがありません" | パネルホストがパスワードを使用してノードにログインできない | パネルサーバー上で`sudo apt-get install -y sshpass openssh-client`を実行し、ノードを再インストールします。 | | IPv6ノードのインストール時の"not found in the installed package" | パネルが1.4.2より古い、またはノードファイルを含まないカスタムビルドである | NexCMPを1.4.2以降にアップデートしてください。カスタムビルドの場合は`build.sh`を使用します(現在は`brandy-proxy6d`および`brandy-proxy6-net`が同梱されています)。 | | IPv6インストールの最初にある「SSH: …」、または「SSH to internal/loopback addresses is not allowed」 | ポート、ユーザー、またはパスワードの間違い、SSHのブロック、またはアドレスがプライベートアドレスです | ノードのパブリックIPv4を使用し、`ssh -p PORT USER@IP` でアクセスを手動で確認してください。 | | "アーキテクチャ…はサポートされていません(x86_64のみ)" | ノードが x86_64ではありません | x86_64 ホストを使用してください。 | | "ノードに必要なコマンドがありません: …" | `nft`、`ip`、`ss`、`sysctl`、`systemctl`、または `useradd` がインストールされていません | パッケージをインストールしてから、もう一度インストールを実行してください。 | | "ノード上の別のサービスがポートを使用中: … — 80、443、60001-65535が空いている必要があります" | 80、443、または 60000 を超えるポートが使用中です | 他のサービスを移動してください。インストーラーはそれを停止しません。 | | "ノードからインターネットにアクセス可能なIPv6プレフィックスが見つかりません(実際のエグレスプローブに失敗しました)" | ルーティングされたプレフィックスがない、NDPプロキシが使用できない、またはアウトバウンドIPv6がない | プレフィックスがノードにルーティングされていること、インターフェイスにIPv6接続があること、およびアウトバウンドトラフィックをフィルター処理しているものがないことを確認してください。 | | "検出されたすべての範囲はすでに別のノードに属しています" | プレフィックスがすでに別のノードによって使用されています | 他のノードから削除するか、別のプレフィックスを選択してください。 | | インストールが "no initial report received from node" で終了する | サービスは起動しましたが、90秒以内にパネルへ到達しませんでした | ノードに指定されたパネルURLと、ノードからのHTTPSパスを確認してください。**Install log**を参照してください。 | | ノード行に**missed heartbeat**と表示される | 120秒間レポートがありません | ノード上のサービス、時計、およびパネルへのパスを確認してください。 | | お客様にIPv6ロケーションが表示されない | ゾーンが無効になっています | **Zone**でゾーンを有効にしてください。 | --- # AI Models {#ai-models} > **管理画面の場所:** モジュールを有効にするにはSystem › Admin › License & updates(`/license`)へ移動します。次にServices › AI ModelsのProviders(`/ai/providers`)、Models(`/ai/models`)、Profit(`/ai/profit`)、Audit(`/ai/audit`)を設定します。顧客はカスタマーポータルのAI › APIを使用します。 ## 動作内容 {#what-it-does} AI Modelsは、自社パネル上のゲートウェイおよび請求レイヤーです。顧客はAPIキーを取得し、OpenAI互換またはAnthropic互換フォーマットで**自社ドメイン上の1つのエンドポイント**を呼び出します。提供するモデルと100万トークンあたりの料金(1 million tokens)は自由に設定可能です。NexCMPがキー、制限、ウォレットを確認し、追加済みのプロバイダーへリクエストを転送してトークン数を計測し、顧客のプリペイドウォレットから引き落とします。 **モデルソースはお客様自身で用意します。** NexCMPには、プロバイダー、モデル、デフォルトアドレス、価格は一切含まれていません。モデル、APIキー、トークン、プロバイダーアカウントの提供は行いません。 ::: warning モデルソースの利用規約を事前に確認してください 多くのモデルソースでは、再販や第三者へのアクセス提供を制限しています。利用および再販が許可されているソースのみを使用し、各提供元の規約および適用される法令を遵守してください。本ページの内容は法的助言を構成するものではありません。 ::: AI Modelsは**AI Chat and AI Agent**(モジュール**AI**、[AI providers](https://nexcmp.com/ja/docs/ai/ai-providers/)を参照)とは別の機能です。これら2つのモジュールは相互に依存しません。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | モジュール | License & updatesのModulesで**AI Models**が有効になっていること。デフォルトは無効です。 | | プロバイダー | 再販権限を持つ1つ以上のモデルソース。それぞれOpenAI互換API (`/chat/completions`)、Anthropic互換API (`/messages`)、またはその両方を備えている必要があります。それぞれにベースURLとAPIキーが必要です。 | | ネットワーク | パネルは各プロバイダーに公開ドメイン名の**ポート443経由のHTTPS**で到達できる必要があります。内部ホスト、別ポート、またはプレーンHTTP上のプロバイダーは、**Allowed internal hosts**(設定`ai_endpoint_allow`)に登録されている必要があります。 | | 顧客 | 確認済みのメールアドレスとウォレット残高を持つ顧客アカウント。 | | ハードウェア | 不要。NexCMPはリクエストを転送するだけなので、GPUやモデルファイルは必要ありません。 | ## インフラストラクチャの準備 {#prepare-the-infrastructure} 1. 使用する各モデルソースからAPIキーを取得し、そのベースURL(例: `https://api.example.com/v1`)を控えておきます。 2. 再販に関するモデルソースの利用規約を確認します。 3. ソースがネットワーク内で稼働している場合は、そのアドレス(例: `http://10.0.0.5:8000/v1`)を決定します。`10.0.0.5:8000`を**Allowed internal hosts**に登録します。 ## NexCMP での接続 {#connect-in-nexcmp} ### 1. モジュールを有効にする {#_1-turn-the-module-on} **System › Admin › License & updates**を開き、カード**Module**を見つけて**AI Models**を有効にします。メニューが再読み込みされ、**Services › AI Models**が表示されます。モジュールが無効の間は、カスタマーページ、管理ページ、ゲートウェイはいずれも`404 module_disabled`を返し、プロバイダーへの接続は行われません。 ![AI ModelsスイッチがオンになっているModuleカード](https://nexcmp.com/ja/docs/images/infrastructure/ai-models-01-modules.webp) ### 2. プロバイダーの追加 {#_2-add-a-provider} 1. **AI Models › Providers**を開き、**Add provider**を選択します。 2. 短い**slug**、**name**(管理者のみに表示)、**type**(OpenAI-compatible、Anthropic-compatible、またはBoth)、**base URL**、**API key**、および**priority**(小さい数値ほど優先的に試行)を入力します。 3. 保存します。キーは暗号化されて保存され、保存後は末尾4文字のみが表示されます。キーの入力はサインインした管理者セッションからのみ可能です。 **Both**は、両方のフォーマットを実際に提供するゲートウェイでのみ使用してください。NexCMPは2つのフォーマット間の変換を**行いません**。OpenAI互換プロバイダーが提供するモデルには`/ai/v1/chat/completions`で、Anthropic互換プロバイダーが提供するモデルには`/ai/v1/messages`でアクセスします。 ![type、priority、statusが表示された3つのサンプルプロバイダーが一覧表示されているProvidersページ](https://nexcmp.com/ja/docs/images/infrastructure/ai-models-02-providers.webp) ### 3. 接続テスト {#_3-test-the-connection} プロバイダーで**Test connection**を選択します。NexCMPはキーを使用して`GET /models`を読み取り、**ok**、または失敗の原因(**auth**(無効なキー)、**blocked**、**billing**、**unreachable**)を報告します。テストは1分間に6回までに制限されています。 ### 4. モデルの同期 {#_4-sync-the-models} **Sync models**を選択します。NexCMPはプロバイダーのモデル一覧を読み取り、新しい各モデルを**オフかつ価格未設定**の状態で追加します。プロバイダーの一覧から削除されたモデルにはフラグが付けられます。モジュールがオンの間、一覧は6時間ごとに自動同期も行われます(設定`ai_models_sync_hours`)。 ### 5. 価格設定とモデルの有効化 {#_5-set-prices-and-switch-models-on} 1. **AI Models › Models**を開きます。 2. 販売するモデルごとに、100万トークン(1 million tokens)あたりの米ドルでの**販売価格**を設定します: **input**、**cached input**、**output**。 3. 任意でモデルの**コスト**を入力できます。入力すると、**Profit**に日別およびモデル別のコストに対する収益が表示され、コストに最小マージン(設定`ai_min_margin_pct`、デフォルトは10)を加えた額を下回る販売価格は、意図的な損失を承認しない限り拒否されます。**Set price from cost**では指定したマークアップが使用されます。デフォルトのマークアップはありません。 4. モデルをオンにします。販売価格が設定されていないモデルはオンにできません。cached input価格を0のままにした場合は、input価格で課金されます。 ![input、cached input、outputの販売価格およびオン/オフスイッチが表示されたModelsページ](https://nexcmp.com/ja/docs/images/infrastructure/ai-models-03-models.webp) ### 6. ルートとフェイルオーバー {#_6-routes-and-failover} モデルの**Routes**には、それを提供するプロバイダーが順序どおりに一覧表示されます。フォールバックとして2つ目のプロバイダーを追加し、優先順序を設定し、必要に応じてプロバイダーごとに異なるモデル名を指定できます(プロバイダーに送信される名前は公開する名前と異なっていてもかまいません)。プロバイダーがサーバーエラー、認証または請求エラー、モデル不在、またはレート制限を返した場合、NexCMPは次のルートを試行します。リクエスト送信後に読み取りがタイムアウトした場合は、二重支払いを防ぐため他のプロバイダーには**送信されません**。 各プロバイダーは1分あたり`ai_provider_rpm`リクエストにペース配分されます(デフォルトは50)。プロバイダーが認証エラーや請求エラーを返し続ける場合、Telegramが設定されていれば、NexCMPはTelegram経由で管理者にアラートを送信します。 ### 7. 販売スイッチの有効化 {#_7-open-the-sale-switch} AI Modelsページの上部にある**販売スイッチ**(設定`feature_ai_models`)は、デフォルトでオフになっています。オフの間、お客様にはサービスがまだ開始されていない旨が表示され、公開料金表には利用不可と表示されます。少なくとも1つのモデルがオンになっており、販売価格とキー付きのルートが設定されていることを確認してから、オンに切り替えてください。 ### お客様が利用できる機能 {#what-customers-can-do} カスタマーポータルの **AI › API**: - **Models**には、提供モデルと価格、ベースURL、すぐに使えるサンプルコマンドが表示されます。 - **API Keys**:キーの作成、名前変更、ローテーション、無効化、削除が可能です。シークレットは一度だけ表示され、ハッシュのみが保存されます。キーごとの設定:許可モデル、有効期限、ソフトバジェット(警告)、ハードバジェット(`402`でブロック)、1分あたりのリクエスト数、1分あたりのトークン数。 - モデル別、キー別、日別の**Usage**(エクスポート対応)。 - **Logs**: 絞り込み可能なリクエスト履歴(時刻、キー、モデル、トークン数、コスト、ステータス、レイテンシ)。**プロンプトと応答は記録されません。** ログはデフォルトで90日間保持されます(`ai_log_retention_days`)。 - **Settings**: アカウント予算と予算アラート送信用メールアドレスの設定。 - **Playground**: モデルとのチャット、モデル間の並行比較、対応するコードのコピー。 ![両方のAPI形式のベースURLが表示された顧客のAPI Keysページ](https://nexcmp.com/ja/docs/images/infrastructure/ai-models-04-keys.webp) お客様のドメイン上のゲートウェイエンドポイント: ```text POST /ai/v1/chat/completions OpenAI-compatible POST /ai/v1/messages Anthropic-compatible (also /ai/v1/messages/count_tokens) GET /ai/v1/models model list GET /ai/v1/models/pricing public price list, no key needed ``` ### ウォレットと請求 {#wallet-and-billing} AIの利用料金は、他のすべてのサービスと同様に同一の前払いウォレットに請求されます。リクエストがプロバイダーへ送信される前に、NexCMPはそのリクエストで発生しうる最大コスト分の金額を確保します。残高が最低額(`ai_min_balance_cents`、デフォルトで20セント)を下回っているか不足している場合、リクエストは`402 insufficient_balance`で拒絶され、**プロバイダーは呼び出されません**。利用実績はアカウントごとに集計され、毎時ウォレットの元帳エントリーに決済されます(5分ごとのスイープ処理あり)。未決済の利用分は、ゲートウェイが参照する残高からすでに差し引かれています。 リセラーは自社ドメインでAI Modelsを販売できます。リセラー独自のマージンや割引がお客様の販売価格に適用され、リセラーの卸売用ウォレットからは卸売価格が引き落とされます。デフォルトで有効になっているリセラーごとのAIスイッチにより、販売の可否を制御できます。 ## 確認 {#verify} 1. ステップ3の後、**Test connection**に**ok**とモデル数が表示されます。 2. ステップ4の後、新しいモデルが無効(off)かつ価格未設定の状態で一覧表示されます。 3. 残高のあるウォレットを持つ顧客として、キーを作成してゲートウェイを呼び出します: ```bash curl https://your-domain/ai/v1/chat/completions \ -H "Authorization: Bearer sk-ai-…" -H "Content-Type: application/json" \ -d '{"model":"model-one","messages":[{"role":"user","content":"hello"}]}' ``` `200`応答にモデルの回答が含まれます。**Usage**にリクエストが表示され、原価を入力している場合は**Profit**にも表示されます。 4. ウォレット残高がゼロの場合、同じ呼び出しは`402 insufficient_balance`を返します。 ## 制限と注意点 {#limits-and-notes} - 本モジュールにはプロバイダー、モデル、価格は組み込まれておらず、プロバイダーから価格表が読み取られることもありません。 - Web検索などプロバイダー側で実行され呼び出しごとに課金されるツールは、従量測定ができないため拒否されます。リクエストパラメーターのうち転送されるのは一部の項目のみです。 - トークン使用量はプロバイダーの応答から取得されます。応答に使用量が含まれていない場合、NexCMPが見積もりを行い、レコードに見積もり済みとしてフラグを付けます。 - プロバイダーからのエラーは、顧客に届く前にサニタイズされます(名前、ホスト、アドレス、プロバイダー側のモデル名が削除されます)。顧客にどのプロバイダーがリクエストを処理したかが表示されることはありません。 - 顧客はパネルのドメイン経由でゲートウェイにアクセスするため、そのドメインのTLSが正常に動作している必要があります。 - NexCMPは本モジュールに関するSLA(サービス水準合意)、ファインチューニング、GPUホスティングを提供しません。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因と対処法 | |---|---| | すべてのAI Modelsページおよびゲートウェイが`404 module_disabled`を返す | モジュールが無効になっています。License & updatesのModulesで**AI Models**を有効にしてください。 | | プロバイダーの追加が`endpoint_host_not_allowed`、`endpoint_must_be_https`、または`invalid_endpoint_port`で失敗する | ベースURLはパブリックドメイン名、ポート443のHTTPSである必要があります。内部ホスト、別のポート、またはプレーンHTTPの場合は、`host:port`を**Allowed internal hosts**に追加してください。 | | `blocked_endpoint` | アドレスがIPアドレスであるか、名前がプライベートアドレスに解決されています。意図した設定である場合は、**Allowed internal hosts**に登録してください。 | | **Test connection**に`auth`と表示される | キーが正しくないか、アクセス権がありません。キーを再入力してください。 | | モデルを有効化できない(`no_price`) | 先に販売価格を設定してください。 | | 顧客側で`503 ai_unavailable`が発生する | 販売スイッチが無効になっているか、リセラーのAIスイッチが無効になっています。 | | 顧客側で`503 upstream_unavailable`が発生する | 要求された形式でそのモデルを提供する、キー付きの有効なルートがありません。モデルのルートとプロバイダータイプを確認してください。 | | 顧客側で`402 insufficient_balance`が発生する | ウォレットの残高が最小額を下回っているか、リクエストに対して不足しています。お客様にチャージを依頼してください。 | --- # Object Storage (S3, Ceph RGW) {#object-storage-s3-ceph-rgw} > **管理画面での場所:** Infrastructure › Cloud provider › Ceph S3 (RGW) (`/infra/s3`)。アカウント: Services › Object Storage › S3 accounts (`/s3`)。料金: Services › Object Storage › PAYG pricing (`/s3/policy`)。System › Admin › License & updates からモジュールを有効にします。 ## 動作内容 {#what-it-does} お客様はポータルからS3アカウントを作成し、アクセスキーを取得します。NexCMPはRGW Admin Ops API経由で**お客様のCeph RADOS Gateway (RGW)**上に一致するユーザーの作成および削除を行い、課金用の使用量を読み取り、従量課金を行います。ストレージは無料枠を超える分をGB/月あたり(時間単位で課金)、ダウンロードトラフィックはGBあたりで課金されます。アップロードは無料です。 RGWを使用したCephクラスターを運用しており、オブジェクトストレージを再販したい場合に使用します。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | Ceph | 少なくとも1つのRGWデーモンを持ち、**Admin Ops API**が有効化されたクラスター(デフォルトの`rgw_enable_apis`には`admin`が含まれます)。 | | 管理者ユーザー | 以下にリストする権限を持つ、NexCMP用のRGWユーザー。お客様のデータを所有するユーザーは使用しないでください。 | | エンドポイント | お客様が使用するS3エンドポイントと、Admin Opsエンドポイント。両方とも`https://host`形式で記述し、**パスなし、ポート443のみ**とし、**パブリック**アドレスに名前解決される必要があります。ループバック、リンクローカル、マルチキャスト、プライベート、およびユニークローカルアドレスは拒否されます。 | | 証明書 | エンドポイントホスト用の有効な証明書。 | | 使用量ログ | RGWの使用量ログが有効(`rgw_enable_usage_log = true`)になっており、使用量APIがトラフィックを報告できるようにすること。 | | ゾーン | サービス**Object Storage (S3)**にチェックが入ったマスターゾーン。[Zones](https://nexcmp.com/ja/docs/infrastructure/zones/)を参照してください。 | | ストレージ | 販売するクォータに見合うCephの容量。 | | 依存関係 | モジュール**Object Storage**。ダウンロードトラフィックは[Bandwidth](https://nexcmp.com/ja/docs/catalog/bandwidth/)にもカウントされます。 | ## インフラストラクチャの準備 {#prepare-the-infrastructure} Ceph管理ノード上: 1. 管理者ユーザーを作成し、必要なAdmin Ops権限を付与します: ```bash radosgw-admin user create --uid=nexcmp-admin --display-name="NexCMP admin" radosgw-admin caps add --uid=nexcmp-admin --caps="users=*;buckets=*;usage=read;metadata=read" radosgw-admin user info --uid=nexcmp-admin ``` 出力から`access_key`と`secret_key`をコピーします。これらがNexCMPにおける**Admin access key**および**Admin secret key**になります。 2. 使用量ログを有効にしてゲートウェイを再起動します: ```bash ceph config set client.rgw rgw_enable_usage_log true ``` 3. ゲートウェイをポート443のHTTPSの背後(リバースプロキシまたはRGW自身のTLS)に配置し、DNS名を公開し、パネルサーバーからテストします: ```bash curl -fsS -o /dev/null -w '%{http_code}\n' https://s3.example.com/ ``` タイムアウトではなく、S3 XMLの応答(HTTP 200または403)が返るはずです。 ## NexCMP での接続 {#connect-in-nexcmp} 1. **ゾーンにS3サービスを付与する。** **Infrastructure › Datacenter › Zone**を開き、ゾーンを編集して**Object Storage (S3)**にチェックを入れます。S3サービスを持つマスターゾーンのみがバックエンドフォームに表示されます。 2. **Infrastructure › Cloud provider › Ceph S3 (RGW)**を開き、**Add backend**をクリックします: | 項目 | 入力例 | |---|---| | Backend name | `Ceph RGW 1` | | ゾーン | ステップ1のゾーン | | RGW Admin Ops endpoint | `https://s3.example.com` | | お客様用 S3 エンドポイント | `https://s3.example.com` | | S3 署名リージョン | `default` | | 管理者アクセスキー | `XXXX` | | 管理者シークレットキー | `XXXX` | | 有効 | on | | 販売を有効化(事前に接続テストが必要) | **off**(当面の間) | | 変更理由 | `initial setup` | ![エンドポイント、リージョン、マスクされたキーの例が表示されたバックエンド S3 ダイアログ](https://nexcmp.com/ja/docs/images/infrastructure/s3-02-backend-dialog.webp) 3. **OK**(保存)をクリックし、行の **Check** をクリックします。NexCMP は管理者キーを使用して Admin Ops API を呼び出します。**Ceph connection successful** およびタグ **Verified** が表示されていれば、正常に動作しています。 4. **Edit** をクリックし、**Enable sales** をオンにして保存します。テストが成功するまで、NexCMP は販売の開始を許可しません。 5. **Services › Object Storage › PAYG pricing** を開き、料金を設定します。 | 項目 | 意味 | |---|---| | 無料枠を超えるストレージ(VND/GB/月) | ストレージ料金。月額料金を 730 で割った値として 1 時間ごとに請求されます。 | | ダウンロード(VND/GB) | 下りトラフィックの料金。 | | アップロード(VND/GB) | 常に 0。 | | 稼働中 VM ありの無料枠(GB) | 顧客が少なくとも 1 台の稼働中 VM を保有している間、アカウントあたり 100 GB に固定され、サイズごとに S3 アカウント間で共有されます。 | | 債務限度額(VND) | 許可される未払い利用料の上限。 | | 請求しきい値(VND) | この金額を超えると、利用料が 1 つの請求書にまとめられます。 | | S3 作成に必要な最低残高(VND) | アカウント作成に必要なウォレット残高。 | | 顧客あたりの最大 S3 アカウント数、デフォルトのテクニカルクォータ(GB) | 新規アカウントの制限。 | ![S3 PAYG 料金フォーム](https://nexcmp.com/ja/docs/images/infrastructure/s3-04-pricing.webp) S3 の価格は VND で入力されます。表示およびウォレットの課金時には、適用される為替レートで換算されます。[Currency and exchange rates](https://nexcmp.com/ja/docs/catalog/currency-and-exchange-rates/) を参照してください。 ## 確認 {#verify} 1. **Check** で「Ceph connection successful」が表示されます。 2. 顧客として(またはテストアカウントを使用して)S3 アカウントを作成します。Ceph 側では `radosgw-admin user list` に新しいユーザーが表示され、NexCMP では **S3 accounts** にリストされます。 3. 顧客のエンドポイントに対して顧客のキーを使用し、任意の S3 クライアントでバケットを作成します。ファイルをアップロードします。 4. 次回の 1 時間ごとの課金処理の後、**S3 accounts** に利用状況が表示されます。 ## 制限と注意点 {#limits-and-notes} - すでにアカウントが紐付けられているバックエンドは、**ゾーン、エンドポイント、リージョン**が維持されます。これらを変更するには、新しいバックエンドを作成してください。 - 1 つのゾーンに独自のバックエンドを持たせることができます。アカウントとバックエンドはゾーンに永続的に紐付けられます。 - 無料枠と「アップロード無料」はオプションではなく、固定のルールです。 - キーは暗号化して保存されます。コンソールには「現在のキーを維持する場合は空欄のままにする」というフィールドのみが表示されます。キーペアは常にセットで入力します。 - 顧客のシークレットキーは作成時に一度だけ表示され、二度と表示されません。キーを紛失した場合は、ローテーションによって置き換えます。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | "Endpoint requires HTTPS" | エンドポイントが通常の HTTP を使用している | ポート 443 で HTTPS を公開してください。 | | 「許可されていないエンドポイントポートです」 | 443 以外のポート | 標準の HTTPS ポートを使用してください。 | | 「エンドポイントアドレスが許可されていません」 | 名前がプライベート、ループバック、リンクローカル、またはユニークローカルアドレスに解決されます | パブリックアドレスを使用してください。 | | 「エンドポイントにはプロトコルとホストのみを含める必要があります」 | URLにパス、クエリ、またはユーザー情報が含まれています | `https://host` のみを使用してください。 | | 「エンドポイントの解決に失敗しました」 | パネルサーバーからDNSが解決されません | DNSを修正してください。 | | "Failed to connect to Ceph" | ファイアウォールまたはTLSエラー | パネルサーバーから `curl` でテストしてください。 | | "Ceph returned HTTP 403 AccessDenied" | キーが間違っているか、権限が不足しています | キーを確認し、 `radosgw-admin caps add` を再実行してください。 | | "Invalid Ceph response" | エンドポイントが RGW Admin Ops API ではありません | ウェブページではなく、RGWを指定してください。 | | 「販売を有効にする前に接続テストが成功する必要があります」 | 正常な **Check** を行う前に販売を有効にしました | **Check** を実行してから、販売を有効にしてください。 | | 「エンドポイントの新しいキーはすべて必須です」 | 両方のキーを指定せずにエンドポイントが変更されました | アクセスキーとシークレットキーを同時に入力してください。 | | 「バックエンドに既にリソースがアタッチされています。ゾーンやエンドポイントを変更するには新しいバックエンドを作成してください」 | このバックエンドにアカウントが存在します | 新しいバックエンドを作成してください。 | | 「S3サービスを持つマスターゾーンを選択してください」 | ゾーンがマスターゾーンではないか、S3サービスがありません | ゾーンの **Object Storage (S3)** にチェックを入れてください。 | | "Invalid region" | リージョンに文字、数字、 `-`、 `_` 以外の文字が含まれています | `default` または RGW のゾーンカープ名を使用してください。 | | 「Cephの使用量サマリーが見つからないため、課金されません」 | 使用状況ログが無効になっています | `rgw_enable_usage_log` を有効にしてください。 | --- # Kubernetesとプライベートクラウド {#kubernetes-and-private-cloud} > **管理画面での場所:** Kubernetes: Infrastructure › Cloud provider › CloudStack › Kubernetes (CKS) (`/infra/cloudstack?tab=k8s`)、続いて Services › Kubernetes (Overview, Clusters, Versions, Policy)。プライベートクラウド: Services › Private Cloud (Overview `/vpc`、 VPC `/vpc/list`、 Plans & pricing `/vpc/plans`)。System › Admin › License & updates から両方のモジュールを有効にします。 ## 動作内容 {#what-it-does} - **Kubernetes。** お客様はCloudStack Kubernetes Service (CKS)を使用して、CloudStack上にマネージドKubernetesクラスターを作成できます。コントロールプレーンは無料ですが、**ワーカー**ノードに対して料金が発生します。NexCMPはクラスターごとに個別のネットワークとパブリックIPを作成し、お客様ごとのクラスターを分離します。 - **プライベートクラウド。** お客様は、ルーター、サブネット(ティア)、ファイヤーウォールルール(ネットワークACL)、仮想マシンを含むプライベートネットワーク(CloudStack VPC)を利用できます。専用かつ無制限の速度(例: 50、100、500 Mbps、1、3 Gbps)を持つ**帯域幅プラン**で販売されます。既定では、お客様ごとに1つのVPCを持つことができます。 どちらも [CloudStack](https://nexcmp.com/ja/docs/infrastructure/cloudstack/) を基盤として構築されており、同じ接続を介してAPIを使用します。 ## 要件 {#requirements} ### Kubernetes {#kubernetes} | 項目 | 要件 | |---|---| | CloudStack | 4.23(テスト済み)。CKSを**有効**にする必要があります(`cloud.kubernetes.service.enabled = true`)。 | | アカウント | お客様専用ドメインの **Domain Admin** アカウント。これにより、NexCMP は顧客ごとに CloudStack プロジェクトを作成し、その中のリソース制限を管理できます。[CloudStack](https://nexcmp.com/ja/docs/infrastructure/cloudstack/#create-a-dedicated-account-and-api-key) を参照してください。 | | `endpoint.url` | CloudStack のグローバル設定は、クラスター内の仮想マシンから到達可能な管理 API を指している必要があります。NexCMP は値とエンドポイントのチェック結果を表示します。 | | バージョン | バイナリ ISO を持ち、状態が **Enabled** である Kubernetes サポートバージョンエントリが少なくとも 1 つ必要です。サポート終了 (EOL) を迎えたバージョンを販売することはできません。 | | コントロールプレーンのオファリング | アカウントに表示される、**厳密に 2 vCPU、2048 MB RAM、CPU キャップ** (`limitcpuuse = true`) を備えた無料サービスオファリング。サーバーはこれ以外を `cp_offering_invalid` で拒否します。 | | ネットワーク | 有効化されている CKS 対応の単一ネットワークオファリング。 | | IP | 販売可能な範囲内の無料パブリック IPv4 アドレス。各クラスターが 1 つ使用します。 | | 容量 | コントロールプレーンと小規模なルーター仮想マシン用に、クラスターあたり 2 〜 4 GB の RAM が必要です。容量タブを確認してください。 | ### プライベートクラウド {#private-cloud} | 項目 | 要件 | |---|---| | CloudStack | 4.23 (テスト済み)、VPC 有効。 | | VPC オファリング | 1 つの VPC オファリング。デュアルスタックオファリングを使用すると、各ティアに IPv6 の /64 も割り当てられます。 | | ティアネットワークオファリング | **帯域幅プランごとに 1 つのネットワークオファリング**を VPC 用に作成し、**ネットワークレート** (Mbps) をプランの値に合わせます。さらに、未払いで VPC がロックされたときに適用される **1 Mbps** の**ロックされた**オファリングを 1 つ作成します。 | | アカウント | 専用アカウント (Domain Admin を推奨)。VPC ネットワークはプロジェクト内ではなく、アカウント内に保持されます。 | | IP | 無料パブリック IPv4 アドレス (各 VPC がソース NAT に 1 つ使用します)。 | | アドレス空間 | 各 VPC は `10.128.0.0/9` から /16 を受け取ります。ご自身のネットワークではその範囲を使用しないでください。 | | 依存関係 | CloudStack 接続済み。モジュールは **Private Cloud** です。 | ## インフラストラクチャの準備 {#prepare-the-infrastructure} ### Kubernetes: CKS の有効化とバージョンの追加 {#kubernetes-enable-cks-and-add-versions} 1. サービスを有効にしてエンドポイントを設定し、管理サーバーを再起動します。 ```bash cmk update configuration name=cloud.kubernetes.service.enabled value=true cmk update configuration name=endpoint.url value=https://cloudstack.example.com/client/api sudo systemctl restart cloudstack-management ``` `endpoint.url` はクラスターのコントローラーからコールバックされるため、クラスターの仮想マシンから到達可能なアドレスである必要があります。 2. CloudStack ソースツリーの `create-kubernetes-binaries-iso.sh` スクリプトを使用して、販売するバージョンの Kubernetes バイナリ ISO をビルドし、それを Web サーバーでホストして登録します。 ```bash cmk add kubernetessupportedversion name="Kubernetes 1.35.0" semanticversion=1.35.0 \ url=https://files.example.com/setup-v1.35.0-calico-amd64.iso zoneid= \ mincpunumber=2 minmemory=2048 cmk list kubernetessupportedversions filter=name,semanticversion,state,isostate ``` ISO の状態が **Ready** になり、バージョンが **Enabled** になるのを待ちます。 3. NexCMP ドメインに限定して、コントロールプレーンオファリングを作成します。 ```bash cmk create serviceoffering name=K8S-CP-2-2 displaytext="Kubernetes control plane" \ cpunumber=2 cpuspeed=1000 memory=2048 limitcpuuse=true offerha=false domainid= ``` 4. CKS ネットワークオファリングが有効になっていることを確認します。 ```bash cmk list networkofferings state=Enabled forvpc=false filter=id,name ``` ### プライベートクラウド: オファリングの作成 {#private-cloud-create-the-offerings} CloudStack UI (**Service Offerings › Network Offerings › Add network offering**) または `cmk` を使用します: 1. 現在の状況を一覧表示します: ```bash cmk list vpcofferings filter=id,name,state cmk list networkofferings forvpc=true filter=id,name,networkrate,state ``` 2. 有効な VPC オファリングを使用します (IPv6 が必要な場合はデュアルスタック)。新しいものが必要な場合は、CloudStack のデフォルトの VPC オファリングを複製して有効化します。 3. 販売する**各**帯域幅プランに対して、**VPC 用**のネットワークオファリングを作成し (デフォルトの "isolated network offering for VPC networks" を複製)、**Network rate (Mb/s)** をプランの速度 (`50`、`100`、`500`、`1000`、`3000`) に設定します。各オファリングを有効にします。 4. ロックされた VPC 用に、**ネットワークレート 1** (`VPC-LOCKED-1M`) を持つオファリングをもう 1 つ作成します。顧客は引き続き SSH でサーバーにアクセスできますが、速度は制限されます。 5. すべての提供物のUUIDを控えておきます。次のセクションでNexCMPに入力する必要があります。 ::: warning 設定されている提供物IDがクラウド内に存在しません プライベートクラウドのフォームには、別のCloudStack環境に属する提供物UUIDがあらかじめ入力されています。最初のVPCの注文が失敗しないよう、**すべて**ご自身のUUIDに置き換えてください。 ::: ## NexCMP での接続 {#connect-in-nexcmp} ### Kubernetes {#kubernetes-1} 1. **Infrastructure › Cloud provider › CloudStack**を開き、**Kubernetes (CKS)**タブを選択します。右側のカード**CKS status on CloudStack (read-only)**には、**Endpoint check**、CKSネットワークオファリング、`kubernetesserviceenabled`、`endpoint.url`の設定、ISOとバージョンのリストが`cloud.kubernetes.*`表示されます。何か修正した後は**Recheck**をクリックします。 2. **Sales config**で、**Control plane Offering**を選択し(2 vCPU / 2048 MB / CPU上限を満たしていない場合は警告が表示されます)、**Max workers per cluster**を設定し(1から9まで:CKSではコントロールノードを含めて10ノードまで許可されています)、**Enable CKS for this backend**のスイッチをオンにして**Save**をクリックします。提供物が選択されるまで、スイッチは無効のままになります。 ![コントロールプレーンの提供物が選択され、CKSステータスカードが表示されたKubernetes (CKS) タブ](https://nexcmp.com/ja/docs/images/infrastructure/kubernetes-and-private-cloud-01-cks.webp) 3. **Services › Kubernetes › Versions**を開き、**Sync from CloudStack**をクリックします。販売するバージョンの**Available for new clusters**スイッチをオンにし、デフォルトを設定して、必要に応じて**End of life (EOL)**の日付を設定します。 4. **Services › Kubernetes › Policy**を開きます。**Worker plans**で、**Plan code**(A〜Z、0〜9、ハイフン、最大16文字)を指定してプランを追加します。**NVMe per worker (GB)**、**Min and max workers**、およびクラスタの制限(アカウントごとのアクティブクラスタ数、24時間あたりの作成数、グローバル上限、同時CKS操作数)を設定します。その後、**Sell Kubernetes (CKS)**スイッチをオンにします。少なくとも1つのプランを販売中に維持する必要があります。 ![ワーカープランと販売スイッチが表示されたKubernetesポリシー](https://nexcmp.com/ja/docs/images/infrastructure/kubernetes-and-private-cloud-03-policy.webp) ### プライベートクラウド {#private-cloud-1} 1. **Services › Private Cloud**(概要)を開きます。ポリシーカードで、**VPC offering**と**Locked offering tier**をご自身のUUIDに置き換えます。制限(アカウントごとのVPC数、ティア、VPCごとのVMおよびACLルール数、作成に必要なプラン料金の時間単位の残高、24時間あたりのプラン変更数、緊急停止の場合は0とする同時操作数)とDNSサーバーを確認します。**Save**をクリックします(理由の入力が求められます)。 ![VPC提供物とロックされた提供物のフィールドが表示されたプライベートクラウドの概要](https://nexcmp.com/ja/docs/images/infrastructure/kubernetes-and-private-cloud-04-vpc-policy.webp) 2. **Services › Private Cloud › Plans & pricing**を開きます。各プランの**Edit**をクリックし、**VND price per month**、**On sale**、およびネットワーク速度がプランのMbpsと一致する**CloudStack tier offering**のUUIDを設定します。行にはフル稼働時のコストと利益が表示されるため、どのプランがコストを下回っているかを確認できます。 ![プライベートクラウドの帯域幅プランのプラン編集ダイアログ](https://nexcmp.com/ja/docs/images/infrastructure/kubernetes-and-private-cloud-05-vpc-plan.webp) 3. **Sell Private Cloud**スイッチをオンにします。最初に動作確認を行うには、**Beta accounts**にテスト用のアカウントIDを追加します。これらのアカウントは、販売スイッチがオフの間でもサービスを利用できます。 ## 確認 {#verify} 1. Kubernetes:ステータスカードに`kubernetesserviceenabled: true`、正常なエンドポイントチェック、および有効化されたバージョンが表示されます。顧客として1ワーカーのテスト用クラスタを作成すると、実行状態になり、`kubectl get nodes`で準備完了状態が表示されるはずです。その後削除してください。ネットワークとIPはプールに戻ります。 2. プライベートクラウド:テスト顧客として最小のプランでVPCを作成します。VPCがアクティブになり、ティアにサブネットが割り当てられ、ティア内のVMがVPCルーター経由でインターネットに到達し、より大きなプランへの**Change plan**が接続を切断することなく約20秒以内に反映されます。 ## 制限と注意点 {#limits-and-notes} - Kubernetes:ワーカーはVMと同様にプラン価格で課金され、VMの制限においてVMとしてカウントされます。CKSの10ノード制限のため、クラスタには最大9つのワーカーを持たせることができます。 - Kubernetes:クラスタのコントロールプレーン、ルーター、パブリックIPは顧客にとって無料であり、そのコストはお客様の負担となります。 - プライベートクラウド:すべてのプランが**従量制ではありません(unmetered)**。フォーム内の価格は月額ベトナムドンです。コスト列にはお客様のものではない参考価格が使用されているため、ご自身の数値を使用してください。 - ロックされたVPCは1 Mbpsに制限され、課金されず、自動的に削除されません。 - プライベートクラウドでは、冗長ペアではなくVPCごとに1つのルーターを使用します。そのホストが障害を起こした場合、CloudStack数分で再構築します。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | `cp_offering_invalid` / 「このプランは 2 vCPU / 2048 MB / limitcpuuse ではありません」 | コントロールプレーンのプランのサイズが異なるか、CPU制限がありません | 手順3のようにプランを作成し、再度選択してください。 | | **Enable CKS** スイッチが無効になっています | コントロールプレーンのプランが選択されていません | 最初にいずれかを選択してください。 | | `kubernetesserviceenabled: false` | CloudStackでCKSが無効になっています | 有効にして管理サーバーを再起動してください。 | | エンドポイントのチェックに失敗しました | クラスターVMから `endpoint.url` にアクセスできません | アクセス可能なURLを設定し、管理サーバーを再起動して、**Recheck** をクリックします。 | | 「EOL: 販売を有効にできません」 | バージョンのサポート終了日(EOL)が過ぎています | 新しいバージョンを登録してください。 | | 「バージョンがありません: Sync from CloudStack をクリックしてください」 | Kubernetesのバージョンが登録されていません | バージョンを登録して同期してください。 | | 「CKSバックエンドがOFFです: 販売フラグが有効でも、お客様はクラスターを作成できません」 | 販売スイッチはオンですが、CKSバックエンドがオフになっています | CloudStackタブでCKSを有効にしてください。 | | 「少なくとも1つのプランを販売中にする必要があります」 | 最後のワーカープランが削除されました | 少なくとも1つのプランを維持するか、Kubernetesの販売をオフにしてください。 | | クラスターの作成がスタックしています | 容量が不足しているか、ISOがありません | 容量タブとバージョンのISO状態を確認してください。 | | 新しいVPCが最初のステップで失敗します | VPCオファリングまたはティアオファリングのIDが無効です | すべてのオファリングUUIDをCloudStackのものに置き換えてください。 | | 「cs_offering_id は UUID である必要があります」 | オファリングIDがUUIDではありません | `cmk list networkofferings` からIDを貼り付けてください。 | | プランの変更に失敗しました | 新しいティアオファリングが存在しないか、ネットワークレートが正しくありません | オファリングのUUIDとネットワークレートを確認してください。 | --- # プランと価格 {#plans-and-pricing} > **管理画面での場所:** Services › Virtual Machines › Plans & pricing (`/vm/catalog`)。Plan、Custom plan、Cycle、Offering CloudStack の各タブがあります。テンプレートは別のページの Services › Virtual Machines › Template (`/vm/templates`) にあります。 ## 動作内容 {#what-it-does} **プラン**とは、お客様が購入できるサイズ(vCPU、RAM、ルートディスク)と価格であり、ゾーンごとに、1つのソース(CloudStackまたはProxmox VEクラスター)から提供されます。お客様は、プラン、オペレーティングシステム、および**請求サイクル**(時間単位、月単位、または長期のプリペイド期間)を選択します。プランは、カスタマーポータル、API、およびリセラーのサイトで販売されます。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | Source | CloudStack接続済み(プランがCloudStackサービスオファリングを指している)、またはゾーンにアタッチされたProxmox VEクラスター。[CloudStack](https://nexcmp.com/ja/docs/infrastructure/cloudstack/) および [Proxmox VE](https://nexcmp.com/ja/docs/infrastructure/proxmox/) を参照してください。 | | ゾーン | 仮想マシンを販売するゾーン。[Zones](https://nexcmp.com/ja/docs/infrastructure/zones/) を参照してください。 | | Templates | 有効で準備完了状態のテンプレートが少なくとも1つあること。[OS templates](https://nexcmp.com/ja/docs/infrastructure/templates/) を参照してください。 | | 為替レート | VNDで価格を入力する場合のみ。[Currency and exchange rates](https://nexcmp.com/ja/docs/catalog/currency-and-exchange-rates/) を参照してください。 | | 権限 | 管理者。価格を変更するたびに理由が求められます。 | ## インフラストラクチャの準備 {#prepare-the-infrastructure} - **CloudStack:**販売したいサービスオファリング(パブリック、またはNexCMPドメインと共有のもの)を作成します。プランは1つのオファリングを指定します。**Offering CloudStack**タブには、CloudStackからライブで取得したオファリングおよびディスクオファリングの一覧が表示されます(60秒間キャッシュされます)。プランテーブルが空の場合、ワーカーは実際のオファリングから6つのプランを自動的に作成します。 - **Proxmox VE:**Proxmox側での事前準備は不要で、プラン自体がCPU、RAM、ディスクを持ちます。ディスクはテンプレートのディスクより小さくしてはなりません。 ## NexCMP での接続 {#connect-in-nexcmp} ### 価格の保存方法 {#how-prices-are-stored} NexCMPでは、すべての価格を**1時間あたりのマイクロドル**(µ$/hour。1 µ$は1/1,000,000 USD)として保存します。お好みの単位で価格を入力すると、フォームによって自動的に変換されます: | 単位 | 備考 | |---|---| | USD / 時間 (小数点以下6桁) | そのまま保存されます。 | | USD / month | 月あたりの時間数設定(730)で割られます。 | | VND / month | 現在の為替レートで一度変換され、µ$/hourとして保存されます。レートが存在する場合のみ表示されます。 | フォームには、µ$/hour、USD/hour、月額料金、およびすべての課金サイクルの結果が表示されます。**月額料金 = 時間単価 × 730** であり、より長いサイクルは **月額料金 × 月数 × (1 - 割引率)** となります。 ### プランの追加 {#add-a-plan} 1. **Services › Virtual Machines › Plans & pricing**を開き、**Add plan**をクリックします。 2. フォームに以下を入力します: | 項目 | 入力例 | |---|---| | Plan name | `VM-2-4` | | Slug | 空欄:名称から自動生成されます | | ゾーン | デフォルトのゾーン | | Infrastructure source | CloudStackの場合は空欄、またはProxmoxクラスターを指定 | | サービス提供 CloudStack (ライブ) | 1つ選択(CloudStackの場合のみ表示) | | CPU (コア)、RAM (MB)、ルートディスク (GB) | `2`, `4096`, `40` | | Disk offering | カスタムのルートディスクサイズを指定する場合に任意で設定 | | Enter price by / Price | `USD / month`, `12` | | Short description | `2 vCPU, 4 GB RAM, 40 GB NVMe` | | 順序 | `10` | | 有効 | 有効:お客様が購入可能 | | Visibility | Visible in catalog | | Price change reason | `initial price` | 3. **OK**をクリックします。テーブルにプランが追加され、時間単価、月額料金、および有効化された各サイクルの価格が表示されます。 ![時間単位、月単位、サイクル単位の価格が表示されたプランテーブル](https://nexcmp.com/ja/docs/images/catalog/plans-02-list.webp) ### 課金サイクル {#billing-cycles} **Cycle**タブを開いて、お客様が選択できるサイクルとそれぞれの割引率を設定します。 | サイクル | デフォルト | 備考 | |---|---|---| | Hourly | 常時オン | 1時間ごとに課金されます。 | | Monthly | 有効, 0% | | | 1 year | 有効, 10% | | | 2 years | 有効, 15% | | | 3 years | 有効, 20% | | 請求サイクルは名前の変更、割引率(0〜90%)の変更、有効/無効の切り替えが可能です。変更は保存した**後**に購入または更新されたVMに適用され、稼働中のVMはロックされた価格を維持します。 ![請求サイクルごとの割引が表示された「Cycle」タブ](https://nexcmp.com/ja/docs/images/catalog/plans-03-cycles.webp) ### 基準プランを設定して他のプランを導出する {#set-a-base-plan-and-derive-the-others} **Set base plan + derive other plans** は、1つの価格からテーブル全体の価格を再計算します。ベースプランとその価格を選択し、プラン間の**current price ratios**(現在の価格比率)を維持するか、**component prices**(コンポーネント価格: vCPU、RAM 1GB、NVMe 1GBあたり µ$/時間、オプションで0〜50%のバンドル割引)から算出します。プレビューテーブルに書き込み前の新旧の価格が表示されます。**Apply** をクリックし、理由を入力します。 新しい価格を適用した場合、**時間単位(hourly)**で稼働中のVMは次の請求時間から**安い**価格が適用され、プリペイドのVMは更新時に適用されます。価格が**上昇**する場合、稼働中のVMは従来の価格を維持します。 ### カスタムプラン {#custom-plans} **Custom plan**タブでは、顧客自身がvCPU、RAM、NVMeのサイズを自由に選択できるように設定できます。1 vCPU、1 GBのRAM、1 GBのNVMeあたりの時間単位単価(パーセンテージ割引から算出する場合は空欄のまま)、それぞれの最小値・最大値・ステップ、および適用する請求サイクルを設定します。**カスタム**プランは、同サイズの固定プランよりも高価格にする必要があります。そうしないと顧客が固定プランをスキップしてしまうため、このページではカスタムプランの方が安くなっている行にフラグを表示します。販売するには**Enable custom plans for customers**をオンにします。オフにすると、ポータルには「Coming soon」と表示されます。カスタムVMごとに独自の非表示プラン行が作成され、そのVMが存在する間はそれらの行を編集・削除できません。 ### 変更、非表示、複製、削除 {#change-hide-clone-delete} | アクション | 動作内容 | |---|---| | **Edit** | 名前、説明、順序、価格、有効状態、表示状態を変更します。 | | **On/Off** | **Off**: お客様は購入できなくなります。稼働中のVMには影響しません。 | | **Hide / Show** | 非表示のプランはカタログには表示されませんが、既存のVMでは維持され、管理者が割り当てることができます。 | | **Clone** | 新しいソース、サイズ、または価格を指定して同じゾーンに新しいプランを作成し、必要に応じて古いプランを非表示にします。同じ構成をCloudStackとProxmoxの両方で販売するには、プランを複製して別のソースを選択します。 | | **Move up/down** | 順序を変更します。 | | **Delete** | 販売およびテーブルからプランを削除します。すでに使用しているVMではそのまま維持されます。 | ::: warning 使用中のプランはロックされます プランにVMが紐づくと、実行中のVMが勝手に変更されないよう、その**zone、offering、CPU、RAM、disk、source**がロックされます。新しい構成を作成するには**Clone**を使用してください。古いプランには引き続きVMが保持されます。 ::: ## 確認 {#verify} 1. 想定される時間単位および月額価格とともに、プランがテーブルに表示されます。 2. カスタマーポータルで注文を開始すると、ゾーンにプランが表示され、サイクル価格が**Cycle**タブと一致します。 3. テスト注文を行い、表示された価格に対してウォレットの引き落とし額を確認し、VMを削除します。 ## 制限と注意点 {#limits-and-notes} - 1つのプランは**1つ**のゾーンと**1つ**のソースに所属します。 - 価格はµ$/時間で保存されます。表示されるVND価格は**VND rounding step**(通貨ページを参照)によって算出および丸められます。ウォレットは常にUSDです。 - リセラーには、定価から算出された卸売価格と小売価格が適用されます。既存プランの価格を変更しても、構成を変更した複製先のプランにカスタムリセラー価格はコピーされません。 - カスタムプランの最小、最大、ステップの制限は、CloudStack独自の制限に対してチェックされます。CloudStackの`storage.max.volume.size`を超える最大ディスクを設定すると、デプロイが失敗して返金されます。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | 「Plan name required」/「Service offering required」のエラーが表示される | フィールドの未入力 | 名前を入力します。CloudStackの場合はサービスオファリングを選択します。 | | 「CPU/RAM/ディスクは > 0 である必要があります」 | サイズが空であるか、0になっています | 3つすべてを入力してください。 | | 「無効な価格です (µ$/hr は 1 … 100,000,000 である必要があります)」 | 価格が許容範囲外です | 単位と金額を確認してください。 | | 「価格変更には理由が必要です」 | 編集時に理由が入力されていません | 理由を入力してください(3文字以上)。 | | 「オファリング "X" は 4c/8192 ですが、プランでは 2c/4096 が指定されています。CloudStack はオファリングに従ってプロプロビジョニングします。保存しますか?」 | プランの数値がオファリングの数値と一致していません | 一致させるか、確認してCloudStackのサイズを維持します。 | | 「CloudStack からオファリングを取得できませんでした」 | 接続がダウンしているか、キーに権限がありません | [CloudStack](https://nexcmp.com/ja/docs/infrastructure/cloudstack/)を参照してください。 | | 「テンプレートが CloudStack で準備できていません。デプロイが失敗します。このまま有効化しますか?」 | 未完了のテンプレートを有効にしました | テンプレートの準備ができるまで待ちます。 | | プランを編集できません("has VMs - locked") | VMがこのプランを使用しています | クローンを作成します。 | | 顧客にプランが表示されません | オフ、非表示、またはゾーンの準備ができていません | **Active**、**Visibility**、およびゾーンタグを確認してください。[Zones](https://nexcmp.com/ja/docs/infrastructure/zones/)を参照してください。 | | 「請求サイクルを 1 つ以上選択してください」 | カスタムプランでサイクルが選択されていません | 1つ以上チェックしてください。 | | 「バンドル割引は 0~50% である必要があります」 | 範囲外です | 0から50の間を使用してください。 | | VND価格オプションがありません | まだ為替レートがありません | まずレートを更新してください。 | --- # 帯域幅の割り当てとアドオン {#bandwidth-quotas-and-add-ons} > **管理画面の場所:** Services › Bandwidth: Summary (`/bandwidth`)、Add-on (`/bandwidth/addons`)、Quotas, pricing & policy (`/bandwidth/policy`)。モジュールの切り替えは System › Admin › License & updates にあります。 ## 動作内容 {#what-it-does} 帯域幅機能により、すべての従量制サービスに月間トラフィックの**割り当て(クォータ)**が設定されます。NexCMPは使用量を測定し、80%および100%に達した際に顧客に警告を発し、クォータを超過した場合は**超過ポリシー**に従って処理を行います。顧客はウォレットから追加テラバイトの**アドオン**を購入できるほか、手動でアドオンを無料で付与することも可能です。 | サービス | 割り当て | |---|---| | 仮想マシン | VMあたり月額(デフォルトは2048 GB、つまり 2 TB) | | Kubernetes | VMの割り当てにワーカー数を乗じたもの | | Object Storage | 顧客あたり月間のダウンロードトラフィック(デフォルトは100 GB)。これを超えると通常の従量課金価格が適用されます | | VPN | プランの割り当てを維持します。VPNページで帯域幅をアップグレードしてください | | プライベートクラウド | **無制限** | ## 要件 {#requirements} | 項目 | 要件 | |---|---| | モジュール | **Bandwidth** はデフォルトで有効です。非表示にするには「License & updates」で無効にしてください。 | | 測定ソース | デフォルトのソースである **CloudStack VM statistics**。CloudStackでのVM統計情報の収集を有効に維持してください。デフォルトの保持期間である720分で十分です。 | | Proxmox VE | Proxmox VE上のVMは**測定されません**。 | | 為替レート | アドオンの価格はVNDで入力します。[Currency and exchange rates](https://nexcmp.com/ja/docs/catalog/currency-and-exchange-rates/)を参照してください。 | | 依存関係 | VMおよびKubernetesのトラフィックには [CloudStack](https://nexcmp.com/ja/docs/infrastructure/cloudstack/)、ストレージのダウンロードには [S3](https://nexcmp.com/ja/docs/infrastructure/s3/)。 | ## インフラストラクチャの準備 {#prepare-the-infrastructure} CloudStackが接続されていること以外に必要な要件はありません。NexCMPは`listVirtualMachinesUsageHistory`をアカウント内のすべてのVMについて、5分ごとに、最大二時間の枠で一度の呼び出しにより読み取ります。各サンプルは一分間を対象とし、**積算**されます。データが届くまでの時間を考慮し、三分前のサンプルが取得されます。CloudStackの保持期間(約12時間)を超えるギャップはスキップされ、記録されます。 ::: info 数値の意味 使用量は各VMのネットワークインターフェイスでカウントされるため、インターネットへのトラフィックだけでなく、VM間のトラフィックも含まれます。エッジルーターでカウントされる値よりも少し高くなる場合があります。 ::: ## NexCMP での接続 {#connect-in-nexcmp} 1. **Services › Bandwidth › Quotas, pricing & policy**を開きます。 2. 値を設定し、**Save**をクリックします。理由の入力が求められ、記録されます。ワーカーは約30秒以内に変更を適用します。 | 項目 | デフォルト | 意味 | |---|---|---| | Bandwidthを有効にする(お客様メニューおよびアドオンの購入) | on | モジュールの販売側のスイッチです。 | | VM、GB/月(Kubernetes = この値 × ワーカー数) | 2048 | 期間あたりのVMごとのクォータ。 | | S3、顧客あたりのGBダウンロード/月 | 100 | これを超えると、通常のS3従量制課金が適用されます。 | | クォータの方向(VM、Kubernetes) | In + out | または **Outbound only**。 | | +1 TBの価格(VND) | 100,000 | 見積レートでセントに換算されます。 | | 1回あたりの上限(TB) | 50 | | | オーバーテージポリシー | suspend | **notify**、**throttle**、または **suspend**(下記)。 | | 実際の停止を強制する日時 | 移行日 + 24時間 | この日付までは何も停止されません。顧客への警告のみが行われます。 | | スロットルのレート制限(Mbps) | | スロットルでのみ使用されます。 | ![帯域幅ポリシー: デフォルトクォータ、アドオン価格、超過ポリシー](https://nexcmp.com/ja/docs/images/catalog/bandwidth-01-policy.webp) ### オーバーテージポリシー {#overage-policies} | ポリシー | サービスが100%を超えた場合の動作 | |---|---| | **notify** | 顧客に通知されます。それ以外の動作はありません。 | | **throttle** | 現在はnotifyと同様です。このリリースでは速度制限機能は接続されていません。 | | **suspend**(デフォルト) | 顧客がアドオンを購入するか次の期間が始まるまで、VM、クラスター、またはS3アカウントが停止されます。**suspend-from**の日付以降のみ有効です。 | 80%および100%のアラート(ベルおよびメール)は、閾値、期間、サービスごとに1回、常に実行されます。帯域幅制限により停止されたサービスを、クォータを超過した状態のままロック解除した場合、次回のチェック(5分以内)で再び停止されます。稼働し続けるには、**アドオンを付与**してください。 ### 利用状況の確認とアドオンの付与 {#watch-usage-and-grant-add-ons} **Services › Bandwidth › Summary**を開きます。現在の期間における各サービスの利用状況、アドオンを含む割当量、残り割当量、80%および100%のマークが一覧表示されます。KPIタイルには、サービス数、過去30日間に販売されたアドオン数、コレクターの状態(実行中、カーソル)が表示されます。**Daily**テーブルには、現在の期間の日ごとのデータが表示されます。 ![コレクターの状態とサービスごとの利用状況を示す Bandwidth Summary](https://nexcmp.com/ja/docs/images/catalog/bandwidth-02-summary.webp) お客様に余裕を持たせるには、サービスの**Grant**を使用します(追加料金なしで1TB単位のアドオンを付与できます)。購入と付与の履歴(新しい順、タイプフィルター付き)を確認するには、**Add-on**を開きます。 ![購入および無料付与を表示するアドオン履歴](https://nexcmp.com/ja/docs/images/catalog/bandwidth-03-addons.webp) ### お客様に表示される画面 {#what-customers-see} カスタマーポータルには**Bandwidth**メニューが追加され、利用状況、残り割当量の確認や、ウォレットから支払う **buy +1 TB** アクション(1回あたりの購入上限まで)を行えます。アドオンは現在の期間有効です。 ## 確認 {#verify} 1. **Summary**上のコレクターが稼働しており、そのカーソルが数分ごとに前進していること。 2. トラフィックのあるVMは約10〜15分後に利用状況を表示します。 3. アラートを確認するには、**テスト**環境でVMの割当量を数GBに下げてトラフィックを発生させます。割当量はすべてのVMに適用されるため、本番環境では行わないでください。 ## 制限と注意点 {#limits-and-notes} - 利用状況は期間(1ヶ月)ごとにカウントされます。アドオンと割当量は現在の期間に適用されます。 - "Enforce actual suspend from"は、モジュールが最初に有効化された瞬間に顧客が停止されるのを防ぎます。 - このリリースでは、スロットルポリシーは通知のみを行います。 - 割当量の変更は、販売店サイトを含めすべてのサイトに適用されます。販売店の小売および卸売アドオン価格は、その割引またはマークアップに従います。 - **Dedicated servers**の帯域幅は別問題となります。[Dedicated servers](https://nexcmp.com/ja/docs/infrastructure/dedicated/)を参照してください。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | 実行中のVMの利用状況がゼロのままになる | ワーカーが停止している、CloudStackが切断されている、またはVM統計が無効になっている | `sudo nexcmp status`を確認し、**Test connection**を[CloudStack](https://nexcmp.com/ja/docs/infrastructure/cloudstack/)で実行します。CloudStack VM統計を有効にしてください。 | | 利用状況にデータ抜けがある | CloudStackの保持期間を超過したか、ワーカーが約12時間以上停止していた | 復元できません。データ抜けが記録されます。 | | 利用状況が予想よりわずかに高い | VM間のトラフィックやその他のインターフェーストラフィックが含まれている | 仕様どおりです。お客様にご説明ください。 | | ロックを解除したにもかかわらず、停止されたサービスが停止状態に戻る | 割当量を超過した状態のままである | アドオンを付与するか、割当量を引き上げます。 | | ポリシーが **suspend** であるにもかかわらず何も停止されない | 停止開始日が将来に設定されている | 現在時刻に設定します(有効になるとページに "ACTIVE" と表示されます)。 | | 「bw_over_policy must be notify, throttle or suspend」のエラーが表示される | API経由で無効なポリシーが送信された | 3つの値のいずれかを使用します。 | | Proxmox VMの利用状況が表示されない | 計測対象になっていない | 仕様どおりです。 | | 顧客がアドオンを購入できない | 帯域幅が無効になっているか、ウォレットが空である | スイッチとウォレットを確認します。 | --- # 通貨と為替レート {#currency-and-exchange-rates} > **管理画面での場所:** 為替レートは Finance › Payment channels › Exchange rates(`/payments/fx`)。System › Settings › Brand(`/settings/branding`)は**Site currency**スイッチの設定用です。 ## 動作内容 {#what-it-does} NexCMPではウォレットおよび請求書をUSDで管理します。VMプランの価格は1時間あたりのマイクロドル単位で保存されます。表示通貨を使用すると、お客様は公開レートに基づいて自国通貨でUSD金額を確認できますが、ウォレット残高は変更されません。帯域幅アドオン、S3、Private Cloud、VND価格設定を維持している既存のBare Metalプランなど、一部のサービスではVNDで入力された価格を受け付けます。Sepay経由の銀行振込はVNDで支払われます。 レートは**管理者によって公開**されます。自動での更新は行われないため、保存したレートは更新ボタンを押すまでそのまま維持されます。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | インターネットアクセス | パネルサーバーは、`open.er-api.com`(USD/VND向け)および`api.frankfurter.dev`(その他の通貨向け)と通信できる必要があります(**Update exchange rates**を押下した際)。 | | 権限 | 変更を行う管理者は、変更ごとに理由の入力が求められます。 | | 依存関係 | なし。[Plans](https://nexcmp.com/ja/docs/catalog/plans/)、[Bandwidth](https://nexcmp.com/ja/docs/catalog/bandwidth/)、[S3](https://nexcmp.com/ja/docs/infrastructure/s3/)、および VND の銀行振込でこのレートが使用されます。 | ## インフラストラクチャの準備 {#prepare-the-infrastructure} 不要です。サーバーがアウトバウンドトラフィックを制限している場合は、上記の 2 つのサービスへの HTTPS 通信を許可してください。 ## NexCMP での接続 {#connect-in-nexcmp} ### 1. サイト通貨の選択 {#_1-choose-the-site-currency} **System › Settings › Brand** を開き、**Site currency** を設定します: | 選択肢 | お客様に表示される画面 | |---|---| | **Language-based (auto)**(新規インストール時のデフォルト) | ポータルは言語に基づいて表示通貨を選択します(下の表を参照)。お客様は代わりに USD を選択することもできます。 | | **USD** | 料金と残高は USD のみ。通貨の切り替えや換算金額の表示はありません。 | | **VND** | レガシー設定。Auto と同じ言語ベースの表示ルールに従います。 | 保存します。お客様向けページは約 1 分以内に更新されます。 サイトがお客様の言語に従う場合: | 言語 | 表示通貨 | |---|---| | 英語 | USD | | ベトナム語 | VND | | 中国語(簡体字 / 繁体字) | CNY / TWD | | 日本語、韓国語 | JPY、KRW | | フランス語、ドイツ語、スペイン語、イタリア語 | EUR | | ポルトガル語、ロシア語 | BRL、RUB | | アラビア語、ヒンディー語 | SAR、INR | | インドネシア語、タイ語 | IDR、THB | レートが公開されていない通貨は提供されません。ポータルは USD にフォールバックします。 ### 2. レートの公開 {#_2-publish-the-rates} 1. **Finance › Payment channels › Exchange rates** を開きます。 2. **Currency by language** カードには、11 種類の表示通貨、1 USD あたりのレート、取得元(Frankfurter)、および最終更新時刻が一覧表示されます。**Update exchange rates** をクリックします。 このボタンは 1 回の操作で 2 つの処理を実行します。**USD/VND** の公開市場テーブルを読み取り、その他の 11 種類のレートを読み取ります。いずれかが保存される前に両方がチェックされます。一方が失敗した場合、変更は一切行われず、以前のレートが維持されます。 3. **Active exchange rate**カードには、現在適用されている USD/VND レート、そのソースタグ(public market または fixed)、マージン、およびタイムスタンプ付きの市場基準値が表示されます。 4. **Config**カード(理由を入力して保存): | 項目 | 意味 | 範囲 | |---|---|---| | Margin (bp, 100 = 1 %) | 市場参照レートに上乗せされます。実効レートは参照レートにマージンを加算し、切り上げたものになります。 | 0 ~ 1000 | | 固定レート(1 USDあたりのVND、0 = 市場レートに連動) | ご自身で設定するレートです。市場の数値を上書きします。 | 0または15,000 ~ 50,000 | | Jump threshold (bp) | 現在のレートとの差がこれを超える新しい市場レートは、確認するまで**保留**されます。 | 50 ~ 2000(デフォルトは500) | | VND rounding step | VNDの価格および銀行振込金額を丸めます。 | 1、100、1,000(デフォルト)、または10,000 | 5. 新しい市場レートがしきい値を超えて急変動した場合、**Pending exchange rate**カードが表示され、レートは**適用されません**。選択した基準値と照合した上で、**Apply this rate**をクリックしてください。 1 USDあたり15,000〜50,000 VNDの範囲外の市場レートは不当として却下されます。手動更新は5分間に1回に制限されているため、ボタンに待機を促すメッセージが表示される場合があります。 6. **Exchange rate history**テーブルには、取得または確定されたすべてのレートが、時刻、適用レート、市場参照値、ソース、適用されたかどうか、実行者、メモとともに一覧表示されます(保留された急変は**held**とマークされます)。 ## レートの使用方法 {#how-a-rate-is-used} | 場所 | ルール | |---|---| | ウォレットと請求書 | 米ドルセント。レートによって残高が変動することはありません。 | | VNDで入力されたVMプラン | 保存時の有効レートで**一度だけ**換算され、USDで保存されます。その後のレート変更によってそれらのVMプランが再価格設定されることはありません。 | | Sepay経由の銀行振込 | 顧客は`ceil(USD × rate)`を支払い、丸め単位に切り上げられます。USD/VNDレートが存在するまで、Sepayは**ブロック**されます。 | | Bare Metalプラン | 新規インストールでは直接USDを使用します。既存のVNDプランは価格単位を保持し、請求時にレートが必要です。[Dedicated servers](https://nexcmp.com/ja/docs/infrastructure/dedicated/)を参照してください。 | | VNDで入力されたその他の海外決済 | 最も近いセントに丸められます。 | | ポータルでの表示 | USDを表示通貨の公開レートで乗算し、言語に合わせてフォーマットします。 | ## 確認 {#verify} 1. **Active exchange rate**に、最近の「取得」時刻とともにUSD/VNDの値が表示されます。 2. グリッド**Currency by language**に空ではないレートが表示されます。 3. カスタマーポータルで言語をベトナム語(サイト通貨Auto)に切り替えると価格がドンで表示され、日本語に切り替えると円で表示されます。サイト通貨がUSDの場合、米ドルのみが表示されます。 4. プランフォーム(Plans & pricing)の**Enter price by**リストに**VND / month**が表示されます。 ## 制限と注意点 {#limits-and-notes} - 自動更新はありません。新しいレートが必要なときは**Update exchange rates**を押してください。レートが重要な場合はリマインダーを設定することをお勧めします。 - USD/VNDには公開市場レートが使用されます。これは銀行の売買気配値ではなく参考レートです。その他の表示通貨はFrankfurterから取得され、14日より古い日付または不完全なテーブルは却下されます。 - マージンと固定レートは USD/VND にのみ適用されます。11種類の表示通貨にはマージンは適用されません。 - お客様の言語ごとに1つの通貨が設定されます。言語を変更すると、お客様が同じ言語に対して USD を選択していない限り、その言語の通貨にリセットされます。 - リセラーサイトも同じレートに従います。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | 「新しい為替レートが許容閾値を超えて変動しました - 保留中、手動確認が必要です」 | 変動幅が閾値を超えています | 内容を確認して **Apply this rate** をクリックするか、閾値を変更してください。 | | 「サーバーが新しい為替レートを拒否しました」 | 市場数値が15,000〜50,000の範囲外であるか不正 | しばらく待ってからやり直すか、固定レートを設定してください。 | | 更新時に再試行前の待機を求められる | 更新頻度が高すぎます | しばらく待ってから再試行してください。 | | 「レートを取得できませんでした: …」 | パネルサーバーがレートサービスに接続できません | アウトバウンドの HTTPS を許可して再試行してください。 | | **Sepay blocked** タグ | USD/VND レートがまだ公開されていません | **Update exchange rates** をクリックするか、固定レートを設定してください。 | | ポータルに通貨がありません | レートが設定されていません | **Update exchange rates** をクリックしてください。 | | お客様に価格が USD でのみ表示される | サイトの通貨が USD であるか、レートがありません | **Site currency**をAutoに設定し、レートを公開します。 | | 「為替レート表が不完全です; 前回のレートを維持します」 | Frankfurter から返された通貨が 11 種類未満です | 後で再試行してください。何も変更されませんでした。 | | プランフォームに VND オプションがない | USD/VND レートがありません | 先に対象のレートを公開してください。 | --- # 決済チャネル {#payment-channels} > **管理画面の場所:** Finance › Payment channels (`/payments`)。スイッチと手数料: Finance › Payment channels › Fees & limits (`/payments/fees`)。 NexCMP は**プリペイド式の USD ウォレット**を使用します。お客様は決済チャネルを通じてウォレットに入金し、すべてのサービスはそのウォレットから支払われます。チャネルは、**有効**かつ**設定済み**の両方の条件を満たしている場合にのみ、お客様に表示されます。 ## 動作内容 {#what-it-does} 決済チャネルは、お客様の決済アカウント(Stripe、PayPal、Binance、ベトナムの銀行など)を顧客ウォレットに接続します。入金が確認されると、正確に1つのウォレットクレジットが作成されます。各クレジットにはゲートウェイの決済 ID が紐付けられているため、Webhook が重複して送信されても二重に入金されることはありません。このページでは、利用可能なチャネル、過去30日間の稼働状況、および対応が必要なチャネルを確認できます。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | 公開 HTTPS アドレス | ゲートウェイは `https:///v1/billing/...` に Webhook を送信するため、パネルは有効な TLS を使用してインターネットからアクセスできる必要があります([DNS and Cloudflare](https://nexcmp.com/ja/docs/getting-started/dns-and-cloudflare/) を参照してください)。 | | アカウント | 使用する各プロバイダーの独自のアカウント。資格情報は管理画面に入力され、再表示されることはありません(下4桁のみ表示されます)。 | | 管理者ロール | 管理者アカウント。 | | 依存関係 | なし。VN銀行チャネルには追加で[為替レート](https://nexcmp.com/ja/docs/catalog/currency-and-exchange-rates/)が必要です。 | ## チャネル {#the-channels} | チャネル | お客様の画面 | 設定場所 | 記事 | |---|---|---|---| | カード (Stripe) | カード入力フォーム、保存済みカード | Payment channels › Stripe | [Stripe](https://nexcmp.com/ja/docs/billing/stripe/) | | Apple Pay、Google Pay、Link | ウォレットボタン (Stripe Express Checkout) | Stripeおよびドメイン登録 | [Stripe](https://nexcmp.com/ja/docs/billing/stripe/#apple-pay-google-pay-and-link) | | Alipay | Alipayへリダイレクト (StripeによりJPYで課金) | Stripe、および手数料と制限 | [Stripe](https://nexcmp.com/ja/docs/billing/stripe/#alipay) | | PayPal | PayPalボタン、保存済みPayPalアカウント | Payment channels › PayPal | [PayPal](https://nexcmp.com/ja/docs/billing/paypal/) | | USDT | 入金用アドレスと正確な金額 | Payment channels › USDT | [USDT](https://nexcmp.com/ja/docs/billing/usdt/) | | VN銀行振込 | QRコードと振込詳細 (ベトナム語インターフェイスのみ) | Payment channels › VN bank transferで設定 | [Bank transfer (Vietnam)](https://nexcmp.com/ja/docs/billing/bank-transfer-vn/) | ## インフラストラクチャの準備 {#prepare-the-infrastructure} 不要です。すべて管理画面で設定され、サーバーへのインストールは必要ありません。 ## NexCMP での接続 {#connect-in-nexcmp} 1. **Finance › Payment channels** (`/payments`) を開きます。概要テーブルにすべてのチャネルとその状態が表示されます。 2. 各チャネルのタブ (**Stripe**、**PayPal**、**USDT**、**VN bank transfer**) を開き、対応する記事に従います。各タブの最後には **Save** ボタンがあり、利用可能な場合は **Test** ボタンもあります。 3. **Fees & limits** (`/payments/fees`) を開き、カード **Payment gateways & fees (wallet top-up)** を見つけて、スイッチでチャネルを有効にし、**Save channels & fees** をクリックします。 ![有効化、設定済み、および過去30日間の統計情報が表示された決済ゲートウェイ一覧のPayment channels概要](https://nexcmp.com/ja/docs/images/billing/payment-channels-01-overview.webp) ![チャネルスイッチと手数料フィールドが表示されたFees and limitsページ](https://nexcmp.com/ja/docs/images/billing/payment-channels-02-fees.webp) ### スイッチと手数料 (Fees & limits) {#switches-and-fees-fees-limits} | 設定 | デフォルト | 意味 | |---|---|---| | カード (Stripe) | On | 入金画面のカード入力フォーム。Stripeにシークレットキーが設定されるまで非表示になります。 | | Apple Pay、Google Pay、Link | On | ウォレットボタン。Stripeでドメインが検証された場合にのみ表示されます。 | | Alipay | オフ | StripeダッシュボードでAlipayのアクティベーションが必要です。 | | PayPal | オフ | PayPalが設定されている場合にのみ表示されます。 | | USDT (Binance) | オフ | 入金アドレスがBinanceで検証されるまで、スイッチはロックされています。 | | Stripe手数料 % / 固定 (セント) | 3.6 % および 0 | お客様への手数料表示と入金金額の計算に使用されます。実際のStripe料金体系に設定してください。 | | PayPal手数料 % / 固定 | 4.4 % および 30セント | PayPalの場合も同様です。 | | USDT手数料 % | 1 % | USDTの場合も同様です。 | | お客様がトップアップ手数料を負担 | オフ | **On**:お客様が金額+手数料を支払い、ウォレットには全額が入金されます。**Off**:手数料が差し引かれ、ウォレットには手数料を引いた金額が入金されます。 | お客様は支払いの前に必ず手数料と最終的なウォレットクレジットを確認できます。チャンネルを無効にするとボタンが非表示になり、サーバーは新しい支払いを `method_disabled` (HTTP 403) で拒否します。 ::: tip トップアップの制限 トップアップごとの最小金額と最大金額は同じページにあります — [Minimum top-up](https://nexcmp.com/ja/docs/billing/minimum-top-up/)をご覧ください。 ::: ## 確認 {#verify} 1. 概要テーブルでは、チャンネルに**Enabled**と**Configured**が表示されます。**Last test**列は、チャンネルタブで**Test**をクリックした後に埋まります。 2. テスト顧客としてポータルにサインインし、**Billing › Deposit**を開きます。チャネルボタンが表示されます。 3. 少額の支払いを行います(テストカードやサンドボックスアカウントについては各チャンネルの記事を参照してください)。残高が増加し、**Top-up received**通知が表示され、支払いが**Finance › Billing › Top-ups**にリストされます(`/billing/deposits`)。 ## 制限と注意事項 {#limits-notes} - **概要列:** *30 days*(支払い数、成功数、失敗数、およびボリューム)、*Stuck 24h*(1日経過しても保留中のままの支払い)、*Unmatched*(到着したもののどの注文にも一致しないUSDTまたは銀行振込)。KPI行には、30日間のボリューム、障害のあるチャンネルの数(有効化されているが未設定、またはスタックした支払い)、および一致しないものの合計が追加されます。 - **Webhookイベント**は**Payment channels › Gateway events**にリストされます(`/payments/events`)。Stripeには独自のタブがあり、PayPalとUSDTは1つのタブを共有します。失敗したイベントは再実行できます。ウォレットの台帳はべき等であるため、再実行しても二重にクレジットされることはありません。 - **Resellers**は独自のStripe、PayPal、USDT、銀行チャンネルを持つことができます。それらの行もここに表示され、ヘッダーのサイトセレクターでフィルタリングできます。[Resellers](https://nexcmp.com/ja/docs/customers/resellers/)をご覧ください。 - **返金:** StripeおよびPayPalの支払いは支払いリストから返金できますが、USDTの支払いは元に戻せません(サーバーが応答します:`usdt_no_refund`)。 - **メンテナンスモード**中でもゲートウェイのWebhookは受け付けられるため、メンテナンスの直前に行われた支払いが失われることはありません。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | お客様の入金画面にチャンネルが表示されない | オフに切り替えられている、設定されていない、または(ベトナムの銀行の場合)インターフェースがベトナム語ではない | **Fees & limits**とチャンネルタブを確認してください。[Bank transfer (Vietnam)](https://nexcmp.com/ja/docs/billing/bank-transfer-vn/)をご覧ください。 | | KPIの**Faulty channels**が0より大きい | 資格情報なしでチャンネルが有効化されている、または支払いが24時間以上保留中である | 行を開いて**Configure**をクリックします。スタックした支払いの場合は**Gateway events**を開いて再実行してください。 | | お客様は支払ったが残高が変更されない | Webhookが届かなかった | チャンネルタブでWebhookのURLを確認し、**Gateway events**でイベントを再実行してください。 | | サーバーが応答:`method_disabled` | スイッチがオフになっている | **Fees & limits**でオンにして保存してください。 | | USDTのスイッチがグレーアウトしている | 入金用アドレスが検証されていない | USDTタブで**Test & verify address**をクリックしてください。 | --- # Stripe > **管理画面での場所:** Finance › Payment channels › Stripe(`/payments/stripe`)。スイッチと手数料:Finance › Payment channels › Fees & limits(`/payments/fees`)。 ## 動作内容 {#what-it-does} Stripeはウォレットのチャージにおけるカード決済を処理します。同じアカウントで**Apple Pay**、**Google Pay**、**Link**、**Alipay**も提供でき、顧客が[自動チャージ](https://nexcmp.com/ja/docs/billing/auto-top-up/)のために**カードを保存**できるようになります。海外のお客様向けの主要なチャネルとしてご利用ください。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | Stripeアカウント | **USD**での決済を受け付けることができるStripeアカウント。AlipayはJPYで請求され、Stripe側でアカウントに対して有効化する必要があります。 | | キー | シークレットキー(`sk_live_...`または`sk_test_...`)と公開可能キー(`pk_live_...`または`pk_test_...`)。フォームはこれらのプレフィックスを持つキーのみを受け付けます。 | | ネットワーク | パネルへはインターネットからHTTPS経由でアクセス可能である必要があり(StripeがWebhookを呼び出します)、ポート443で`api.stripe.com`にアクセスできる必要があります。 | | ドメイン(ウォレットのみ) | お客様向けドメインは`/.well-known/apple-developer-merchantid-domain-association`を提供する必要があります — NexCMPが自動的に行います。 | | 依存関係 | なし。 | ::: info 共有Stripeアカウント NexCMPは自ら作成した支払いに対するWebhookイベントのみを処理するため、他のアプリケーションでも使用しているStripeアカウントをそのまま使用できます。 ::: ## インフラストラクチャの準備 {#prepare-the-infrastructure} Stripe側での作業: 1. [Stripe Dashboard](https://dashboard.stripe.com)にサインインします。テスト実行か本番稼働かに応じて**Test mode**のオン/オフを切り替えます。一方のモードのキーがもう一方で動作することはありません。 2. **Developers › API keys**を開きます。**Publishable key**をコピーし、**Secret key**を表示してコピーします。シークレットキーは厳重に管理してください。 3. (オプション)**Settings › Payment methods**を開き、提供する場合は**Alipay**を有効化します。 4. Webhookを手動で作成する**必要はありません** — NexCMPが自動で作成できます(後述のステップ5を参照)。手動で作成する場合は、**Developers › Webhooks**でエンドポイントを作成し、[Webhook](#webhook)に記載されているURLとイベントを設定してください。 ## NexCMP での接続 {#connect-in-nexcmp} 1. **Finance › Payment channels › Stripe**(`/payments/stripe`)を開きます。 2. **API keys**カードで**Mode**(`live`または`test`)を選択し、**Secret key**と**Publishable key**を貼り付けます。 3. **Save**をクリックします。キーは、NexCMPサービスアカウントのみが読み取り可能なサーバー上の設定ファイルに書き込まれます。ブラウザに送り返されることはなく、その後ページには下4桁のみが表示されます。 4. **Check**をクリックします。接続、モード、利用可能残高と保留中残高、アカウントID、チャージが有効かどうか、Webhookが存在するかどうか、Alipayが利用可能かどうかがダイアログに表示されます。赤色の行は、その部分の確認が必要であることを示します。 5. **Webhook**カードで**Create webhook**をクリックし、確認します。NexCMPがStripeに必要なすべてのイベントを含むエンドポイントの作成を要求し、**Webhook signing secret**(`whsec_...`)を自動的に入力します。フィールドに事前入力されるURLは`https:///v1/billing/stripe/webhook`で、例として`https://cloud.example.com/v1/billing/stripe/webhook`となります。 6. **Fees & limits**(`/payments/fees`)を開き、**Card (Stripe)**を有効にしたまま、**Stripe fee %**と**Stripe fixed fee (cents)**に実際の料金を設定し、**Save channels & fees**をクリックします。[Payment channels](https://nexcmp.com/ja/docs/billing/payment-channels/#switches-and-fees-fees-limits)を参照してください。 ![モード、シークレットキー、公開可能キーがサンプル値で入力されているStripeページ](https://nexcmp.com/ja/docs/images/billing/stripe-01-keys.webp) ### Webhook {#webhook} 署名シークレットが保存されるまで、赤いバナー「Missing webhook_secret」が表示され続けます。これが無い場合、Stripe側で決済が完了していても、Stripeのチャージは**記録されません**。 | 項目 | 値 | |---|---| | URL | `https:///v1/billing/stripe/webhook` | | イベント | `checkout.session.completed`, `payment_intent.succeeded`, `payment_intent.payment_failed`, `charge.refunded`, `charge.dispute.created`, `charge.dispute.closed`, `radar.early_fraud_warning.created`, `refund.updated`, `refund.failed` | | 署名 | Stripe `Stripe-Signature`ヘッダー、HMAC-SHA256、許容時間300秒。不正な署名を持つリクエストにはHTTP 400が返されます。 | | べき等性 | 各イベントIDは1回のみ保存されます。重複配信によって二重に入金されることはありません。 | より少ないイベントを登録していたリリースからアップグレードした場合は、再度**Create webhook**をクリックしてください。古いエンドポイントは保持されるため、その後Stripe Dashboardで手動により削除してください。 Webhookカードの**24h events**と**Latest event**の行は、Stripeがパネルに到達しているかどうかを示します。個別のイベントは**Payment channels › Gateway events**(`/payments/events`、Stripeタブ)にリストされ、各イベントは表示(**Payload**)またはリプレイ(**Replay**)できます。 ### Apple Pay、Google Pay、および Link {#apple-pay-google-pay-and-link} 1. **Wallets (Apple Pay · Google Pay · Link) & Alipay** カードの **Customer app Domain registered with Stripe** フィールドには、サイトのホスト名(例: `cloud.example.com`)が自動入力されます。 2. **Register / verify domain** をクリックして確認します。NexCMPがStripeの決済方法ドメインにドメインを登録し、Stripeに検証を依頼します。 3. 結果には **Apple Pay**、**Google Pay**、**Link** のステータスが表示されます。Apple Payはステータスが `active` の場合にのみ表示されます。 4. **Fees & limits** で **Apple Pay · Google Pay · Link** を有効のままにします。 ![登録済みドメインとApple Pay、Google Pay、Linkのステータスを表示しているウォレットカード](https://nexcmp.com/ja/docs/images/billing/stripe-03-wallets.webp) ::: tip Apple Payが無効なままになる場合 Apple Payでは、パブリックドメインでHTTP 200を返すためにドメイン関連付けファイルが必要です。Cloudflareや他のプロキシを使用している場合は、`/.well-known/` をブロックしないでください。 ::: ### Alipay {#alipay} Alipayはオプションです。**Stripe Dashboard › Settings › Payment methods**で有効化し、**Check**をクリックしてダイアログにAlipayが利用可能と表示されるまで待ってから、**Alipay (Stripe, JPY display)**をオンにします(**Fees & limits**内)。**Alipay fee %**、**Alipay fixed fee**、**¥/USD rate**(50–500)、**FX spread %**(0–20)を設定します。¥/USDレートは定期的に更新してください。7日以上経過している場合はページ上で警告が表示されます。 ## 確認 {#verify} 1. テストモードでテスト顧客としてポータルにサインインし、**Billing** を開き、**Deposit** をクリックして **Card** を選択し、Stripeのテストカード `4242 4242 4242 4242`(任意の日付、任意のCVC)で最小金額を支払います。 2. 数秒以内に残高が増加し、支払いはステータス *Completed* とともに **Finance › Billing › Top-ups** の下に表示されます。 3. **Payment channels › Gateway events › Stripe**を開きます。処理日時とともに`checkout.session.completed`または`payment_intent.succeeded`が表示されるはずです。 4. Stripeのページに戻ると、**24h events** が0より大きくなっています。 本番稼働の前に、**Mode** を `live` に切り替え、本番キーを貼り付けて再度 **Create webhook** をクリックします(テストモードと本番モードのウェブフックは別個です)。 ## 制限と注意事項 {#limits-notes} - **金額と通貨:** ウォレットはUSD建てです。カード、ウォレット、およびLinkの支払いはUSDで課金され、Alipayはお客様にJPYで表示され、お客様のレートで換算されます。 - **手数料:** Stripeの実際の પણードの手数料は自動的に読み取られません。設定した手数料の割合によって、お客様に表示される金額とウォレットに入金される金額が決まります。手数料を上乗せして請求するには、*Fees & limits* で **Customer pays top-up fee** を選択します。 - **保存済みカード:** お客様が *Save card for auto top-up* にチェックを入れると、カードは自社サーバーではなくStripeに保存されます。[Saved payment methods](https://nexcmp.com/ja/docs/billing/saved-payment-methods/) を参照してください。 - **返金。** カードへの返金は2段階のプロセスです。管理者が完了した支払いに対して返金リクエストを作成し(**Finance › Billing › Top-ups**、該当の支払いに対する返金アクション)、その後**Finance › Payouts › Card refunds**(`/billing/payouts`)で承認します。Alipayの返金は非同期です。失敗した場合(`refund.failed`)は保留された金額がウォレットに返還されます。 - **チャージバック:** `charge.dispute.created`において、NexCMPはお客様のアカウントをブロックし、プリペイドサービスを停止し(何も削除されません)、管理者アラートを送信します。勝訴した場合(`charge.dispute.closed`)、金額がウォレットに返金されます。 - **保留中の支払い:** ウェブフックが届かない場合、NexCMPは10分以上保留のままになっている支払いがないか独自にStripeと照合し、完了させます。7日より古い支払いは無視されます。 - **Resellers** は自分のStripeアカウント(ウェブフック `https:///v1/billing/stripe/webhook/r/`)を接続できます。[Resellers](https://nexcmp.com/ja/docs/customers/resellers/) を参照してください。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | 「Secret key must start with sk_live_/sk_test_」のエラーが表示される | 間違ったキーが貼り付けられている | **Developers › API keys** からシークレットキーを貼り付けます。 | | 「秘密鍵がライブモードとテストモードで一致していません」 | モードとキーが一致していません | **Mode** をキーのプレフィックスと一致させてください。 | | 「公開鍵は pk_ で始まる必要があります」 | キーが正しくありません | 公開可能キーを使用してください。 | | 接続が失敗したと表示される | キーが誤っている、失効している、またはサーバーが `api.stripe.com` に到達できません | キーを再貼り付けし、サーバーから `curl -I https://api.stripe.com` でテストしてください。 | | 赤色のバナー "Missing webhook_secret" | 署名シークレットが保存されていません | **Create webhook** をクリックするか、Stripe Dashboard から `whsec_...` シークレットを貼り付けて **Save** をクリックします。 | | 引き落とされたが残高が反映されない | Webhook が配信されていないか、署名検証に失敗しています | URL が `/v1/billing/stripe/webhook` で終わり、シークレットがエンドポイントと一致していることを確認し、**Gateway events** でイベントを再送します。Stripe でエンドポイントを開き、配信試行を確認してください(HTTP 400 は署名シークレットの間違いを示します)。 | | "Create webhook" が失敗する | URL が HTTPS ではないか、アクセスできません | 公開用の `https://` ドメインを使用してください。 | | Apple Pay のステータスが有効ではありません | ドメインが検証されていません | ドメイン関連ファイルが 200 を返すようになったら、再度 **Register / verify domain** をクリックします。 | | チェックダイアログに Alipay が表示されない | Stripe で有効化されていません | Stripe Dashboard で有効化してから、**Check** をクリックしてください。 | | お客様の画面にカード入力フォームが表示されない | **Card (Stripe)** が無効であるか、シークレットキーがありません | **Fees & limits** で有効にし、キーを保存してください。 | --- # PayPal > **管理画面での場所:** Finance › Payment channels › PayPal (`/payments/paypal`)。有効・無効の切り替えと手数料の設定は Finance › Payment channels › Fees & limits (`/payments/fees`) にあります。 ## 動作内容 {#what-it-does} お客様が PayPal の残高、銀行口座、または PayPal に登録されたカードを使用して、USD ウォレットに入金できるようにします。また、お客様が [automatic top-up](https://nexcmp.com/ja/docs/billing/auto-top-up/) のために NexCMP に PayPal アカウントを記憶させることも可能です。PayPal を好むお客様のために [Stripe](https://nexcmp.com/ja/docs/billing/stripe/) と併用してください。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | PayPal アカウント | USD を受け取ることができる PayPal **ビジネス**アカウント。 | | REST アプリ | PayPal Developer Dashboard (**Apps & Credentials**) 内の 1 つの REST アプリ。**Client ID** と **Client secret** を提供します。テストには **Sandbox** タブを、本番には **Live** タブを使用します。 | | ネットワーク | インターネットから到達可能な HTTPS(PayPal が Webhook を呼び出します)、および `api-m.paypal.com`(本番)または `api-m.sandbox.paypal.com`(サンドボックス)のポート 443 へのアウトバウンドアクセス。 | | 権限 | REST アプリには返金および Webhook の機能が必要です。**Check** ダイアログで、両方のスコープが存在するかどうかを確認できます。 | | 依存関係 | なし。 | ## インフラストラクチャの準備 {#prepare-the-infrastructure} 1. ビジネスアカウントで [developer.paypal.com](https://developer.paypal.com) にサインインし、**Apps & Credentials** を開きます。 2. **Sandbox**(テスト)または **Live**(本番)を選択し、**Create App** をクリックします。「NexCMP」などの名前を付けます。 3. アプリの **Client ID** と **Secret** をコピーします。 4. テストの際は、**Testing Tools › Sandbox Accounts** を使用して *Personal*(購入者)サンドボックスアカウントを見つけるか、新規作成します。 5. Webhookを自分で作成する必要はありません。NexCMPは**Create webhook**ボタンで自動的に作成します。 ## NexCMP での接続 {#connect-in-nexcmp} 1. **Finance › Payment channels › PayPal** (`/payments/paypal`) を開きます。 2. **API keys**で、**Mode**を選択します: `live` (リアルマネー、`api-m.paypal.com`) または `sandbox` (`api-m.sandbox.paypal.com`)。 3. **Client ID** (20文字以上) と **Client secret**を貼り付けます。 4. **Check**をクリックします。入力した認証情報をテストし (保存は不要です)、接続、App ID、モード、返金およびWebhookのスコープの有無、トークンの有効期間を報告します。 5. **Save**をクリックします。 6. **Webhook**カードでURLが`https:///v1/billing/paypal/webhook`であることを確認し (`https`である必要があります)、**Create webhook**をクリックして確認します。NexCMPはPayPalに11件のイベントを指定してWebhookの作成または更新を要求し、返された**Webhook ID**を保存します。このボタンは**保存済み**のキーを使用するため、編集したばかりの場合は先に保存してください。 7. もう一度**Check**をクリックします。**Webhook**の行に「exists, 11 events」と表示されるはずです。 8. **Fees & limits**を開き、**PayPal**を有効にし、**PayPal fee %** (デフォルトは4.4) と **PayPal fixed fee (cents)** (デフォルトは30) を料金体系に合わせて設定し、**Save channels & fees**をクリックします。 ![サンドボックスモードとテスト用認証情報が入力されたPayPalページ](https://nexcmp.com/ja/docs/images/billing/paypal-01-keys.webp) ### Webhookイベント {#webhook-events} NexCMPは次の11件のイベントを登録します: `CHECKOUT.ORDER.APPROVED`、`PAYMENT.CAPTURE.COMPLETED`、`PAYMENT.CAPTURE.PENDING`、`PAYMENT.CAPTURE.DECLINED`、`PAYMENT.CAPTURE.REFUNDED`、`PAYMENT.CAPTURE.REVERSED`、`CUSTOMER.DISPUTE.CREATED`、`CUSTOMER.DISPUTE.UPDATED`、`CUSTOMER.DISPUTE.RESOLVED`、`RISK.DISPUTE.CREATED`、`CHECKOUT.PAYMENT-APPROVAL.REVERSED`。 各WebhookはPayPalの署名検証APIを呼び出して検証され、1回のみ保存されてべき等に処理されます。NexCMPはWebhookボディ内の金額を信用せず、キャプチャをクレジットする前にPayPalからキャプチャを取得します。 ## 確認 {#verify} 1. **Mode** を `sandbox` のままにします。ポータルで **Billing › Deposit** を開き、**PayPal** を選択して **Continue on PayPal**(または PayPal ボタン)をクリックし、sandbox の購入者アカウントでログインします。 2. 支払いを承認します。ポータルに戻ると残高が増加し、支払いは**Finance › Billing › Top-ups**の下に *Completed* として表示されます。 3. **Payment channels › Gateway events › PayPal & USDT**を開きます。`PAYMENT.CAPTURE.COMPLETED`イベントがリストに表示されます。 4. すべてが正常に動作したら、**Mode**を`live`に切り替え、本番用の認証情報を入力して**Save**をクリックし、再度**Create webhook**をクリックします (サンドボックスと本番のWebhookは別々です)。 ## 制限と注意事項 {#limits-notes} - **支払い完了の仕組み。** 注文はUSDで作成されます。顧客が承認した後、**サーバー**がそれをキャプチャし (べき等なリクエストID)、ウォレットに正確に1回クレジットします。顧客がブラウザを閉じた場合の安全網として、Webhookと10分ごとに実行されるリコンシリエーション (照合) ジョブが機能します。 - **保留中および破棄された注文。** 注文は12時間オープン状態を維持できます。顧客が持てる保留中の注文は最大5件までです (サーバーは`too_many_pending`、HTTP 429を返します)。24時間経過してもキャプチャされない注文は失敗としてマークされます。 - **Webhookが設定されていない場合。** Webhook IDが保存されるまで、パネルはすべてのPayPal Webhookに対してHTTP 503を返します。ポータル経由のキャプチャや10分ごとのリコンシリエーションによりウォレットへの入金は行われますが、PayPalがWebhookで報告する内容 (異議申し立て、取り消し、遅延キャプチャ) は適用されません。**Create webhook**をクリックしてください。 - **保存されたPayPalアカウント。** 顧客がPayPalの保存を選択した場合 (または[automatic top-up](https://nexcmp.com/ja/docs/billing/auto-top-up/)を有効にする初回デポジットを完了した場合)、PayPalはその支払いトークンをVaultに保存します。NexCMPは識別子とPayPalのメールアドレスのみを保持します。[Saved payment methods](https://nexcmp.com/ja/docs/billing/saved-payment-methods/)を参照してください。 - **返金と異議申し立て**はStripeと同様に処理されます。返金リクエストは**Finance › Payouts › Card refunds**で承認され、異議申し立ては顧客のアカウントをブロックし、解決するまでプリペイドサービスの利用を停止します。 - **手数料。** PayPalの手数料は自動取得されません。設定したパーセンテージと固定手数料によって、顧客に表示される金額とクレジットされる金額が決まります。実際の料金は国によって異なります (フォームにはベトナム向けに4.4 %、米国向けに3.49 %のヒントが表示されます)。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | 「Client ID too short」のエラーが表示される | 20文字未満が貼り付けられている場合 | 完全なクライアント ID をコピーします。 | | "Webhook URL は https である必要があります" | URL が `http://` で入力されています | 公開用の `https://` ドメインを使用してください。 | | チェックで接続エラーが報告されます | モードの間違い (サンドボックスでのライブキー、またはその逆)、シークレットの間違い、アウトバウンドアクセスの不足 | **Mode** をキーの種類に合わせ、サーバーから `curl -I https://api-m.paypal.com` をテストします。 | | Refund / webhooks のスコープが「いいえ」を示しています | REST アプリに必要な機能がありません | PayPal Developer Dashboard のアプリで機能を有効にします。 | | バナー「PayPal key set, NO webhook」 | Webhook ID がありません | **Create webhook** をクリックします。 | | チェックで "Webhook not found" | Webhook が PayPal で削除されたか、別のアプリに属しています | **Create webhook** をもう一度クリックします。 | | PayPal が支払いを拒否したことが顧客に通知されます | PayPal がその資金源を拒否しました | 別の支払いソースを選択するようお客様にご依頼ください。 | | 顧客に "Too many pending requests" が表示されます | 5 件のオープンな注文 | 期限切れを待つか、完了させます。 | | PayPal ボタンが見つかりません | **Fees & limits** で PayPal がオフになっているか、設定されていません | オンにして認証情報を保存します。 | --- # USDT (Binance) {#usdt-binance} > **管理画面での場所:** Finance › Payment channels › USDT (`/payments/usdt`)。スイッチと手数料: Finance › Payment channels › Fees & limits (`/payments/fees`)。未一致の入金: Finance › Payment channels › Gateway events › PayPal & USDT (`/payments/events?tab=gateways`)。 ## 動作内容 {#what-it-does} お客様が **お客様の Binance 入金アドレス** に USDT を送信すると、NexCMP は **読み取り専用** の Binance API キーを介して入金履歴を読み取り、入金が未決済のリクエストと一致したときにウォレットに入金します。Binance が請求する手数料以外に決済代行手数料は発生せず、NexCMP が秘密鍵を保持することは一切ありません。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | Binance アカウント | 選択したネットワークで USDT の入金が有効になっている、認証済みの Binance アカウント。 | | API キー | **Enable Reading** のみが有効な Binance API キー。「Enable Withdrawals」、「Internal Transfer」、「Spot/Margin Trading」は必ず **オフ** にしてください。 | | IP 制限 | 強く推奨: サーバーのアウトバウンド IP にキーを制限します (**Test & verify address** ダイアログに表示されます)。 | | ネットワーク | `api.binance.com` へのアウトバウンド HTTPS。インバウンドポートは不要です。 | | サポートされるネットワーク | `TRX` (Tron、TRC20)、`BSC` (BNB Smart Chain、BEP20)、`SOL` (Solana)、`ETH` (Ethereum、ERC20)。コインは USDT に固定されています。 | | 依存関係 | なし。 | ::: warning ネットワークの選択は 1 回のみ 間違ったネットワークで送信した顧客は資金を失います。顧客の取引所がサポートする手数料の低いネットワークを選択し (通常は TRX と BSC)、頻繁に変更しないでください。 ::: ## インフラストラクチャの準備 {#prepare-the-infrastructure} 1. Binance で **Account › API Management** を開き、新しい API キーを作成します (システム生成)。「NexCMP」などのラベルを付けます。 2. 権限を編集します: **Enable Reading** のみにチェックを残します。出金、振替、取引は有効にしないでください。 3. **Restrict access to trusted IPs only** の下で、NexCMPサーバーのパブリックIPアドレスを追加します。まだ不明な場合は制限なしでキーを作成し、NexCMPで最初のテストを実行して(アウトバウンドIPが出力されます)からIPを追加してください。 4. **API key** と **Secret key** をコピーします(シークレットは一度しか表示されません)。 5. **Wallet › Deposit › Crypto** を開き、**USDT**と使用する**ネットワーク**を選択して、**入金アドレス**をコピーします(例:TRX上の `T...` アドレス、またはBSC/ETH上の `0x...`)。 ## NexCMP での接続 {#connect-in-nexcmp} 1. **Finance › Payment channels › USDT** (`/payments/usdt`)を開きます。 2. **API key (Binance › API Management)** に **API key** と **API secret** を貼り付けます。両方を同時に入力する必要があります。 3. **Deposit address** で **Network** を選択し、**選択したネットワーク上のUSDT入金アドレス**を貼り付けます。フォーマットはネットワークごとに検証されます(TRXは `T` + 33 文字、BSCおよびETHは `0x` + 40 16進数文字、SOLは base58)。 4. **Save**をクリックします。アドレスまたはネットワークを変更すると検証がリセットされ、再検証するまでチャネルが一時停止されます。確認を求めるページが表示されます。 5. **Test & verify address**をクリックします(未保存の変更は拒否され、チェックは保存された設定に対して実行されます)。ダイアログには以下が表示されます: - キーの権限(読み取り、出金、内部振替、取引、IP制限)—危険な権限には赤色の警告が表示されます: - サーバーのアウトバウンドIP(Binanceに入力するため); - ネットワーク(入金のオープン/クローズ、必要な承認数、ダスト); - そのネットワークに対してBinanceが発行するアドレス、およびそれがお客様の住所と**一致する**かどうか。 6. アドレスが一致すると、NexCMPは検証時間を記録します。その後初めて、**Fees & limits**を開き、**USDT (Binance)**を有効にし、**USDT fee %**(デフォルトは1)および **USDT request expires after (mins)**(5〜180、デフォルトは30)を確認して、**Save channels & fees**をクリックできます。 ## 支払いの照合方法 {#how-a-payment-is-matched} 1. お客様は **Billing › Deposit › USDT** で金額を入力し、**Get deposit address**をクリックします。 2. NexCMPはリクエストを作成し、アドレス、ネットワーク、および6桁の小数を持つ**正確な金額**を表示します(例:`19.173742`)。最後の4桁の小数は、そのリクエストに対して金額を一意にするためのランダムなノンスです。 3. お客様はそのネットワーク上で**正確に**その金額を送信する必要があります。一致しない支払い(丸められた金額、間違ったネットワーク)は自動的に割り当てることができません。 4. NexCMPは60秒ごとに過去24時間のBinance入金を読み取ります。一致する入金によりリクエストが*confirming*(確認中)に移動し、Binanceに必要な承認数が揃うとウォレットに入金されます。資金が確認されたリクエストは、承認待ちの間は期限切れになりません。 5. 有効期限(デフォルト30分)内に支払われなかったリクエストは期限切れとしてマークされます。 ## 確認 {#verify} 1. アドレスが検証されUSDTが有効になったら、テスト顧客としてサインインし、少額の入金(最低トップアップ額)をリクエストします。 2. 別のウォレットまたは取引所から正確な金額を送信します。数分お待ちください。 3. ポータルに *Transfer seen — confirming* が表示された後、*USDT received — balance updated* が表示されます。 4. USDTページに最近の **Last poll** の時間と、0の **Unmatched** が表示されます。 ## 制限と注意事項 {#limits-notes} - **レート。** 1 USDT = 1.00 USD。**USDT fee %** の手数料はお客様に表示され、**Customer pays top-up fee** の設定に応じて金額から差し引かれるか、金額に加算されます。 - **返金不可。** USDTの支払いはNexCMPによって送信元に返金されることはありません(HTTP 409 `usdt_no_refund`)。必要に応じてシステム外で手動で返金してください。 - **保留制限。** 顧客が持つオープンなリクエストの数には制限があり、それを超えるとサーバーは `too_many_pending`(HTTP 429)を返します。 - **Resellers** は自身のBinanceアカウントを使用できます。[Resellers](https://nexcmp.com/ja/docs/customers/resellers/) を参照してください。 - **Binanceアカウントを他のシステムと共有している場合**、2つのポーラーが同じ入金を決して検知しないよう、各システムに異なるネットワークを割り当ててください。 ### 一致しない入金 {#unmatched-deposits} どのリクエストにも一致しない入金(金額ミス、ネットワークミス、期限切れのリクエスト)は、`deposit.unmatched`イベントと管理者アラートを発生させます。**Payment channels › Gateway events › PayPal & USDT**を開いてイベントを見つけ、Binanceでトランザクションを確認し、割り当てアクションをクリックして正しい顧客に入金します。その後、USDTページおよびチャンネル概要の**Unmatched**カウンターが0に下がります。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | 「API key and secret must be entered together」のエラーが表示される | 片方のフィールドのみが入力されている | 両方に入力してください。 | | 「Address is not in the format of network ...」のエラーが表示される | アドレスが選択したネットワークの形式に適合していない | 同じネットワーク用にBinanceから再コピーしてください。 | | 「Unsaved changes — Save first then Test」のエラーが表示される | 保存された設定でテストが実行される | **Save**をクリックしてからテストしてください。 | | 警告「key has Enable Withdrawals」 | 過剰な権限 | BinanceのAPI管理でそれを削除してください。 | | 警告「key not restricted to IP」 | `ipRestrict`がオフになっている | ダイアログに表示されるサーバーの発信IPを追加してください。 | | 警告「key lacks Enable Reading」 | 権限が不足している | Enable Readingを有効にしてください。 | | 警告「Binance has deposits disabled for USDT on the network」 | ネットワークが一時停止中 | 別のネットワークを選択するか、お待ちください。 | | 「DANGER: configured address differs from the address Binance issues」のエラーが表示される | アドレスまたはネットワークが誤っている | そのネットワーク用にBinanceからアドレスを再度コピーしてください。 | | Fees & limitsでUSDTのスイッチがグレーアウトしている | アドレスが検証されていない | 一致するまで**Test & verify address**を実行してください。 | | 顧客が支払ったが、入金されていない | 金額が丸められている、またはネットワークが誤っている | Gateway eventsでイベントを見つけ、手動で割り当ててください。 | | 入金は確認できたが長い間待たされている | 確認(コンファメーション)回数がまだ足りない | お待ちください。確認中もリクエストの有効期限は切れません。 | --- # 銀行振込(ベトナム) {#bank-transfer-vietnam} > **管理画面での場所:** Finance › Payment channels › VN bank transfer (`/payments/bank`)。為替レート: Finance › Payment channels › Exchange rates (`/payments/fx`)。 ## 動作内容 {#what-it-does} ベトナムドンによる通常の銀行振込でUSDウォレットへの入金を可能にします。NexCMPにはVietQRコード、口座詳細、一意の**振込メモ**が表示されます。[Sepay](https://sepay.vn)が銀行口座を監視して入金時にWebhookを呼び出し、NexCMPがウォレットにクレジットを付与します。ベトナムの顧客向けに販売する場合にご利用ください。 ::: info ベトナム語インターフェースでのみ表示 ベトナムの銀行オプションは、ポータルが**Vietnamese**で表示されている場合にのみお客様に提示されます。他の言語を使用しているお客様には表示されません。 ::: ## 要件 {#requirements} | 項目 | 要件 | |---|---| | 銀行口座 | [my.sepay.vn](https://my.sepay.vn) の Sepay アカウントに接続されたベトナムの銀行口座(または Sepay 仮想口座、**VA**)。 | | Sepay | Webhook 統合が有効になっている Sepay アカウント。 | | 為替レート | USD から VND へのレートが存在している必要があります。まず **Exchange rates** で更新してください。レートがない場合、チャネルは `fx_unavailable` を返し、お客様は送金を開始できません。 | | ネットワーク | Sepay が `https:///v1/billing/sepay/webhook` を呼び出せるよう、パネルに HTTPS でアクセスできる必要があります。 | | 依存関係 | [通貨と為替レート](https://nexcmp.com/ja/docs/catalog/currency-and-exchange-rates/) | ## インフラストラクチャの準備 {#prepare-the-infrastructure} Sepay 側での準備: 1. [my.sepay.vn](https://my.sepay.vn) で銀行口座を接続(または VA を作成)し、トランザクションが表示されることを確認します。 2. **メモプレフィックス**を決定します(2〜5文字の大文字、例: `PAY`)。NexCMP は、プレフィックスに8桁のランダムな数字を続けたものをメモとして生成します(例: `PAY48210937`)。プレフィックスに `ORD` を含めることはできず、同じ口座に入金を受け取る他のシステムで使用してはなりません。 3. Sepay アカウントで*決済コード構造*を使用している場合は、Sepay がメモを認識できるように同じプレフィックスをそこに登録してください。 4. NexCMP ページから URL とキー(以下のステップ 7)が提供されたら、Webhook を作成します。 ## NexCMP での接続 {#connect-in-nexcmp} 1. **Finance › Payment channels › Exchange rates** を開き、レートが保存されていない場合は **Update exchange rates** をクリックします。 2. **Finance › Payment channels › VN bank transfer** (`/payments/bank`)を開きます。 3. **Receiving account** で以下を入力します: | 項目 | Example | ルール | |---|---|---| | Bank | `VCB` Vietcombank | リストから選択します。BIN は自動的に入力されます。 | | Account number | `0123456789` | 4〜24桁の数字または大文字。 | | 仮想口座 (VA — オプション) | | 設定した場合、お客様は VA に送金し、QR コードにそれが表示されます。 | | Account holder name | `NGUYEN VAN A` | アクセントなし、大文字、2〜60文字。 | | Transfer memo prefix | `PAY` | 2〜5文字の大文字、`ORD` は不可。 | 4. **Webhook authentication** で **Auth method**(**HMAC-SHA256**(推奨)または **API key**)を選択し、**Webhook key / HMAC secret**(8〜200文字)を入力します。オプションで Sepay の **userapi token** を入力します。これは、Webhook が失われた送金を照合するためにのみ使用されます。 5. **Channel & limits** で制限を設定します(括弧内はデフォルト値): **Min / order**(10,000 VND)、**Max / order**(200,000,000 VND)、**Order expiry**(120分、15〜1440)、**Max pending orders / account**(3、1〜10)、**Reconcile every**(10分)、およびオプションで **Allowed webhook IPs**(カンマ区切り。空の場合は IP がログに記録されるのみです)。 6. **Save** をクリックします。口座、名前、プレフィックス、キーが有効になると、赤いバナー「Sepay not configured」が消えます。 7. **Webhook URL to paste into my.sepay.vn**(`https:///v1/billing/sepay/webhook`と表示)を**Copy**でコピーします。SepayでWebhook連携を開き、URLを貼り付け、同じ認証タイプとキーを選択して、「money in」イベントを有効にします。 8. **Test connection** をクリックします。次に、**Enable Sepay for clients (main site)** をオンにして **Save** をクリックします。 ![受取口座、メモプレフィックス、Webhook 認証がサンプル値で入力された VN bank transfer ページ](https://nexcmp.com/ja/docs/images/billing/bank-transfer-vn-01-config.webp) ![Sepay スイッチがオンになり、デフォルトの制限が設定された Channel and limits カード](https://nexcmp.com/ja/docs/images/billing/bank-transfer-vn-02-limits.webp) ### Webhook security {#webhook-security} | Method | SePayが送信する必要がある内容 | |---|---| | HMAC-SHA256 | ヘッダー `X-SePay-Signature: sha256=`(`"."` から計算されます)。タイムスタンプのずれは最大 300 秒以内です。 | | API キー | ヘッダー `Authorization: Apikey `。 | ヘッダーのみが検証され(本文やクエリ文字列は一切検証されません)、比較は定数時間で行われます。設定されたアカウントまたは VA へのインバウンド転送(`transferType = in`)のみが使用されます。各 SePay トランザクションは 1 回だけ保存されるため、リトライされた Webhook によって二重に入金されることはありません。NexCMP は、トランザクションを意図的に無視した場合でも `200 {"success":true}` を返し、一時的なエラーの場合のみ HTTP 5xx を返して SePay に再試行を促します。 ## お客様のお支払い方法 {#how-the-customer-pays} 1. **Billing › Deposit**(ベトナム語インターフェイス)で、お客様がベトナムの銀行振込オプションと金額を選択し、転送作成ボタンをクリックします。 2. NexCMP は、保存されたレート(**Exchange rates** で設定したマージンと丸めステップを含みます)で USD 金額を換算し、**VND 金額を丸めステップに合わせて切り上げます**。 3. お客様には、口座番号、銀行名、金額、およびメモが含まれる QR コード(VietQR、ローカル生成)が表示されます。 4. 振込完了後、SePay が Webhook を呼び出し、NexCMP が `floor(VND received × 100 / rate)` セントを入金します。レートは注文作成時に固定されます。注文の有効期限が切れた後に送金が到着した場合は、固定レートと現在のレートの高い方が適用されます。 5. 注文の有効期限は **Order expiry** の経過後に切れます。安全装置として、**Reconcile every** 分ごとに照合が実行されます(userapi トークンが必要です)。 ## 確認 {#verify} 1. ベトナム語インターフェイスで、お客様としてテスト注文を作成します。金額、口座、メモが正しいことを確認します。 2. 許可されている最小金額を、正しいメモを指定して送金します。 3. 1 分以内にポータルで入金が完了してウォレット残高が増加したことが表示され、銀行ページの **State** カードに最後の Webhook 時刻が表示されます。 4. **Finance › Billing › Top-ups** を開き、受け取った VND 金額で支払いが一覧表示されていることを確認します。 ## 制限と注意事項 {#limits-notes} - **最小金額。** お客様に表示される VND の最小額は、**Min / order** と [minimum top-up](https://nexcmp.com/ja/docs/billing/minimum-top-up/) の VND 換算値のうち大きい方になります。 - **保留中の注文。** お客様が同時に開いたままにできる未完了の注文は **Max pending orders / account** までです(デフォルトは 3)。 - **同じメモの重複。** 同じメモで 2 回送金を行うと、現在のレートで 2 つ目の完了済み支払いが作成されます。 - 銀行口座への**自動返金はありません**。 - **手数料。** このチャネルには **Fees & limits** 内に固定手数料の項目はなく、レートマージンが唯一の調整項目となります。 - **Resellers** は独自のアカウントを設定できます。その Webhook URL は `/v1/billing/sepay/webhook/r/` で終わります。 ### 一致しない送金 {#unmatched-transfers} アカウントに到着したものの有効なメモが含まれていない送金は、ページ下部の **Unmatched transactions** に表示されます(*All channel owners* または *Master* でフィルタリングしてください)。お客様に銀行参照情報を確認したうえで、**Assign** をクリックし、アカウントを選択します。ウォレットには現在のレートで入金されます。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | バナー「Sepay not configured」 | 銀行、口座、名義人、プレフィックス、またはキーが不足しているか無効です | **Receiving account** および **Webhook authentication** のカードを完了します。 | | バナー「USD/VND rate blocked」(`fx_unavailable`) | 為替レートが保存されていません | **Exchange rates › Update exchange rates**を実行してください。 | | `prefix: 2–5 capital letters, no ORD` | プレフィックスが無効です | `ORD` を含まない 2〜5 文字の大文字を使用してください。 | | `account_name` エラー | アクセント記号が含まれているか、小文字です | アクセント記号のない大文字、数字、スペース、ドット、またはハイフンを使用してください。 | | `webhook_secret: 8–200 characters` | キーが短すぎます | 印刷可能な文字を 8 文字以上使用してください。 | | お客様にオプションが表示されない | ベトナム語インターフェイスでない、スイッチがオフ、またはレートがありません | 言語、スイッチ、およびレートを確認してください。 | | 顧客は支払ったが反映されない | Webhookが届かなかった、メモが変更された、金額が間違っている | SepayのWebhookログを確認してください。メモが間違っていた場合、転送は**Unmatched transactions**に入ります。 | | Webhookが401または403を返す | 認証方式またはキーの不一致 | SepayとNexCMPで同じ方式とキーを使用してください。 | | 顧客に "Too many pending requests" が表示されます | 保留中の注文制限に達しました | 完了するか、有効期限を待ちます。 | --- # 最小チャージ {#minimum-top-up} > **管理画面での場所:** Finance › Payment channels › Fees & limits(`/payments/fees`)、カード **Wallet & top-up (Billing › Policy)**。 ## 動作内容 {#what-it-does} **最小チャージ**を下回る金額、または**最大チャージ(1回あたり)**を超える金額は、すべての決済チャネルで拒否されます。デフォルトは **$10.00** および **$5,000.00** です。ゲートウェイ手数料の方が高くなってしまう少額の支払いを避けるために、最小値を使用してください。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | ロール | 管理者。 | | 依存関係 | なし。 | ## 制限の設定 {#set-the-limits} 1. **Finance › Payment channels › Fees & limits** (`/payments/fees`) を開きます。 2. カード **Wallet & top-up (Billing › Policy)** で、**Min top-up (USD)** および **Max top-up per transaction (USD)** を編集します。 3. **Save Wallet & top-up** をクリックします。 ![最小チャージ10.00、最大5000.00のウォレットおよびチャージカード](https://nexcmp.com/ja/docs/images/billing/minimum-top-up-01-limits.webp) | 設定 | デフォルト | 許可される範囲 | ルール | |---|---|---|---| | Min top-up (USD) | $10.00 | $0 から $10,000 | 最大値以下である必要があります。 | | 1回のトランザクションあたりの最大トップアップ (USD) | $5,000.00 | $1 から $1,000,000 | 最小値以上である必要があります。 | 値はセント単位で保存されます (`min_topup_cents`、`max_topup_cents`)。 ## 制限が適用される場所 {#where-the-limits-apply} | 場所 | 動作 | |---|---| | カード、Apple/Google Pay、Link、Alipay、PayPal、USDT | 範囲外の金額はサーバーで拒否されます。ポータルには「Enter an amount between {min} and {max}」が表示されます。 | | VN銀行振込 | VNDの金額がSePayの制限範囲内であり、**かつ**そのUSD換算額(ウォレットに入金される額)が最小値および最大値の範囲内である必要があります。ポータルには2つのVND最小額のうち大きい方が表示されます。[Bank transfer (Vietnam)](https://nexcmp.com/ja/docs/billing/bank-transfer-vn/)を参照してください。 | | [Automatic top-up](https://nexcmp.com/ja/docs/billing/auto-top-up/) | すべての自動課金は、最小値以上、最大値以下になります。固定モードでは、お客様の金額は最小値から$1,000の間である必要があります。 | | チャージコード ([Vouchers](https://nexcmp.com/ja/docs/billing/promotions/)) | 影響を受けません。 | | 管理者のクレジット/デビット | 影響を受けません。 | | リセラーウォレットのチャージ | Resellers › Defaults に別の最小額(`rs_topup_min_cents`、デフォルト $20)があります。 | ## 関連する下限 {#related-floors} 最小チャージは唯一の残高ルールではありません。これらは **Services › Virtual Machines › Policy** (`/vm/policy`) にあります: | ルール | デフォルト | 意味 | |---|---|---| | 最小残高 (`min_balance_cents`) | $5.00 | お客様がVMを作成するために必要な最小ウォレット残高。 | | クォータ | オフ | **Quotas**が有効な場合、VMの作成にはそのVMの数時間分の料金をカバーする残高も必要となります。[Quotas](https://nexcmp.com/ja/docs/billing/quotas/)をご覧ください。 | ## 確認 {#verify} 1. ポータルで**Billing › Deposit**を開き、最小額のすぐ下の金額を入力します。支払いボタンが無効になり、範囲メッセージが表示されます。 2. 最小額を入力し、支払いが開始されることを確認します。 ## 制限と注意事項 {#limits-notes} - 変更は新規の支払いに対して適用されます。すでに作成済みの注文は、作成時の金額が維持されます。 - お客様向けヒント(「Minimum $10.00, maximum $5,000.00」)およびクイック金額ボタンは、新しい制限に自動的に追従します。 - VNDを表示している場合(**Exchange rates**ページ)、最小額は表示目的で保存されたレートに換算されますが、ウォレットと制限はUSDのままです。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | 「最小入金額は最大値以下でなければなりません」 | 値が交差しています | 最小額を下げるか、最大額を上げてください。 | | 顧客がベトナムの銀行振込で少額の支払いができない | SepayのVND最小額またはUSD最小額が高すぎます | 銀行ページの**Min / order**またはUSD最小額を下げてください。 | | チャージ時のサーバーエラー`invalid_argument` | 金額が範囲外です | 表示されている範囲内の金額を指定してください。 | --- # 保存された支払い方法 {#saved-payment-methods} > **ポータルでの場所:** Billing › Settings (`/billing?settings=1`)。**管理画面での場所:** Customers › List › a customer › Overview (`/customers/`) のカード **Payment** に、保存された支払い方法と自動チャージの履歴が表示されます。 ## 動作内容 {#what-it-does} 保存された支払い方法を使用すると、ウォレットの残高不足でサービスが停止しないよう、NexCMPは顧客が**不在の状態でも**課金できます。これは[automatic top-up](https://nexcmp.com/ja/docs/billing/auto-top-up/)でのみ使用されます。種類は2つあります:Stripeに保存された**カード**(Apple Pay、Google Pay、またはStripeが再利用可能なカードを返す場合のLink経由で使用されるカードを含む)、およびPayPalのボールトに保存された**PayPalアカウント**です。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | チャネル | [Stripe](https://nexcmp.com/ja/docs/billing/stripe/)および/または[PayPal](https://nexcmp.com/ja/docs/billing/paypal/)が設定され、有効になっていること。 | | サイト | メインサイト、またはプラットフォームによって支払いチャネルが回収されるリセラーサイト。独自のStripeアカウントを使用するリセラーサイトでは、カードを保存できません。 | | 顧客 | カードまたはPayPalを使用してチャージを行った顧客アカウント。 | ## 支払い方法が保存される仕組み {#how-a-method-gets-saved} 1. 顧客が**Billing**を開き、**Deposit**をクリックして**Card**または**PayPal**で支払います。 2. 支払いは後で再利用できるように作成されます。Stripeは顧客情報をStripe側で保存し(セッション外での利用)、PayPalはボールトトークンを保存します。NexCMPは参照情報(Stripeの支払い方法IDと顧客ID、またはPayPalのボールトID)と、`visa •••• 4242`やPayPalのメールアドレスなどの表示ラベルのみを保持します。**カード番号がサーバーに保存されることはありません。** 3. 支払いが完了すると、顧客がそれ以前に設定を選択していなかった場合、[automatic top-up](https://nexcmp.com/ja/docs/billing/auto-top-up/)が1回有効になります。画面に追加のチェックボックスやメッセージは表示されません。サーバーは証拠として、時刻、顧客のIPアドレス、および支払い方法を記録します。 4. 次回以降、チャージ画面のカードのドロップダウンには **Saved card ...** が、PayPalには **Saved PayPal ...** が表示されます。 ## 管理と削除 {#manage-and-remove} 1. ポータルで**Billing**に移動し、**Settings**をクリックします。パネルには、保存された支払い方法(Stripeカードおよび/またはPayPal)と自動チャージのオプションが表示されます。 2. カードを削除するには**Remove card**をクリックして確認します。Stripeによってカードの紐付けが解除され、**自動トップアップがオフになります**。 3. PayPalを削除するには**Remove saved PayPal**をクリックして確認します。 ### 管理者ビュー {#admin-view} **Customers › List**でお客様を開きます。**Payment**カード(**Overview**タブ)には、保存された決済方法のラベル(**Saved cards**)、自動請求に使用されたゲートウェイ、保存された同意の証跡(日時、IP、方法)、および直近20件の自動請求の試行履歴とステータス・理由(**Auto top-up history**)が表示されます。 ## 確認 {#verify} 1. テスト用のお客様として、カードで最小額を入金します。支払いが完了したら、**Billing › Settings** を開きます。カードと自動チャージのスイッチ(オン)が表示されます。 2. 再度入金を開始すると、ドロップダウンに保存されたカードが表示されます。 3. 管理者画面では、顧客の**Payment**カードに同じカードのラベルが表示されます。 ## 制限と注意事項 {#limits-notes} - **Stripe Linkおよびウォレット。** Link、Apple Pay、Google PayはStripeの機能です。NexCMPはLink固有のデータを保存せず、Stripeから返されるカード参照情報のみを保持します。 - **PayPal。** 顧客が開始するすべてのPayPalトップアップにはクリックが必要です。保存されたPayPalは自動トップアップでのみ使用され、他の機能では使用されません。 - **Reseller sites.** リセラーが独自の Stripe または PayPal アカウントを使用する場合、そのサイトでは保存された決済方法が非表示になり、自動トップアップは利用できません。 - **紛争。** 支払に関する紛争が発生すると、アカウントがブロックされ、プリペイドサービスの提供が停止されます。[Stripe](https://nexcmp.com/ja/docs/billing/stripe/)を参照してください。 - **最後の決済方法を削除すると**自動トップアップがオフになりますが、顧客のウォレット残高は維持されます。 - **同意の記録。** 同意の記録はサーバーによって書き込まれ(顧客による編集は不可)、紛争対応のために保持されます。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | Settingsボタンや保存されたカードが表示されない | リセラー所有の決済チャネルを使用している、またはまだカード決済を行っていない | プラットフォームチャネルを通じてカードまたはPayPalでトップアップを行います。 | | Stripe決済後に「Saved card」が表示されない | 再利用できない決済方法(Alipayなど)で支払いが行われた | カードで再度支払いを行います。 | | PayPal:「このアカウントをまだ保存できません」 | PayPalからボルトトークンが返されなかった | 1回限りの支払いを続けるか、別のPayPalアカウントをお試しください。 | | カードの削除後に自動トップアップが停止した | 期待される動作:カードを削除すると無効になります | 次回の入金時に新しい決済方法を保存します。 | --- # 自動トップアップ {#auto-top-up} > **管理画面での場所:** Finance › Payment channels › Fees & limits(`/payments/fees`)、カード **Wallet & top-up (Billing › Policy)**、セクション **Auto top-up (Stripe / PayPal)**。**ポータルでの場所:** Billing › Settings(`/billing?settings=1`)。 ## 動作内容 {#what-it-does} 顧客のウォレット残高が低下すると、NexCMPは[保存された決済方法](https://nexcmp.com/ja/docs/billing/saved-payment-methods/)に課金してウォレットにチャージし、資金不足による稼働中サービスの停止を防ぎます。バックグラウンドジョブが、有効化されているすべての顧客を**5分ごとに**チェックします。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | チャネル | [Stripe](https://nexcmp.com/ja/docs/billing/stripe/)または[PayPal](https://nexcmp.com/ja/docs/billing/paypal/)が設定されていること。 | | 保存された決済方法 | 顧客が保存されたカードまたはPayPalアカウントを持っていること。 | | サイト | メインサイト、またはStripe/PayPalチャネルがプラットフォームで回収されるリセラーサイトであること。 | | グローバルスイッチ | **Auto top-up enabled**がオンになっていること(デフォルトはオン)。 | ## 動作原理 {#how-it-works} お客様が**初めてStripeまたはPayPalでチャージ**を行うと、サーバーは支払い方法を保存し、お客様自身で自動チャージが設定されていない場合に限り、**By usage**モードで自動チャージを有効にします。入金画面に追加のチェックボックスはありません。サーバーは日時、IPアドレス、決済方法を記録として保持します。お客様が後から自動チャージをオフにした場合、自動的に再びオンになることはありません。 | モード | トリガー(残高が以下の場合...) | 請求金額 | |---|---|---| | **By usage**(初回チャージ後のデフォルト) | 今後24時間のサービス稼働コスト(時間貸しVMおよび24時間以内に到来するプリペイド更新料金)、ただし**$5**を下回ることはありません | 24時間のコストを1ドル単位で切り上げた金額で、[minimum top-up](https://nexcmp.com/ja/docs/billing/minimum-top-up/)以上、最大チャージ額および1日の上限額以下となります | | **Fixed amount** | お客様独自の設定しきい値($1から$500) | お客様独自の金額(最小チャージ額から$1,000まで、かつしきい値より大きい金額) | **By usage**モードで稼働中のサービスがない場合、課金は行われません。 しきい値と比較される残高は、**ウォレット内のリアルマネー**です。プロモーションコードによるサービス利用クレジットは別管理となり、計算対象外となります([Promotions](https://nexcmp.com/ja/docs/billing/promotions/)を参照)。 手数料は通常のチャージと同様に処理されます。**Customer pays top-up fee**が有効な場合はカードに金額と手数料が合算して請求されウォレットには全額が入金され、無効な場合はウォレットに手数料を差し引いた金額が入金されます。 ## グローバル制限の設定 {#configure-the-global-limits} 1. **Finance › Payment channels › Fees & limits** (`/payments/fees`) を開きます。 2. **Auto top-up (Stripe / PayPal)**で以下を設定します: | 設定 | デフォルト | 範囲 | 意味 | |---|---|---|---| | Auto top-up enabled | On | オンまたはオフ | オフにすると、すべてのバックグラウンド課金が即座に停止します。 | | デフォルトの自動トップアップ閾値 (USD、固定モードフォールバック) | $5.00 | $0 から $10,000 | 固定モードにおける開始時のしきい値としてのみ使用されます。 | | 顧客ごとの24時間あたりの最大自動トップアップ回数 | 3 | 1から50 | 成功した試行と保留中の試行の両方がカウントされます。 | | 顧客ごとの24時間あたりの自動トップアップ金額上限 (USD) | $500.00 | $0から$1,000,000 | ローリング24時間における自動課金の合計金額。 | 3. **Save Wallet & top-up** をクリックします。 ![グローバルスイッチと1日の制限を備えたFees and limitsページのAuto top-upセクション](https://nexcmp.com/ja/docs/images/billing/auto-top-up-01-limits.webp) ## お客様の画面 {#what-the-customer-sees} 1. ポータルで、お客様は**Billing**を開き、**Settings**をクリックします。 2. パネルには、保存された支払い方法、オン/オフスイッチ、モード(**By usage**または**Fixed amount**)、推定現在利用状況と次回の請求予定額、および**Recent automatic top-ups**が表示されます。 3. **Fixed amount**に切り替えると、しきい値と金額を入力できるようになります。スイッチをオフにすると課金が停止します。 ![By usageモードの自動チャージと最近の自動チャージが表示されたお客様の請求設定](https://nexcmp.com/ja/docs/images/billing/auto-top-up-02-portal.webp) ## 確認 {#verify} 1. テスト用のお客様として、テストカード([Stripe](https://nexcmp.com/ja/docs/billing/stripe/#verify))で初回チャージを行います。**Billing › Settings** を開くと、自動チャージがオンになっています。 2. VMを小規模で稼働させて利用実績を作り、残高をしきい値未満に下げます(例:**Customers › customer › Credit / debit**を使用)。 3. 約5分以内に課金が行われます。お客様の**Overview › Payment**カードにある**Auto top-up history**にステータスが *Done* となった試行が表示され、*Top-up received* 通知が送信されます。 ## 制限と注意事項 {#limits-notes} - **1回の残高低下につき1回の課金。** 課金後、残高がしきい値以上に戻るか、待機時間が終了するまでジョブは待機します。成功後は1時間、保留中の課金後は24時間、システムエラー後は30分です。 - **日次制限。** いずれかの日次制限に達した場合、課金は行われず、*Daily limit reached* という行が記録されます(6時間に1回まで)。 - **失敗。** カードの拒否、有効期限切れ、残高不足はカードの失敗としてカウントされます。ジョブは1時間後、6時間後、24時間後に再試行します。**3回連続でカードの決済に失敗すると自動トップアップがオフになり**、お客様に通知されます(*Auto top-up failed*)。お客様の確認が必要な支払い(3-D Secureなど)は失敗としてカウントされず、お客様に確認するよう案内されます。 - **二重課金の防止。** 各課金はしきい値を下回る下落ごとにアトミックに実行され、ゲートウェイ側でべき等性キーが使用されます。 - **カードの削除**を行うと、自動トップアップはオフになります。 - **リセラー。** リセラーが独自の決済チャネルを使用している場合、お客様は自動トップアップを有効にできません(HTTP 403 `feature_disabled`)。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | お客様がオンにできない: 「カードまたは PayPal で1回トップアップする」 | 保存された決済手段がない | まずカードまたは PayPal で1回トップアップを行ってください。 | | エラー `no_card` (422) | 選択したゲートウェイに保存された決済手段がない | 決済手段を持つゲートウェイを選択するか、決済手段を保存してください。 | | 金額のエラー `invalid_argument` | 固定モードが許容範囲外 | しきい値は $1~$500、金額は最低トップアップ額から $1,000 の間、および金額らしきい値より大きいこと。 | | 残高が少ないにもかかわらず何も課金されない | グローバルスイッチがオフ、By usage モードで実行中のサービスがない、1日の制限に達した、または前の課金がまだ待機中である | スイッチ、履歴、制限を確認してください。 | | 「N回連続で失敗 — 3回で自動トップアップがオフになります」 | カードの失敗が続いている | お客様がカードを新しいデポジットに置き換える。 | | ステータス *Needs your confirmation* | 銀行による 3-D Secure の要求 | お客様が通常のトップアップを1回完了する。 | --- # 請求書と台帳 {#invoices-and-ledger} > **管理画面での場所:** Finance › Billing (`/billing`)(Overview、Transactions (`/billing/ledger`)、Invoices (`/billing/invoices`)、Top-ups (`/billing/deposits`)、Payouts (`/billing/payouts`)、Vouchers (`/billing/vouchers`)、Reports (`/billing/reports`) の各タブがあります)。**ポータルでの場所:** Billing (`/billing`)。 ## 動作内容 {#what-it-does} NexCMP 内のすべての金額は USD セント単位で保存され、1回記録されます。重要な概念として、**ウォレット台帳**が残高の信頼できる情報源(シングル・ソース・オブ・トゥルース)となり、請求書、トップアップ支払い、レポートはそこから構築されるビューとなります。台帳は**追記型(append-only)**であり、間違いの修正は履歴を編集するのではなく、逆仕訳エントリを追加することによって行われます。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | ロール | 管理者。 | | 販売者の詳細 | **System › Settings › General**の**Seller & invoicing**タブ(`/settings?tab=seller`)、**Seller details (printed on invoices)**カードで、法的名称、税金ID、住所、連絡先メールアドレス、請求書番号のプレフィックスを設定します。 | | 依存関係 | 入金用の[Payment channels](https://nexcmp.com/ja/docs/billing/payment-channels/)。 | ## 構成要素 {#the-pieces} | 管理画面タブ | リストされる内容 | 一般的な用途 | |---|---|---| | **Overview** | 本日の売上および今月の売上、種類別の台帳合計(入金、請求、返金、調整、バウチャー)、ステータス別の請求書、保留中の返金、ショートカット、過去30日間のサービス別支出 | 日次確認 | | **Transactions** | ウォレット台帳(1移動につき1行) | 顧客の残高を説明する | | **Invoices** | 請求書、およびすべてのサービスのすべての購入履歴を表示する2つ目のビュー**Orders** | 書類の検索、再送信、支払済みのマーク | | **Top-ups** | 決済ゲートウェイを通じて受領した支払い | 支払いの確認と返金 | | **Payouts** | カードの返金、アフィリエイト報酬、リセラーの出金 | 出金の承認 | | **Vouchers** | トップアップコード | [Promotions](https://nexcmp.com/ja/docs/billing/promotions/)を参照 | | **Reports** | サービス別、リセラー別の売上 | 会計 | ### トランザクション(台帳) {#transactions-ledger} 列:日時、顧客、**種類**、サービス、金額(符号付き)、VM、参照ID、アクター、メモ。フィルター:種類、サービス、顧客ID、サイト(リセラーがいる場合)、日付範囲、およびVMリンク。 | 種類 | 意味 | |---|---| | `deposit` | ゲートウェイからのトップアップ | | `charge` | サービスの代金として引き落とされた金額(注文、更新、時間制の利用など) | | `refund` | ウォレットに返金された金額 | | `adjust` | 管理者によるクレジットまたはデビット、およびトップアップコード(参照IDは`vch:`で開始)。概要ではバウチャーが独自の行として表示されます | すべての行には`dep:stripe:`のような参照IDがあり、同じ参照IDを二重に書き込むことはできないため、重複したWebhookによって二重に入金されることはありません。手動調整を追加するには**Customers › List › customer › Credit / debit**を使用します。理由は必須であり、正の金額を指定すると資金不足でロックされたVMのロック解除も試行され、アクションは2段階で確認されます。 ![種類、サービス、金額、参照IDが表示されたウォレット台帳行を示すTransactionsタブ](https://nexcmp.com/ja/docs/images/billing/invoices-and-ledger-01-ledger.webp) ### 請求書 {#invoices} 請求書は、顧客がウォレットから支払う形でのサービスの購入や更新を行った際、またはトップアップ時に自動的に作成されます。番号の形式は`-<000001>`(例:`NX202610-000042`)で、リセラーサイトでは独自のプレフィックスと連番が使用されます。プレフィックスを変更しても、既存の番号が変更されることはありません。 | 項目 | 値 | |---|---| | 種類 | レシート、更新、トップアップ、手動、返金 | | ステータス | 未払い、支払済み、期限切れ、キャンセル済み、返金済み | 行に対するアクション: | アクション | 効果 | |---|---| | **View** / **Print** | 請求書を開きます。ポータルから印刷したり、PDFとして保存することもできます。 | | **Mark paid**(未払いまたは期限切れのみ) | **ウォレット残高を移動せずに**支払済みにマークします。顧客からNexCMP以外で支払いを受けた場合に使用します。理由は必須です。更新請求書の場合、ロックされたVMの期間延長とロック解除も行われます。 | | **Cancel**(未払いまたは期限切れのみ) | 請求書をキャンセルします。理由は必須です。 | | **Resend** | 請求書を再度メールで送信します。 | **手動請求書の作成** (タブ上部のボタン): 顧客ID、1〜50行の明細 (説明、数量、単価)、任意のVM ID、任意の支払期限日数 (0〜365、デフォルトは7)、任意のメモ。未払いとして作成され、お客様は**Billing › Invoice History**で確認できます。 サービスの未払い請求書は、残高が補充され次第**ウォレットから自動的に精算**されるため、お客様の操作は入金のみとなります。 ### トップアップ(入金) {#top-ups-payments} 試行ごとに1行:日時、顧客、**決済ゲートウェイと方法**、種類(トップアップまたは自動トップアップ)、ステータス(保留中、完了、失敗、返金済み、紛争中、キャンセル済み)、お客様の支払額、手数料、ウォレットへの入金額、ゲートウェイの参照番号と完了日時。完了したStripeおよびPayPalの支払いには**Refund**操作があります。Webhookを確認するには、決済チャネルのページ([Payment channels](https://nexcmp.com/ja/docs/billing/payment-channels/))を使用します。 ### 出金 {#payouts} 3つのサブタブ:**Card refunds**(返金リクエストの承認または拒否。リクエストは完了した支払いから作成されます)、**Affiliate payouts**(紹介報酬の引き出し)、**Reseller withdrawals**(リセラーの引き出し)。すべての決定は監査されます。 ### レポート {#reports} **Revenue**(30日間のトレンド、月別、上位顧客)、**By service**、**By reseller**。 ![収益KPIと30日間のトレンドを示すReportsタブ](https://nexcmp.com/ja/docs/images/billing/invoices-and-ledger-03-reports.webp) ## お客様の画面 {#what-the-customer-sees} **Billing**では、お客様は**Balance**、**Deposit**、**Redeem code**、**Settings**(自動トップアップ)、および**Invoice History**、**Payment Order**、**Ledger**、**Orders**(サービスとタイプでフィルタリングできる1つのリスト内のすべてのサービス)のタブ付き履歴を利用できます。各請求書には**View**、**Print**、**Save as PDF**があり、金額はUSDで表示され、表示通貨で任意に切り替えることもできます。 ## 確認 {#verify} 1. テスト顧客として少額のトップアップを行います。 2. **Transactions**に`deposit`の行が表示され、**Top-ups**に支払いが*Completed*として表示され、**Overview**の収益が増加します。 3. 購入を行います:`charge`の行が表示され、**Invoices**に設定した販売者の詳細を含む*Receipt*または*Renewal*の請求書が表示されます。 ## 制限と注意事項 {#limits-notes} - **追記専用。** 元帳の行を編集または削除する方法はありません。理由を添えて調整(アジャストメント)を追加してください。 - **通貨。** 金額はUSDです。表示通貨は装飾的なものです([Currency and exchange rates](https://nexcmp.com/ja/docs/catalog/currency-and-exchange-rates/)を参照してください)。 - **カードへの返金**は2段階のプロセス(リクエスト、次にPayoutsでの承認)です。USDTや銀行振込は元の支払方法には返金されません。 - **すべてが監査されます。** 入力された理由とともに、System › Logs › Admin actionsに記録されます。 - **注文と請求書の違い。** 時間単位の使用量は時間ごとに請求されません。Ordersビューでは日別にグループ化されるため、引き続き確認できます。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | 顧客の残高が正しくないように見える | 予期しない課金、調整、またはクーポン | **Transactions**を顧客IDでフィルタリングし、参照番号とメモを確認します。 | | "請求書はすでに支払い済みです" (409) | 支払い済みの請求書に対して「支払済みにする」を実行した | 特に行うべきことはありません。 | | 請求書をキャンセルできない | キャンセルできるのは未払いまたは期限切れの請求書のみです | 支払い済みの請求書の場合は、返金または調整を使用してください。 | | 請求書に販売者の詳細が表示されない | 入力されていない | System › Settings › General › Seller & invoicingで**Seller details**を入力してください。 | | クレジットカード/デビットカードが拒否された | 金額がゼロ、または$100,000を超えています | 1セントから$100,000の間の金額を使用してください。 | | 支払いが長期間*Pending*のままになっている | Webhookが欠落している | **Gateway events**を確認し、再再生(リプレイ)してください。 | --- # プロモーション {#promotions} > **管理画面での場所:** Finance › Billing › Vouchers (`/billing/vouchers`)。**ポータル画面での場所:** Billing › Redeem code(デポジット引き出し画面内からも利用可能です)。 ## 動作内容 {#what-it-does} **トップアップコード**(バウチャー)は、顧客に配布する1回限りの秘密のコードです。作成方法に応じて、以下の機能を利用できます。 | タイプ | 顧客が受け取る内容 | 値の適用先 | |---|---|---| | すべてのサービス向けの**Bonus credit** | ウォレットに追加される金額 | ウォレット残高。何にでも使用可能です。 | | 選択したサービス向けの**Bonus credit** | サービス クレジット | それらのサービスの支払いのみに使用できる別個のポケット。 | | **Discount %** | 選択したサービスの初回注文に対する割引率 | クレジットは付与されず、チェックアウト時に割引が適用されます。 | キャンペーン、お詫びとしてのクレジット、パートナー向け特典、または初回注文の割引にご利用ください。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | ロール | 管理者。 | | 顧客 | 顧客はポータルにサインインした状態でコードを引き換えます(ゲストとしては不可)。デフォルトでは、顧客のメールアドレスが検証されている必要があります。 | | VNDコード | VNDで作成されたコードは、保存されている為替レートを使用して引き換え時にUSDに変換されます([Currency and exchange rates](https://nexcmp.com/ja/docs/catalog/currency-and-exchange-rates/)を参照してください)。 | ## バッチの作成 {#create-a-batch} 1. **Finance › Billing › Vouchers**を開き、**Create vouchers**をクリックします。 2. フォームに必要事項を入力します。括弧内は入力例です。 | 項目 | 備考 | |---|---| | バッチ名 | 1〜80文字(`Spring welcome`)。 | | 対象 | **メインサイトのクライアント**、**単一リセラーの顧客**(顧客のリストが必要)、または**リセラーのウォレット**。 | | 対象ユーザー | **対象オーディエンス全員**または**指定**(1行につき1つのメールアドレスまたは顧客ID、最大1,000件)。リセラーの顧客の場合は*指定*にする必要があります。 | | 対象ごとに1つのコード | *指定*の場合、リストされた顧客ごとに1つのコードを作成します。 | | コードタイプ | **Bonus credit**または**Discount %**。 | | 適用対象 | 1つ以上のサービスを選択します。空欄の場合は**すべてのサービス**になります。 | | 通貨、額面 | USDの場合は$1.00から、VNDの場合は10,000から1,000単位(ボーナス クレジットのみ)。 | | 割引(%) | 1から100まで(割引 % のみ)。 | | 最大割引上限(USD) | 割引 % に必須で、$1.00から設定できます。また、1回の引き換えあたりの最大損失額にもなります。 | | 最低注文金額(USD) | `0` = なし。初回注文は少なくともこの金額以上である必要があります。 | | コード数 | 1から1,000個のランダムなコード。 | | コードあたりの使用回数 | 1~100,000。`1`はコードごとに1人、共有コードの場合は増やします。 | | アカウントあたりの最大使用回数 | 1以上を指定してください。割引率(%)の場合は`1`です。 | | 開始日時(任意)、有効期限 | 有効期限は本日の後かつ開始日後で、最大2年先までです。 | | コードの接頭辞(0~6文字) | 文字のみ。空欄の場合はサイトの接頭辞を使用します。 | | カスタムコード(数量 = 1の場合のみ) | 6~32文字のA~Zおよび0–9。共有しやすい反面推測されやすいため、使用回数は少なく設定してください。 | | メール認証を必須にする | デフォルトでオン。 | | 内部メモ、理由 | 理由は必須であり、監査ログに記録されます。 | 3. フォームには最悪のケースを把握できるよう、**最大エクスポージャー**(額面 × コード数 × 使用回数)が表示されます。**Generate codes**をクリックします。 4. **今すぐコードをコピーしてください。** コードは一度しか表示されず、NexCMPが保存するのはハッシュと末尾4文字のみです。**Copy all**または**Download CSV**を使用し、確認にチェックを入れてボックスを閉じます。 ## 各タイプの動作 {#how-each-type-behaves} ### ウォレットボーナス(サービス未選択) {#wallet-bonus-no-service-selected} ウォレットには**調整**エントリ(参照:`vch:...`)としてクレジットが追加されます。カードへの返金はできず、アフィリエイト報酬の対象外となり、請求書は作成されず、クオータのウォレット残高としてカウントされます。VNDコードには、引き換え時点の為替レートが適用されます。 ### サービスクレジット(サービス選択済み) {#service-credit-services-selected} - クレジットは**別枠のポケット**に保持され、選択したサービスの料金(新規注文、更新、時間単位または日単位の料金、アップグレード)の支払いにのみ使用でき、ウォレットよりも**優先して**消費されます。 - 出金、送金、現金化はできず、コードの有効期限とともに失効します。 - 元帳には、完全な請求額に一致するクレジット行が追加で記録されるため、顧客が実際に支払った金額のみウォレットから引き落とされる一方で、サービスごとの収益は正しく維持されます。 - [クォータ](https://nexcmp.com/ja/docs/billing/quotas/)のティアを引き上げることは**なく**、[自動チャージ](https://nexcmp.com/ja/docs/billing/auto-top-up/)では無視されます。 - クレジットまたは割引で支払われた料金が返金された場合、コードが支払った分はウォレットの返金から差し引かれ、クレジットのポケットに戻されます。 ### 割引 % {#discount} 1. 顧客がコードを入力すると、**有効化**されます。パーセンテージコードは、1アカウントにつき1回のみ使用できます。 2. 時間単位の料金ではなく、選択したサービスの**初回請求**のうち、**最低注文金額**以上の部分に対してパーセンテージ割引が適用され、**最大割引上限**を超えることはありません。 3. 割引は課金時にサーバーによって再計算され、ブラウザ上の金額は無視されます。引き換え行は、コードが実際に使用された際に実際の割引額で書き込まれます。 4. 時間単位の使用料金にはコードは適用されません。 ## 顧客の操作 {#what-the-customer-does} 1. ポータルで**Billing**を開いて**Redeem code**をクリックするか、入金ドロワーの**Have a top-up code?**を使用します。 2. コードを入力し(大文字小文字は区別されず、ハイフンは任意)、**Check**をクリックします。ポータルには、*Valid code: +$5.00*、*$5.00 credit for VPN*、*20% off voucher for Virtual Machines (up to $5.00)*、*Valid for orders from $10.00*などの付与内容が表示されます。 3. **Redeem**をクリックして確認します。各コードは1アカウントにつき1回使用できます。 コードはサイトに紐付けられています。あるサイトのコードは別のサイトでは「無効」となり、他の場所に存在することを示すヒントは表示されません。間違った推測はスロットルされ、数回間違えるとアカウントが数分間ロックされます(「N attempts left before a temporary lock」)。 ## 追跡と停止 {#track-and-stop} - **Batches**には、各バッチのステータス(*active*、*disabled*、*expired*、*used up*)、利用回数、リスク額がリスト表示されます。バッチを開くと、**Codes**(マスク表示)および**Redemptions**タブ、ならびに**Export CSV**を利用できます。 - **Redemptions**には、バッチ全体でのすべての利用履歴がリスト表示されます。**Reseller quotas**には、リセラーごとの月間発行制限の消化状況が表示されます。**Settings**では、リセラーコードの有効/無効の切り替えやデフォルトの月間制限の設定を行います。 - **Disable batch**は未使用のコードをすべて停止しますが、すでに利用された分はそのまま残ります。単一のコードを個別に無効にすることも可能です。 ## 確認 {#verify} 1. 1個のコードのバッチを作成する: 割引% 20、上限 $5、最低注文額 $10、対象サービス Virtual Machines。 2. テスト顧客としてコードを適用します。ポータルに有効化されたことが表示されます。 3. $10以上のVM(月額サイクル)を注文します: インボイスに割引(最大 $5)が表示されます。 4. バッチ内で、そのコードに実際の割引での1回の適用履歴が表示されます。 ## 制限と注意事項 {#limits-notes} - コードは作成時に**オーディエンス**と**サイト**に紐付けられ、後から変更することはできません。 - リセラーは、月額の露出制限内で自分の顧客に対してコードを発行できます。[Resellers](https://nexcmp.com/ja/docs/customers/resellers/)をご覧ください。 - お客様向けサイドバーのプロモーションスライド(**Marketing › Promo slides**)は別機能であり、割引は適用されません。 - プレーンテキストのコードは保存されないため、紛失したバッチを復元することはできません。無効化して新しく作成してください。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | "パーセントコード: 1アカウントにつき1回のみ使用可能" (`percent_one_per_account`) | Discount %の1アカウントあたりの最大使用回数が1より大きい | `1`に設定します。 | | フォームに上限が必須と表示される | 最大割引上限なしのDiscount % | $1.00以上を入力してください。 | | 顧客が見つからない | リスト内のメールアドレスまたはIDが存在しない | リストを修正してください(エラーに不明なエントリの名前が表示されます)。 | | 顧客から「無効なコード」と伝えられる | サイト違い、有効期限切れ、無効化、使い切り、対象外の顧客、またはメールアドレス未確認 | バッチと顧客を確認してください。 | | クレジットが使用されなかった | チャージが別のサービスに属している | クレジットはバッチで選択されたサービスにのみ適用されます。 | | 割引が適用されなかった | 最低注文金額未満、時間単位の料金、または別のサービス用にコードが有効化されていた | 条件を満たす最初の注文を行ってください。 | | 顧客が適用のロックアウト状態になっている | 誤った試行回数が多すぎる | ロックが解除されるまでお待ちください。 | --- # クォータ {#quotas} > **管理画面での場所:** Services › Virtual Machines › Policy › Quota tab (`/vm/policy?tab=quota`)。お客様ごと: Customers › List › a customer › Overview (`/customers/`)、カード **Quota**。**ポータルでの場所:** Client › Quotas (`/client/quotas`)。 ## 動作内容 {#what-it-does} クォータは、新規アカウントによる不正利用からシステムを保護します。ウォレットに入金された実資金が多いほど、作成できるリソースが増加します。2つのレイヤーがあります: - **VMおよびKubernetesリソース**: vCPU、RAM、ディスクの合計、およびVM数。ティアは固定プランです。 - **サービス制限**: 入金された資金に基づく5つのティア(L0〜L4)における、IPアドレス、クラスター、VPC、ストレージのGB数などの制限。 クォータは課金の**前**にチェックされます。制限を超えたリクエストはHTTP 403 `quota_exceeded`で拒否され、顧客に必要な追加トップアップ額が通知されます。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | ロール | 管理者。 | | スイッチ | **Enable quota**(`quota_enabled`)はデフォルトで**オフ**になっています。有効にするまで、以下の設定は適用されません。 | | 固定プラン | 少なくとも1つの非カスタムプラン([Plans](https://nexcmp.com/ja/docs/catalog/plans/)を参照) — リソースティアは固定プランとなります。プランがない場合、VM数ルールのみが適用されます。 | | 依存関係 | サービスプロテクタの行は、インストレーションで有効化されているプロダクト(VPN、IPv6 proxy、Kubernetes、Private Cloud、Images、Object Storage、Dedicated)のみに存在します。 | ## 基準の算出方法 {#how-the-basis-is-calculated} NexCMPはカード決済のみを参照しません。**基準**となるのは、お客様の**記帳済みウォレット残高**です。ゲートウェイのトップアップ、管理者クレジット(**Credit / debit**)、および引き換えられたウォレットバウチャーはすべて、ウォレット元帳を通じて1回としてカウントされます。プロモーションコードによる注文割引やサービスクレジットはウォレットの資金ではないため、カウントされません。お客様がこれまでに到達した最も高い基準は(サイトごとに)**保持**され、支出や返金によって、すでにロック解除されたTierが下がることはありません。 ### VMおよびKubernetesリソース {#vm-and-kubernetes-resources} 1. Tierはサイトの固定プランであり、24時間実行した場合のコストの昇順でソートされます。 2. 24時間のコストが基準を超えない範囲で、お客様は最も高いTierに属します。制限は、そのプランのvCPU、RAM、およびディスクです。最も安いプランの費用すら払えないお客様でも、最も安いプランのリソースを取得できます。 3. 制限に対してカウントされる使用量は、すべての稼働中のVM(ロックされたものを含む)、購入済みのデータボリューム(切断されている場合も含む)、ならびにKubernetesのワーカーおよびコントロールプレーン(ワーカーはVMとしてもカウントされます)です。 4. **VM数:** **Max VMs at 24h tier**(デフォルト2)まで。次のVMからは、既存のすべてのVMと新しいVMの合計について、**30日間(720時間)**分をカバーする*現在*のウォレット残高が必要となり、**Max VMs when meeting 30-day threshold**(デフォルト10)まで許可されます。 5. **VMの作成**には、そのVMの少なくとも**N時間**分の残高(**Create VM: balance ≥ N hours**、デフォルト2)と、プラットフォームの最低残高も必要です。 6. VMを小さくすることは決してブロックされません。増加する次元のみがチェックされるため、ディスク制限を超えているお客様でも、vCPUの制限が許せばvCPUを追加できます。 ## 設定 {#configure} 1. **Services › Virtual Machines › Policy**を開き、**Quota**タブを選択します。 2. **Enable quota**をオンにします。 3. 3つの数値を確認します(すべて編集可能です): | 項目 | デフォルト | 範囲 | |---|---|---| | VM作成: 残高 ≧ N時間 | 2 | 1から720 | | Max VMs at 24h tier | 2 | 1から100 | | 30日間の閾値を満たしている場合の最大VM数 | 10 | 1から1000(前のフィールドを下回ることはできません) | 4. **Tier-based service quotas**でテーブル(下部)を編集します。 5. **Save**をクリックします。NexCMPが**理由**の入力を求め、これは古い値および新しい値とともに監査ログに記録されます。変更はすべてのお客様に適用されます。 ![有効化スイッチ、VM制限、およびTierベースのサービスサービスクォータテーブルが表示されたQuotaタブ](https://nexcmp.com/ja/docs/images/billing/quotas-01-policy.webp) ### サービスサービスクォータテーブル {#service-quota-table} この表には5つのティアがあります。ヘッダーセル **L0** から **L4** には**セント単位の入金しきい値**が入ります。デフォルトの `0, 1000, 5000, 20000, 100000` は、新規アカウントの L0、$10 からの L1、$50 からの L2、$200 からの L3、$1,000 からの L4 を意味します。最初のしきい値は `0` のままでなければなりません。各行はティアごとの1つのキーのクォータを設定します。**-1 は無制限**を意味します。 | キー | 意味 | L0 | L1 | L2 | L3 | L4 | |---|---|---|---|---|---|---| | `vpn.ips` | VPN IPs | 2 | 10 | 30 | 100 | 500 | | `proxy6.ips` | IPv6 proxy IPs | 500 | 2000 | 10000 | 50000 | -1 | | `dedicated.servers` | Bare-metal servers | 1 | 2 | 5 | 20 | 50 | | `s3.storage_gb` | Object Storage GB allocated | 2048 | 4096 | 10240 | 51200 | -1 | | `k8s.clusters` | Kubernetes clusters | 1 | 2 | 5 | 10 | 30 | | `k8s.workers` | Kubernetes worker nodes | 3 | 9 | 18 | 50 | 200 | | `vpc.count` | Private Cloud networks | 1 | 2 | 5 | 10 | 30 | | `images.gb` | カスタムイメージストレージ GB | 50 | 100 | 200 | 500 | 2000 | この表には、このリリースに含まれていない製品の行もいくつか記載されています。それらは変更せずにそのままにしてください。製品が無効になっているキーは非表示になり、適用されることもありません。値は `-1` であるか、`0` から `10,000,000` の間である必要があります。 サービス・クォータは、VMティアと同様に**資金基準**に従います。カード決済の合計ではなく、到達したウォレット残高の最高額に基づきます。リセラー顧客も同じデフォルトを使用し、リセラーはそれらを閲覧することのみ可能です。 ## 顧客ごとのオーバーライド {#per-customer-overrides} 1. **Customers › List** を開き、対象のお客様を選択します。**Overview** でカード **Quota** を確認します。 2. **VMリソース:** **Quota override** をクリックし、次の中から選択します。 - **トップアップ残高による(オーバーライドを解除)** — デフォルトの動作です。 - **無制限(VM数を含む)** — この顧客のすべての制限を解除します。 - **プラン・ティア** — リソースの上限をそのプランに固定します。VM数のルールは引き続き適用されます。 理由を入力します。プラットフォーム管理者は任意のティアを設定できます。リセラーによって設定されたオーバーライドは、顧客の保持基準を超えることはできません。 3. **サービス:** *Service quotas* の下の表には、各キーの *In use*、有効な制限、およびその *Source*(ティアまたはオーバーライド)が表示されます。行の **Edit** をクリックし、**New quota**(`-1` = 無制限、空欄 = ティアのデフォルトに戻す)と理由を入力します。 ![ティア、リソース使用量、およびオーバーライド付きのサービス・クォータ表が表示された、顧客の Quota カード](https://nexcmp.com/ja/docs/images/billing/quotas-02-customer.webp) すべてのオーバーライドは、管理者、理由、および変更前/変更後の値とともに監査ログに記録されます。 ## お客様の画面 {#what-the-customer-sees} **Client › Quotas**(`/client/quotas`)には、顧客の**現在のティア**、使用済みおよび合計の vCPU、RAM、ディスク、VM数(VMとKubernetesに分割)、**対象となるウォレット残高**、**保持リソース基準**(利用しても減少しません)、および次のティアまでにトップアップすべき金額が表示されます。スライダーを使用すると、目標とするティアを選択して直接入金画面に移動できます。**Service Quotas** カードには、各サービスのクォータ、使用量、ティア(L0 から L4)、次のティアのためにさらにいくら入金する必要があるか、およびサポートチケットの下書きを開く **Request increase** ボタンがリスト表示されます。**Quota policy** ボタンをクリックすると、ルールが表示されます。 ![現在のティア、リソース使用量、サービス・クォータが表示されたポータルの Quotas ページ](https://nexcmp.com/ja/docs/images/billing/quotas-03-portal.webp) ## 確認 {#verify} 1. **Enable quota** を有効にし、残高が $0 の新しいテスト顧客を使用します。 2. 最安プランより大きな VM の作成を試みます。リクエストは `quota_exceeded` とメッセージ「Exceeds the resources of tier ... Top up $X more to unlock tier ...」により拒否されます。 3. 表示された金額をトップアップします。ティアが即座に変更され、同じリクエストが成功します。 4. L0 の制限を超える VPN IPs を購入します: HTTP 403 `quota_exceeded` と `"scope":"service"`、および `/client/quotas` へのリンクが表示されます。 5. 顧客の Quota カードで、**Source** は *tier* を示しています。オーバーライドを設定すると、*override* に変更されるのが確認できます。 ## 制限と注意事項 {#limits-notes} - **オフは完全にオフを意味します。** `quota_enabled` がオフの場合、従来のルール `new_account_max_vms` (**Services › Virtual Machines › Policy › Sales**) により、入金額が$10に達するまで新規アカウントは2台のVMに制限されます。クォータがオンの場合、そのルールは適用されなくなります。 - **管理者が作成したVMはブロックされません。** - **エラー時はクローズ動作となります。** クォータの状態を読み取ることができない場合、リクエストは許可されるのではなく、`quota_unavailable`により拒否されます。 - **API、CLI、MCP**のリクエストは同じハンドラーを使用するため、同じ制限が適用されます。 - **プロモーションクレジット**ではティアは上がりません([Promotions](https://nexcmp.com/ja/docs/billing/promotions/)を参照してください)。 - **ティアの閾値の単位はドルではなくセント**です。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | `quota_exceeded`、理由 `resources` | 新しい合計 vCPU/RAM/ディスクがティアを超過しています | メッセージ内の金額をトップアップするか、上書きを設定してください。 | | `quota_exceeded`、理由 `vm_30d` | 24時間ティアのVM数を超えており、ウォレットがまだフリートの30日分をカバーしていません | 表示されている金額をトップアップしてください。 | | `quota_exceeded`、理由 `vm_max` | VMの絶対上限に達しました | **Max VMs when meeting 30-day threshold**を引き上げるか、上書きを使用してください。 | | `quota_exceeded`, `scope: service` | サービスごとの制限に達しました | テーブルの値を上げるか、その顧客のキーを上書きしてください。 | | `quota_unavailable` | クォータの状態を確認できませんでした | 再試行してください。解決しない場合はサーバーログを確認してください。 | | 保存時に "quota_max_vms_30d must be >= quota_max_vms_24h" が発生しました | 値が逆転しています | 30日間の数値を24時間の数値以上に設定してください。 | | 顧客からティアが下がったとの報告があります | ティアは下がりません。**Held resource basis**とプラン費用を比較してください | プラン価格表を確認してください。プラン価格の値上げによって閾値が移動する場合があります。 | --- # 顧客の管理 {#managing-customers} > **管理画面での場所:** Customers › Customers › List(`/customers`)、Deletion requests(`/customers/requests`)、Service transfers(`/customers/transfers`)、API keys(`/customers/apikeys`)。 ## 動作内容 {#what-it-does} Customersエリアは、サポートスタッフがアカウントを検索し、ウォレット、サービス、チケット、ログイン履歴を確認して、ロック、ロック解除、メールの確認、パスワードのリセット、クレジットの追加または削除、なりすまし、VMの作成、アカウントの閉鎖などの操作を行う場所です。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | ロール | 管理者。すべての書き込み操作で理由の入力が求められ、監査ログ(System › Logs › Admin actions)に記録されます。 | | メール | パスワードリセットおよび招待メールには、動作する[SMTP configuration](https://nexcmp.com/ja/docs/administration/smtp-and-emails/)が必要です。 | ## 顧客リスト {#the-customer-list} **Customers › List** を開きます。Customers はメインサイトのアカウントです。リセラーのアカウントも表示され、サイトごとに絞り込むことができます。 ![フィルター、国、紹介元、残高、VM数の各列が表示された顧客リスト](https://nexcmp.com/ja/docs/images/customers/managing-customers-01-list.webp) | 列 | 意味 | |---|---| | **Email**(および氏名) | クリックして顧客を開きます。 | | **State** | *Active*、*Locked*、または*Deleted*に加え、*verified*または*unverified*のメール。ロックタグにカーソルを合わせると理由が表示されます。 | | **Login** | 顧客が持つサインイン方法:パスワード、Google、GitHub、パスキー。 | | **Country** | **IPアドレス**から取得された国旗と国名:登録IPの国、またはそれが不明な場合は最後のサインインIPの国。ツールチップにどちらが使用されたかが表示されます。 | | **紹介元** | *Referral* は、お客様が紹介リンク経由で登録した場合は紹介者と紹介コード、それ以外の場合は「Not recorded」と表示されます。 | | **Balance**、**VMs** | ウォレット残高(マイナス値は赤色)と稼働中のVM数。 | | **IP登録 / 最終** | 登録時および最後のサインイン時に使用されたIP(2文字の国名コード付き)。1つのアドレスから複数のアカウントを作成している不正などを発見するために使用します。 | | **Tenant** | お客様の内部テナントID。 | | **Created**、**Last login** | 相対時間。 | | **Site** | リセラーがある場合に表示されます。 | **Search**では、メールアドレス、名前、またはIPによる検索が可能です。**Filters:** 状態(すべて、有効、ロック済み、削除済み)、ログイン方法(任意、Google、GitHub、passkey、まだパスワードなし)、サイト。フィルターはURLに保持されるため、フィルター適用済みのリストをブックマークしたり、同僚と共有したりできます。 **並び替えはグローバルです。** *Email*、*State*、*Balance*、*VMs*、*Created*、または *Last login* のヘッダーをクリックすると、現在表示しているページだけでなく、サーバー上の**すべて**の顧客ベースが並び替えられ、ページ番号は1に戻ります。 **リストは自動で更新されます。** 閲覧中は数秒ごとに更新され(ダイアログが開いている間や入力中は一時停止)、再読み込みなしで新規登録や残高変更が反映されます。顧客ページは表示中に約30秒ごとに更新され、各タブは初回展開時にそれぞれのデータを読み込みます。 ### 顧客の作成 {#create-a-customer} 1. **Create customer**をクリックします。 2. **メールアドレス**、任意の**表示名**、任意の**パスワード**(空欄の場合は顧客が招待リンクから設定します)、および**招待メールを送信するかどうか**を選択します。 3. 確認します。手動で作成したアカウントは、招待を送信した時点で認証済みとしてカウントされます。 ## 顧客ページ {#a-customer-s-page} 行をクリックします。ページには8つのタブがあり、選択したタブはURLに保持されるためブックマークが可能です。タブは初回展開時に読み込まれ、別のタブに切り替えても状態が維持されます。 | タブ | コンテンツ | |---|---| | **Overview** | 本人確認、登録および最終サインイン情報、ウォレットおよびサービスの概要 | | **Services** | タイプおよびステータスでの絞り込み、検索、サーバーサイドソート、ページネーションを備えた、顧客のサービスをまとめた1つのテーブル | | **Billing** | ウォレットとクレジット、台帳、請求書、支払い、返金、保存された決済手段、自動チャージ | | **Quota** | リソース制限とオーバーライド。[Quotas](https://nexcmp.com/ja/docs/billing/quotas/)を参照してください | | **Security** | セッション、認証、サインイン方法、サインイン履歴、APIキー。[API keys](https://nexcmp.com/ja/docs/developers/api-keys/)を参照してください | | **Support** | 最近のチケット | | **Affiliate** | 紹介プログラムのステータス | | **Log** | 監査およびアクティビティ履歴 | ヘッダー内のアクションボタン(削除済みアカウントでは非表示): | ボタン | 動作内容 | |---|---| | **Lock account** / **Unlock** | サインインとAPIアクセスをブロックします。オプションで、すべてのVMを停止(削除はしません)することもできます。VM以外のプリペイドサービス(Kubernetes、Private Cloud、VPNなど)も同様に停止されます。管理者がロックしたVMは、VMページで個別に解除する必要があります。 | | **Verify email** | お客様がリンクをクリックしなくても、メールアドレスを認証済みとしてマークします。 | | **Send reset link** | パスワードリセットリンクをメールで送信します(有効期限1時間、1回限り)。SMTPが設定されていない場合は、手動で送信できるようにリンクが一度だけ画面に表示されます。管理者がパスワードを見ることは絶対にありません。 | | **Impersonate** | 1時間、お客様としてサインインします。[Log in as a customer](https://nexcmp.com/ja/docs/customers/login-as/)をご覧ください。 | | **Credit / debit** | 台帳調整によりウォレット残高を追加または削減します。[Invoices and ledger](https://nexcmp.com/ja/docs/billing/invoices-and-ledger/)をご覧ください。 | | **Revoke sessions** | お客様をすべてのセッションからサインアウトさせます。アプリトークンが機能しなくなります。 | | **Create VM** | お客様のVMを作成します。 | | **Soft delete** | アカウントをクローズします。確認のためメールアドレスの入力が必要です。 | ### 個別サービスの管理 {#manage-an-individual-service} 顧客の**Services**タブを開き、名前、ID、IP、または構成でサービスを検索して、行のアクションを使用します。同じアクションはサービス固有の管理者リストでも利用できます。ダイアログには、そのサービスおよび現在のステータスでサポートされているアクションのみが表示されます。 | アクション | 効果 | |---|---| | **Lock** | データを保持したままサービスを停止します。顧客側にはロック中と表示され、操作できなくなります。チャージを行っても管理者ロックは解除されず、ロック中は自動更新がブロックされます。 | | **Unlock** | 管理者ロックを解除します。無関係な不正利用対策やその他の保護ロックは解除されません。 | | **Cancel without refund** | 返金台帳エントリーを作成せずにサービスを解約します。確認画面では、解約を取り消すことができない旨の警告が表示されます。 | | **Cancel and refund** | 元の支払い、ウォレット/クレジットの割り当て、過去の返金、および最大返金可能額を表示します。確認する前に金額を確認してください。 | すべての操作で理由を入力してください。理由は管理者向けであり、お客様には中立的なサービスイベントまたは通知が届きます。返金されたウォレットの残高はウォレットに戻り、クレジットやプロモーションの割り当て分はクレジットに戻ります。この操作によって、Stripe、銀行振込、またはPayPalを通じて資金が返金されることはありません。 同一タイプの複数のサービスについては、最大50行を選択して一括操作を選択します。結果には行ごとの成否が表示されます。一括返金では各サービスの推奨金額が使用されます。推奨返金額がゼロのサービスは返金モードでスキップされるため、個別の確認または返金なしでの解約が必要です。 DDoS Shield、ディスク、backupsはここでは読み取り専用の行です。帯域幅アドオンは親サービスに従います。AI Modelsへのアクセスはロックできますが、解約するサブスクリプションはありません。レンタル中のBare Metalサーバーをロックするには、注文ではなくサブスクリプションに対して操作を行ってください。 ### アカウントのクローズ(ソフトデリート) {#closing-an-account-soft-delete} アカウントは*deleted*(削除済み)に設定され、ブロックされ、セッションが無効化され、未払いの紹介報酬は取り消されます。請求書と台帳は会計目的で保持されます。お客様が**稼働中のサービス**(VM、Kubernetes、プライベートクラウド、専用サーバー、VPN、IPv6プロキシ)のいずれか、S3アカウント、または未清算のS3利用量を保有している間はこの操作は拒否されます。それらを先に削除してください。 ## 削除リクエスト {#deletion-requests} お客様はアカウントページから削除を依頼できます。リクエストは **Customers › Deletion requests**(デフォルトのフィルター: 保留中)に表示され、お客様、理由、稼働中VM数、残高、リクエスト時間が記載されます。 - **Approve deletion**は、お客様が稼働中のVMを保有していない場合にのみ実行可能です。確認のためメールアドレスを入力してください。アカウントはソフトデリートされ、**残りのウォレット残高は自動的に返金されません**。返金が必要な場合は、事前に返金処理を作成してください。 - **Reject**には理由の入力が必要です。 ## サービスの移行 {#service-transfers} **Customers › Service transfers**には、**同じサイト内**で**VMまたはVPNサブスクリプション**を別のアカウントへ移動するリクエストのリストが表示されます。 - この画面は閲覧と作成専用であり、お客様に代わってリクエストを作成するかキャンセルすることのみ可能です。所有者や受取人のために承認を行うボタンは意図的に**ありません**。 - フロー:所有者が1回限りのメールリンク(有効期限30分、有効な場合はTOTP付き)から確認を行い、その後受取人がサインインして承認します(受取人が支払い義務を引き継ぎます)。7日以内に承認されなかったリクエストは期限切れになります。 - ルール:サービスがアクティブであり、未払いの請求書や実行中のジョブがないこと、受取人が同じサイト内でメール認証済みの有効な顧客であることが必要です。VMの移行ではSSHキーが削除され、自動更新がオフになります。VPNの移行では接続パスワードが変更されます。 - すでに発行された請求書は以前の所有者に紐づいたままとなり、新しい所有者は以前の所有者のデータを非表示にした状態でサービスの請求履歴を閲覧できます。 - お客様はポータルの**Transfers**から独自のリクエストを作成できます(1時間あたり5件まで、同時に3件までオープン可能)。 ## 確認 {#verify} 1. 招待メールを使用して顧客を作成します。新しいアカウントは数秒以内にリストの一番上に表示されます。 2. **Balance**でソートします。順序はすべての顧客を対象としています。 3. 顧客をロックします。ステータスタグが *Locked* になり、顧客はサインインできなくなります。ロック解除も可能です。 ## 制限と注意事項 {#limits-notes} - 国コードの列はIPに基づく目安であり、居住地の証明ではありません。プライベートアドレスや不明なアドレスの場合は国が取得されません。 - アカウントのロックは返金を行わず、停止を選択しない限りVMも削除されません。 - アカウントのロックを解除しても、管理者がロックしたVMのロックは解除されません。VMページで個別に解除してください。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | 「お客様には稼働中のサービスが残っています...最初に停止または削除してください」 | お客様にサービスまたは S3 アカウントが存在する | それらを削除してから、ソフトデリートを行ってください。 | | 削除承認に「N VMs alive」と表示される | 同上の理由 | 先にVMを削除してください。 | | 「e-mail queued」の代わりにリセットリンクが表示される | SMTPが設定されていない | メールを設定するか、ご自身でリンクを送信してください。 | | サインイン方法を削除できません (`last_login_method`) | お客様の唯一のサインイン方法です | 先別の方法を追加してください。 | | ロックしてもプリペイドサービスが停止しない | 停止エラーが報告された | ロック後にメッセージを確認してください。システムが自動的に停止を再試行します。 | | 転送を作成できない | 未払いの請求書、実行中のジョブ、別のサイトの受信者、または未検証 | 条件を修正して再試行してください。 | --- # 顧客としてログイン {#log-in-as-a-customer} > **管理画面での場所:** Customers › Customers › List › a customer › header button **Impersonate** (`/customers/`)。 ## 動作内容 {#what-it-does} **Impersonate**(代理ログイン)を使用すると、サポート管理者が顧客とまったく同じようにポータルを表示し、問題の再現や注文のサポートを行うことができます。セッションの有効期間は1時間で、通常のセッションとは明確に分離されています。アカウントへの長期間のアクセスを与える可能性のある機能はすべてブロックされ、すべての利用がログに記録されます。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | ロール | 管理コンソールにサインインしている管理者。 | | 顧客 | アカウントが**有効(active)**である必要があります。ロックまたは削除されたアカウントは「account is not active」(HTTP 409)を返します。 | | 理由 | 理由は必須であり、監査ログに記録されます。 | | ブラウザ | 管理画面のアドレスに対するポップアップを許可してください。ポータルが新しいウィンドウで開きます。 | ## 手順 {#steps} 1. **Customers › List**を開き、顧客をクリックします。 2. **Impersonate**をクリックします。顧客のサイトが1時間顧客として開き、すべての操作が監査されることを説明するダイアログが表示されます。 3. **理由**(例:「Ticket 1234 — cannot create VM」)を入力し、**Open app**をクリックします。 4. 顧客のサイトで新しいウィンドウが開き、`?impersonated=1`が表示されたダッシュボードが表示されます。ブラウザがウィンドウをブロックした場合は、ポップアップを許可して再度クリックしてください。 ![理由フィールドが入力された状態のImpersonateダイアログ](https://nexcmp.com/ja/docs/images/customers/login-as-01-dialog.webp) リセラーの顧客の場合、リンクは顧客自身のサイトでしか機能しないため、ウィンドウは**リセラー自身のドメイン**で開きます。 ## 動作原理 {#how-it-works} 1. 管理者による操作により、1年間有効な**使い捨てトークン**が作成され、監査ログに`customer.login_as`(管理者、IP、理由、サイト)が書き込まれます。 2. 新しいウィンドウが開きます`https:///v1/portal/impersonate/`。最初のリクエストでは小さなページが表示されるのみで、トークンは消費され**ません**(ブラウザのプリフェッチによる消費を防ぐため)。その後、ページはPOSTで確認を行います。 3. POSTによってトークンが消費されます。2回目の使用、または1時間経過後の使用には「The impersonation link has expired or was already used」と応答します。 4. NexCMPは**1時間**有効な顧客セッションを作成し(通常のセッションは30日間)、メソッド`impersonate`でサインインエントリを記録し、`customer.login_as.used`をログに記録します。 5. トークンは顧客自身のサイトでのみ機能します。別のホストでは404が返されます。 ## 代理セッションでブロックされる操作 {#what-is-blocked-in-an-impersonated-session} 1時間を超えるアクセスを許可するもの、または顧客自身のセキュリティを変更するものは、HTTP 403 `impersonate_forbidden` を返します。 | ブロック対象 | Why | |---|---| | パスワード、TOTPの変更、Google/GitHubの連携・解除、パスキーの編集 | 顧客自身の認証情報 | | アカウントの削除 | 不可逆的 | | **API keys** の作成または編集 | 長期的なアクセス | | CLI、デスクトップ、またはMCPログインの承認(デバイス連携) | 長期的なアクセス | | Kubernetesアクセス、S3キー、SSHキー、rootパスワード、コンソール共有リンク、VPNまたはプロキシ認証情報の作成 | セッションの有効期限を超える機密情報 | | トップアップコードの引き換え | 金銭キャンペーン | | アフィリエイト報酬の出金または支払先の変更 | システム外への資金の流出 | | AIキー、予算、または通知メールの編集 | 顧客の設定 | その他の機能はすべて正常に動作します。ページの閲覧、VMの作成や管理、注文の実行などが可能です。アクションは顧客のIDで実行され、顧客の資金が消費されます。上記のような監査ログにより、セッションの背後に管理者が存在していたことが記録されます。 ## 確認 {#verify} 1. テスト用の顧客として代理ログインします。ポータルが開かれ、その顧客のデータが表示されます。 2. パスワードの変更を試行します。「forbidden」(代理セッション)が返されます。 3. **System › Logs › Admin actions** で、あなたの名前、理由、サイト名、およびそれに続く `customer.login_as` を見つけます、さらに `customer.login_as.used` が続きます。 4. ウィンドウを閉じ、同じリンクを再度開きます。「link expired or already used」と表示されます。 ## 制限と注意事項 {#limits-notes} - 1時間の制限時間は固定されています(3600秒)。続行するには、再度代理ログインを行ってください。 - 閲覧と再現を優先し、顧客からの依頼がない限り、金銭を消費する操作は避けてください。 - 顧客ページの **Revoke sessions** を使用してセッションを早期に無効化します(これにより顧客側もサインアウトされます)。 - リセラーには、Resellersメニューからの独自の **Sign in to partner console** 代理ログイン機能(60分)があります。[Resellers](https://nexcmp.com/ja/docs/customers/resellers/) を参照してください。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | 「アカウントがアクティブではありません」 | アカウントがロックされているか削除されています | 最初にロックを解除するか、代わりに顧客ページを確認してください。 | | ブラウザによってウィンドウがブロックされる | ポップアップブロック | 管理画面のアドレスに対するポップアップを許可し、もう一度お試しください。 | | 「リンクの有効期限が切れているか、すでに使用されています」 | 1時間の制限時間経過、または再利用 | 再度代理ログインを行ってください。 | | 「Not found」が開く | 無効なホストでリンクが使用された | ダイアログが開いたウィンドウを使用し、リンクを他の場所に貼り付けないでください。 | | アクションで「forbidden」と表示される | 代理セッションではブロックされます | 顧客自身に実行してもらうか、管理画面を使用してください。 | --- # リセラー(ホワイトラベル) {#resellers-white-label} > **管理画面の場所:** Customers › Resellers › List (`/resellers`), Domains & SSL (`/resellers/domains`), Permissions & wholesale (`/resellers/entitlements`), Defaults (`/resellers/settings`)。リセラー枠: System › Admin › License & updates (`/license`)。 ## 動作内容 {#what-it-does} **リセラー**は、顧客ポータルのブランド適用版を**自身の独自ドメイン**上で取得し、独自の顧客、ウォレット、価格、そして(必要に応じて)決済チャネルを利用できます。リセラーは卸売価格で仕入れ、独自の価格で販売します。リセラーの顧客があなたのブランドを目にすることは一切なく、リセラーのドメインからあなたの管理コンソールを開くこともできません。リセラーは `https://partner.` にある**パートナーコンソール**からビジネスを運営します。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | ライセンス | カスタムリセラーの独自ドメインごとに、ライセンス上の**リセラー枠**が1つ必要です。ライセンスページには `used/max` 枠と追加購入用のリンクが表示されます。空き枠がない場合、「Out of license reseller domain slots」というエラーでドメインの追加に失敗します。 | | DNS | 各リセラーのドメインは、サーバーを指すように設定する必要があります(下記参照)。 | | WebサーバーとTLS | ホスト名は、その名前に対応する有効な証明書を備えたリバースプロキシ経由で、NexCMPパネルに到達する必要があります。 | | メール | 招待メールおよび通知メール用にSMTPが設定されていること。 | | マスタースイッチ | **Reseller settings › General › `rs_enabled`** がデフォルトで有効になっていること。 | ## インフラストラクチャの準備 {#prepare-the-infrastructure} 1. サーバーの公開アドレスを決定します:IPv4アドレス、およびCNAMEを使用する場合はそれを指すホスト名(例:`sites.cloud.example.com`)。 2. **Customers › Resellers › Defaults** (`/resellers/settings`)、グループ **Domains & SSL** を開き、以下を設定します: | キー | 意味 | |---|---| | `rs_server_ipv4` | リセラーのAレコードが向かうべき公開IPv4。 | | `rs_cname_target` | リセラーのCNAMEレコードが向かうべきホスト名。 | | `rs_master_hosts` | 自身のメインサイトに属するホスト名(リセラーに割り当てることはできません)。 | | `rs_platform_domain` | `partners.cloud.example.com`でリセラーに`acme.partners.cloud.example.com`を付与するための、**プラットフォームサブドメイン**用のオプショナルな親ドメイン。空欄にすると無効になります。 | | `rs_sites_stale_minutes` | 証明書サービスが古いと見なされるまでの分(デフォルト15)。 | | `rs_ssl_fail_hours` | エラーが発生するまでの失敗試行の時間(デフォルト48)。 | ::: warning 指示を送信する前にこれらの値を確認してください `rs_server_ipv4`、`rs_cname_target`、および `rs_master_hosts` にはサンプル値が設定されています。リセラーにDNSの手順を案内する**前に**、これらを独自のサーバーとドメインに置き換えてください。そうしないと、画面上の手順が誤った場所を指すことになります。 ::: 3. **Save** をクリックします(理由の入力が求められます)。 4. リバースプロキシがリセラーのホスト名をNexCMPパネルに転送し、それぞれに対して証明書を提供していることを確認してください。インストーラーは、メインドメイン(および解決可能な `admin.` と `partner.` の名前)に対してのみ、nginxとLet's Encryptを設定します。Cloudflareを使用する場合は、ホスト名をプロキシし、フルSSLモードを使用してください。 ## NexCMP での接続 {#connect-in-nexcmp} ### リセラーの作成 {#create-the-reseller} 1. **Customers › Resellers › List** を開き、**New reseller** をクリックします。このウィザードは8つのステップで構成され、最後にすべてがプロビジョニングされます。各ステップは安全にやり直すことができます。 | ステップ | 入力項目 | |---|---| | **Reseller** | 法的名称または屋号、**スラッグ**(a〜z、0〜9、または `-` の4〜31文字で、英字で始まるもの。請求書のプレフィックスにもなります)、担当者名、メールアドレス、電話番号、デフォルト言語、リセラーの請求詳細(ウォレットチャージの購入者として)。 | | **Console account** | ユーザー名、アカウントのメールアドレス、氏名;**Send a one-time invite link by e-mail**(72時間有効、推奨)または一時パスワードを一度だけ表示。 | | **Brand** | ブランド名、短縮名、タグライン、プライマリカラー、サポートのメールアドレスと電話番号、顧客向け請求書に記載される販売者名、ロゴ(ライトおよびダーク背景)、正方形マークとファビコン:PNG、JPEG、WEBP、またはICO(256 KBまで、**SVG不可**)。 | | **Domains** | **wwwあり**を含めた顧客ドメイン、どれをプライマリにするか、**テストドメイン**(sslip.io)および**ドライラン**オプション、またはプラットフォームサブドメイン。ウィザードには**DNS OK / DNS not ready**の状態と作成すべきレコードが表示されます。 | | **Pricing & wallet** | 卸売割引率 (%)、小売下限 (リスト価格の %)、デフォルトマークアップ (%)、クレジット限度額、初期残高、残高不足アラート、顧客・VM・ドメインの制限、サイト機能 (顧客登録、DDoS保護、サポートチケット、カスタムプラン、リサイズ、Auto Scaling)。 | | **Payment channels** | 顧客の支払いを受領する主体 (下記参照)、およびオプションの独自PayPalと独自ベトナム銀行振込。 | | **Email** | 送信者名とReply-To。ResellerドメインのDKIMが設定されるまで、Fromアドレスはプラットフォームのアドレスのままになります。 | | **Review** | すべてを確認して **Provision everything** をクリックするか、**Save draft (provision later)** を選択します。 | 2. プロビジョニングはバックグラウンドで続行されます (30秒ごと)。リセラーを開いて進捗を確認し、ステップが失敗した場合は **Continue provisioning** または **Retry** を使用します。 ![サンプル値が入力された最初のステップでの新規リセラーウィザード](https://nexcmp.com/ja/docs/images/customers/resellers-01-wizard.webp) ### DNSの設定 (リセラー側で行います) {#point-dns-the-reseller-does-this} リセラー (またはお客様) が **Domains & SSL** タブに表示されるレコードを作成します: | レコード | Name | 値 | |---|---|---| | TXT (所有権確認、初回のみ) | `_site-verify.` | `sv=`画面に表示されます | | A (`shop.example.net` などのアペックスドメイン) | ドメイン | お客様の `rs_server_ipv4` | | CNAME (`cloud.example.net` などのサブドメイン) | ドメイン | お客様の `rs_cname_target` (または `rs_server_ipv4` へのAレコード) | | CNAME (オプション) | `www.` | お客様の `rs_cname_target` | その他: - サーバーがそのIPv6アドレスで応答しない限り、すべての **AAAA** (IPv6) レコードを削除します。 - ドメインの検証中は、CDNプロキシを**オフ** (グレーの雲) にします。 - ドメインに **CAA** レコードがある場合は、`letsencrypt.org` を許可してください。 TXTレコードのトークンはドメインごとに異なります。画面からコピーしてください。システムは最初の48時間は5分ごとに、その後は1時間ごとにDNSを再チェックし、72時間経過してもTXTレコードが見つからない場合は名前を解放します。 ### ドメインの状態 {#domain-states} **Customers › Resellers › Domains & SSL** (すべてのリセラー) およびリセラーの **Domains & SSL** タブ: | 状態 | 意味 | |---|---| | `pending_verify` | TXTレコードを待機しています。 | | `pending_dns` / `verifying` | AまたはCNAMEがこちらを指すのを待機しています。 | | `issuing` | 証明書を発行中です。 | | `active` | リセラーのサイトを提供しています。 | | `cert_expiring` | 証明書の有効期限が近づいています。更新が必要です。 | | `dns_lost` | DNSがこちらを指さなくなりました。30日後にドメインが削除されます。 | | `error` | エラーコードを確認し、修正後に **Retry** を実行してください。 | | `removing` / `removed` | 削除処理中です。ライセンス枠が返還されます。 | 行のアクション: **Check now**、**Retry**、**Make primary**、**Test mode** (テストドメイン用)、**Remove**。 ## 権限と卸売設定 {#permissions-wholesale} **Customers › Resellers › Permissions & wholesale** (`/resellers/entitlements`) はマトリックスです。リセラーごとに1行あり、卸売の**割引率**(discount)と**マークアップ**、およびサービスごとに1つのスイッチ(例:DDoS ShieldやVPN)が用意されています。スイッチはプラットフォーム全体の機能が有効な場合に編集可能になり、そうでない場合は読み取り専用で設定へのリンクが表示されます。**Top-up codes**サブタブでは、各リセラーが毎月発行できるコードの数を設定します([Promotions](https://nexcmp.com/ja/docs/billing/promotions/)を参照)。 価格設定ルール: - 卸売価格 = 定価 x (1 - 割引率) であり、リセラーの**Wholesale pricing**タブでプランごとおよび請求サイクルごとに上書きできます。 - リセラーは小売価格を設定しますが、**フロア**(定価に対するパーセンテージ)を下回ることはできません。 - 顧客が購入した際、卸売価格はリセラーの**ウォレット**から支払われます。ウォレットには、クレジット枠、猶予期間、および当座貸越の上限があります(Defaultsを参照)。 ## Defaults {#defaults} **Customers › Resellers › Defaults** (`/resellers/settings`) は、すべてのかけられたリセラーに適用される `rs_*` キーです。変更にはそれぞれ理由の入力が求められ、監査ログに記録されます。 | Group | キー | デフォルト | 意味 | |---|---|---|---| | General | `rs_enabled` | 1 | リセラープログラムの有効化。 | | | `rs_platform_collect_enabled` | 0 | プラットフォームがリセラーの代わりに顧客からの支払いを回収できるようにします。**法的な確認を行った上で有効化してください。** | | | `rs_totp_required` | 1 | リセラーコンソールの اکاؤنٹ は二要素認証を使用する必要があります。 | | | `rs_agreement_version` | 1 | 同意が必要なリセラー規約のバージョン。 | | Default pricing | `rs_default_discount_bp` | 2000 (20 %) | 新規リセラー向けの卸売割引率(ベーシスポイント、0〜9000)。 | | | `rs_default_markup_bp` | 2500 (25 %) | デフォルトのマークアップ(0〜50000)。 | | | `rs_default_floor_bp` | 9000 (90 %) | 小売フロア価格(0〜20000)。 | | | `rs_default_max_domains` | 3 | リセラーごとに許可されるドメイン数。 | | Wallet and payouts | `rs_grace_hours` | 72 | リセラーのウォレット残高が枯渇した際に、顧客のサービスに影響が出るまでの猶予期間。 | | | `rs_overdraft_cap_cents` | 5000 | ウォレットでの当座貸越の許可。 | | | `rs_retention_days` | 14 | 閉鎖されたリセラーのVMが削除されるまでの日数。 | | | `rs_payout_hold_days` | 30 | 手数料が引き出し可能になるまでに保持される日数。 | | | `rs_payout_min_cents` | 5000 | 最小出金額。 | | | `rs_topup_min_cents` | 2000 | リセラーによる最小ウォレットチャージ額。 | | Payments and mail | `rs_webhook_base` | empty | リセラーゲートウェイのWebhook用の公開ベースURL(空の場合はサイトURLを使用)。 | | | `rs_mail_from` | empty | リセラーメールの送信元アドレス。 | | | `rs_invoice_show_processor` | 1 | 請求書に決済プロセッサーを表示する。 | | | `rs_gw_stripe_enabled`, `rs_gw_usdt_enabled` | 1 | リセラーが独自のStripeまたはUSDTを設定できるかどうか。 | ## お客様の支払いを収集する主体 {#who-collects-customer-payments} | モード | 意味 | |---|---| | **Reseller collects (own channels)** — デフォルト | リセラーは独自のStripe、PayPal、USDT、または銀行口座を接続します。そのWebhookは `https:///v1/billing//webhook/r/` です。保存されたカードおよび [auto top-up](https://nexcmp.com/ja/docs/billing/auto-top-up/) は、これらのサイトでは利用できません。 | | **Platform collects** | あなたの決済チャネルがリセラーサイトに表示されます。`rs_platform_collect_enabled = 1` までロックされています。 | | **Mixed** | チャネルごとに選択される組み合わせ。 | ## 再販業者の表示画面 {#what-the-reseller-sees} `https://partner.` にあるパートナーコンソールには、Overview、Reports、Customers、VMs、Tickets、Orders、Payments、Prices、Brand、Landing & legal、Domains & SSL、Email、Wallet、Payment channelsがあります。コンソールアカウントの役割は、*reseller*(フルアクセス)または *staff*(読み取り専用)です。ご自身で確認するには、該当するリセラーを開いて **Sign in to partner console** をクリックします。60分間アクセスでき、すべての書き込み操作は管理者ログとリセラーログの両方にあなたの名前で記録され、金銭に関する操作には2段階目の確認が必要です。 ## 確認 {#verify} 1. プロビジョニング後、リセラーのリスト行には *active* と緑色の **Provisioning** 列が表示されます。 2. ブラウザでリセラーのドメインを開きます。リセラー独自のブランドが適用されたログインページが表示されます。`https:///admin` は 404 を返します。 3. そのドメインでテスト顧客を登録します。顧客は **Customers › List** に表示され、**Site** 列にリセラーが表示されます。 4. ライセンスページの使用済みスロットが1つ増えます。 ## 制限と注意事項 {#limits-notes} - カスタムまたはテストドメインごとに1つのライセンススロットが必要です。プラットフォームのサブドメインはスロットを使用しません。 - リセラーを停止してもデータは保持されます。**Close reseller** ではすべてのドメインスロットが返還され、VMの破棄は保持期間経過後のみ許可されます。 - リセラーの顧客はあなたの顧客リストに表示され、他の顧客と同様にログインして代理操作(インペソネーション)を行うことができます(リンクはリセラーのドメインで開きます)。 - リセラーは、あなたの決済チャネル、デフォルトのクォータ、または他のリセラーを表示・変更することはできません。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | ライセンスのリセラー・ドメイン・スロットが不足しています | すべてのスロットが使用中 | スロットを解放(ドメインを削除)するか、ライセンスページで追加購入してください。 | | ドメインが `pending_verify` の状態で停止しています | TXTレコードがありません | 表示どおりにTXTレコードを作成し、**Check now** を使用してください。 | | ドメインが `pending_dns` の状態で停止しています | A/CNAMEレコードがあなたを指していない、AAAAレコードが存在する、またはCDNプロキシが有効になっている | DNSを修正し、プロキシをオフにしてから、**Check now** を実行してください。 | | `error` 状態 | 行のエラーコードを確認してください(Let's EncryptをブロックしているCAA、レートリミットなど) | 修正して **Retry** をクリックしてください。 | | ホストが不明であるか、「421」というエラーがブラウザに表示されます | ホスト名がライセンスに登録されていないか、パネルにルーティングされていません | リセラー経由でドメインを追加し(スロットを消費します)、リバースプロキシを修正してください。 | | 手順に誤ったIPまたはホストが表示される | `rs_server_ipv4` / `rs_cname_target` にサンプル値が残っています | Defaultsで設定してください。 | | リセラーがプラットフォーム収集を有効にできない | ロックされています | 法的審査の完了後に `rs_platform_collect_enabled` を設定してください。 | --- # ブランディング {#branding} > **管理画面での場所:** System › Settings › Brand (`/settings/branding`)。関連: URLや請求書に記載される販売者詳細については System › Settings › General (`/settings`) をご覧ください。 ## 動作内容 {#what-it-does} NexCMPはホワイトラベル対応です。製品にはベンダー名が表示されず、お客様の目に触れるものはすべて**あなた**のブランドになります。ブランド設定は、ログインおよびサインアップページ、ポータル、管理コンソール、メールに適用されます。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | ロール | 管理者。 | | ファイル | ロゴ: SVG、PNG、JPEG、WEBP、ICO(**それぞれ最大 512 KB**)。 | | 依存関係 | なし。 | ## 手順 {#steps} 1. **System › Settings › Brand** を開きます。 2. **Identity** カードに入力します: | 項目 | 備考 | |---|---| | **Brand name**(必須) | 最大60文字。ポータル、メール、請求書、法的ページに表示されます。 | | **請求書の販売者名** | 最大120文字。空欄の場合はブランド名になります。 | | **Brand color** | `#rrggbb` カラーコード。フィールドの横にある小さなボタンをクリックすると、ビルトインの色にリセットされます。 | | **Site currency** | **USD**:価格と残高はUSDでのみ表示され、通貨の切り替えはありません。**VND**:保存された為替レートでの換算額も表示されます([Currency and exchange rates](https://nexcmp.com/ja/docs/catalog/currency-and-exchange-rates/)を参照)。 | 3. **Save**をクリックします。 4. **Logo & favicon**カードで、**Logo (light background)**、**Logo (dark background)**、**Favicon**の3つの画像を**Upload**(または**Replace**)でアップロードします。**Remove**で1つ削除できます。 ![アイデンティティフィールドとアップロードされた3つの画像が含まれるブランドページ](https://nexcmp.com/ja/docs/images/customers/branding-01-brand.webp) ### Generalにおける関連設定 {#related-settings-in-general} **System › Settings › General**には、全体像を補完する2つのタブがあります: | タブ | フィールド | |---|---| | **Branding & URLs** | ブランド名(メール、請求書)、デフォルト言語(英語またはベトナム語)、**Customer app URL**、**Console URL**、**Admin URL**(代理店成りすましリンク)、**Partner console URL**(招待リンク、代理店メール)。セットアップウィザードでは、これらが`https://`、`https:///admin`、`https:///console`で入力されます。 | | **Seller & invoicing** | 法人の正式名称、税金ID、住所、連絡先メールアドレス、請求書番号のプレフィックス。[Invoices and ledger](https://nexcmp.com/ja/docs/billing/invoices-and-ledger/)を参照してください。 | メールの**From name**は、**System › Settings › Email**([SMTP and e-mails](https://nexcmp.com/ja/docs/administration/smtp-and-emails/))で設定します。 ## アップロードされたファイルのチェック {#uploaded-files-are-checked} - ラスター画像は、ファイル名ではなくコンテンツから認識され、測定されます。 - **SVGファイルは安全なシェイプリストから再構築されます**。スクリプト、`foreignObject`、イベント属性、外部リンク、外部を指す`url(...)`、DOCTYPE、またはエンティティを含むファイルは**拒否されます**(`svg_unsafe`)。 - 大きすぎるファイルは`asset_too_large`、誤ったタイプは`asset_type`、不適切な寸法は`asset_dimensions`で拒否されます。 - ファイルは厳格なセキュリティヘッダーを設定して、ご自身のドメインから配信されます。 ## 確認 {#verify} 1. プライベートウインドウでポータルのログインページを開きます:ロゴ、名前、カラーが表示されます。 2. ブラウザタブでファビコンを確認します(ブラウザはファビコンをキャッシュするため、古いものが表示される場合はキャッシュをクリアして再読み込みしてください)。 3. テストメールをトリガーし(テスト顧客用の**Send reset link**など)、件名とフッターのブランド名を確認します。 ## 制限と注意事項 {#limits-notes} - ダーク背景用のロゴは、顧客または管理者がダークテーマに切り替えたときに使用されます。 - 代理店は独自のブランドを持ち、PNG、JPEG、WEBP、ICO形式の最大256 KBの画像をアップロードできます(SVG不可)。[Resellers](https://nexcmp.com/ja/docs/customers/resellers/)を参照してください。 - ブランドカラーやロゴの変更は次のページの読み込み時に反映され、すでに送信済みのメールは変更されません。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | アップロードが拒否されました:`svg_unsafe` | SVGにスクリプト、リンク、または外部参照が含まれています | プレーンなSVG(スクリプトや外部画像なし)をエクスポートするか、PNGを使用してください。 | | `asset_too_large` | ファイルが512 KBを超えています | 画像を圧縮またはリサイズしてください。 | | `asset_type` | SVG、PNG、JPEG、WEBP、ICOではありません | ファイルを変換してください。 | | `invalid_argument: primary` | カラーが`#rrggbb`ではありません | 6桁の16進数を使用してください。 | | 古いロゴがまだ表示されている | ブラウザのキャッシュ | ハードリロードを実行してください。ファビコンは反映に時間がかかる場合があります。 | | 価格がUSDのみで表示される | サイトの通貨がUSDです | VNDに切り替え、為替レートが保存されていることを確認してください。 | --- # 法的ページ {#legal-pages} > **管理画面の場所:** System › Settings › Legal (`/settings/legal`)。**お客様への表示場所:** `https:///terms` および `/privacy`(サインアップおよびチェックアウトからリンク)。 ## 動作内容 {#what-it-does} お使いの環境では、**Terms of Service** と **Privacy Policy** の2つのページが公開されます。独自の内容を作成するまで、NexCMP ではソフトウェアベンダーに言及せず、特定のサービスを保証しない**中立的なデフォルトテキスト**を表示します。販売を開始する前に、弁護士によるレビューを受けたテキストに置き換えてください。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | ロール | 管理者。 | | コンテンツ | プレーンなマークダウン、1ページおよび1言語あたり最大 **50 KB**。 | | 依存関係 | ブランド名と販売者の詳細([Branding](https://nexcmp.com/ja/docs/customers/branding/))がデフォルトのテキストに挿入されます。 | ## 手順 {#steps} 1. **System › Settings › Legal** を開きます。2つのページにはそれぞれ、*Using the default text* または *Using your text* タグが付いた独自のカードがあります。 2. 言語タブ(**English** または **Tiếng Việt**)を選択します。 3. テキストを入力します。ボックスが空の間は、デフォルトのテキストがプレースホルダーとして薄く表示されます。これをベースにするには、**Start from the default text** をクリックしてから編集します。 4. **Save** をクリックします。サイズカウンターに `used / 50 KB` が表示されます。 5. **View on the customer site** をクリックして `/terms` または `/privacy` を開きます。 6. 特定の言語でデフォルトに戻すには、**Clear, back to default** をクリックして保存します。 ![デフォルトのテキストを開始点として表示している利用規約カードの法務設定](https://nexcmp.com/ja/docs/images/customers/legal-01-terms.webp) ## デフォルトページの内容 {#what-the-default-pages-contain} デフォルトのテキストは製品内に `legal_default.json` として保存され、ブランド名、販売者名、サイトURL、および連絡先メールアドレス(System › Settings › General 内の **Seller & invoicing** から取得。メールアドレスが設定されていない場合はサポートチームを指します)が入力されます。 | ページ | セクション | |---|---| | **Terms of Service** | 1 サービス · 2 アカウントと認証 · 3 料金と請求 · 4 返金 · 5 お客様のデータ · 6 利用規約の遵守 · 7 可用性とサポート · 8 停止と解約 · 9 責任 · 10 変更および準拠法(販売者の事業所の法律) | | **Privacy Policy** | 1 収集する情報 · 2 利用目的 · 3 クッキーとローカルストレージ · 4 第三者提供 · 5 保持期間 · 6 お客様の権利 · 7 お問い合わせ | ::: warning 法的助言ではありません デフォルトのテキストは中立的なテンプレートです。特に返金、責任、準拠法に関するセクションについては、実際のお客様に使用する前に確認を受けてください。 ::: ## マークダウンルール {#markdown-rules} - サポートされている要素:見出し(`# 1. Title`)、段落、箇条書きおよび番号付きリスト、**太字**、リンク `[text](https://example.com)`。 - リンクは `http://` または `https://` で始まる必要があります。 - **生のエヌエイチティーエムエルは拒否されます**(``、` # カスタマーポータルの概要 {#customer-portal-overview} > **ポータルの場所:** `https:///` — お客様は `/login` からサインインします。管理者は `/admin` を使用します。アカウントが管理者の場合、同じログインで両方にアクセスできます。 ポータルは、お客様が毎日使用するものです。お客様の名前、ロゴ、カラーでブランディングされ([Branding](https://nexcmp.com/ja/docs/customers/branding/))、有効にしたサービスのみが表示されます([Modules](https://nexcmp.com/ja/docs/infrastructure/modules/))。 ## ダッシュボード {#the-dashboard} サインイン後、**Dashboard** に以下が表示されます: | ブロック | 意味 | |---|---| | ウォレット残高 | 現在のクレジットと、現在の消費ペースであと何日持つかの予測 | | 今月の利用額 | これまでの料金と月末の予測 | | 仮想マシン | ステータス、IP、CPU、RAM、およびクイック操作(コンソール、再起動)を含む各VM | | 帯域幅 | 1時間、6時間、24時間、7日、30日の受信/送信トラフィック | | 最近のアクティビティ | アカウントに関する最新のイベント | | クイックスタート | チェックリスト:VMの作成、SSHキーの追加、トップアップ、自動トップアップの有効化、メールアドレスの確認 | ![ウォレット残高、利用予測、実行中の仮想マシン、クイックスタートチェックリストが表示されたカスタマーダッシュボード](https://nexcmp.com/ja/docs/images/portal/overview-01-dashboard.webp) ## ナビゲーション {#navigation} メニューはサービスをタイプ別にグループ化します。無効にしたサービス(またはソースが接続されていないサービス)は表示されません。 | 領域 | ページ | |---|---| | Instances | [Virtual machines](https://nexcmp.com/ja/docs/portal/virtual-machines/) とその詳細ページ | | デプロイ | [Ordering](https://nexcmp.com/ja/docs/portal/ordering/) — リソースの作成 | | ストレージ | 有効な場合のスナップショット、バックアップ、ボリューム — [Snapshots](https://nexcmp.com/ja/docs/portal/snapshots/) | | 請求 | [Wallet and top-ups](https://nexcmp.com/ja/docs/portal/sign-up-and-wallet/)、請求書、注文、クォータ | | アカウント | プロフィール、サインインとセキュリティ、環境設定、自動トップアップ | | サポート | チャットウィジェットとチケット — [Support](https://nexcmp.com/ja/docs/portal/support/) | | APIドキュメント | `/apidoc` — [API](https://nexcmp.com/ja/docs/developers/api/) | ## アカウント {#account} **Account**には4つのタブがあります:**Profile**(名前、メールアドレス、顧客ID、アカウント削除リクエスト)、**Sign-in & security**(パスワード、パスキー、Google/GitHub連携)、**Preferences**(言語、表示通貨)、**Auto top-up**([Auto top-up](https://nexcmp.com/ja/docs/billing/auto-top-up/))。 お客様がアカウントを直接削除することはできません。**Request account deletion** をクリックし、すべての仮想マシンが削除された後、オペレーターがリクエストを審査します(Customers › Deletion requests)。保留中はお客様側で取り消すことができます。 ## 言語と通貨 {#language-and-currency} ポータルは16言語に対応しており、言語に応じて選択された表示通貨で価格を表示します。[Currency and exchange rates](https://nexcmp.com/ja/docs/catalog/currency-and-exchange-rates/)をご覧ください。顧客は**Preferences**で両方を切り替えることができます。 ## 顧客のクォータ {#customer-quotas} **Billing › Quotas**では、支払い状況に基づいて、顧客が使用できる各リソース(CPU、メモリ、ストレージ、IP、VM)の割合が表示されます。[Quotas](https://nexcmp.com/ja/docs/billing/quotas/)をご覧ください。 --- # サインアップ、ウォレット、チャージ {#sign-up-wallet-and-top-up} > **ポータルの場所:** `/register`、`/login`、Billing(`/billing`)。 ## アカウントの作成 {#create-an-account} 1. 顧客は`https:///register`を開き、メールアドレスとパスワード(英数字を含む10文字以上)を入力するか、有効にしている場合は**Google**、**GitHub**、または**passkey**を使用します。[Security](https://nexcmp.com/ja/docs/administration/security/#customer-sign-in)をご覧ください。 2. キャプチャが有効な場合は、完了させます。 3. 検証メールは[SMTP](https://nexcmp.com/ja/docs/administration/smtp-and-emails/)経由で送信されます。販売設定で必要な場合、VMを作成する前に検証が必要です。 ![メールアドレスとパスワードの入力欄がある登録ページ](https://nexcmp.com/ja/docs/images/portal/sign-up-and-wallet-01-register.webp) ::: tip SMTPが正常に機能していない場合、顧客はメールの検証やパスワードの再設定を行えません。最初に[SMTP](https://nexcmp.com/ja/docs/administration/smtp-and-emails/)を設定してください。 ::: ## ウォレット {#the-wallet} 支払いはすべて請求通貨の**ウォレット**残高から行われます。**Billing**ページには以下が表示されます: | セクション | 意味 | |---|---| | 利用可能額 | 残高に保留中のチャージを加算した金額 | | 発生中の料金 | 当月のサイクルで消費され、まだ清算されていない時間単位のサービス料金 | | 未払い残高 | 支払いが必要な金額 | | 請求履歴 | **Invoice History**、**Payment Order**、**Ledger**、**Orders**タブ | ![利用可能額、発生中の料金、履歴タブが表示されたBillingページ](https://nexcmp.com/ja/docs/images/portal/sign-up-and-wallet-02-billing.webp) ## クレジットの追加 {#add-credit} 1. **Deposit**をクリックします。 2. 金額を入力します。最小額は[minimum top-up](https://nexcmp.com/ja/docs/billing/minimum-top-up/)です。 3. 支払いチャネル(カード、PayPal、USDT、またはベトナム語インターフェースの場合は銀行振込)を選択します。チャネルは[Payment channels](https://nexcmp.com/ja/docs/billing/payment-channels/)で有効にしたものです。 4. 支払いを実行します。支払いプロバイダーの確認が取れると残高が更新されます。 保存されたカード、Stripe Link、PayPalは再利用でき、[auto top-up](https://nexcmp.com/ja/docs/billing/auto-top-up/)に使用できます。[Saved payment methods](https://nexcmp.com/ja/docs/billing/saved-payment-methods/)をご覧ください。 ## コードの引き換え {#redeem-a-code} **Redeem code** は、発行済みのバウチャー(Finance › Billing › Vouchers)から残高を追加するか、プロモーションコードを適用します — [Promotions](https://nexcmp.com/ja/docs/billing/promotions/) を参照してください。 ## 請求書 {#invoices} 支払い済みの各注文に対して請求書が発行され、販売者の詳細([General settings](https://nexcmp.com/ja/docs/administration/general-settings/))が表示されます。顧客は**Invoice History**から開き、ブラウザからPDFとして印刷または保存できます。 ## 時間単位の料金 {#hourly-charges} 時間単位のサービスは、リソースが存在する時間ごとに課金され、金額が累積されます。1時間未満の端数は $0.00 に丸められることがあります。残高が不足している場合、課金ルールに従ってサービスが一時停止され、お客様にメールで通知されます(`low_balance`)。 --- # サービスの注文 {#ordering-a-service} > **ポータルでの場所:** Deploy(`/deploy/vm`)。**管理画面での場所:** Services(プラン、価格)および System › Admin › License & updates(モジュール)で表示内容を制御します。 注文ページは、番号付きのステップで構成された1つのスクロールフォームです。ステップ1で別のサービスを選択すると、ページが維持され、その下のステップが変更されます。 ## 手順 {#steps} 1. **Service** — Cloud Servers、および有効化したその他のサービス(Kubernetes、Object Storage、Images、Private Cloud、VPN …)。 2. **Location** — [zone](https://nexcmp.com/ja/docs/infrastructure/zones/)。価格や含まれるトラフィックはロケーションによって異なる場合があります。 3. **Plan** — 固定プラン(vCPU、RAM、NVMeディスク、時間単位の価格)、または **Custom**(お客様がvCPU、RAM、ディスクを選択し、リソースごとに課金)。プランは [Plans](https://nexcmp.com/ja/docs/catalog/plans/) から取得されます。 4. **Billing cycle** — **Hourly**、または割引付きの前払い月払い/年払いサイクル(例: 1年 −10%、2年 −15%、3年 −20%)。 5. **Operating system** — テンプレートのリスト、**My Images**(お客様自身がアップロードした画像)、およびバージョン。 6. **Hostname & quantity** — 名前(または **Randomize**)とサーバーの台数。 ![サービス、ロケーション、プランの各ステップを示す注文ページ](https://nexcmp.com/ja/docs/images/portal/ordering-01-plan.webp) ![注文ページの課金サイクルとOSのステップ](https://nexcmp.com/ja/docs/images/portal/ordering-02-cycle-os.webp) ## 注文の実行 {#placing-the-order} 概要に価格が表示されます。注文は、[quota check](https://nexcmp.com/ja/docs/billing/quotas/) および [minimum balance](https://nexcmp.com/ja/docs/billing/minimum-top-up/) のルールの後、プロビジョニングの**前**にウォレットから引き落とされます。VMは通常約1分で *Running* 状態になります。お客様はVMの **Activity** タブでデプロイのステップを確認でき、初回パスワード(10分間のみ1回表示)が記載された「VM ready」メールを受け取ります。 ## 注文が停止する原因 {#what-can-stop-an-order} | メッセージ / 原因 | 対処法 | |---|---| | 残高不足 | トップアップ — [Sign-up, wallet and top-up](https://nexcmp.com/ja/docs/portal/sign-up-and-wallet/) | | クォータ超過 | クォータの引き上げ — [Quotas](https://nexcmp.com/ja/docs/billing/quotas/) | | メールアドレス未確認 | お客様によるメールアドレスの確認 | | 選択したロケーション用のプランなし | 該当ゾーンでプランを利用可能にする — [Plans](https://nexcmp.com/ja/docs/catalog/plans/) | | ライセンスが無効 | お客様は新しいサービスを作成できません — [License](https://nexcmp.com/ja/docs/getting-started/license-and-purchase/#if-the-license-is-not-valid) | --- # 仮想マシン {#virtual-machines} > **ポータルでの場所:** Instances(`/vms`)およびVMのページ(`/vms/`)。 **Instances** には、お客様のVMの名前、OS、ステータス、IP、スペック、費用の一覧が表示されます。クリックすると詳細ページが開きます。 ## VMページ {#the-vm-page} タブ:**Overview**、**Console**、**AI SSH Agent**(AIモジュールが有効な場合)、**Monitoring**、**Storage**、**Network**、**Configuration**、**Billing**、**Activity**。 ![ステータス、スペック、IP、帯域幅チャート、アクションログが表示された仮想マシンの概要](https://nexcmp.com/ja/docs/images/portal/virtual-machines-01-overview.webp) ### アクション {#actions} | アクション | 効果 | |---|---| | コンソール | ブラウザコンソールを開く — [Console](https://nexcmp.com/ja/docs/portal/console/) | | 再起動 / 停止 / 強制停止 | 電源制御 | | パスワードのリセット | 新しいパスワードを生成します(一度だけ表示されます) | | OSの再インストール | テンプレートから再構築します。データは失われます | | IPの変更 | パブリックIPを置き換えます(ソースがサポートしている場合) | | Auto Scalingの有効化 | 有効時に負荷に応じてCPU/RAMをスケーリングします | | 削除 | VMを破棄します。時間単位の課金が停止します | ### 表示される情報 {#information-shown} 稼働時間、今月のコスト、リアルタイム使用量付きのvCPU/RAM/ディスク、パブリックおよびプライベートIP、ユーザー名、帯域幅チャート、アクションログ、および課金サマリー(プラン、サイクル、時間、残り)。 ::: info フィールドはソースによって異なります VMページには、そのソースがサポートしているもののみが表示されます。たとえば、Proxmox VEのVMにはポートフォワードやIP変更がなく、OSリストはそのクラスターのテンプレートセットに従います。[Proxmox VE](https://nexcmp.com/ja/docs/infrastructure/proxmox/)の機能テーブルを参照してください。 ::: ## 課金タブ {#billing-tab} プラン、サイクル、合計時間、残り時間、および課金ログを表示します。時間単位のVMは削除されるまで蓄積されます。お客様は**サイクルを切り替えて**、割引価格で長期間を前払いすることができます。 ## 管理者向け {#for-administrators} 同じVMが管理コンソールの Services › Virtual Machines に表示されており、そこで管理者はお客様の代理として操作を行うか、[としてログイン](https://nexcmp.com/ja/docs/customers/login-as/)することができます。 --- # コンソール {#console} > **ポータル内の場所:** VMのページ → **Console**タブ。**管理画面内の場所:** System › Admin › License & updates → モジュール(Web SSH)。 ## 動作内容 {#what-it-does} **Console**タブは、VM内のネットワークが故障している場合でも、ブラウザでVMへのグラフィカル(VNC)セッションを開きます。SSHモジュールが有効な場合、2番目のオプションとして**Web SSH**端末を利用できます。 ## 要件 {#requirements} | 項目 | VNCコンソール | Web SSH | |---|---|---| | CloudStack | パネルから到達可能なコンソールプロキシVM(CPVM) — [CloudStack](https://nexcmp.com/ja/docs/infrastructure/cloudstack/)を参照 | VM上の到達可能なSSHポート | | Proxmox VE | パネル経由で動作します(Proxmox API経由のnoVNC。TLSフィンガープリントがピン留めされています) — [Proxmox VE](https://nexcmp.com/ja/docs/infrastructure/proxmox/)を参照 | 同上 | | パネル | [General settings](https://nexcmp.com/ja/docs/administration/general-settings/)で設定されたコンソールURL | `ssh-proxy`サービスおよびモジュールフラグ`feature_ssh_web`。デフォルトではオフ — [Modules](https://nexcmp.com/ja/docs/infrastructure/modules/)を参照 | Web SSHモジュールがオフの場合、タブには**VNC only**が表示されます。 ## 使用方法 {#use-it} 1. VM → **Console**を開きます。 2. **Console**(または**Open in new window**)をクリックします。有効期限の短いチケットが発行され、コンソールが`https:///console`で開きます。 3. VMのユーザー名とパスワードでログインします(Overviewタブに表示されます。紛失した場合はリセットしてください)。 ![仮想マシンのConsoleタブ](https://nexcmp.com/ja/docs/images/portal/console-01-tab.webp) ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | すぐに「Disconnected」と表示される | ブラウザが古いコンソールパスを保持していた | ドメインのサイトデータをクリアして再試行する | | 画面が真っ暗になる | VMが停止中または起動中である | VMを起動して待機する | | CloudStackでコンソールが開かない | コンソールプロキシVMが実行されていないか、到達できない | CloudStackでシステムVMを確認する | | SSHオプションがない | Web SSHモジュールが無効です | `ssh-proxy`がインストールされている場合のみ有効化してください | --- # Snapshots and backups {#snapshots-and-backups} > **ポータルでの位置:** Snapshots (`/snapshots`)、Snapshot schedules (`/snapshots/schedules`)、Backups (`/backups`)。管理画面で機能が有効化されている場合のみ表示されます。 ## 動作内容 {#what-it-does} Snapshotsは仮想マシンのディスクの状態を保存し、お客様が不適切な変更の後にロールバックできるようにします。Snapshotsは手動またはスケジュールに従って作成できます。 ## 可用性 {#availability} | Source | Snapshots | 備考 | |---|---|---| | CloudStack | はい | ボリュームスナップショット。設定に応じてストレージ課金されます | | Proxmox VE | はい | **VMごとに最大5個まで**。作成、一覧表示、復元、削除が可能 | メニュー項目は、スナップショット機能が有効であり、かつお客様が対応するソースのVMを所有している場合にのみ表示されます。 ## 使用方法 {#use-it} 1. **Snapshots**を開き、**Create**をクリックして、VMを選択し名前を入力します。 2. ステータスが*ready*になるまで待ちます。 3. 戻るには、スナップショットで**Restore**を選択して確認します。VMはその状態に戻り(必要に応じて再起動されます)、 4. 不要になったスナップショットを削除します。 ::: warning 復元を行うと、スナップショット作成後に書き込まれたデータはすべて破棄されます。保護されたVMは、ポータルから復元または破棄できません。 ::: --- # お客様向けサポート {#support-for-customers} > **ポータルでの位置:** すべてのページのチャットバブル、`/chat`、およびサポートチケット。 **管理画面での位置:** Customers › Support › Tickets (`/support/tickets`)、タブ **Settings**。 ## お客様向け {#for-customers} - **チャットバブル**(すべてのページの隅に表示): 質問を入力すると、[AI Chat](https://nexcmp.com/ja/docs/ai/ai-chat/)がお客様のドキュメントとアカウントデータを使用して回答します。**Expand**をクリックすると、`/chat`で同じ会話を開くことができます。 - **スタッフに連絡**: 会話をご利用のチーム(管理者用Telegramグループ経由)に引き渡します。 - **Telegram / Zalo** ボタン: サポート設定でリンクを設定した後にのみ表示されます。 - **チケット**: 長引く問題用。返信はメールで送信されます(`ticket_reply`)。 ## 管理者向け {#for-you} 1. **Customers › Support › Tickets**を開きます。新しいチケットやチャットが会話履歴とともにここに表示されます。 2. スレッド内で返信します。お客様にはご利用の[SMTP](https://nexcmp.com/ja/docs/administration/smtp-and-emails/)を通じてメールが送信されます。 3. タブ **Settings**でチャットウィジェットの有効化/無効化、TelegramおよびZaloのリンクの設定(httpsのみ)、AIによる自動回答の有効化を選択します。詳細は[AI Chat](https://nexcmp.com/ja/docs/ai/ai-chat/)をご覧ください。 4. [Telegram alerts](https://nexcmp.com/ja/docs/administration/telegram-notifications/)を接続すると、新しいチャットがチームに通知されます。 --- # AIプロバイダー {#ai-provider} > **管理画面での位置:** System › Settings › AI provider (`/settings/ai`)。AIモジュールのスイッチはそこおよび System › Admin › License & updates (`/license`) のカード **Module**にあります。 ## 動作内容 {#what-it-does} AI Chat(自動サポートチャット)およびAI Agent(平易な言葉でのVM管理)には、組み込みモデルは付属していません。**独自のプロバイダー**を選択します:**OpenAI互換**の`chat/completions` APIを提供する任意のサービス(OpenAI、OpenRouter、LiteLLMゲートウェイ、または独自のvLLMサーバーなど)を利用できます。NexCMPはエンドポイントとAPIキーを(暗号化して)保存し、すべてのAI機能で使用します。料金はプロバイダーに直接お支払いいただきます。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | Endpoint | OpenAI互換のベースURL(`https://api.openai.com/v1`、`https://ai.example.com/v1`)。NexCMPは、`/chat/completions`で終わるURLには`/v1`を追加し、その他のURLには`/v1/chat/completions`を追加します。すでに`/chat/completions`で終わっているURLはそのまま使用されます。 | | モデル | **ツール(関数)呼び出し**をサポートするモデル。AI Chatとエージェントの両方がこれに依存します。 | | API キー | そのエンドポイント用のキー。プロバイダー側で**利用上限(スペンディングキャップ)**が設定されたキー(月額予算付きのLiteLLM仮想キーなど)を推奨します。 | | ネットワーク | パネルサーバーはHTTP(S)経由でエンドポイントに到達できる必要があります。フォームに入力するURLは、ポート80、443、8080、8443のインターネット宛てのみ許可されます。内部アドレスを使用するには、まずプロバイダーを保存してからテストしてください。 | | 依存関係 | **AI**モジュールを有効にします。エージェントについては[AI Agent](https://nexcmp.com/ja/docs/ai/ai-agent/#requirements)を参照してください。 | ## インフラストラクチャの準備 {#prepare-the-infrastructure} 1. プロバイダーにサインアップしてAPIキーを作成します。プロバイダーが予算やレート制限をサポートしている場合は、月額制限を設定します。 2. **ベースURL**と正確な**モデル名**(およびオプションで最大4つのフォールバックモデル)をメモします。 3. 入力する前にNexCMPサーバーからテストします: ```bash curl -s https://ai.example.com/v1/chat/completions \ -H "Authorization: Bearer XXXX" -H "Content-Type: application/json" \ -d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"Reply with one word: OK"}]}' ``` `choices[0].message.content`を含むJSONの回答は、エンドポイントが機能していることを示します。 ## NexCMP での接続 {#connect-in-nexcmp} 1. **System › Settings › AI provider**を開きます。 2. カード**Module AI**でモジュールを**オン**に切り替えます。オンにするまで、お客様はポータルでAI ChatやAI Agentを見ることができません。(**License & updates**でも切り替えることができます。) 3. カード**Connection**で以下を入力します: | 項目 | Example | 備考 | |---|---|---| | このプロバイダーを使用 | on | オンにするには、ベースURL、モデル、キーが必要です。 | | 表示名 | `LiteLLM` | 最大60文字。 | | ベースURL(OpenAI互換) | `https://ai.example.com/v1` | `http://`または`https://`、最大300文字、スペースなし。 | | プロバイダーAPIキー | `sk-XXXX` | 暗号化されて保存され、その後は末尾4文字のみが表示されます。保存されたキーを維持するには空のままにします。 | | デフォルトモデル | `gpt-4o-mini` | 文字、数字、および`- _ . / : @`。 | | フォールバックモデル | `gemini-2.5-flash` | カンマ区切り、最大4つ。デフォルトモデルが失敗したときに使用されます。 | | 推論の度合い | デフォルト(送信しない) | `Minimal`、`Low`、`Medium`、または`High`。推論モデル(Gemini、oシリーズ)の場合、低いレベルにすると応答が大幅に高速化されます。通常のモデルではデフォルトのままにします。 | 4. **Save**をクリックし、次に**Test connection**をクリックします。テストでは短い質問を1つ送信し、`Connected — , ms`またはプロバイダーから返されたエラーを表示します。 ![AIモジュールが有効になり、接続フォームにサンプル値が入力された状態のAI providerページ](https://nexcmp.com/ja/docs/images/ai/ai-providers-01-connection.webp) ### 保存の動作 {#what-saving-does} - プロバイダーの設定は1つの設定エントリとして保存され、キーはインストールのマスターキーを使用してこの目的にバインドされたAES-256-GCMで暗号化されます。 - サポート設定の**Primary model**と**Fallback model**(AI Chatで使用)は、デフォルトモデルと最初のフォールバックモデルに自動的に設定されます。 - 変更は監査ログに記録されます(エンドポイント、モデル、キーが変更されたかどうか。キー自体は記録されません)。 ## 確認 {#verify} 1. **Test connection**が緑色に表示されます。 2. テスト顧客としてポータルにサインインします。メニューに**AI Chat**(またはチャットバブル)と**AI Agent**が表示されます。 3. AI Chatに「残高はいくらですか?」と質問します。実際の残高を引用した回答が表示されれば、プロバイダーがツール呼び出しを正しく処理していることを示します。 ## 制限と注意事項 {#limits-notes} - **単一のプロバイダー。** NexCMPは、Chat、Agent、およびチケット調査用に、設定された単一のプロバイダーを使用します。フォールバックモデルにより、そのプロバイダー内での耐障害性が向上します。 - **キーの安全性。** 保存されたキーは、保存されたエンドポイントにのみ送信されます。ベースURLを変更する場合は、テストする前にキーを再入力する必要があります。 - **顧客ごとの制限。** AI Chatはログイン中の顧客専用で、分単位およびチャットごとのメッセージ制限があります。AI Agentにはアカウントごとの1日の呼び出し制限があります。[AI Chat](https://nexcmp.com/ja/docs/ai/ai-chat/)および[AI Agent](https://nexcmp.com/ja/docs/ai/ai-agent/)を参照してください。 - **プライバシー。** 顧客からの質問およびAIがその顧客のために読み取るデータ(読み取り専用)はお使いのプロバイダーに送信されます。[プライバシーポリシー](https://nexcmp.com/ja/docs/customers/legal/)にその旨を記載してください。 - **コスト管理。** NexCMPはAIのコストを計測しません。プロバイダーの予算機能を使用してください。 - モジュールはいつでもオフにできます:AIメニュー項目が消え、AIルートは404を返します`module_disabled`。AI Chatの一部バックグラウンドジョブ(チケット調査、遅延返信)はそのパネルの次回の再起動時に変更を反映します。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | `base_url must be an http(s) URL` | スキームの欠落またはスペース | `https://host/v1` を使用します。 | | `api_key is required to enable the provider` | キーが保存されていません | キーを入力して保存します。 | | `base_url and model are required to enable the provider` | 空のフィールド | 両方に入力してください。 | | "Base URLがブロックされました: パブリックhttp(s)のみ、ポート80/443/8080/8443" | 保存されていない内部アドレスまたは他のポートのテスト | 最初にプロバイダーを保存してからテストしてください。 | | `api_key is required (enter the key again when you change the endpoint)` | Base URLが保存されているものと異なります | キーを再入力します。 | | `model: letters, digits and - _ . / : @` | 無効な文字 | プロバイダーの正確なモデルIDを使用してください。 | | `fallback_models: up to 4 model names` | 多すぎます | 4個以下に維持してください。 | | 401エラーでテストが失敗する | キーが正しくありません | キーとエンドポイントを確認してください。 | | 404または「model not found」でテストが失敗する | パスまたはモデルが間違っています | ベースURL(`/v1`)とモデルIDを確認してください。 | | `Too many tests — wait a minute` (429) | 1分間に10回を超えるテスト | お待ちください。 | | ポータルにAIメニューが表示されない | モジュールがオフであるか、プロバイダーが「in use」になっていません | モジュールをオンにし、プロバイダーを有効にしてください。 | --- # AI Chat {#ai-chat} > **管理画面での場所:** Customers › Support › Ticket、タブ**AI settings**(`/support/tickets?tab=settings`)。プロバイダーとモジュール:System › Settings › AI provider(`/settings/ai`)。**ポータルでの場所:** フローティングチャットボタンおよびページ`/chat`(モード**Ask AI**)。 ## 動作内容 {#what-it-does} AI Chatはいつでも顧客の質問に答え、*顧客自身の*アカウントデータ(残高、サービス、支払い、最近のエラー)を検索し、顧客の確認後にVMの作成やプランの変更などのアクションを実行できます。アシスタントが支援できない場合、顧客は**Talk to a human**をクリックします。チャットはTelegram上のスタッフに送信され、時間内に誰も応答しない場合はチケットになります。同じAI設定により、システムがスタッフのために**チケットを調査**することも可能になります。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | モジュールとプロバイダー | **AI**モジュールがオンになっており、[AI provider](https://nexcmp.com/ja/docs/ai/ai-providers/)が保存されて使用中であること。プロバイダーがない場合、アシスタントは設定されていないと応答します。 | | 顧客 | **ログイン中の顧客のみ。** インストール済みのNexCMPには公開サイトがないため、ログインしていない訪問者には「Sign in to use AI Chat」が表示されます。 | | スタッフチャンネル(オプション) | 管理者アラート用のTelegramボットとチャット([Telegram notifications](https://nexcmp.com/ja/docs/administration/telegram-notifications/)を参照)。同じチャンネルがチャットの引き継ぎとチケットドラフトを受信します。 | | 依存関係 | [AI provider](https://nexcmp.com/ja/docs/ai/ai-providers/)。 | ## インフラストラクチャの準備 {#prepare-the-infrastructure} AIプロバイダー以外は必須ではありません。スタッフへの引き継ぎを行う場合: 1. @BotFatherでTelegramボットを作成し、トークンを記録します。 2. グループを作成するか、ボットとのプライベートチャットを使用し、チャットIDを記録します。 3. System › Settings › Admin alertsに両方を入力します([Telegram notifications](https://nexcmp.com/ja/docs/administration/telegram-notifications/)を参照)。サポート機能では、そのボットとチャットを再利用します。 ## NexCMP での接続 {#connect-in-nexcmp} 1. AIモジュールが有効になっており、プロバイダーのテストが緑色(正常)になっていることを確認します([AI provider](https://nexcmp.com/ja/docs/ai/ai-providers/))。 2. **Customers › Support › Ticket**を開き、**AI settings**タブを選択します。左側のカードの上部には、*AI provider: configured*、*Telegram: channel present*、および*On shift*または*Off shift*の3つのタグが表示されます。 3. 左側のカード **AI + Telegram**: | スイッチまたはフィールド | デフォルト | 意味 | |---|---|---| | AIがチケットを自動調査する | On | 新規チケットまたはメッセージに対し、AIがお客様のデータを読み取り(読み取り専用)、可能性のある原因とドラフトの返信を**内部ノート**として記述します。お客様に直接送信されることはありません。 | | 管理者へのTelegramアラート | On | 「送信」、「編集」、「スキップ」のボタン付きノートがTelegramに届きます。 | | AI自動返信 | オフ | すべての安全条件を満たしている場合(信頼度85%以上、警告なし)、簡単なハウツーや営業の回答を自動で送信します。送信は3分後に行われ、Telegramでキャンセル可能です。 | | 自動返信を許可するカテゴリ | `how_to`, `sales` | これらのみ。 | | プライマリモデル、フォールバックモデル | プロバイダーから設定 | 通常はAIプロバイダーページで保存されたままにします。 | | 操作を許可するTelegramユーザーID | empty | 空欄の場合、アラートチャネルのチャットを意味します。 | 4. 右側のカード **Live chat (customer widget)**: | 項目 | デフォルト | 意味 | |---|---|---| | チャットウィジェットを有効化 | On | チャットバブルおよび`/chat`ページ。 | | サポート時間(ベトナム時間) | `08:00-22:00` | スタッフがTelegramで対応することが期待される時間帯です。この時間外、またはTelegramチャネルが存在しない場合、**Talk to a human**によってチャットは直ちにチケットに変換されます。 | | スタッフの最大待機時間(分)、超過時はチケットに変換 | 10 | 1から240までの範囲。 | | 顧客あたりのAIターン数 / 日 | 40 | 1から1000までの範囲。制限に達すると、アシスタントはお客様に人間のスタッフとの会話を案内します。 | | IPあたりの新規チャット数 / 時間 | 20 | 1から1000までの範囲。 | | **Zalo OAリンク** | empty | `https://zalo.me/...`チャット内に**Chat on Zalo**ボタン(QRコード付き)を表示します。空欄の場合は非表示になります。 | | **Telegramリンク** | empty | `https://t.me/...`**Telegram**ボタンを表示します。空欄の場合は非表示になります。 | | ログイン済み顧客における、AIターンのシステム全体の1日あたりの上限 | 2000 | | | ゲストにおける、システム全体の1日あたりの上限 | 500 | 独自のプール。ゲストがチャットできない間は使用されません。 | | チケット自動調査のシステム全体の1日あたりの上限 | 200 | | | 管理者パス(「Open admin」Telegramボタン) | empty | 管理者URL(例: `https://cloud.example.com/admin`)。 | スイッチやフィールドを変更すると、それぞれ自動的に保存されます。 5. 下部にある**Reply templates**(タイトル、言語 VI/EN/ZH、最大4,000文字のテキスト)により、スタッフは定型文の回答を利用できます。 ![AIおよびTelegramのスイッチ、ライブ chatの制限、ショートカットリンクを備えたAI settingsタブ](https://nexcmp.com/ja/docs/images/ai/ai-chat-01-settings.webp) ![アシスタントとのカスタマーチャットページ、ZaloとTelegramのショートカットボタン、および担当スタッフへの引き継ぎオプション](https://nexcmp.com/ja/docs/images/ai/ai-chat-02-portal.webp) ## アシスタントにできることとできないこと {#what-the-assistant-can-and-cannot-do} - **読み取り:** ナレッジベースや公開ドキュメントを検索し、読み取り専用ツールを通じてサインイン中の顧客自身のデータを読み取ります。他の顧客のデータを見ることはできません。 - **動作:**顧客自身のAPI権限を使用します。*読み取り*は即座に実行されます。変更を伴う操作や費用が発生する操作は**確認カード**(「Needs your confirmation」と、*Costs money*または*Delete*タグ)を作成し、顧客が**Confirm**をクリックするまで何も実行されません。1つのチャットで保留中のカードは最大3枚まで、1つのアカウントにつき確認済みの書き込みアクションは1時間あたり最大10件までとなります。 - **禁止事項:** コンソールのオープン、SSHやコンソール用トークンの作成、Kubernetesアクセスファイルのダウンロード、パスワードのリセット、プロキシパスワードやS3シークレットなどの機密情報の表示は行えません。シークレットがモデルのコンテキストやチャット履歴に含まれることは一切ありません。 - **安全性:** 回答は出力フィルターを通過します。顧客のテキストやツールの実行結果は命令ではなくデータとして扱われます。 - **免責バナー:** チャットには「AIアシスタントによる回答です。不完全な場合があります。重要な事項についてはスタッフにお問い合わせください。」と表示されます。 ## スタッフへの引き継ぎ {#staff-hand-off} 1. 顧客が**Talk to a human**をクリックすると、メールアドレスを残すことができます。 2. 会話内容を含むメッセージがスタッフのTelegramチャットに送信されます。スタッフがそのメッセージに返信すると、その返信は顧客のチャット内に「[brand] Support」として表示されます。 3. 待機時間(デフォルトで10分)内に誰も応答しなかった場合、チャットは**Customers › Support › Ticket**の配下でチケットになります。サポート時間外である場合やTelegramが設定されていない場合も同様に即座にチケット化され、顧客にチケットが作成されたことが通知されます。 4. 管理者は**Live chat**タブでも進行中のチャットを確認できます。 ## 確認 {#verify} 1. テスト顧客としてサインインし、チャットを開いてサービスについて質問します。アシスタントが回答します。 2. 費用が発生する項目の作成を依頼します:確認カードが表示され、**Confirm**をクリックするまで何も作成されません。 3. **Talk to a human**をクリックします。(設定されている場合)Telegramチャットにメッセージが届くか、待機時間経過後にチケットが作成されます。 4. ZaloとTelegramのリンクが入力されていると、両方のショートカットボタンがチャットに表示されます。 ## 制限と注意事項 {#limits-notes} - **レート制限(IPごと):**1分あたり20メッセージ、および1時間あたりのハンドオフは少数。**1会話あたり40メッセージ**。これらは固定値です。 - **コスト:** AIの応答ごとにプロバイダーが呼び出されます。支出を抑えるには**AI turns / day / customer**を下げてください。 - **自動返信はデフォルトでオフになっています。** ドラフトの挙動をしばらく確認してから有効にしてください。 - **言語:** アシスタントは顧客の言語で回答します。ベトナム語はテキストから検出されます。 - **リセラー:** リセラーサイトではウィジェットの代わりにチケットを使用します。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | 顧客にチャットが表示されない | AIモジュールがオフ、または**Enable chat widget**がオフになっている | 両方をオンにします。 | | "Sign in to use AI Chat" | 訪問者がサインインしていない | NexCMPの仕様:最初にサインインしてください。 | | AIプロバイダーが設定されていないというエラーが表示される | プロバイダーが未設定、未使用、またはキーが不足している | [AI provider](https://nexcmp.com/ja/docs/ai/ai-providers/)の設定を完了してください。 | | 数回やり取りした後にAIが「担当スタッフにお問い合わせください」と応答する | 顧客あたりの1日あたりの制限に達した | **AI turns / day / customer**を引き上げてください。 | | Telegramタグに「no channel」と表示される | ボットまたはチャットIDが設定されていません | [Telegram通知](https://nexcmp.com/ja/docs/administration/telegram-notifications/)を設定してください。 | | ZaloまたはTelegramボタンが表示されない | リンクフィールドが空です | リンクを入力してください。 | | チャットに「Too many requests」と表示される | 1つのIPから1分間に20メッセージを超えています | 1分間お待ちください。 | | チャットの会話がいっぱいです | 40メッセージに達しました | 新しい会話を開始してください。 | --- # AI Agent {#ai-agent} > **管理画面の場所:** System › Settings › AI provider (`/settings/ai`) — モジュールスイッチとプロバイダー。System › Admin › License & updates (`/license`) — モジュールスイッチ。**ポータルの場所:** AI Agent (`/ai/agent`) とページ `/chat/agent`、またはチャット内のモード **Agent**。 ## 動作内容 {#what-it-does} AI Agentは、お客様自身のLinux VMにSSHで接続し、「システムの状態を確認する」、「Dockerをインストールする」、「最近のエラーを見つける」、「ディスク空き容量を増やす」といった平易な言葉で記述されたタスクを実行します。提案するすべてのコマンドとその出力が表示されます。読み取り専用コマンドは自動実行できますが、サーバーを変更する操作は、お客様が **Run** を押すまで待機します。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | AIモジュールとプロバイダー | **AI**モジュールが有効であり、動作する[AI provider](https://nexcmp.com/ja/docs/ai/ai-providers/)が必要です。また、エージェントにはツール呼び出しをサポートするモデルが必要です。 | | パネルサーバー上の `openssh-client` | エージェントはパネル自身の `ssh` プログラム (`/usr/bin/ssh`) を使用してコマンドを実行します。インストーラーは `openssh-client` をインストールします。`ssh -V` で確認してください。これがない場合、エージェントは「ssh client is not installed on the panel server」と報告します。 | | 個別のSSHゲートウェイなし | デフォルトのインストールでは内蔵SSHが使用され、`ssh-proxy` Webターミナルは**必要ありません**。オプションの *web SSH* 機能 (`feature_ssh_web`) が有効化され、`ssh-proxy` サービスがインストールされている場合のみ、エージェントは `ssh-proxy` を経由します。 | | ネットワーク | パネルサーバーからVMのIPのSSHポート(デフォルトでは22)に到達できる必要があります。パネルとゲストネットワーク間のファイアウォールとセキュリティグループを確認してください。 | | VM | お客様所有で、**実行中**、ロックされておらず、パブリックまたは到達可能なIPアドレスを持つ**Linux**(Windows VMは拒否されます)。 | | SSH認証情報 | NexCMPによって保存されたVMのログインユーザーとパスワード(VMの作成時またはパスワードのリセット時に暗号化して保存)、またはインストールされている場合はパネルのオペレーションキー。どちらも存在しない場合、エージェントはログインできないことを伝えます。 | ## インフラストラクチャの準備 {#prepare-the-infrastructure} 1. パネルサーバー上のSSHクライアントを確認します: ```bash ssh -V sudo apt-get install -y openssh-client # only if missing ``` 2. パネルサーバーからゲストVMへのSSH接続が開けることを確認します: ```bash nc -vz 198.51.100.10 22 ``` アドレスをテスト用VMのIPに置き換えてください。これが失敗する場合は、最初にルーティングまたはファイアウォールを修正してください。 3. ゲストがNexCMPによって保存されたユーザーのパスワードログインを許可していること(一部のクラウドイメージでは無効になっています)、またはパネルのオペレーションキーがゲストにインストールされていることを確認してください。 ## NexCMP での接続 {#connect-in-nexcmp} 1. [AI provider](https://nexcmp.com/ja/docs/ai/ai-providers/)を完了する:モジュールをオンにし、プロバイダーを保存し、**Test connection**が緑色になること。 2. 管理者側で他を設定する必要はありません。モジュールスイッチにより、カスタマーポータルに**AI Agent**のエントリが表示されます。 3. お客様として:**AI Agent**を開き、実行中のサーバーを選択して **Choose server** をクリックします。ページは最初に固定された無害なコマンドでSSHをプローブし(AI呼び出しは使用されません)、*SSH connected* または失敗した理由を表示します。 4. タスクを入力するか、クイックスタートを選択します(*Check system health*、*Install Docker*、*Install Nginx*、*Find recent errors*、*Security check*、*Free up disk space*)。 ## コマンドの実行方法 {#how-it-runs-commands} - **実行元:** パネルサーバーから、システム `ssh` クライアントを使用し、1回に1つの非対話型コマンドを実行します。ターゲットはリクエストからではなく常に**データベースからの**VMのIPであり、所有者自身の実行中でロックされていないVMのみに到達可能です。 - **認証:** 保存されたパスワードは、プロセス環境内のワンショット `SSH_ASKPASS` ヘルパーを介して渡されます。ディスクへの書き込みやコマンドラインへの配置は行われません。ホストキーのピン留めは行われません(VMは新しいキーで再インストールされます)。コマンドごとの出力は最大200 KBに制限され、各コマンドには制限時間(60秒)があります。 - **エージェントループ:** AIがコマンドを提案して出力を読み取ります。1ターンの終了は最大**10ステップ**です。 - **モード:** | モード | 動作 | |---|---| | **Confirm** | すべてのコマンドが **Run** を待ちます。 | | **Auto** | 厳格な読み取り専用の許可リストを通過するコマンドのみが自動的に実行されます(例: `df -h`、`ps`、`journalctl`)。それ以外のものや、パーサーが確実に解析できないもの(変数、コマンド置換、ファイルへのリダイレクト)は **Run** を待ちます。 | - **リスクラベル:** ファイルのの上書きや削除、ディスクへの書き込み、アカウントやSSHキーの変更、外部サーバーへのデータの送信、未処理のネットワーク接続のオープン、難読化されたコードの実行、スクリプトのダウンロードと実行、マシンのシャットダウンや再起動、または他のサーバーへのアクセスを行うコマンドは、Autoモードであっても常に **Needs confirmation** が表示されます。 - **信頼できない出力:** コマンドの出力は信頼できないデータとしてモデルに表示され、その中にある指示には従いません。 ## 確認 {#verify} 1. 実行中のテスト用VMを選択します。ページに *SSH connected* が表示されます。 2. "Check CPU, RAM and disk" と質問します。Autoモードでは読み取り専用のコマンドが実行され、その回答がまとめられます。 3. "Install Nginx" と質問します。インストールコマンドが **Run** および **Skip** とともに表示され、**Run** を押すまで何も実行されません。 4. 上部のカウンターには、その日に使用されたAI呼び出しの数が表示されます(例: `3/300`)。 ## 制限と注意事項 {#limits-notes} - **日次制限:** 顧客1人あたり1日(UTC)300回のAI呼び出し。00:00 UTCにリセットされます。使い切ると、エージェントは "Daily AI quota reached" と返答します。 - **同時実行数:** 顧客あたり同時に最大2つのエージェント実行。セッションは一度に1ターンを実行します。 - **セッション:** セッションあたり最大100メッセージ、1メッセージあたり4,000文字。セッションは1つのVMに属し、VMが削除または転送されると、古いセッションは読み取り専用になります。 - **ロック中または停止中のVM、あるいはWindows:** VMは *Locked*、*Stopped*、*Windows* または *No address* として表示され、選択できません。 - **なりすまし:** 顧客になりすましている管理者は、エージェントの資格情報機能を使用できません([Log in as a customer](https://nexcmp.com/ja/docs/customers/login-as/)を参照)。 - **責任:** エージェントはミスをする可能性があります。ポータルでは、実行前にコマンドを確認するよう顧客に伝えます。承認したコマンドの責任は顧客にあることを利用規約に記載してください。 - AIモジュールをオフにすると、エージェントのエントリが削除され、ルートは404を返します `module_disabled`。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | "パネルサーバーにsshクライアントがインストールされていません (apt install openssh-client)" | `ssh` バイナリが存在しない | `sudo apt-get install -y openssh-client`. | | "エージェントがログインできませんでした" / `ssh: no saved credentials for this VM` | 保存されたパスワードと操作キーがない | ポータルでVMのパスワードをリセットして再度保存するか、操作キーをインストールします。 | | "サーバーが時間内に応答しませんでした" | ファイアウォール、SSHがリッスンしていない、VMがビジー | パネルサーバーから `nc -vz 22` をテストします。VMで `sshd` を開始します。 | | "このサーバーのSSHに接続できませんでした" | ルーティングまたはセキュリティグループ | パネルサーバーからポート 22 で VM に到達できるようにします。 | | "VMが実行されていません" / "アクセス権限がありません" | VMが停止中、ロック中、削除済み、または別のお客様のものです | 起動するか、ロックを解除するか、別のものを選択します。 | | "利用できません: N (停止中、ロック中、またはWindows)" | 上記の理由 | VMは Linux で、実行中である必要があります。 | | "SSHゲートウェイは一時的に利用できません" | Web SSH機能が有効ですが、`ssh-proxy`が停止しています | `ssh-proxy`を起動するか、内蔵 SSH を使用するために Web SSH機能をオフにします。 | | "AIの応答が遅すぎます (90秒以上)" | プロバイダーの応答が遅い | より高速なモデルを使用するか、**Reasoning effort**を下人にしてください。 | | "一日のAI利用枠に達しました" | 300 回の呼び出しが使用されました | 00:00 UTC まで待ちます。 | | "このセッションはまだ実行中です" | 別のターンが進行中です | 待つか、**Stop**を押します。 | --- # REST API > **ポータル内の場所:** `https:///apidoc`のAPIリファレンス(公開)と`/api-keys`のAPIキー。**管理画面内の場所:** Customers › API keys (`/customers/apikeys`) に、お客様が作成したキーの一覧が表示されます。 ## 動作内容 {#what-it-does} お客様がポータルで行うことのできるすべての操作(VMの一覧表示と制御、請求書の閲覧、SSHキーの管理、Kubernetes、ストレージ、サポートチケット)は、`https:///v1/`配下のバージョン管理された REST API を通じて利用可能です。お客様はスクリプトや CI からスコープ付きの **API key** を使用して呼び出します。この API は [`cmp` コマンドラインツール](https://nexcmp.com/ja/docs/developers/cmp-cli/) や [MCP サーバー](https://nexcmp.com/ja/docs/developers/mcp/) にも提供されており、リファレンスは実行中のインストールから生成されるため、有効になっている機能のみが正確に一覧表示されます。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | 公開 HTTPS アドレス | API はメインドメイン(および各リセラー独自のドメイン)で提供されます。 | | API キー | お客様がポータルで作成します。[API keys](https://nexcmp.com/ja/docs/developers/api-keys/) を参照してください。 | | 依存関係 | なし。有効になっていないモジュール(KubernetesやObject Storageなど)のエンドポイントは、リファレンスから非表示になり、拒否されます。 | ## インフラストラクチャの準備 {#prepare-the-infrastructure} インストールするものは何もありません。NexCMPの前段にリバースプロキシがある場合は、`/v1/`、`/mcp`、`/cli/`、`/apidoc` をパネルに転送してください(インストーラーの nginx 設定で既に設定されています)。 ## NexCMP での接続 {#connect-in-nexcmp} ### インタラクティブなリファレンス {#the-interactive-reference} `https://cloud.example.com/apidoc` を開きます(ホストをご利用のドメインに置き換えてください。リセラーのお客様には、リセラーの名前とドメインでリファレンスが表示されます)。curl、`cmp` CLI、JavaScript、Python、Go でのリクエストとレスポンスの例付きエンドポイントドキュメント、検索ボックス (Ctrl または Cmd + K)、および **Try it** パネルがあります。Try it は同じサイトへのみリクエストを送信し、訪問者が貼り付けたキー(ブラウザセッションに保持)を使用します。デフォルトでは読み取り専用であり、書き込みや有料の呼び出しには追加のスイッチと確認が必要です。 ### ダウンロードと機械可読ドキュメント {#downloads-and-machine-readable-documents} すべて公開されており、キーは不要で、サイトごとに生成されます: | URL | コンテンツ | |---|---| | `/apidoc` | インタラクティブなリファレンス。 | | `/v1/public/openapi.json` | OpenAPI 3.1 ドキュメント。 | | `/v1/public/openapi.yaml` | 同上、YAML。 | | `/v1/public/postman.json` | Postman コレクション。 | | `/v1/public/insomnia.json` | Insomnia エクスポート。 | | `/v1/public/api.md` | Markdown ファイル形式のリファレンス。 | | `/v1/public/api-catalog` | 軽量JSON:ブランド、ベースURL、キープレフィックス、すべてのスコープ、およびメソッド、パス、スコープ、`Idempotency-Key`が必要かどうかを含むすべてのエンドポイント。 | ```bash curl -s https://cloud.example.com/v1/public/api-catalog | python3 -m json.tool | head -40 curl -sO https://cloud.example.com/v1/public/openapi.yaml ``` Postmanで**Import › Link**を選択し、`https://cloud.example.com/v1/public/postman.json`を貼り付けます。リファレンスページでは、JavaScriptおよびPython用の単一ファイルAPIクライアントも提供しています。 ### 認証 {#authentication} キーを次のヘッダーで送信します:`Authorization` ```bash curl -s https://cloud.example.com/v1/billing/wallet \ -H "Authorization: Bearer vk_XXXX" ``` - 顧客キーは`vk_`で始まります。キーは**サイトにバインド**されています。`cloud.example.com`で作成されたキーはリセラーのドメインでは機能しません。 - ブラウザセッション・トークン(`pt_...`)はポータル専用です。自動化にはキーを使用してください。 - キーの**スコープ**によって呼び出し可能な操作が決まります。スコープが不足している場合はHTTP 403 `scope_required`が返されます。[API keys](https://nexcmp.com/ja/docs/developers/api-keys/)をご覧ください。 - `GET /v1/apikeys/self`でキーを確認します。呼び出し元キーの名前、スコープ、有効期限、残りのレート制限の許容量が返されます(どのキーからも呼び出し可能です)。 ### 例 {#examples} ```bash # List virtual machines curl -s "https://cloud.example.com/v1/vm?page=1" -H "Authorization: Bearer vk_XXXX" # Start one (needs vm:write) curl -s -X POST https://cloud.example.com/v1/vm/3f2a1c9e-0000-4000-8000-000000000000/start \ -H "Authorization: Bearer vk_XXXX" # Create a VM (paid: needs vm:create and an Idempotency-Key) curl -s -X POST https://cloud.example.com/v1/vm \ -H "Authorization: Bearer vk_XXXX" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d @vm.json ``` 各操作の正確なリクエストフィールドは`/apidoc`から取得してください。 ### エラー {#errors} すべてのエラーは、固定の`code`と人間が読める`message`を含むJSON形式です: ```json {"error": {"code": "scope_required", "message": "Key lacks scope vm:write"}} ``` | HTTP | 一般的な `code` | 意味 | |---|---|---| | 401 | `unauthenticated`, `key_invalid`, `key_revoked`, `key_expired`, `key_ip_denied`, `site_mismatch`, `api_keys_disabled` | キーの欠落または不明、取り消し済み、有効期限切れ、キーの許可リスト外からの呼び出し元IP、別サイトのキー、またはAPIキーが無効化されている場合。 | | 403 | `scope_required`, `endpoint_not_public`, `account_blocked`, `quota_exceeded`, `impersonate_forbidden` | キーにスコープがない、エンドポイントがキーに対して利用不可、アカウントがロックされている、[quota](https://nexcmp.com/ja/docs/billing/quotas/)に達した、代行セッション(impersonated session)で許可されていない操作の場合。 | | 404 | `not_found` | 見つかりません(Not found) — 他のユーザーに属するリソースに対しても返されます。 | | 422 | `invalid_argument` | バリデーションエラー(レスポンスにフィールド名が記載されます)。 | | 429 | `rate_limited` | リクエストが多すぎます。`Retry-After`までお待ちください。 | | 503 | `maintenance` | メンテナンスモードが有効です:読み取り操作は可能ですが、書き込み操作は拒否されます。 | ### レート制限 {#rate-limits} | 制限 | デフォルト | |---|---| | キーごと | 1分あたり120リクエスト | | アカウントごと(すべてのキーの合計) | 1分あたり300リクエスト | すべてのレスポンスに`X-RateLimit-Limit`、`X-RateLimit-Remaining`、`X-RateLimit-Reset`が含まれ、429の場合は`Retry-After`が追加されます。 ### べき等性 {#idempotency} 費用が発生する操作や繰り返し実行できない操作(作成、プラン変更、購入、削除など)には、`Idempotency-Key`ヘッダーが**必須**です(最大200文字の任意の文字列で、UUIDが最適です)。タイムアウト後に同じキーを再度送信すると、操作を繰り返す代わりに(`Idempotency-Replayed: 1`と共に)**元の**結果がサーバーから返されます。異なるコマンドに同じキーを再利用すると422が返され、処理中のリクエストの場合は409/`Retry-After`が返されます。ヘッダーがない場合、有料の呼び出しは拒否されます。 ## 確認 {#verify} 1. スコープ `vm:read` のキーをポータル(**API keys › Create key**)で作成します。 2. 実行します: ```bash curl -i https://cloud.example.com/v1/apikeys/self -H "Authorization: Bearer vk_XXXX" ``` HTTP 200とレート制限ヘッダーが返されます。 3. `curl -s https://cloud.example.com/v1/vm -H "Authorization: Bearer vk_XXXX"`はアカウントのVMの一覧を表示します。ポータルでは、キーの**Last used**列および**Key usage log**で呼び出し履歴を確認できます。 ## 制限と注意事項 {#limits-notes} - **キーからは絶対に実行できない操作:** トップアップ、出金、カード情報または自動トップアップの変更、パスワード、メールアドレス、2FAの変更、アカウントの削除、他のキーの作成、編集、取り消し。これらにはブラウザでのサインインセッションが必要です。 - **非表示のモジュール:** リファレンスおよびOpenAPIドキュメントには、そのサイトで有効になっている機能のみがリストされます。 - **レスポンスのサイズとページング:** 一覧取得のエンドポイントにはページングが適用されます(`page`、`per_page`)。各エンドポイントのOpenAPIドキュメントをご確認ください。 - **時間と金額:** フィールド名に別段の記載がない限り、金額は米ドルセント単位です。 - **管理者API:** 管理コンソールには独自の**System › Admin › API**ページと管理者用のキー(`ofw_...`)があり、ここで説明する顧客向けAPIとは区別されます。 - **バージョニング:** パスプレフィックス`/v1`は安定版です。レスポンスに新しいフィールドが追加される場合があります。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | 新しいキーでの401エラー | 別ドメインからのキー、期限切れ、またはスペースが含まれている場合 | 呼び出し先のドメインでキーを作成し、`Authorization: Bearer vk_...` ヘッダーを確認してください。 | | 403 `scope_required` | スコープがありません | ポータルでキーを編集し、スコープを追加してください。 | | 401 `key_ip_denied` または `site_mismatch` | 他のIPに制限されているキー(「許可されたIP」)または別ドメインで作成されたキー | サーバーのIPをキーの許可されたIPに追加するか、キーが作成されたドメインを呼び出してください。 | | 存在するVMに対する404 | VMが別のアカウントに属している場合 | 所有者のキーを使用してください。 | | `Idempotency-Key` を求める400/422 | ヘッダーのない有料操作 | `Idempotency-Key: ` を追加してください。 | | 429 | 制限超過 | リクエストを控え、`Retry-After` を使用してください。 | | `/apidoc` の表示が想定より少ない場合 | モジュールが無効になっています | 「License & updates」でモジュールを有効化してください。 | --- # APIキーとスコープ {#api-keys-and-scopes} > **ポータルでの場所:** API keys (`/api-keys`)。 **管理画面での場所:** Customers › Customers › API keys (`/customers/apikeys`)。 ## 動作内容 {#what-it-does} **API key**を使用すると、スクリプト、CIジョブ、[`cmp` CLI](https://nexcmp.com/ja/docs/developers/cmp-cli/)、またはAIアシスタント([MCP](https://nexcmp.com/ja/docs/developers/mcp/))が、付与された権限(**スコープ**)の範囲内で、1人の顧客に代わって[REST API](https://nexcmp.com/ja/docs/developers/api/)を呼び出すことができます。顧客キーは`vk_`で始まります。サービスの閲覧や管理を行うことができますが、金額やアカウント自体に触れることは**絶対にできません**。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | 顧客 | サインイン済みのポータルセッション(キーで他のキーを作成・編集することはできず、顧客になりすました管理者でも同様です)。 | | スイッチ | APIキーはデフォルトで有効です。無効化されている場合、呼び出しは 401 `api_keys_disabled` を返します。 | | 依存関係 | 製品のスコープは、その製品がサイトで有効になっている場合にのみ表示されます。 | ## キーの作成(顧客) {#create-a-key-customer} 1. ポータルにサインインし、**API keys**を開きます。 2. **Create key**をクリックします。 3. フォームに以下を入力します: | 項目 | ルール | |---|---| | **Key name** | 必須、60文字まで(「deploy server」、「backup script」など)。 | | **このキーが実行できる操作** | 必要なスコープにチェックを入れます(少なくとも1つ)。読み取り専用のキーには書き込みスコープを付与しないでください。金銭が発生するスコープやデータを削除するスコープの扱いには十分注意してください。 | | **Expiry** | 無期限、30日、90日、または1年(APIでは1〜3650日まで指定可能)。 | | **特定のIPからの呼び出しのみを許可** | 1行につき1つのIPまたはCIDRレンジ、最大20個まで(IPv4またはIPv6)。空欄の場合は任意のIPを許可します。可能な限りサーバーのIPを固定してください。 | 4. フォームを確認します。キーは「Key created — shown ONCE」というウィンドウに**一度だけ**表示されます。コピーして **I saved the key** をクリックしてください。保存されるのはSHA-256ハッシュのみであるため、管理者であっても再確認することはできません。紛失した場合は無効化し、新しいキーを作成してください。 5. ポータルには、キーをテストするためのすぐに使える `curl` コマンドも表示されます。 キーは `vk_` とそれに続く長いランダムな文字列で構成されます。リストには最初の文字(例: `vk_a1b2c3d4`)、スコープ、有効期限、最終使用日時、リクエスト数、ステータス(*Active*、*Expired*、*Revoked*)のみが表示されます。 ### 編集、無効化、監査 {#edit-revoke-audit} - **Edit** では名前、スコープ、許可するIP、有効期限を変更できます。なりすましセッション中は許可されません。 - **Revoke** はキーを即座に停止し、元に戻すことはできません。利用ログを参照できるように行は保持されます。 - **Key usage log** には、過去60日間の書き込みコマンドとすべてのエラー(時刻、リクエスト、キー、結果、送信元IP)が表示されます。 - 1つのアカウントでデフォルト最大 **10個のアクティブなキー** を保持できます。 - CLIまたはMCPログインを通じて作成されたキーは **Connected apps & devices** に表示され、そこから取り消すことができます。 ## Scopes {#scopes} スコープ名の形式は `area:action` です。提供されるスコープは有効にしている製品によって異なります。 | Scope | Allows | |---|---| | `catalog:read` | プランおよびカタログの読み取り。 | | `vm:read` | VM、メトリック、VM請求書の読み取り。 | | `vm:write` | 電源操作、軽微な変更、ファイアウォール、クイックスナップショット。 | | `vm:create` | **VMの作成(有料)。** | | `vm:plan` | **プラン変更またはリサイズ(有料)。** | | `vm:destroy` | **VMの削除。** | | `vm:restore` | **スナップショットからのVM復元(ディスクが上書きされます)。** | | `vm:console` | VNCコンソールチケットを開く。 | | `sshkey:read`, `sshkey:write` | SSHキーの読み取り、追加、削除。 | | `volume:read`, `volume:write`, `volume:create`, `volume:destroy` | データボリューム(作成と拡張は有料、破棄はデータ消失)。 | | `backup:read`, `backup:write`, `backup:restore` | Backups(復元によりディスクは上書きされます)。 | | `billing:read` | ウォレット、請求書、支払い履歴 — **読み取り専用**。 | | `bandwidth:buy` | **帯域幅アドオンの購入(有料)。** | | `account:read`, `account:write` | プロフィール、概要、アクティビティ、通知。`account:write` は通知を既読にする操作のみを行います。 | | `apikey:read` | アカウントのキー一覧および利用ログの表示(作成、編集、取り消しは不可)。 | | `apikey:self` | すべてのキーに暗黙的に適用: 呼び出し元のキーの検査(`GET /v1/apikeys/self`)。 | | `ticket:read`, `ticket:write` | サポートチケット。 | | `aff:read`, `transfer:read` | アフィリエイトプログラムおよびサービス転送 — 読み取り専用。 | | `k8s:read`, `k8s:write`, `k8s:create`, `k8s:scale`, `k8s:destroy`, `k8s:kubeconfig` | Kubernetes(作成とスケールは有料、kubeconfigはクラスター管理者権限)。 | | `vpc:read`, `vpc:write`, `vpc:create`, `vpc:destroy` | プライベートクラウド。 | | `image:read`, `image:write` | OSおよびISOイメージ(ストレージは時間単位で課金されます)。 | | `s3:read`, `s3:write`, `s3:create`, `s3:destroy`, `s3:keys` | Object Storage(S3シークレットは1回のみ表示されます)。 | | `vpn:read`, `vpn:detail`, `vpn:write`, `vpn:create`, `vpn:destroy` | VPNおよびIPv6プロキシ(接続詳細にプロキシパスワードが含まれます)。 | | `dedicated:read`, `dedicated:write`, `dedicated:console`, `dedicated:create`, `dedicated:destroy` | 専有サーバー(ウォレットから注文を作成、破棄するとOSが再インストールされます)。 | | `shield:read`, `shield:write`, `shield:agent` | DDoSシールド(該当モジュールが有効な場合のみ)。 | キーのスコープ外の呼び出しには **403 `scope_required`**、どのキーも呼び出せないパスには **403 `endpoint_not_public`** が返されます。 ### キーで絶対に実行できない操作 {#what-a-key-can-never-do} どのスコープでも、入金・出金、カードや自動入金の変更、パスワード・メール・2FAの変更、アカウントの削除、他のキーの作成・編集・取り消しを行うことはできません。これらには常にサインイン済みのブラウザが必要です。キーが流出した場合でも、顧客の資金やアカウントにアクセスすることはできません。 ## 信頼できるルール {#rules-you-can-rely-on} | ルール | Detail | |---|---| | Site-bound | キーは作成されたサイト(ドメイン)でのみ機能します。 | | レート制限 | キーごとおよびアカウントごと: デフォルトで毎分120および300リクエスト。 | | べき等性 | 費用が発生する操作や繰り返せない操作には `Idempotency-Key` ヘッダーが必要です。 | | クォータ | キーには、顧客と同じ [quotas](https://nexcmp.com/ja/docs/billing/quotas/) が適用されます。 | | Locked account | ロックされた顧客のキーは動作しなくなります (403 `account_blocked`)。 | | 監査 | 管理者による無効化は、管理者監査ログに記録されます。 | ## 管理者ビュー {#administrator-view} 1. **Customers › API keys** (`/customers/apikeys`) を開きます。表には、キー名と先頭文字、所有者、スコープ、ステータス、最後の使用状況 (時刻、リクエスト数、IP)、有効期限が表示されます。 2. リセラーがいる場合は、サイトでフィルタリングします。名前、ID、またはキーの先頭で検索します。 3. アクティブなキーを停止するには **Revoke** をクリックし、使用状況を確認するには **Log** をクリックします。 4. 管理者はキーの**閲覧と無効化**を行えますが、顧客のキーの読み取りや作成はできません。 ![スコープ、ステータス、最後の使用状況、Revokeボタンが表示された、顧客APIキーの管理者リスト](https://nexcmp.com/ja/docs/images/developers/api-keys-02-admin.webp) ## 確認 {#verify} 1. `vm:read` スコープのみを持つキーを作成します。 2. `curl -s https://cloud.example.com/v1/vm -H "Authorization: Bearer vk_XXXX"` はVMリストを返します。 3. `curl -s -X POST .../v1/vm//start -H "Authorization: Bearer vk_XXXX"` は 403 `scope_required` を返します。 4. キーを無効化すると、最初の呼び出しは 401 `key_revoked` を返すようになります。 ## 制限と注意事項 {#limits-notes} - キーは二度と表示されません。パスワードと同様に扱い、シークレットマネージャーやCIシークレットに保存してください。 - スクリプトごとに1つのキー、最小限のスコープ、短い有効期限、IP許可リストを使用することをお勧めします。古いキーを無効化して新しいキーを作成することでローテーションします。 - デバイスログイン (CLI、MCP) からのキーの有効期限はデフォルトで90日です。 - 削除または転送されたリソースは、キーの無効化の影響を受けません。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | エラー `too_many_keys` (422) | アクティブなキーの制限 (デフォルトで10個) に達した | 古いキーを無効化します。 | | エラー `invalid_argument`: スコープが選択されていません | スコープにチェックが入っていない | 少なくとも1つのスコープにチェックを入れてください。 | | 許可されたIPに関するエラー `invalid_argument` | エントリがIPまたは範囲ではない、プレフィックス長が間違っている、またはエントリが20個を超えている | 1行につき1つのIPまたはCIDR (例: `203.0.113.0/24`)。 | | なりすまし中の作成は拒否されます | `impersonate_forbidden` | 顧客にキーの作成を依頼してください。 | | 401 `key_expired` | 有効期限が過ぎている | 新しいキーを作成します。 | | 401 `key_ip_denied` | 呼び出し元IPが許可リストに含まれていない | IPを追加するか、リストをクリアします。 | | 401 `api_keys_disabled` | 機能が無効になっている | 管理者にお問い合わせください (`api_keys_enabled` 設定)。 | --- # `cmp` コマンドラインツール {#cmp-command-line-tool} > **ポータルでの場所:** インストールコマンドはAPIリファレンス (`https:///apidoc`、セクション「Command-line interface」) にあります。ログインの承認: `https:///link`。接続済みデバイス: API keys (`/api-keys`) › Connected apps & devices。 ## 動作内容 {#what-it-does} `cmp` は、顧客 (および管理者) 向けの小さなコマンドラインプログラムで、**すべてのAPI操作をコマンドに変換**します (`cmp vm list`、`cmp vm start `、`cmp billing invoice list`)。これはリリース時の**お客様**のインストールのOpenAPIドキュメントからビルドされているため、有効にした機能に一致するコマンドになります。Linux、macOS、Windows (amd64およびarm64) 用の単一の静的バイナリであり、他に追加でインストールする必要はありません。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | サーバー | 追加の要件はありません。リリースパッケージはNexCMPリリースに含まれており、パネルによって `https:///cli/` で提供されます。 | | 顧客のマシン | Linux、macOS、または Windows (PowerShell 5.1+)。署名の検証には `ssh-keygen` (OpenSSH 8.0+) のみが必要です。 | | 資格情報 | ワンタイムコードによるブラウザログイン、または[API key](https://nexcmp.com/ja/docs/developers/api-keys/)。 | | ネットワーク | パネルへのHTTPS接続。CLIは、平文の`http://`でのキー送信を`localhost`宛を除き拒否します。 | ## インフラストラクチャの準備 {#prepare-the-infrastructure} なし。パネルはこれらのファイルを`/cli/`から配信します(ビルドやアップロードは不要です): | ファイル | 用途 | |---|---| | `install.sh`, `install.ps1` | Linux/macOSおよびWindows用インストーラー。パネルのアドレスが含まれています。 | | `latest.json` | 現在のバージョン、ファイル一覧、サイズ、sha256。 | | `v/cmp___.tar.gz` または `.zip` | プログラム本体:linux amd64/arm64、darwin amd64/arm64/universal、windows amd64/arm64。 | | `v/SHA256SUMS`, `SHA256SUMS.sig` | チェックサムおよびそれらのed25519署名。 | | `cmp-cli.pub` | リリース公開鍵。 | ## インストール(お客様) {#install-customer} macOSおよびLinux: ```bash curl -fsSL https://cloud.example.com/cli/install.sh | sh ``` Windows PowerShell: ```powershell irm https://cloud.example.com/cli/install.ps1 | iex ``` インストーラーはOSとCPUに適したパッケージを選択し、`SHA256SUMS`とその署名をダウンロードし、スクリプトに埋め込まれた鍵で署名を検証し、パッケージのハッシュを検証した上で、`cmp`を`/usr/local/bin`(rootとして)または`~/.local/bin`にインストールします。Windowsの場合は`%LOCALAPPDATA%\cmp\bin`にインストールされ(ユーザーの`PATH`に追加されます)。いずれかのチェックに失敗した場合、何もインストールされません。 | 変数 | 意味 | |---|---| | `CMP_VERSION` | 最新版の代わりにこのバージョンをインストールします。 | | `CMP_INSTALL_DIR` | インストールフォルダー。 | | `CMP_REQUIRE_SIGNATURE` | `1` = 署名を検証できない場合に処理を中断します。 | | `CMP_BASE_URL` | ダウンロード元ベース(ミラー用)。 | 手動でのダウンロードと検証: ```bash curl -fsSLO https://cloud.example.com/cli/latest.json sha256sum --check --ignore-missing SHA256SUMS ``` ![macOSおよびLinux向けのcmp installコマンドが記載されたAPI referenceセクション](https://nexcmp.com/ja/docs/images/developers/cmp-cli-01-install.webp) ## ログイン {#log-in} ```bash cmp login ``` 1. CLIにワンタイム**コード**とリンク(`https://cloud.example.com/link?code=WDJB-MJHT`)が表示され、ブラウザが開いて待機します。 2. ブラウザでポータルにサインインし、クライアント名、デバイス、IP、国を確認し、権限(スコープ)にチェックを入れ、キーの有効期間を選択します(デフォルト90日)。課金やデータ削除を伴う権限は、初期状態でチェックが外れています。承認をクリックします。 3. CLIは、お客様が手動で作成したキーとは別の**独自のキー**を受け取り、`~/.config/cmp/config.json`(モード`0600`、Windowsでは`%APPDATA%\cmp`)に保存します。このキーは**API keys › Connected apps & devices**に表示され、そこから無効化できます。 コードの有効期限は10分です。承認には、他のキーや代行セッションではなく、検証済みのメールアドレスを使用した実際のサインイン済みポータルセッションが必要です。 便利なフラグ:`--scopes vm:read,billing:read`、`--name "build server"`、`--no-browser`、`--profile`、`--api-url`。 CI環境やブラウザのないサーバーでは、ポータルから取得したキーを使用してください: ```bash printf %s "$KEY" | cmp login --with-token export CMP_TOKEN=vk_XXXX # nothing is written to disk cmp whoami ``` ## コマンドの使用方法 {#using-commands} ```text cmp [subgroup] [ ...] [flags] ``` - パスパラメータは位置引数であり、クエリパラメータおよびボディフィールドはkebab-caseのフラグ(`--start-port 443`)になります。 - `--data '{"a":1}'`、`--data @file.json`、`--data -`のいずれかでJSONボディ全体を指定でき、フラグによってそのフィールドを上書きできます。 - `cmp help vm firewall add`(または`--help`)で、任意のコマンドの詳細を表示できます。 ```bash cmp catalog plans cmp vm list --state active --per-page 50 cmp vm get 3f2a1c9e-0000-4000-8000-000000000000 cmp vm start 3f2a1c9e-0000-4000-8000-000000000000 cmp vm firewall add 3f2a1c9e-... --protocol tcp --start-port 22 --cidr-list 203.0.113.0/24 cmp billing wallet cmp api GET /v1/vm --query page=2 # raw call to any endpoint ``` 組み込みコマンド:`login`、`logout`、`whoami`、`config`、`api`、`completion`、`version`、`update`、`help`。その他の機能はAPIドキュメントから生成されます。 グローバルフラグ: | フラグ | 意味 | |---|---| | `-o, --output json\|table\|yaml` | フォーマット。デフォルトは端末出力時は`table`、パイプ出力時は`json`です。 | | `--profile`, `--api-url` | 保存されたログイン情報およびサイトの指定。 | | `-y, --yes` | 破壊的または有料のコマンドの確認プロンプトをスキップします。 | | `--idempotency-key ` | 有料コマンドのキーを選択します。 | | `--retry ` | HTTP 429エラーが発生した場合、`Retry-After`秒待機して最大n回まで再試行します。 | | `--timeout ` | レスポンスヘッダーを待機する秒数(デフォルト60)。 | | `--debug` | キーをマスクした状態で、HTTP通信のやり取りをstderrに表示します。 | **ウォレットに課金したりデータを削除したりする**コマンドは確認を求め、課金の場合は自動生成された `Idempotency-Key` を送信します(stderrに出力されるため、`--idempotency-key` で安全に再試行できます)。ターミナルがない場合は、`--yes` が指定されない限り実行を拒否します。 ### 終了コード {#exit-codes} | コード | 意味 | |---|---| | 0 | 成功 | | 1 | その他のエラー(ネットワーク、未記載の HTTP 4xx/5xx) | | 2 | 使用方法エラー | | 3 | 認証エラー(401/403) | | 4 | 見つかりません(404) | | 5 | レート制限(429) | | 6 | 確認が必要または拒否されました | | 130 | 中断されました | ### プロファイルと環境 {#profiles-and-environment} `cmp config` はプロファイルを一覧表示し、`cmp config use ` は切り替えます。リセラーの顧客は自身のドメイン `cmp login --api-url https://shop.example.net --profile shop` を使用します。優先順位:フラグ、環境変数、設定ファイル。変数:`CMP_TOKEN`、`CMP_PROFILE`、`CMP_API_URL`、`CMP_OUTPUT`、`CMP_CONFIG_DIR`、`CMP_ALLOW_HTTP`、`CMP_UPDATE_URL`。 GitHub Actions: ```yaml - name: Install cmp run: | curl -fsSL https://cloud.example.com/cli/install.sh | CMP_INSTALL_DIR="$RUNNER_TEMP/bin" sh echo "$RUNNER_TEMP/bin" >> "$GITHUB_PATH" - name: List running VMs env: CMP_TOKEN: ${{ secrets.CMP_TOKEN }} # a read-only key run: cmp vm list -o json | jq -r '.items[] | select(.cs_state=="Running") | .hostname' ``` シェル補完:`cmp completion bash|zsh|fish|powershell`。 ## アップデートとアンインストール {#update-and-uninstall} ```bash cmp version cmp update --check cmp update ``` `cmp update` は `latest.json`、`SHA256SUMS` および署名をダウンロードし、**実行中のバイナリに組み込まれた**公開鍵で署名を検証し、パッケージハッシュを検証したうえで自身を置き換えます。ダウングレードには `--force` が必要です。NexCMP をアップデートすると、パネルは新バージョンに付属する CLI リリースを提供します。 アンインストールするには、`cmp` バイナリと設定ディレクトリ(`cmp config path` で確認できます)を削除します。マシンを紛失した場合は **API keys** からキーを失効させてください。 ## 確認 {#verify} 1. `cmp version` はバージョンおよび API ドキュメントのバージョンを出力します。 2. `cmp login` を実行し、ブラウザで承認してから `cmp whoami` を実行すると、プロファイルとパネルの URL が表示されます。 3. `cmp vm list` は VM を返し、`cmp vm list -o json | jq .` は生の JSON を表示します。 ## 制限と注意事項 {#limits-notes} - コマンドリストはビルドによって異なります。リリースビルド時にインストール環境の OpenAPI ドキュメントからパッケージが生成されるため、リリースで無効化されているプロダクトのコマンドは存在しません。CLI が認識していないパスには `cmp api` を使用してください。 - CLI は MIT ライセンスの下で提供されています。 - 各パッケージには ed25519 キーで署名されています。署名キーはアップデート時に取得されるのではなく、インストーラーおよびバイナリ内にピン留めされています。 - キーにはキーごと、アカウントごとの制限があります([REST API](https://nexcmp.com/ja/docs/developers/api/#rate-limits) を参照)。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | `curl .../cli/install.sh` が 404 を返す | サーバー上のリリースに CLI フォルダーがないか、ホストがライセンスの対象外です | `https:///cli/latest.json` とドメインを確認し、NexCMP をアップデートしてください。 | | 署名を検証できませんでした | `ssh-keygen` が存在しないか古すぎます | OpenSSH 8.0+ をインストールするか、リスクを許容する場合のみ `CMP_REQUIRE_SIGNATURE=0` を設定してください。 | | `cmp login` でコードの有効期限切れが表示される | 10 分が経過しました | もう一度 `cmp login` を実行してください。 | | 終了コード 3 | キーにスコープがないか、有効期限切れまたは失効しています | `cmp whoami`; スコープを追加して作成または再承認してください。 | | スクリプト内での終了コード 6 | 端末なしでの有料または破壊的なコマンド | `--yes`(および独自の `--idempotency-key`)を追加してください。 | | httpでのキー送信が拒否されます | 通常の http API URL | `https://` を使用するか、検証環境でのみ `CMP_ALLOW_HTTP=1` を使用してください。 | | ブラウザが間違ったサイトを開く | リセラー用の `--api-url` が設定されていません | `cmp login --api-url https://`. | --- # MCPサーバー {#mcp-server} > **ポータル内の場所:** API reference › Tools (`https:///apidoc`) にエンドポイントとクライアントのコードスニペットが表示されます。キーは API keys (`/api-keys`) で作成します。管理画面側での設定はなく、エンドポイントはパネルの一部として組み込まれています。 ## 動作内容 {#what-it-does} **Model Context Protocol (MCP)**により、AIアシスタントはツールを呼び出すことができます。NexCMPは`https:///mcp`でMCPエンドポイントを提供します。すべての公開API操作が1つの**ツール**(`vm_list`、`vm_start`、`billing_wallet`、...)になるため、顧客はアシスタントに「実行中のVMはどれ?」や「ステージング用VMを停止して」と尋ねることができます。アシスタントは顧客自身のAPIキーと権限でのみ動作します。 ::: tip NexCMP自体をAIで設定しますか? このページは**顧客側**のMCPエンドポイント(`/mcp`)です。管理者として独自のパネルをAIアシスタントに設定させるには、[Configure with AI](https://nexcmp.com/ja/docs/configure-with-ai/mcp-admin/)(エンドポイント`/mcp/admin`、管理者キー`ak_`)をご覧ください。 ::: ## 要件 {#requirements} | 項目 | 要件 | |---|---| | サーバー | インストールは不要です。エンドポイントはパネルによって提供され、パネルが到達可能な場所であればどこからでもアクセスできます。リバースプロキシは`/mcp`をパネルに転送する必要があります。 | | 顧客 | アシスタントに必要なスコープを持つ[APIキー](https://nexcmp.com/ja/docs/developers/api-keys/)(`vk_...`)。 | | クライアント | **Streamable HTTP**トランスポートとカスタム`Authorization`ヘッダーをサポートするMCPクライアント: Claude Code、Claude Desktop(`mcp-remote`ブリッジ経由)、Cursor、Copilotエージェントモードを有効にしたVS Codeなど。 | | プロトコルバージョン | 2025-11-25、2025-06-18、2025-03-26。 | ## インフラストラクチャの準備 {#prepare-the-infrastructure} `https:///mcp`がファイアウォールやプロキシのルールによってブロックされていないことを確認する以外に、特にありません。別オリジンからのブラウザベースのMCPクライアントはそのオリジンが許可されていない限り拒否されますが、コマンドラインおよびデスクトップクライアントは`Origin`ヘッダーを送信せず、そのまま動作します。 ## 接続(顧客側) {#connect-customer-side} 1. アシスタントに使用させたいスコープのみ、短い有効期限、および可能であればIP制限を設定して、ポータル(**API keys › Create key**)でAPIキーを作成します。 2. クライアントにサーバーを追加します。`cloud.example.com`とキーを置き換えてください。 **Claude Code** ```bash claude mcp add --transport http cloud https://cloud.example.com/mcp \ --header "Authorization: Bearer vk_XXXX" ``` **Cursor**(`~/.cursor/mcp.json`または`.cursor/mcp.json`。Cursorが起動する環境で`CLOUD_API_KEY`を設定してください): ```json { "mcpServers": { "cloud": { "url": "https://cloud.example.com/mcp", "headers": { "Authorization": "Bearer ${env:CLOUD_API_KEY}" } } } } ``` **Claude Desktop**(Node.js 18以上が必要; `claude_desktop_config.json`)、`mcp-remote`ブリッジ経由: ```json { "mcpServers": { "cloud": { "command": "npx", "args": ["-y", "mcp-remote", "https://cloud.example.com/mcp", "--header", "Authorization:${CLOUD_AUTH_HEADER}"], "env": { "CLOUD_AUTH_HEADER": "Bearer vk_XXXX" } } } } ``` コロンの後にスペースを入れずにヘッダーを記述し、上記のように値全体を環境変数に設定してください。 3. クライアントを再起動し、ツールの一覧を表示するよう指示します。 クライアントなしで接続を確認する: ```bash curl -s https://cloud.example.com/mcp \ -H "Authorization: Bearer vk_XXXX" \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' ``` ## 動作原理 {#how-it-works} | 項目 | Detail | |---|---| | Endpoint | JSON-RPC 2.0メッセージによる`POST /mcp`。応答は`application/json`です。`GET /mcp`は405(サーバーからクライアントへのストリームなし)を返します。`DELETE /mcp`はセッションを終了します。 | | 認証 | `Authorization: Bearer vk_...`のみ(セッション トークン、クッキー、管理者キーは401および`WWW-Authenticate: Bearer`ヘッダーと共に拒否されます)。 | | セッション | `Mcp-Session-Id`は`initialize`によって発行され、そのキーに紐付けられ、有効期間は24時間です(1キーあたり最大16セッション)。 | | ツール | キーから参照できる公開API操作ごとに1つ。ツール名は、スペースとダッシュを`_`に置き換えたCLIコマンドであり(`vm firewall add`は`vm_firewall_add`になる)、OpenAPIの`operationId`と一致します。ツールは、キーがそのスコープを持ち、モジュールが有効化されている場合にのみ一覧に表示されます。 | | 機能 | ツールのみ(リソースやプロンプトはなし)。 | | サイズ | リクエストボディは最大1MB、ツール結果のテキストは約100KBまで(残りは注記付きで切り捨てられます)。1回の呼び出しは最大55秒です。 | ### 安全規則 {#safety-rules} - **RESTと同一のゲート。**各 `tools/call` は、パネル自体のリクエストパイプライン(スコープ、サイト、IP制限、レートリミット、べき等性、所有権チェック[他人のリソースの場合は404]、およびクォータ)を通過します。キーが持っていない権限をMCPが与えることはできません。 - **確認。**課金を伴う、削除を行う、または認証情報を返すツール(コンソールチケット、kubeconfig、S3またはSSHのシークレット、パスワードリセット、新しいキー)では、引数 `confirm: true` が必須となります。ツール説明では、ユーザーが承認した後にのみこれを渡すようアシスタントに指示するため、Webページやログに隠された指示単体で実行されることはありません。 - **べき等性。**有料ツールでは `idempotency_key` を受け付けます。省略された場合はツール名と引数から安定したキーが導出されるため、同一のリトライで二重に課金されることはありません。 - **ツールとして公開されないもの:**ストリーミングエンドポイント(AI Agentのチャット)、ワンタイムのSSHまたはコンソールWebSocketチケット、バイナリダウンロード、およびVPNアプリのエンドポイント(`/v1/ext/*`)。 - **絶対に不可能なこと:**APIでは、トップアップ、パスワード変更、アカウントの削除、キーの作成は一切許可されていないため、どのアシスタントもこれらを実行できません。 ### 制限事項 {#limits} | 制限 | デフォルト | |---|---| | キーあたりのツール呼び出し数 | 60回 / 分 | | キーあたりのMCPリクエスト数 | 240回 / 分 | | 通常のキーおよびアカウントの制限に準じる | [REST API](https://nexcmp.com/ja/docs/developers/api/#rate-limits)を参照 | 制限を超えた場合、エンドポイントはJSON-RPCエラーと `Retry-After` を添えてHTTP 429を返します。 ## 確認 {#verify} 1. 上記の `curl` コマンドは、 `tools` リストを含むJSON-RPC結果を返します。キーのスコープに一致するツールのみが表示されます。 2. クライアントで「VMの一覧を表示して」と尋ねると、アシスタントが `vm_list` を呼び出して結果を表示します。 3. ポータル内のキーの **Last used** 時刻が更新され、書き込み呼び出しが **Key usage log** に表示されます。 ## 制限と注意事項 {#limits-notes} - **ブラウザサインイン(OAuth)。**リファレンスページでは、MCP OAuthをサポートするクライアント向けにブラウザ経由のサインインについても説明しています。インストール済みのNexCMPにおいて、サポートおよびテスト済みの方法はAPIキー(またはCLIの場合は `cmp login`)です。 - **リセラーサイト**ではMCPセクションは表示されません。そのお客様はAPIにリセラーのドメインを使用します。 - **最小権限の原則。**まず読み取りスコープを持つ専用のキーをアシスタントごとに作成し、必要な場合にのみ書き込みスコープを追加してください。 - **API keys** でキーを失効させると、アシスタントからのアクセスを即座に遮断できます。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | `WWW-Authenticate: Bearer` を伴う401 | キーなし、誤ったキー、またはセッショントークン | `Authorization: Bearer vk_...` を送信してください。 | | `Origin` に関する403 | 別オリジンのブラウザページ | デスクトップまたはCLIクライアントを使用するか、管理者にオリジン(`mcp_allowed_origins`)の許可を依頼してください。 | | `Mcp-Session-Id` を伴うリクエストでの404 | セッションが別のキーに属しているか、期限切れです | もう一度 `initialize` を実行してください。 | | `GET /mcp` における405 | 想定される原因:サーバーにイベントストリームがありません | POSTのみを使用してください(クライアントはこれを自動的に行います)。 | | ツールリストが短い | キーのスコープまたはモジュール | キーにスコープを追加し、モジュールを有効にしてください。 | | `confirm: true` が必要であるとツールが応答する | 有料、削除、または機密性の高いツール | あなたが承認した後、アシスタントは `confirm` を設定する必要があります。 | | 429 | MCPまたはキーのレートリミット | `Retry-After` までお待ちください。 | | クライアントがヘッダー付きで接続できない | カスタムヘッダーをサポートしていないクライアント | `mcp-remote` ブリッジを使用してください。 | --- # AIで設定する {#configure-with-ai} > **管理画面での場所:** AI Chat (`/agent`) および System › Settings › API & AI agents (`/agent/keys`)。これらのページの機能は管理者専用です。 ## 動作内容 {#what-it-does} NexCMP 1.4.0以降では、AIアシスタントにパネルの設定を依頼できます。Proxmox VEやCloudStackの接続、ゾーンの作成、コストに基づくプラン表の作成、メール、決済、ブランディングの設定、顧客の検索、設定全体ののエクスポートなどが可能です。アシスタントは固定の**管理者ツール**セットを介して動作します。シェルへのアクセス権、サーバー上のファイルの読み取り権限を取得することは一切なく、保存されたパスワードやAPIキーを参照することもありません。 何十ものページを手動でクリックして設定する代わりに、数分で初期セットアップを完了させたい場合や、複数の環境を管理していてその設定をファイルで維持したい場合に便利です。 ## 3つの利用方法 {#three-ways-to-use-it} | 利用方法 | AIと対話する対象 | 実行環境 | 開始方法 | |---|---|---|---| | **管理画面のAI Chat** | NexCMP管理画面のあなた | 選択したAIソース: OpenAI、Anthropic、Gemini、OpenRouterのAPIキー、パネル自身のAIプロバイダ、またはサインイン済みの公式AI CLI | [管理画面のAI Chat](https://nexcmp.com/ja/docs/configure-with-ai/ai-chat-in-admin/) | | **MCP経由の独自のAIクライアント** | Claude Code、Codex CLI、Gemini CLI、Cursor、Claude Desktop、claude.ai、ChatGPTを使用するお客様 | お客様のマシン、またはベンダーのアプリ上で動作し、`https://cloud.example.com/mcp/admin`のパネルに接続されます | [Connect an AI client](https://nexcmp.com/ja/docs/configure-with-ai/mcp-admin/) | | **コードとしての構成管理** | お客様またはスクリプト | YAMLファイルおよびサーバー上の `nexcmp config` コマンド(またはインポート/エクスポートページ) | [Configuration as code](https://nexcmp.com/ja/docs/configure-with-ai/config-as-code/) | 3つの方法はいずれも同じツールを呼び出し、共通のセキュリティ層を経由するため、組み合わせて使用できます。アシスタントで構成をドラフトし、YAMLとしてエクスポートし、エディターで確認した後に適用することが可能です。 ## 安全性モデル {#safety-model} | ルール | お客様にとっての意味 | |---|---| | **スコープ** | キーまたは接続は、チェックを入れたスコープに制限されます(`admin:read`、`catalog:write`、`infra:write`、`billing:write`、`customers:write`、`settings:write`、`ai:write`、`secrets:write`)。スコープがない場合、呼び出しは拒否されます。[Admin API keys](https://nexcmp.com/ja/docs/configure-with-ai/admin-api-keys/#scopes)を参照してください。 | | **Expiry** | すべてのキーと接続には有効期限があります。作成するキーの場合は1日〜90日(デフォルトは30日)、OAuthアクセストークンは1時間です。 | | **IP制限とレートリミット** | キーはIPアドレスの範囲および1分あたりの呼び出し回数(デフォルトは120回)で制限できます。 | | **2段階確認** | 資金の移動、データの削除、決済認証情報の変更、サインインセキュリティの変更を行うアクションは、まずプレビューを返し、承認されるまで実行されません。AI Chat内では、すべての変更はご自身で押す確認カードとして表示されます。 | | **キーが実行できない操作** | 管理者の作成、2FAの変更、キーの作成・取り消し、顧客としてのログイン、パネルのバックアップ・復元・アップデートなど。これらには管理画面での操作が必要です。 | | **アクティビティログ** | 許可または拒否されたすべての呼び出しは、キー、クライアント、ツール、IP、結果とともに記録されます。System › Settings › API & AI agents › Activity を参照してください。 | | **機密情報は決して返されません** | パスワード、APIキー、トークンは設定できますが、読み取ることはできません。AIに表示される応答ではマスクされます。 | | **デモ環境は読み取り専用です** | デモパネルでは、すべての書き込みが `demo_read_only` で拒否されます。 | ::: important AIが読み取れる内容 `admin:read` により、アシスタントは顧客名、メールアドレス、残高、請求履歴を読み取ることができます。ベンダーで実行されるAIソース(OpenAI、Anthropic、Google、OpenRouter)を使用する場合、質問に回答するためにそのデータが該当ベンダーに送信されます。アシスタントには必要な最小限のスコープのみを付与し、そのデータの取り扱いを信頼できるソースを選択してください。 ::: ## クイックスタート {#quick-start} 1. 管理画面にサインインし、**AI Chat**を開きます。AIソースがまだ接続されていない場合は、**System › Settings › AI accounts**を開いて接続します([AI accounts and subscriptions](https://nexcmp.com/ja/docs/configure-with-ai/ai-accounts-and-subscriptions/)を参照)。 2. 「Check my setup progress」と入力してEnterキーを押します。アシスタントが [Setup progress checklist](https://nexcmp.com/ja/docs/configure-with-ai/setup-checklist/)を読み取り、残りの作業を案内します。 3. 次のステップを実行するように指示します。各確認カードを確認し、**Confirm**を押して適用します。 質問内容のヒントについては、[Example prompts](https://nexcmp.com/ja/docs/configure-with-ai/example-prompts/)をご覧ください。 ![会話、ツール実行結果、確認カードが表示されたAI Chat画面](https://nexcmp.com/ja/docs/images/configure-with-ai/overview-01-ai-chat.webp) ## 制限と注意事項 {#limits-notes} - **デモおよび読み取り専用。** デモパネルでは各ページが表示されますが、変更の保存はできません。 - **シェルへのアクセス不可。** アしスタントは [Connect an AI client](https://nexcmp.com/ja/docs/configure-with-ai/mcp-admin/#tools)にリストされている管理ツールのみを呼び出すことができます。サーバー上でコマンドを実行することはできません。 - **ネットワークおよびルーティングモジュール**(BGP、XDP、インターフェイス、NATなど)はAIにとって読み取り専用であり、管理者アカウント、バックアップ、アップデートなどの機密エリアはキーに対して完全に非公開となっています。 - **料金**の単位はUSDです。プラン料金は1時間あたりのドル建て、残高はセント単位です。 - **コスト。** AIの回答に対する費用は、接続したAIソースに対して支払われます(API利用料金、またはご自身のサブスクリプション)。AI Chatでは1日の利用上限額を設定できます。NexCMPのライセンスモデルについては https://nexcmp.com/pricing をご覧ください。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | AI ChatでAIソースが接続されていないと表示される | 管理者アカウントに対してソースが設定されていない | System › Settings › AI accountsを開いて接続してください。 | | アシスタントが `insufficient_scope` と応答する | キーまたは接続にそのツール用のスコープがない | 必要なスコープを持つキーを作成するか、再接続して同意画面でチェックを入れてください。[Admin API keys](https://nexcmp.com/ja/docs/configure-with-ai/admin-api-keys/#errors)を参照してください。 | | すべての変更で確認カードが表示される | AI Chatにおける通常の動作 | 適用するには **Confirm**を、キャンセルするには **Reject**を押します。 | | 書き込みが `demo_read_only` で失敗する | パネルがデモモードになっている | デモ以外の環境を使用してください。 | --- # 管理画面のAI Chat {#ai-chat-in-the-admin} > **管理画面内の場所:** AI Chat(`/agent`、専用のメニュー項目)およびすべての管理ページにあるフローティングの **Ask AI**ボタン。回答ソースは System › Settings › AI accounts(`/agent/accounts`)で設定します。 ## 動作内容 {#what-it-does} AI Chatは管理画面に組み込まれたアシスタントです。「Proxmoxクラスターの接続」「メールの設定」などやりたいことを伝えると、アシスタントが管理ツールで現在の状態を読み取り、変更を提案して、それぞれを**確認カード**として表示します。**Confirm**を押すまで何も適用されません。**Ask AI**パネルは同じチャットを狭いサイドパネルに表示したもので、ページを見ながら質問できます。**Do it for me**などのボタン([Setup progress checklist](https://nexcmp.com/ja/docs/configure-with-ai/setup-checklist/)内や空のリスト内)をクリックすると、あらかじめ入力された質問とともにチャットが開きます。 これは、お客様向けにサービスを提供する、顧客向けの[AI Chat](https://nexcmp.com/ja/docs/ai/ai-chat/)および[AI Agent](https://nexcmp.com/ja/docs/ai/ai-agent/)とは異なります。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | ロール | サインイン済みの管理者。チャット、キー、設定は管理者のアカウントに紐づいており、他の管理者が閲覧することはできません。 | | 回答ソース | 少なくとも1つの接続が必要です(APIキー、サインイン、パネル独自のAIプロバイダー、またはサインイン済みのAI CLI)。[AI accounts and subscriptions](https://nexcmp.com/ja/docs/configure-with-ai/ai-accounts-and-subscriptions/)をご覧ください。 | | Demo | デモパネルでは、過去のチャットの閲覧は可能ですが、メッセージの送信はできません。 | ## 回答の取得元を選択する {#choose-where-answers-come-from} 入力欄の下にあるセレクターでソースを選択します(接続済みのソースが一覧表示されます)。**System › Settings › AI accounts**では、デフォルトのソース、デフォルトのモデル、および1日の上限を設定することもできます。 | Source | 接続方法 | 備考 | |---|---|---| | OpenAI (ChatGPT models) | platform.openai.comからAPIキーを貼り付けます | OpenAIによる従量課金です。 | | Anthropic (Claude) | console.anthropic.comからAPIキーを貼り付けます | Anthropicによる従量課金です。 | | Google Gemini | aistudio.google.comからAPIキーを貼り付けるか、**Sign in with Google**を行います | Googleでのサインインには、**お客様**自身のGoogle Cloudプロジェクトで作成したOAuthクライアントが必要です。 | | OpenRouter | キーを貼り付けるか、**Sign in with OpenRouter**を行います | 1つのアカウントで多くのモデルを利用できます。 | | Panel AI provider | System › Settings › AI providerで既に設定されています | お客様のAI Chatが使用するプロバイダーと同じです。[AI provider](https://nexcmp.com/ja/docs/ai/ai-providers/)。 | | Claude、ChatGPT、またはGeminiのサブスクリプション | 公式CLIがインストールされ、パネルサーバーにサインインしていること | [AI accounts and subscriptions](https://nexcmp.com/ja/docs/configure-with-ai/ai-accounts-and-subscriptions/)をご覧ください。 | 貼り付けられたキーは管理者アカウント専用に暗号化されて保存されます。再表示されることはなく、他の管理者が復号することもできません。 ## チャットを使用する {#use-the-chat} 1. **AI Chat**を開きます(または**Ask AI**をクリックします)。 2. **New chat**をクリックするか、左側のリストから以前のチャットを開きます。 3. リクエストを入力してEnterキーを押します(Shift+Enterで改行します)。エラーの表示やドキュメントの貼り付けのために、画像やテキストファイルを添付できます(1メッセージあたり最大4個、各3 MBまで)。 4. 回答のストリーミング表示を確認します。アシスタントが呼び出す各ツールは、ツール名、引数、簡単な結果が表示される折りたたみ可能なカードとして表示されます。 5. 実行中の回答をキャンセルするには**Stop**を押します。管理者1人につき同時に実行できる回答は1つだけです。 ![会話リスト、ツールカードを含む回答、ソースセレクターとSecretフィールドを備えた入力欄が表示されたAI Chat](https://nexcmp.com/ja/docs/images/configure-with-ai/ai-chat-in-admin-01-chat.webp) 1メッセージにつき最大10回のツール実行ラウンドが行われます。アシスタントはチャットの直近30件のメッセージを記憶します。ツールからの結果は、指示としてではなく、データとしてモデルに渡されます。 ## 確認カード {#confirmation-cards} AI Chatでは、金銭に関する操作だけでなく、**すべての変更がカードで行われます**。アシスタントが提案し、お客様が決定します。 カードには以下が表示されます。 - 注意が必要な理由を示すタイトル(例: 「顧客残高を変更する」)。 - 呼び出し内容: メソッドとパス。 - 変更されるフィールドのテーブル: 現在の値と新しい値。機密値は`••••`として表示されます。 - カウントダウン(カードは5分で有効期限切れになります)。 - **Confirm**と**Reject**。 **Confirm**をクリックすると、パネル自体が変更を適用し、その結果がアシスタントに伝えられます。アシスタントはボタンを押すことも、API経由で承認することもできず、確認される前に変更が適用されたと主張しないよう指示されています。ページを再読み込みすると、まだ有効なカードが復元されます。また、これらは **System › Settings › API & AI agents** の「Waiting for your confirmation」の下部にも表示されます。 ![残高の変更、カウントダウン、および Confirm と Reject の各ボタンを表示する確認カード](https://nexcmp.com/ja/docs/images/configure-with-ai/ai-chat-in-admin-02-confirm.webp) ## シークレット {#secrets} パスワードやAPIキーをチャットのテキスト経由で送信しないでください。入力欄の横にある **Secret** フィールド(鍵アイコン)を使用します。 1. 鍵アイコンをクリックし、**名前**(英字、数字、アンダースコア。例: `smtp_password`)と**値**を入力します。 2. メッセージ内でその名前を参照します(例: 「smtp_password シークレットを SMTP パスワードとして使用する」)。 3. アシスタントには、シークレットを表すプレースホルダーのみが次のように表示されます。 ```text {{secret:smtp_password}} ``` パネルは、ツールを実行する瞬間にそれを実際の値に置き換えます。この値はチャット履歴に保存されず、AIソースにも送信されません。 キーのような文字列を誤ってメッセージに貼り付けてしまった場合、パネルはそれを保護された同じストアに移動して履歴内でマスクしますが、これはあくまで安全網であり、手法ではありません。シークレットはパネルのメモリ内のみに保持され、入力された会話内および最後のメッセージから最大1時間まで維持されます。パネルの再起動によってもクリアされます。アシスタントから求められた場合は、再度入力してください。 シークレットを設定するには、チャットセッションに対する `secrets:write` 権限も必要です(下記を参照)。 ## チャットの権限 {#permissions-of-the-chat} 各メッセージは、回答の生成期間中のみ(最大15分)存在する一時的なキーを使用して実行されます。このキーはパネルサーバーからのみ機能し、確認カードを通じてのみ使用できます。そのスコープは **System › Settings › AI accounts › Chat session permissions** でチェックを入れたものです。`admin:read` は常に有効です。`secrets:write` を除くすべてのスコープがデフォルトで有効になっています。アシスタントが(Secret フィールドを通じて)パスワードやキーを設定できるようにしたい場合は、`secrets:write` にチェックを入れてください。デモパネルでは、チャットは読み取り専用です。 ## 1日の利用金額の上限 {#daily-spending-cap} AI Chat は、APIソースからの回答の推定コストを合算します。デフォルトの上限は**管理者1人あたり1日5 USD**です。別の金額を設定するには(0は無制限を意味します)、**AI accounts › Defaults for AI Chat** で行います。ページには「used today」が表示されます。上限に達すると、翌日になるか上限を引き上げるまで、チャットは新しいメッセージの送信を拒否します(`daily_cap`)。AI CLIサブスクリプションであるソースは、サブスクリプション側で課金されるためカウントされません。 ## 確認 {#verify} 1. **AI accounts** で、該当するソースの **Test** をクリックします。モデル名と応答時間がミリ秒単位で返されます。 2. AI Chat で「Check my setup progress」と質問します。回答には [checklist](https://nexcmp.com/ja/docs/configure-with-ai/setup-checklist/) からの手順がリストされ、`setup_checklist` ツールカードが表示されます。 3. 「Set the brand name to Example Cloud」などの小さな変更を依頼します。確認カードが表示されたら、**Confirm** を押して Branding ページを確認します。 4. **API & AI agents › Activity** に、チャネル `chat` を持つ呼び出しがリストされます。 ## 制限と注意事項 {#limits-notes} - アシスタントにはシェルがなく、サーバー上のファイルを読み取ることはできません。呼び出すのは [admin tools](https://nexcmp.com/ja/docs/configure-with-ai/mcp-admin/#tools) のみです。 - キーでも決して実行できない変更([list](https://nexcmp.com/ja/docs/configure-with-ai/admin-api-keys/#what-a-key-can-never-do))は、AI Chat からも実行できません。 - モデルの作業内容を確認します。確認カードには送信される内容が正確に表示されるため、特に価格や金額を注意して読み取ってください。 - APIの回答に対してはAIベンダーから課金されます。上限額は目安であるため、ベンダー側でも利用制限を設定してください。 - CLIの回答は5分後に停止します。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | "本日のAI利用上限に達しました" (`daily_cap`) | 日次の上限に達しました | AIアカウントで上限を引き上げるか、明日までお待ちください。 | | 「別の回答がまだ実行中です - 待つか停止を押してください」 (`busy`) | 管理者は同時に1つの回答のみ | **Stop**を押すか、お待ちください。 | | ソースがセレクターに表示されない | 接続されていないか、(Claude CLIの)「I understand」スイッチがオフになっています | AIアカウントで接続してください。 | | 「APIキーのように見えません」 | 貼り付けられたキーにスペースが含まれているか、長すぎます | キーのみを貼り付けてください。 | | テスト失敗 | キーの誤り、残高不足、またはベンダーの障害 | ベンダー側でキーと請求情報を確認してください。 | | アシスタントが実行できないと応答した | チャットセッションにスコープがないか、アクションがAIに対して禁止されています | AIアカウントでスコープにチェックを入れるか、管理画面で実行してください。 | | 期限切れを示すカードが表示されている | 5分以上が経過しました | 変更を再度提案するようアシスタントに依頼してください。 | | CLIソースが「usage limit」または「not logged in」を報告している | サブスクリプションの上限またはセッション | 再度サインインするかお待ちください。[AI accounts and subscriptions](https://nexcmp.com/ja/docs/configure-with-ai/ai-accounts-and-subscriptions/)をご覧ください。 | --- # AIアカウントとサブスクリプション {#ai-accounts-and-subscriptions} > **管理画面での場所:** System › Settings › AI accounts(`/agent/accounts`)、タブ **Accounts** および **Use your own AI subscription**。オプションの端末である AI Console(`/agent/console`)は、有効にされている場合にのみ AI Chat の下に表示されます。 ## 動作内容 {#what-it-does} AI Chatには回答のためのソースが必要です。このページでは、ご自身の管理者アカウント用にそのソースを接続できます: - **APIソース**: OpenAI、Anthropic (Claude)、Google Gemini、OpenRouter(APIキーまたはサインインを使用)。 - **パネルのAIプロバイダー**(System › Settings › AI providerで既に設定している場合)。 - ベンダーの**公式コマンドラインツール**を通じた**お客様独自のAIサブスクリプション**(Claude、ChatGPT、Gemini)。パネルサーバー上またはお客様のコンピューター上で実行できます。 接続したすべてのデータはお客様の管理者アカウントに属します。キーとトークンは暗号化されてお客様専用に保存され、他の管理者が使用することはできません。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | ロール | サインインした管理者。デモパネルでは、何も接続または削除できません。 | | APIソース | ベンダーでのアカウントとAPIキー(カードには、ベンダーページを開く**Get API key**リンクがあります)。 | | パネルサーバー上のCLI | AI Consoleが有効(下記参照)、サーバーからベンダーおよび`nodejs.org`やnpmレジストリへのアウトバウンドHTTPS、そして**2 GB以上のRAM**(CLIの実行には約1 GBの空き容量が必要です。インストーラーは2 GB未満の場合に警告します)。Node.js 20以降が存在する場合はそれが使用され、そうでない場合はインストーラーがチェックサム検証付きでNode.js 22をダウンロードします。 | | コンピューター上のCLI | CLIをインストールするためのNode.js 20以降、およびお客様のサブスクリプション。 | ## APIソースを接続する {#connect-an-api-source} 1. **System › Settings › AI accounts**を開き、**Accounts**タブに留まります。 2. ソースのカードで**Connect**をクリックします。ベンダーのキーページが新しいタブで開くので、そこでキーを作成します。 3. フィールドにキーを貼り付けて保存します。カードに、下4桁の文字とともに接続済みの状態が表示されます。 4. **デフォルトモデル**を使用しない場合は別のモデルを選択し、**Test**をクリックします。「Connected - example-model, 850 ms」のような結果が表示されれば成功です。 ![AI accountsページ。APIソースカード、接続済みのOpenAIカード、Panel AIプロバイダーカードが表示されています](https://nexcmp.com/ja/docs/images/configure-with-ai/ai-accounts-and-subscriptions-01-accounts.webp) | Source | サインインの代替手段 | |---|---| | OpenRouter | **Sign in with OpenRouter**をクリックするとポップアップまたはタブでOpenRouterが開きます。承認すると、接続された状態でこのページに戻ります。 | | Google Gemini | **Sign in with Google**は、保存後、カード上の**Set up Google sign-in (optional)**の下に表示されます。これは、**お客様ご自身**のGoogle Cloudプロジェクトで作成されたOAuthクライアント(末尾の`.apps.googleusercontent.com`とシークレット)を利用します。NexCMPには共有のGoogleクライアントは含まれていません。 | | Panel AI provider | System › Settings › AI provider([AI provider](https://nexcmp.com/ja/docs/ai/ai-providers/))で既に設定されているプロバイダーを使用します。貼り付ける必要はありません。 | ソースの接続を解除するには、カード上の**Remove**をクリックします。アカウントに保存されているキーが削除されます。 ### デフォルト、1日あたりの上限、および権限 {#defaults-daily-cap-and-permissions} **Accounts**タブの一番下にある**Defaults for AI Chat**には、3つの設定があります。 | 設定 | 意味 | |---|---| | デフォルトのソースとモデル | 新しいチャットで使用される設定です。メッセージごとにソースを変更することも可能です。 | | 1日あたりの利用上限(USD、0 = 無制限) | デフォルトは5です。ページに「used today」と表示されます。詳しくは[AI Chat in the admin](https://nexcmp.com/ja/docs/configure-with-ai/ai-chat-in-admin/#daily-spending-cap)をご覧ください。 | | チャットセッションの権限 | アシスタントが使用できるスコープです。`admin:read`は常に有効で、`secrets:write`はデフォルトで無効です。[Admin API keys](https://nexcmp.com/ja/docs/configure-with-ai/admin-api-keys/#scopes)をご覧ください。 | **Save defaults**をクリックします。 ## 独自のAIサブスクリプションを使用する {#use-your-own-ai-subscription} 追加のAPIキーを用意することなく、すでにご契約中のClaude、ChatGPT、Geminiのプランを利用してNexCMPを操作できます。方法には2つのアプローチがあります。 ### 方法1(推奨):お手元のコンピューターでのCLI {#way-1-recommended-the-cli-on-your-own-computer} ご自身のコンピューターでベンダーのツールを使用し、通常のベンダーの手順に従ってアカウントにサインインします。NexCMPが受け取るのは、短命キーで署名されたMCP呼び出しのみです。**AI accounts › Use your own AI subscription**を開くと、ツールごとの3つの手順が表示されます。 1. **Create a 7-day key**をクリックし、レベルを選択します:**Read only**(`admin:read`)または**Read + configuration**(`admin:read`、`catalog:write`、`infra:write`、`settings:write`)。以下のコマンドには、実際のキーが含まれるようになります。 2. CLIをインストールしてサインインします。キーはこのページに一度だけ表示されます。 | ツール | インストール | サインイン | |---|---|---| | Claude Code | `npm install -g @anthropic-ai/claude-code` | `claude`を実行し、次に`/login`を実行します | | Codex CLI | `npm install -g @openai/codex` | `codex login` | | Gemini CLI | `npm install -g @google/gemini-cli` | `gemini`を実行し、「Login with Google」を選択します | 3. ページからコピーした1つのコマンドまたは1つのブロックを使用して、パネルに接続します: ```bash # Claude Code claude mcp add --transport http nexcmp https://cloud.example.com/mcp/admin \ --header "Authorization: Bearer ak_XXXX" ``` ```toml # Codex CLI: ~/.codex/config.toml, then: export NEXCMP_KEY=ak_XXXX [mcp_servers.nexcmp] url = "https://cloud.example.com/mcp/admin" bearer_token_env_var = "NEXCMP_KEY" ``` ```json // Gemini CLI: ~/.gemini/settings.json { "mcpServers": { "nexcmp": { "httpUrl": "https://cloud.example.com/mcp/admin", "headers": { "Authorization": "Bearer ak_XXXX" } } } } ``` 4. ツールを起動し、例えば「what is left to set up in nexcmp?」のように質問します。MCP接続に関するすべての詳細は[Connect an AI client](https://nexcmp.com/ja/docs/configure-with-ai/mcp-admin/)に記載されています。 同じタブに、OAuthでサインインしてキーが不要な**claude.ai**および**ChatGPT**コネクター用のURL([OAuth connectors](https://nexcmp.com/ja/docs/configure-with-ai/oauth-connectors/))が表示されます。 ![Use your own AI subscriptionタブ。7日間のキーボタン、および3つのCLI用のインストール、サインイン、接続コマンドが表示されています](https://nexcmp.com/ja/docs/images/configure-with-ai/ai-accounts-and-subscriptions-02-subscription.webp) ### 方法 2: パネルサーバー上の CLI (インストール/ログインボタン) {#way-2-the-cli-on-the-panel-server-install-login-buttons} "Subscription through a CLI (Claude, ChatGPT, Gemini)" の下のカードを使うと、NexCMPがパネルサーバーに公式CLIをインストールし、独自のサインインフローを開くことができるため、**AI Chat**でサブスクリプションを利用して応答できるようになります。 **どのように分離されているか。** CLIは独立したプロセス(`nexcmp-ai.service`)として独自のシステムユーザー`nexcmp-ai`で実行され、sudoはなく、NexCMPのデータおよび設定フォルダへのアクセス権限やメモリ制限が適用されます。すべてのAI Chatメッセージに対して、CLIはNexCMPのMCPツール(シェルおよびファイルツールは無効)と、サーバーからのみ機能するキーのみが許可された状態で起動します。NexCMPはCLIのサインイン情報を読み取ったりコピーしたりしません。CLIはそれを管理者アカウント用のプライベートフォルダに保持します。 有効化の操作は不要です。1.4.0へのインストールまたはアップデート時に、パネルが `nexcmp-ai` ユーザーとサービスを自動セットアップするため、カードはすぐに使用できます。 **インストールとサインイン(管理者ごと):** 1. CLIのカードで **Login** をクリックします。CLIがまだインストールされていない場合は、パネルが最初にインストールを実行します。プログレスバーと短いログにより、ダウンロードの状況(必要に応じてNode.js、次にCLI)が表示されます。サーバーのRAMが2 GB未満の場合は警告が表示されます。 2. カードには、CLIが要求する内容が表示されます: - **Codex CLI**: **Open the sign-in page** をクリックし、カードに表示されるワンタイムコードを入力します(ChatGPTのセキュリティ設定でOpenAIのデバイスサインインが有効になっている必要があります)。 - **Claude CodeおよびGemini CLI**: **Open the sign-in page** をクリックしてサインインし、ベンダーのページに表示される検証コードを **Paste the verification code here** に貼り付けて、**Send code** をクリックします。 3. カードの表示がアカウントとバージョン情報とともに「Signed in」に変わります。10分以内に完了しなかったサインインはキャンセルされます。その場合は再度 **Login** をクリックしてください。 4. **AI Chat** のソースセレクターに、ソースが表示されるようになります(例: "ChatGPT (via Codex CLI)")。 5. **Sign out** をクリックすると、アカウントのCLIサインイン情報が削除されます。 Claudeの場合、カードに追加のスイッチ **I understand and accept the vendor's terms for using a subscription this way**(デフォルトではオフ)が表示されます。これがオンになるまで、AI Chatでこのソースは選択できません。 ![インストールおよびログインボタン、Codexカードのワンタイムコード、Claudeカードの「I understand」スイッチを備えたCLIサブスクリプションカード](https://nexcmp.com/ja/docs/images/configure-with-ai/ai-accounts-and-subscriptions-03-cli.webp) ### AIベンダーの利用規約 {#terms-of-the-ai-vendors} コンシューマー向けサブスクリプションでのサインインは、随時変更される各ベンダーの規約に準拠します。以下の注記は、2026年10月時点でのベンダーの公開情報の要約であり、法的助言やベンダーを代表する見解ではありません。この機能を有効にする前に、最新のページをご確認ください。 | ベンダー | ベンダーのページの内容 | Source | |---|---|---| | Anthropic (Claude) | 独自のプランを使用した、変更を加えていないClaude Codeへのサインインはカバーされています。他のプロダクトを介したサブスクリプションの利用や、サインイン情報の収集・転送を行うプロダクトの利用は扱いが異なり、プランの制限は通常の個人利用を前提としています。これが、Claudeカードに注記と **I understand** スイッチがある理由であり、方法 1 がよりクリーンな選択肢である理由です。 | https://code.claude.com/docs/en/legal-and-compliance | | OpenAI (Codex) | Codexは、ChatGPTアカウントまたはAPIキーによるサインインをサポートしています。OpenAIは自動化にはAPIキーを推奨しており、信頼性の低い環境や公開環境でCodexを公開しないよう求めてご自身のみでカードを使用してください。 | https://developers.openai.com/codex/auth | | Google (Gemini CLI) | Googleでログイン、APIキー、およびVertex AIをサポートしています。規約はサインインの方法によって異なり、プランの割り当て(クォータ)が適用されます。 | https://geminicli.com/docs/get-started/authentication | この問題を完全に回避したい場合は、**API key**ソースを使用するか、お使いのコンピューターでの方法1をご利用ください。 ## AI Console {#ai-console} AI Consoleは、パネルサーバー上でサインイン済みのCLIのいずれを実行するためのオプションのターミナルページです。**デフォルトではオフ**になっています。 - サーバー上でオン/オフの切り替えやCLIの管理を行います。 ```bash sudo nexcmp ai-console enable # turn on (also creates the nexcmp-ai user and service) sudo nexcmp ai-console disable # turn off sudo nexcmp ai-console status # runner, console state and installed CLIs sudo nexcmp ai-console install claude # or codex, or gemini ``` `status`は、AIランナーソケットの準備状態、AI Consoleの有効/無効、および各CLIの「installed(インストール済み)」または「not installed(未インストール)」を出力します。`sudo nexcmp status`には「AI runner: active」とも表示されます。 - 有効にすると、AI Chatの下に**AI Console**タブが表示されます。サインイン済みのCLIを選択し、管理者パスワード(および使用している場合は2FAコード)を再入力してセッションを開始します。ここでのコマンドはMCPツールを通じてのみNexCMPを管理できること、シェルおよびファイルツールが無効になっていることを注意喚起するバナーが表示されます。 - デモ環境では、`nexcmp-ai`ユーザーは一切作成されません。 ![CLIセレクター、パスワードフィールド、MCP専用の警告バナーが表示されたAI Consoleのスタート画面](https://nexcmp.com/ja/docs/images/configure-with-ai/ai-accounts-and-subscriptions-04-console.webp) ## 確認 {#verify} 1. APIソースでの**Test**は、モデル名を返します。 2. CLIカードの状態には、アカウントとともに「Signed in」と表示されます。 3. サーバー上では、`sudo nexcmp ai-console status`でCLIがインストール済みとして一覧表示され、`systemctl is-active nexcmp-ai`で`active`が出力されます。 4. AI Chatでソースを選択し、「Check my setup progress」と尋ねると、ツールカードが表示されます。 ## 制限と注意事項 {#limits-notes} - CLIの回答は1回につき最大5分、管理者1名あたり1件に制限されます。日次制限のカウントにはCLIの回答は含まれません。 - CLIソースからの変更であっても、AI Chat内では常に確認カードになります。CLIが単独で変更を適用することはできません。 - サブスクリプションプランにはそれぞれ独自の利用制限があります。ベンダーから「usage limit(利用制限)」または「not logged in(未ログイン)」と返された場合、チャットにそのメッセージが表示されます。 - ソースを削除しても、会話履歴は削除されません。 - サーバーを常に最新の状態に保ってください。CLIは、「Install」をクリックした時点でのベンダーのパブリックパッケージからインストールされます。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | ログインが無効になり、カードに「AI tools are not ready on the server yet」と表示される | `nexcmp-ai`サービスが実行されていません | パネルを最新バージョンにアップデートし、`sudo nexcmp status`を確認してください。読み取り専用のデモ環境ではこれは仕様です。 | | 「このサーバーにはAIツールがまだインストールされていません」 | `nexcmp-ai`サービスが実行されていません(古いパネル、またはデモパネルの場合) | パネルをアップデートしてから、`sudo nexcmp ai-console install claude`(または`codex`、`gemini`)を実行してください。 | | RAMが2 GB未満であることを警告する | サーバーのスペックが小さい | インストールの処理が遅くなるか失敗する可能性があります。メモリを追加するか、方法1を使用してください。 | | 「Node.js download checksum mismatch」または「download failed」 | サーバーがnodejs.orgにアクセスできないか、プロキシによってダウンロードファイルが改変された | アウトバウンドの HTTPS を許可して再試行してください。 | | インストールがエラーで終了する | npmがパッケージをインストールできなかった | カード上のログを確認し、npmレジストリへのアウトバウンドアクセスを確認してから、再度実行してください。 | | ログインがエラーで終了するかタイムアウトする | 10分間の制限時間が経過したか、コードが間違っていた | **Login**をもう一度クリックし、より素早く完了させてください。 | | AI ChatでClaudeソースが見つからない | **I understand**スイッチがオフであるか、CLIがサインインしていない | ベンダーのページを確認した上でスイッチをオンにし、サインインしてください。 | | Geminiで「Sign in with Google」が表示されない | Google OAuthクライアントがまだ保存されていない | Google Cloudプロジェクトでクライアントを作成し、カードの**Set up Google sign-in (optional)**に保存するか、代わりにAPIキーを貼り付けます。 | | "Sign in with OpenRouter" でエラーが返される | キャンセルされたか、ポップアップがブロックされました | ポップアップを許可してもう一度お試しください。 | | CLIの応答に "usage limit" と表示されます | プランのクオータが使い果たされました | しばらく待つか、ソースを切り替えてください。 | --- # 管理者APIキー {#admin-api-keys} > **管理画面の場所:** System › Settings › API & AI agents (`/agent/keys`)、**API keys**タブ。同じページには**Connect an AI**、**Connected apps**、**Activity**の各タブもあります。 ## 動作内容 {#what-it-does} 管理者APIキー(プレフィックス `ak_`)を使用すると、AIクライアントまたはスクリプトが、付与された権限に基づいてパネルを管理できるようになります。これは `/v1/admin/` および管理者MCPエンドポイント `/mcp/admin` の管理者APIで機能します。他の場所では機能しません。 ::: info カスタマーキーとは異なります お客様はカスタマーポータルで`vk_`で始まるキーを作成します([APIキーとスコープ](https://nexcmp.com/ja/docs/developers/api-keys/))。これらはカスタマーAPIおよび`/mcp`にのみアクセスできます。`ak_`キーはカスタマーAPIで拒否され、`vk_`キーはadmin APIで拒否されます。 ::: ## 要件 {#requirements} | 項目 | 要件 | |---|---| | ロール | 管理者にサインインしている必要があります。キーで他のキーを作成することはできません。 | | Demo | デモパネルでは、このページは読み取り専用です:キーの作成も失効もできません。 | | 到達性 | クライアントはパネル上の `https://cloud.example.com/mcp/admin` または `/v1/admin/...` に到達できる必要があります(IP制限を使用している場合はファイアウォールを確認してください)。 | ## キーの作成 {#create-a-key} 1. **System › Settings › API & AI agents** を開き、**API keys**タブを表示したままにします。 2. **Create new key**をクリックします。 3. フォームに以下を入力します: | 項目 | ルール | |---|---| | Name | 60文字まで。「Claude Code on my laptop」など。 | | Scopes | 少なくとも1つチェックを入れてください。[Scopes](#scopes)を参照してください。最初は `admin:read` のみにしてください。 | | 有効期限 | 1、7、30、60、または90日。デフォルトは30。最大90。有効期限のないキーは作成できません。 | | IP範囲(オプション) | 1行につき1つのIPv4/IPv6アドレスまたはCIDR(例:`203.0.113.0/24`、`2001:db8::/48`)。最大32個。任意のIPを許可する場合は空のままにします。 | | 1分あたりの呼び出し回数 | 1〜6000。デフォルトは120。 | 4. **Create key**をクリックします。ダイアログにキーが一度だけ表示されます(例:`ak_XXXX`)。**今すぐコピーしてください**:NexCMPはハッシュのみを保存するため、二度と表示することはできません。 5. **I have saved the key**をクリックします。**Connect an AI**タブを開くと、作成したばかりのキーがすでに入っている貼り付け用のコマンドを取得できます(このページのみ、再読み込みするまで)。 ![名前、スコープのチェックボックス、有効期限、IP範囲が入力された新しいキーのダイアログ](https://nexcmp.com/ja/docs/images/configure-with-ai/admin-api-keys-01-create.webp) ![コピーボタンと警告が表示され、新しいキーが一度だけ表示されるダイアログ](https://nexcmp.com/ja/docs/images/configure-with-ai/admin-api-keys-02-shown-once.webp) ## Scopes {#scopes} キーは、そのスコープが許可するツールとエンドポイントのみを使用できます。書き込みスコープには読み取りアクセスが含まれないため、読み取りと書き込みの両方を行う必要があるキーには `admin:read` も必要です。 | Scope | 許可される内容 | |---|---| | `admin:read` | 設定、カタログ、顧客、請求、ログの読み取り。機密情報は返されません。 | | `catalog:write` | プラン、OSテンプレート、クオータ、割引コード。 | | `infra:write` | インフラストラクチャソース(CloudStack、Proxmox)、ゾーン、サーバー。 | | `billing:write` | 決済ゲートウェイ、通貨、請求書、残高。金額に関する操作には確認が必要です。 | | `customers:write` | 顧客とリセラー。 | | `settings:write` | 一般設定、ブランディング、メール、法務ページ、モジュール、通知。 | | `ai:write` | AIプロバイダーとAI機能。 | | `secrets:write` | パスワードとAPIキーの書き込み。これらは設定可能ですが、読み出すことはできません。 | ::: tip シークレットの設定には2つのスコープが必要です パスワード、APIキー、トークン値(SMTPパスワード、決済キー、Telegramボットトークン、AIプロバイダーキー、CloudStackやProxmoxの資格情報)を含むすべての呼び出しには、`secrets:write` **および** そのエリアのスコープ(SMTPの場合は例えば`settings:write`)が必要です。シークレットを手動で入力したい場合は、`secrets:write`をオフにして管理画面で入力してください。 ::: ## キーの失効 {#revoke-a-key} 1. テーブルからキーを見つけます(ステータスが**Active**、**Expired**、または**Revoked**;**Last used**に日時とクライアントが表示されます)。 2. **Revoke**をクリックして確認します。 キーはすぐに動作を停止します。失効は永続的であるため、再度必要な場合は新しいキーを作成してください。 ## キーで絶対に実行できない操作 {#what-a-key-can-never-do} スコープに関わらず、キーがこれらの領域にアクセスすることは一切できません。管理画面へのサインインが必要です。 - 管理者ユーザーの作成・変更、2FAとサインインのセキュリティ、管理者セッション、管理者APIトークンの管理。 - 管理者キー、OAuth接続、AIアカウントの作成・一覧表示・失効、またはAI Consoleの使用。 - パネルのバックアップ・復元、アップデート、またはライセンスの変更。 - 顧客やリセラーとしてのログイン、顧客のコンソールのオープン、VM資格情報やkubeconfigの読み取り、SSHキーの設定、パスワードの送信またはリセット。 - ネットワークおよびルーティングモジュール(BGP、FRR、RTBH、XDP、インターフェイス、静的・ポリシーパブリックルート、NAT)や外部エージェント、ポータル統合の変更。これらは読み取り専用です。 - `demo_*`、`admin_*`、ホストリスト、パスキー、再認証、およびCAPTCHAシークレットなどの設定の変更。 ルールでカバーされていないものは、書き込みはデフォルトで拒否され、読み取りには`admin:read`が必要です。 ### 確認が必要な操作 {#actions-that-need-your-confirmation} これらはプレビューを承認した後にのみ成功します([Two-step confirmation](#two-step-confirmation)を参照): - 顧客残高やリセラーウォレットの変更、出金、請求レコード、為替レートの変更。 - 価格の変更(プラン価格、一括プラン作成、イメージおよびストレージ価格)や、割引・金額コードの作成。 - 決済ゲートウェイの資格情報またはCloudStack接続の保存。 - 任意の削除、顧客のブロックまたは削除、顧客の制限の変更、リセラーの停止または終了。 - 顧客サーバーに対する操作、または顧客のための有料サーバーの作成。 - サイト全体のスイッチ、サインインセキュリティ設定、一般設定を通じた決済設定の変更。 ## 2段階確認 {#two-step-confirmation} 呼び出しに確認が必要な場合、何も変更されません。応答はHTTP **428** となり、`confirm_required`、`confirm_token`、`preview`(メソッド、パス、理由、新しい値、および利用可能な場合は現在の値)、および`expires_in: 300`が含まれます。 1. クライアントにプレビューが表示されます。 2. 承認後、ヘッダー `X-Confirm-Token: ` を付加して**同じ**リクエスト(同じメソッド、パス、ボディ)を再送します。MCPツールの場合は、代わりに引数 `confirm_token` を指定します。 3. トークンは1回のみ有効で、5分後に期限切れになります。 AI Chat用に管理画面内で作成されたキーは、画面上でしか確認できません。応答には`confirm_in: "ui"`が含まれ、管理画面に確認カードが表示されます。AIが承認することはできません。 ## レートリミットとIPルール {#rate-limit-and-ip-rules} - 分間制限を超えると、呼び出しは `rate_limited` (HTTP 429) と `Retry-After: 60` を返します。 - IPレンジが設定されている場合、他のアドレスからの呼び出しは `ip_not_allowed` (HTTP 403) を返します。 ## アクティビティログ {#activity-log} **Activity** タブには、キーを使用して行われたすべての呼び出しが新しい順にリストされます(時刻、キー、クライアント、リクエスト元の経路(`http`、`mcp`、`chat`、`cli`、`confirm`、`preview`)、メソッドとパス、ツール、HTTPステータス、IP、および(マスクされた)詳細情報)。パス、ツール、またはキー名で検索したり、エラー(HTTP 400以上)または確認待ちの呼び出し(428以上)のみを表示したり、期間を過去1時間、24時間、または7日間に限定したりできます。NexCMPは最新の200,000件のエントリを保持します。キーを介して行われた変更は、Logs › Admin actions にも `ak:/` という名前で表示されます。 ![ステータス、クライアント、ツール、IPごとの呼び出しをリストするActivityタブ](https://nexcmp.com/ja/docs/images/configure-with-ai/admin-api-keys-03-activity.webp) ## 確認 {#verify} IPレンジ内にある任意のマシンから読み取り専用キーをテストします: ```bash curl -s https://cloud.example.com/v1/admin/agent/tools \ -H "Authorization: Bearer ak_XXXX" ``` スコープで許可されているツールのJSONリストが取得されます。1つ実行します: ```bash curl -s -X POST https://cloud.example.com/v1/admin/agent/tools/system_health \ -H "Authorization: Bearer ak_XXXX" \ -H "Content-Type: application/json" -d '{}' ``` キーの **Last used** 時刻が更新され、その呼び出しが **Activity** に表示されます。ツールの完全なリストとOpenAPI記述(`/v1/admin/openapi.json`)については、[Connect an AI client](https://nexcmp.com/ja/docs/configure-with-ai/mcp-admin/) で説明されています。 ## エラー {#errors} エラーはJSON形式です: `{"error": {"code": "...", "message": "..."}}`。 | HTTP | `code` | 意味 | 対処法 | |---|---|---|---| | 401 | `invalid_key` | キーが存在しない、形式が不正である、または不明です。admin以外のパスで `ak_` キーが使用された場合も返されます。 | キーを確認し、`/v1/admin/` と `/mcp/admin` のみで使用してください。 | | 401 | `key_expired` | キーの有効期限が切れています。 | 新しいキーを作成します。 | | 401 | `key_revoked` | キーは無効化されています。 | 新しいキーを作成します。 | | 403 | `ip_not_allowed` | 呼び出し元のIPがキーのIPレンジ外です。 | 許可されたIPから呼び出すか、正しいレンジを持つキーを作成してください。 | | 403 | `local_only_key` | AI Chat またはサーバーCLI用に作成されたキーが、別のマシンから使用されました。 | これらのキーは、パネルサーバー上でのみ機能します。 | | 403 | `insufficient_scope` | キーにスコープがありません。応答には `required_scope` が含まれます。 | そのスコープを持つキーを作成してください。 | | 403 | `forbidden_for_keys` | エンドポイント、または変更しようとした設定がキーに対して閉じられています。 | 管理画面で行ってください。 | | 403 | `demo_read_only` | パネルがデモモードであり、呼び出しが書き込みを行っています。 | デモではないパネルを使用してください。 | | 403 | `confirm_in_ui` | このアクションは管理画面の画面上で確認する必要があります。 | 確認カードを承認してください。 | | 428 | `confirm_required` | プレビューの準備ができました。何も変更されていません。`confirm_token` が含まれます。 | プレビューを表示し、`X-Confirm-Token` を指定して再度実行してください。 | | 409 | `confirm_expired` | トークンが5分以上経過しています。 | 新しいプレビューのためにリクエストを再度送信してください。 | | 409 | `confirm_mismatch` | トークンが別のリクエストのものです(メソッド、パス、またはボディが異なります)。 | 同一のリクエストを再度実行してください。 | | 409 | `confirm_invalid` | 不明または既に使用されているトークンです。 | 新しいプレビューのためにリクエストを再度送信してください。 | | 429 | `rate_limited` | この分間の呼び出し回数が多すぎます。 | `Retry-After` までお待ちください。 | | 400 | `invalid_path` | パスに禁止されているシーケンスが含まれています。 | 通常のパスを使用してください。 | | 413 | `too_large` | ボディが10 MBを超えています。 | 送信するデータを減らしてください。 | | 400 | `invalid_argument` | ツールの引数が不足している、不明である、または型が間違っています。メッセージにその名前が示されます。 | 引数を修正してください。 | ## 制限と注意事項 {#limits-notes} - キーの寿命は短くし、権限は最小限に抑えてください。1つのキーを失効させたときの影響を抑えられるよう、クライアントごとに1つのキーを使用することをお勧めします。 - キーの強力さはそのスコープによって決まります。`secrets:write` と `billing:write` の組み合わせが最も機密性が高くなりますが、金銭を伴うアクションは引き続きプレビューで停止します。 - (AI Chat やサーバーCLI用に)自動的に作成されたキーの寿命は数分のみであり、パネルサーバーからのみ機能します。 - AIクライアントを即座に遮断するには、キーを失効させます。OAuth接続は**Connected apps**タブ([OAuth connectors](https://nexcmp.com/ja/docs/configure-with-ai/oauth-connectors/))で失効させられます。 --- # AIクライアントの接続 (MCP) {#connect-an-ai-client-mcp} > **管理画面での場所:** System › Settings › API & AI agents (`/agent/keys`)、**Connect an AI**タブに、作成したキーが設定されたエンドポイントURLとすぐにコピーできる各クライアント用スニペットが表示されます。 ## 動作内容 {#what-it-does} **Model Context Protocol (MCP)**により、AIクライアントがツールを呼び出せるようになります。パネルは管理用MCPサーバーを `https://cloud.example.com/mcp/admin` で公開します。独自のAIツールを接続し、自然言語で「何をセットアップする必要がありますか?」「Proxmoxクラスターを追加して」「40%の利益率でプランを作成して」などと質問できます。クライアントは以下の管理者ツールを呼び出し、パネルはスコープを確認し、リスクのある操作の前に確認を求め、すべての呼び出しを記録します。 ::: info 2つのMCPエンドポイント `/mcp` は**顧客**エンドポイント(顧客用APIキー、`vk_`、[MCP server](https://nexcmp.com/ja/docs/developers/mcp/)を参照)です。`/mcp/admin` は、ここで説明する**管理者**エンドポイント(管理者キー `ak_` またはOAuth)です。これら2つが混ざることはありません。管理者ツールは `/mcp` では表示されず、`/mcp/admin` は管理者キーのみを受け付けます。 ::: ## 要件 {#requirements} | 項目 | 要件 | |---|---| | Endpoint | パネル自体のドメイン上の `https://cloud.example.com/mcp/admin`。**Connect an AI**タブから正確なURLをコピーします。同じページに、サーバー上で実行されるツール用のローカルURL(`http://127.0.0.1:/mcp/admin`)も記載されています。 | | 資格情報 | 必要なスコープを持つ[管理者APIキー](https://nexcmp.com/ja/docs/configure-with-ai/admin-api-keys/)(`ak_...`)、**または**ウェブコネクター用のOAuthサインイン([OAuth connectors](https://nexcmp.com/ja/docs/configure-with-ai/oauth-connectors/))。 | | クライアント | **Streamable HTTP**転送とカスタム `Authorization` ヘッダーをサポートする任意のMCPクライアント。プロトコルバージョン 2025-11-25、2025-06-18、2025-03-26。 | | ネットワーク | パネルの前段に独自のリバースプロキシを配置する場合は、`/mcp/admin`を転送する必要があります。ウェブコネクター(claude.ai、ChatGPT)はベンダーのサーバーから接続するため、インターネットからURLに到達できる必要があります。 | ## インフラストラクチャの準備 {#prepare-the-infrastructure} サーバーへのインストールは不要です。IPアドレスでキーを制限している場合は、クライアントの接続元アドレスがその範囲内にあることを確認してください。まず到達性をテストします: ```bash curl -i -X POST https://cloud.example.com/mcp/admin ``` `401`という応答と `WWW-Authenticate: Bearer ... resource_metadata=...` ヘッダーが返れば、エンドポイントが稼働しており、資格情報を要求していることを意味します。 ## NexCMP での接続 {#connect-in-nexcmp} 1. キーの作成: **System › Settings › API & AI agents › API keys › New key**。初回は `admin:read` のみにし、書き込みスコープが必要になったときに追加してください。[Admin API keys](https://nexcmp.com/ja/docs/configure-with-ai/admin-api-keys/)を参照してください。 2. **Connect an AI**タブを開きます。「キーが作成されました」ダイアログが表示されている間は、以下のスニペットすべてに実際のキーがすでに含まれています。それ以外の場合はプレースホルダー `ak_YOUR_KEY` が表示されます。 3. クライアント用のスニペットをコピーし、次の説明に従って実行または貼り付けます。 ![MCPのURLとクライアントごとのコピーボタン付きカードが表示されたConnect an AIタブ](https://nexcmp.com/ja/docs/images/configure-with-ai/mcp-admin-01-connect.webp) ### Claude Code {#claude-code} ```bash claude mcp add --transport http nexcmp https://cloud.example.com/mcp/admin \ --header "Authorization: Bearer ak_XXXX" ``` 次に `claude` を起動し、「list the tools from nexcmp」または「what is left to set up?」と質問します。 2026/10/30にClaude Code 2.1で確認済み: `claude mcp add --transport http …`はサーバーを書き込みます(`-s project`を追加してプロジェクトの`.mcp.json`に保持 — Claude Codeは初回のみプロジェクトサーバーの承認を求めます)。スクリプトの場合、`claude -p "…" --mcp-config .mcp.json --strict-mcp-config --allowedTools "mcp__nexcmp__*"`は承認プロンプトなしで実行され、Claudeがパネルのツールのみを使用できるようにします。 ### Claude Desktop {#claude-desktop} Node.js 18以降が必要です。これを `claude_desktop_config.json` に追加し(`mcp-remote`ブリッジを使用します)、Claude Desktopを再起動します: ```json { "mcpServers": { "nexcmp": { "command": "npx", "args": ["-y", "mcp-remote", "https://cloud.example.com/mcp/admin", "--header", "Authorization:Bearer ak_XXXX"] } } } ``` システムの都合でヘッダー引数のスペースが崩れる場合は、顧客エンドポイントと同様に、値全体を環境変数に正確に設定してください: `"args": [..., "--header", "Authorization:${NEXCMP_AUTH_HEADER}"]` と `"env": { "NEXCMP_AUTH_HEADER": "Bearer ak_XXXX" }`。 ### claude.ai (カスタムコネクター) {#claude-ai-custom-connector} キーは不要です。OAuthでサインインします。claude.aiでコネクター設定を開き、カスタムコネクターを追加して `https://cloud.example.com/mcp/admin` を貼り付け、NexCMP管理者アカウントでサインインして同意画面で権限を選択します。詳細は [OAuth connectors](https://nexcmp.com/ja/docs/configure-with-ai/oauth-connectors/) を参照してください。 ### ChatGPT (開発者モード) {#chatgpt-developer-mode} キーは不要です。ChatGPTで開発者モードを有効にし、URL `https://cloud.example.com/mcp/admin` でMCPコネクタを追加し、OAuthを選択してNexCMP管理者アカウントでサインインします。詳細: [OAuth connectors](https://nexcmp.com/ja/docs/configure-with-ai/oauth-connectors/)。 ### Codex CLI {#codex-cli} `~/.codex/config.toml`に追加: ```toml [mcp_servers.nexcmp] url = "https://cloud.example.com/mcp/admin" bearer_token_env_var = "NEXCMP_KEY" ``` 次に、Codexを起動するシェルでキーをエクスポートします: ```bash export NEXCMP_KEY=ak_XXXX codex codex mcp list # shows nexcmp with "Bearer token" auth ``` ::: tip 非インタラクティブ `codex exec` `codex exec`(スクリプト、CI)では、Codexはツール呼び出し前に確認を行わず、データを変更するツールをスキップします。これらを呼び出せるようにするには、`default_tools_approval_mode = "approve"`を`[mcp_servers.nexcmp]`配下に追加します。パネルは引き続きプレビューを返し、金銭、セキュリティ、削除のアクションについては確認を求めます。2026/10/30にCodex CLI 0.166で確認済み。 ::: ### Gemini CLI {#gemini-cli} `~/.gemini/settings.json`に追加: ```json { "mcpServers": { "nexcmp": { "httpUrl": "https://cloud.example.com/mcp/admin", "headers": { "Authorization": "Bearer ak_XXXX" } } } } ``` Gemini CLIは、信頼していないフォルダー内ではMCPサーバーを無効にします。信頼するフォルダー内で起動するか(または求められた際にフォルダーを信頼)、`gemini mcp list`で確認してください。`nexcmp … Connected`が表示されます。`"Authorization": "Bearer $NEXCMP_KEY"`を使用すると、ファイルを介さずにキーを保持できます。30/10/2026時点のGemini CLI 0.66で確認済みです。 ### Cursor {#cursor} `~/.cursor/mcp.json`(またはプロジェクト内の`.cursor/mcp.json`)に追加: ```json { "mcpServers": { "nexcmp": { "url": "https://cloud.example.com/mcp/admin", "headers": { "Authorization": "Bearer ak_XXXX" } } } } ``` ::: tip 設定ファイルにキーを含めない クライアントがサポートしている場合、ファイルに直接記述するのではなく環境変数からキーを読み取ります。Codexではこれがデフォルトであり(`bearer_token_env_var`)、Cursorでは`"Bearer ${env:NEXCMP_KEY}"`が受け付けられます。キーが含まれるファイルを絶対にコミットしないでください。 ::: ### OpenAI Agents SDK (Python) {#openai-agents-sdk-python} ```python from agents.mcp import MCPServerStreamableHttp nexcmp = MCPServerStreamableHttp( params={"url": "https://cloud.example.com/mcp/admin", "headers": {"Authorization": "Bearer ak_XXXX"}}, name="nexcmp", ) ``` 完全な実行例(30/10/2026時点の`openai-agents` 0.24で確認 — 読み取りツールの後、確認プレビューを返し、2回目の`confirm_token`の呼び出しで適用された残高変更の例): ```python import asyncio from agents import Agent, Runner from agents.mcp import MCPServerStreamableHttp async def main(): async with MCPServerStreamableHttp(params={"url": "https://cloud.example.com/mcp/admin", "headers": {"Authorization": "Bearer ak_XXXX"}}, name="nexcmp") as nexcmp: agent = Agent(name="admin", model="gpt-5", mcp_servers=[nexcmp], instructions="You operate a hosting panel through the nexcmp tools. Ask me before confirming money actions.") result = await Runner.run(agent, "Run system_health and summarise it in one line.") print(result.final_output) asyncio.run(main()) ``` ### OpenAI Responses API {#openai-responses-api} サーバーを`mcp`型のツールとして渡します。プログラムが各呼び出しの前に確認するように、`require_approval`を`always`に設定してください: ```json { "type": "mcp", "server_label": "nexcmp", "server_url": "https://cloud.example.com/mcp/admin", "headers": { "Authorization": "Bearer ak_XXXX" }, "require_approval": "always" } ``` ### その他の環境(プレーンHTTP) {#anything-else-plain-http} MCPを持たないクライアントでも、HTTP経由で同じツールを呼び出すことができます。`GET /v1/admin/agent/tools`には一覧が表示され、`POST /v1/admin/agent/tools/`は引数のJSONボディを指定してツールを実行し、`GET /v1/admin/openapi.json`はOpenAPI 3.1の記述(各ツールが1つのオペレーション)を返します。いずれも`Authorization: Bearer ak_...`が必要です。 ## 確認 {#verify} 1. クライアントを使用せずにツールの一覧を取得する: ```bash curl -s https://cloud.example.com/mcp/admin \ -H "Authorization: Bearer ak_XXXX" \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' ``` 応答は、スコープが許可するツールを含むJSON-RPCの結果です。 2. クライアントで「run system_health」を実行します。アラート、接続されたインフラストラクチャの状態、決済、メール、AI、およびライセンスの状態が返されます。 3. **API & AI agents › Activity** を開きます。クライアント名および `mcp` とともに呼び出しが一覧表示されます。 4. サーバー側で、`sudo nexcmp status`により「MCP admin」という行が出力され、エンドポイントが応答すると`ready`が表示されます(キーなしでのHTTP 401は正常な状態です)。 ## ツール {#tools} サーバーは58個のツールを提供します。クライアントには、そのキーのスコープが許可するツールのみが表示されます。読み取りツールには`admin:read`が必要で、書き込みツールにはそれぞれのスコープが必要です。また、書き込みツールにはオプションの`confirm_token`引数も渡されます([Confirmation](#confirmation-confirm-token)を参照)。引数は各ツールのスキーマに対して検証され、不明な引数や型の間違った引数は、該当する引数名を挙げて拒否されます。 価格はUSD建てです。プラン価格は1時間あたりのドル(`hourly_usd`)、残高はセント単位です。シークレットは設定可能ですが、取得されることはありません。 ### 概要とログ {#overview-and-logs} | ツール | 動作内容 | Scope | データの変更 | 確認の有無 | |---|---|---|---|---| | `system_health` | 注意が必要なアラート、インフラストラクチャの健康状態、決済、メール、AI、ライセンス、およびアップデート状況。 | `admin:read` | いいえ | いいえ | | `setup_checklist` | 設定済みの項目と残りの項目: ライセンス、インフラストラクチャ、ゾーン、OSテンプレート、プラン、決済、メール、ブランディング、法的事項、テスト注文。 | `admin:read` | いいえ | いいえ | | `license_status` | ライセンスのステータスと、より新しいNexCMPのバージョンが存在するかどうか。 | `admin:read` | いいえ | いいえ | | `audit_search` | 管理者の監査ログとAPIキーログを検索する。 | `admin:read` | いいえ | いいえ | ### 設定、ブランディング、法的事項、モジュール {#settings-branding-legal-modules} | ツール | 動作内容 | Scope | データの変更 | 確認の有無 | |---|---|---|---|---| | `settings_get` | 一般設定を読み取る(`keys`はフィルター。末尾の`*`はプレフィックスに一致)。 | `admin:read` | いいえ | いいえ | | `settings_update` | フラットな`values`オブジェクトから一般設定を変更する。`settings_get`によってリストされたキーのみが受け付けられます。 | `settings:write` | はい | キーが決済、サインインセキュリティ、サイト全体のスイッチ、または価格に影響する場合 | | `branding_get` | ブランド名、色、表示通貨、販売者名、ロゴおよびファビコンのURL。 | `admin:read` | いいえ | いいえ | | `branding_update` | ブランド名(60文字以内)、色(`#rrggbb`)、表示通貨(`usd`または`vnd`)、販売者名を設定する。 | `settings:write` | はい | いいえ | | `branding_logo_set` | httpsのURLまたはbase64(PNG、JPEG、WEBP、ICO、SVG、最大512 KB)から、ライト/ダークロゴまたはファビコンをアップロードします。 | `settings:write` | はい | いいえ | | `legal_get` | 利用規約とプライバシーポリシー(英語およびベトナム語)、およびニュートラルなデフォルト設定。 | `admin:read` | いいえ | いいえ | | `legal_update` | 規約とプライバシーのテキストを設定します(シンプルなマークダウン、HTML不可、各最大50 KB)。空文字列を指定するとデフォルトに戻ります。 | `settings:write` | はい | いいえ | | `modules_get` | 有効になっているオプションモジュールと、切り替え可能なモジュール。 | `admin:read` | いいえ | いいえ | | `module_set` | オプションモジュールの有効/無効を切り替えます(`key`は`settable`のいずれかである必要があります)。 | `settings:write` | はい | いいえ | ### メールとアラート {#email-and-alerts} | ツール | 動作内容 | Scope | データの変更 | 確認の有無 | |---|---|---|---|---| | `smtp_get` | 送信メール設定(パスワードはマスク表示)とキューの状態。 | `admin:read` | いいえ | いいえ | | `smtp_configure` | SMTPサーバーを設定します。ホスト、ポート、またはセキュリティを変更する場合は、再度パスワードの入力が必要です。 | `settings:write`(パスワード用に`secrets:write`を追加) | はい | いいえ | | `smtp_test` | 保存済みの設定を使用して、実際のテストメールを送信します。 | `settings:write` | メールを送信します | いいえ | | `telegram_get` | 管理者通知チャネル(チャットID。ボットトークンは一切返されません)。 | `admin:read` | いいえ | いいえ | | `telegram_configure` | Telegramアラートチャネル(ボットトークンとチャットID)の追加または更新を行い、管理者アラートの有効/無効を切り替えます。 | `settings:write`(トークン用に`secrets:write`を追加) | はい | いいえ | | `telegram_test` | Telegramチャネルにテストメッセージを送信します。 | `settings:write` | メッセージを送信します | いいえ | ### 決済と通貨 {#payments-and-currency} | ツール | 動作内容 | Scope | データの変更 | 確認の有無 | |---|---|---|---|---| | `payments_get` | Stripe、PayPal、暗号資産(USDT)、銀行振込の状態、および有効化されているチャネルと手数料。 | `admin:read` | いいえ | いいえ | | `payment_configure` | 1つの決済ゲートウェイの認証情報を設定します(`stripe`、`paypal`、`crypto`、`bank`のいずれか)。 | `billing:write` (+ `secrets:write`) | はい | 常時 | | `payment_test` | プロバイダー側でゲートウェイの保存済み認証情報を確認します。 | `billing:write` | いいえ | いいえ | | `currency_get` | 表示通貨と、USDからVNDへの換算レート(自動または手動)。 | `admin:read` | いいえ | いいえ | | `currency_set` | 表示通貨や手動レートを設定します(0は自動、それ以外は15000〜50000)。 | `billing:write` | はい | 手動レートを変更したとき | ### インフラストラクチャとゾーン {#infrastructure-and-zones} | ツール | 動作内容 | Scope | データの変更 | 確認の有無 | |---|---|---|---|---| | `cloudstack_get` | 保存済みのCloudStackエンドポイント、ゾーン、およびネットワークID(キーはマスク表示)。 | `admin:read` | いいえ | いいえ | | `cloudstack_test` | 保存せずにAPIキーとシークレットでエンドポイントをテストし、ゾーンを一覧表示します。 | `infra:write`(キーを渡すため`secrets:write`を追加) | いいえ | いいえ | | `cloudstack_connect` | CloudStack接続を保存します。 | `infra:write` (+ `secrets:write`) | はい | 常時 | | `proxmox_list` | ソースとして追加されたProxmox VEクラスターと、その稼働状態。 | `admin:read` | いいえ | いいえ | | `proxmox_add` | APIトークン(`user@realm!tokenid`)とそのシークレットを使用してProxmox VEクラスターを追加します。 | `infra:write` (+ `secrets:write`) | はい | いいえ | | `proxmox_test` | IDを指定してクラスターに接続します。最初の成功時にTLS証明書が固定されます。 | `infra:write` | はい | いいえ | | `proxmox_attach_zone` | 既存のゾーン内でProxmoxクラスターを販売します。オプションでノードをリージョンとして指定できます。 | `infra:write` | はい | いいえ | | `zones_list` | お客様が選択できるゾーン(ロケーション)。 | `admin:read` | いいえ | いいえ | | `zone_create` | ゾーンを作成します。 | `infra:write` | はい | いいえ | ### カタログとプラン {#catalog-and-plans} | ツール | 動作内容 | Scope | データの変更 | 確認の有無 | |---|---|---|---|---| | `templates_list` | お客様がインストールできるOSテンプレート。 | `admin:read` | いいえ | いいえ | | `templates_sync` | CloudStackからOSテンプレートをインポートします。 | `catalog:write` | はい | いいえ | | `template_update` | テンプレートの有効化/非表示、名前の変更、ログインユーザーや順序の設定を行います。 | `catalog:write` | はい | いいえ | | `offerings_list` | プランの構築元となるCloudStackのサービスオファリング(CPU、メモリ、ルートディスク)。 | `admin:read` | いいえ | いいえ | | `plans_list` | 1時間あたりおよび1か月あたりの料金、サイズ、ゾーン、およびそれらを利用しているサーバー数を含むプラン。 | `admin:read` | いいえ | いいえ | | `plan_create` | プランを作成します。価格は`hourly_usd`として指定します。CloudStackプランには`cs_offering_id`が、Proxmoxプランには`backend_id`が必要です。 | `catalog:write` | はい | いいえ | | `plan_update` | プランの名前変更、表示/非表示、有効/無効の切り替え、価格変更を行います。使用中のプランのサイズ変更にはコピーが必要です。 | `catalog:write` | はい | 価格が変更されたとき | | `plans_from_offerings` | コストと利益率を使用して、提供内容(または Proxmox のサイズ)からスタータープランのテーブルを作成します。プレビューが返されます。プランを作成するには、`apply=true` を指定して再度呼び出します。 | `catalog:write` | `apply=true` を使用する | 常に有効 | | `quota_defaults_get` | デフォルトの顧客制限。 | `admin:read` | いいえ | いいえ | | `quota_defaults_set` | `quota_*` の設定を変更します。 | `catalog:write` | はい | いいえ | | `coupons_list` | 割引およびギフトコードのバッチ。 | `admin:read` | いいえ | いいえ | | `coupon_create` | コードのバッチを作成します: `money` (米ドルセント単位の額面) または `percent` (1 〜 100、最大割引額付き)。 | `catalog:write` | はい | 常時 | ### 顧客とリセラー {#customers-and-resellers} | ツール | 動作内容 | Scope | データの変更 | 確認の有無 | |---|---|---|---|---| | `customers_search` | メールアドレス、名前、または IP で顧客を検索します。 | `admin:read` | いいえ | いいえ | | `customer_get` | 1 人の顧客のアカウント、残高、サーバー、および最近の請求履歴。 | `admin:read` | いいえ | いいえ | | `customer_adjust_balance` | 米ドルセント単位でクレジットを追加(プラス)または削除(マイナス)します。理由は必須です。 | `billing:write` | はい | 常時 | | `customer_block` | 顧客をブロックし、必要に応じてサーバーを停止します。理由は必須です。 | `customers:write` | はい | 常時 | | `customer_unblock` | 顧客のブロックを解除します。 | `customers:write` | はい | いいえ | | `resellers_list` | ウォレットとステータスを持つリセラー。 | `admin:read` | いいえ | いいえ | | `reseller_get` | 1 つのリセラーのサイト、ウォレット、ユーザー、および決済ゲートウェイ。 | `admin:read` | いいえ | いいえ | ### AIプロバイダー {#ai-provider} | ツール | 動作内容 | Scope | データの変更 | 確認の有無 | |---|---|---|---|---| | `ai_provider_get` | 顧客の AI Chat および AI Agent が使用する OpenAI 互換プロバイダー(キーはマスクされています)。 | `admin:read` | いいえ | いいえ | | `ai_provider_set` | プロバイダーを設定します: ベース URL、モデル、API キー、フォールバックモデル、推論の度合い、有効化。 | `ai:write` (キーの場合は `secrets:write`) | はい | いいえ | | `ai_provider_test` | 正しく動作するか確認するため、保存されたプロバイダーに 1 つ質問します。 | `ai:write` | いいえ | いいえ | ### 設定ファイル {#configuration-files} | ツール | 動作内容 | Scope | データの変更 | 確認の有無 | |---|---|---|---|---| | `config_export` | 設定を YAML としてエクスポートします(機密情報は `secret://` 参照になります)。 | `admin:read` | いいえ | いいえ | | `config_plan` | YAML 設定と稼働中のパネルを比較し、変更される内容を一覧表示します。 | `admin:read` | いいえ | いいえ | | `config_apply` | YAML 設定をセクションごとに適用します。各変更は通常のスコープおよび確認ルールに従います。 | `admin:read` + すべての変更のスコープ | はい | 変更ごと | ファイル形式については [Configuration as code](https://nexcmp.com/ja/docs/configure-with-ai/config-as-code/) を参照してください。 ## プロンプト {#prompts} サーバーは、クライアントがショートカットとして表示できる 3 つの既製プロンプトも提供します: | プロンプト | 引数 | AI に実行を求める内容 | |---|---|---| | `initial-setup` | なし | `setup_checklist` を呼び出し、未完了の各ステップを 1 文で説明し、必要な情報を尋ね、一致するツールでステップを実行し、金額やセキュリティの変更をプレビューして、`system_health` で終了します。 | | `add-proxmox` | `endpoint` (オプション、`https://host:8006`) | API トークンを要求し、次に `proxmox_add`、`proxmox_test`、ゾーンツール、および `proxmox_attach_zone` を実行し、`plans_from_offerings` でプランを提案して承認を待ちます。 | | `launch-pricing` | `margin_pct` (オプション、デフォルト 40) | vCPU あたり、RAM の GB あたり、ディスクの GB あたりの月額コストを尋ね、コスト、月額料金、時間額料金を表示するプレビューテーブルを表示し、承認後にプランを作成します。 | ## 確認 (`confirm_token`) {#confirmation-confirm-token} 資金の移動、データの削除、支払い資格情報の変更、またはサインインセキュリティの変更を行うアクションは 2 ステップです: 1. 最初の呼び出しでは何も変更されません。ツール結果は "CONFIRMATION REQUIRED" で始まり、**プレビュー**(呼び出される内容、機密である理由、新しい値と現在の値)および `confirm_token` が含まれます。 2. クライアントはプレビューを表示する必要があります。あなたが承認した後にのみ、同じ引数に `confirm_token` を追加して同じツールを再度呼び出します。 3. トークンは 1 回限り、その正確なリクエストに対してのみ有効であり、5 分後に期限切れになります。 サーバーの指示により、AIはツール結果を命令ではなくデータとして扱い、承認されていないトークンで呼び出しを繰り返さないようになっています。お客様が最後の砦です。プレビューをご確認ください。 ::: warning 自動承認を行わない 一部のクライアントはすべてのツール呼び出しを自動的に承認できます。書き込みツールについては、呼び出しごとの承認を有効にするか、読み取り専用キーを使用してください。これにより、AIの誤った計画が確認されずにパネルに到達するのを防げます。 ::: ## 動作原理 {#how-it-works} | 項目 | Detail | |---|---| | トランスポート | `POST /mcp/admin`(JSON-RPC 2.0メッセージ付き)。応答は`application/json`です。バッチあたり最大20メッセージ。`GET /mcp/admin`は405(サーバーにストリームなし)を返します。`DELETE /mcp/admin`でセッションが終了します。 | | 認証 | `Authorization: Bearer ak_...`(手動キーまたはOAuthアクセストークン)。資格情報の欠落または誤りは`WWW-Authenticate: Bearer ... resource_metadata=...`を伴う401を返し、OAuthクライアントが自らサインインを開始できるようにします。 | | セッション | `Mcp-Session-Id`は`initialize`によって発行され、そのキーに紐付けられ、24時間有効です。 | | 機能 | ツールとプロンプト。リソースはありません。 | | サイズ | リクエストボディは最大1 MB、ツール結果は約100 KB以降が切り捨てられます。 | | オリジン | 他サイトからの`Origin`ヘッダーを持つリクエストは拒否されます(`origin_not_allowed`)。コマンドラインおよびデスクトップクライアントはヘッダーを送信しません。 | | RESTと同じゲート | 各ツール呼び出しはお客様のキーを使用してパネル独自の要求パイプライン経由で再送信されるため、スコープ、IP範囲、レート制限、確認、およびアクティビティログは直接API呼び出しの場合とまったく同様に適用されます。 | ## 制限と注意事項 {#limits-notes} - 見えないツールは付与しなかったスコープです。新しいキーにスコープを追加してください。 - AIクライアント経由でパスワードやAPIキーを設定すると、シークレットがそのAIを通過することになります。必要に応じて`secrets:write`をオフのままにして管理画面でご自身でシークレットを入力するか、AI Chatの**Secret**フィールド([AI Chat in the admin](https://nexcmp.com/ja/docs/configure-with-ai/ai-chat-in-admin/#secrets))または`secret://`参照([Configuration as code](https://nexcmp.com/ja/docs/configure-with-ai/config-as-code/#secrets))をご利用ください。 - クライアント間でセッションは共有されません。各接続は`initialize`で始まります。 - AIクライアントを即座に遮断するには、**API & AI agents**でキーを無効化します。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | 401 `invalid_key` | 誤った、切り詰められた、または非管理者キー(`vk_`キーなど) | `ak_`キーを使用してください。 | | 401 `key_expired` または `key_revoked` | キーの有効期限が切れたか、無効化されました | 新しいキーを作成します。 | | 403 `ip_not_allowed` | お客様のIPがキーのIP範囲外です | 許可されたIPから接続してください。 | | 403 `origin_not_allowed` | 別オリジンのブラウザページがエンドポイントを呼び出しました | デスクトップまたはCLIクライアントを使用してください。 | | `Mcp-Session-Id` を伴うリクエストでの404 | セッションが別のキーに属しているか、有効期限が切れています | `initialize`を再度送信してください。 | | 400 unsupported `MCP-Protocol-Version` | クライアントがサーバーの認識していないバージョンを使用しています | クライアントを更新してください。サポート対象:2025-11-25、2025-06-18、2025-03-26。 | | ツールリストが短い | キースコープ | より多くのスコープを持つキーを作成してください。 | | 呼び出し時の`insufficient_scope` | ツールに追加のスコープ(例:`secrets:write`)が必要です | 新しいキーにスコープを追加してください。 | | 429 `rate_limited` | 1分あたりの呼び出し回数がキーの許容量を超えています | `Retry-After`まで待つか、新しいキーで制限を引き上げてください。 | | claude.aiまたはChatGPTが接続できません | URLにインターネットから到達できないか、プロキシが`/mcp/admin`または`/oauth-admin/`をブロックしています | DNS、TLS、およびリバースプロキシを確認してください。 | すべてのエラーコードについては[Admin API keys](https://nexcmp.com/ja/docs/configure-with-ai/admin-api-keys/#errors)を参照してください。 --- # claude.aiおよびChatGPTコネクタ {#claude-ai-and-chatgpt-connectors} > **管理画面での場所:** System › Settings › API & AI agents (`/agent/keys`)、**Connected apps**タブ。同意画面は、コネクターがアクセスを要求した際に`/agent/consent`で開きます(メニューにはありません)。 ## 動作内容 {#what-it-does} Web AIアプリはディスクからキーを読み取ることはできません。**OAuth**を通じて接続します。パネルのMCP URLを追加すると、アプリはあなたを自身の管理画面へ誘導してサインインさせ、アプリの実行内容と有効期限を選択すると、アプリは短命なトークンを受け取ります。キーのコピーや貼り付けは行われません。アプリはいつでも切断できます。 claude.aiのカスタムコネクター、ChatGPTの開発者モード用コネクター、および動的クライアント登録をサポートするその他のMCPクライアントでこれを使用します。コマンドラインツールでも同じフローを使用できますが、それらには[admin API key](https://nexcmp.com/ja/docs/configure-with-ai/admin-api-keys/)の方がよりシンプルです。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | URL | `https://cloud.example.com/mcp/admin`、インターネットから到達可能であること(ベンダーのサーバーが接続します)。 | | リバースプロキシ | パネルの前段に独自のプロキシを配置する場合は、`/mcp/admin`、`/oauth-admin/`および`/.well-known/`のパスをパネルへ転送する必要があります。 | | あなた | 同意画面で使用する**のと同じブラウザー**で、NexCMP管理画面にサインインしていること。 | | クライアント | Streamable HTTPによるMCP、PKCE(S256)を用いたOAuth 2.1、および動的クライアント登録をサポートしています。 | ## 接続 {#connect} 1. AIアプリでカスタムMCPコネクターを追加し、`https://cloud.example.com/mcp/admin`を貼り付けます。claude.aiではコネクター設定(カスタムコネクターの追加)にあり、ChatGPTでは開発者モード(MCPコネクターの追加、認証はOAuth)にあります。 2. アプリで**Sign in**(または「Connect」)を選択します。ブラウザーでNexCMP管理画面の同意画面が開きます。サインインしていない場合はまずサインインしてください。画面はその後に継続されます。 3. 「**Example AI app** wants to manage this NexCMP admin」(要求しているアプリの名前)というカードと、送還先の住所を確認します。 4. 付与するスコープにチェックを入れます。アプリが要求したものはあらかじめチェックが入っています。何も要求されなかった場合は、`admin:read`のみがチェックされます。[Scopes](https://nexcmp.com/ja/docs/configure-with-ai/admin-api-keys/#scopes)をご覧ください。 5. 接続の持続期間を選択します:**7**日、**30**日、または**90**日(デフォルトは30日)。 6. **Allow**をクリックします。ブラウザーがアプリに戻り、接続が完了します。拒否するには**Deny**をクリックします。 ![AIアプリの許可を求める同意画面。スコープのチェックボックス、期間の選択肢、AllowおよびDenyボタンが表示されています](https://nexcmp.com/ja/docs/images/configure-with-ai/oauth-connectors-01-consent.webp) ::: important キーと同様にスコープを選択する 目的を達成できる最小限のセットを付与してください。金額、削除、セキュリティのアクションはプレビューで停止し、あなたの承認が必要ですが、`settings:write`を持つ接続ではブランド名やメールアドレスが変更される可能性があります。 ::: ## 管理と取り消し {#manage-and-revoke} **System › Settings › API & AI agents › Connected apps**を開きます。テーブルには、接続したすべてのアプリ(アプリケーション、スコープ、接続日時、有効期限、最終使用日時)が一覧表示されます。 アプリを切断するには、**Revoke**をクリックして確認します。そのトークンは即座に無効になり、アプリは再接続するために再び同意画面を経由する必要があります。 ![1つのAIアプリとそのスコープ、有効期限、Revokeボタンが表示されているConnected appsタブ](https://nexcmp.com/ja/docs/images/configure-with-ai/oauth-connectors-02-connected-apps.webp) ## フローの仕組み {#how-the-flow-works} | ステップ | Detail | |---|---| | 検出 | アプリは`/.well-known/oauth-protected-resource/mcp/admin`、次に`/.well-known/oauth-authorization-server/oauth-admin`を読み取ります。発行者は`https://cloud.example.com/oauth-admin`です。 | | 登録 | アプリ自身を登録します(`POST /oauth-admin/register`、RFC 7591)。パブリッククライアントのみがサポートされています(クライアントシークレットはありません)。リダイレクトアドレスは`https`、または同一コンピューター上の場合は`http`(ループバック)である必要があります。 | | 認可 | `GET /oauth-admin/authorize`(PKCEメソッド: `S256`)。送信される場合、`resource`パラメータはこのパネルの`/mcp/admin` URLである必要があります。リクエストは10分間有効で、開始したブラウザに紐付けられます。 | | 同意 | スコープと有効期間を選択します(上記)。認可コードの有効期限は60秒で、1回のみ有効です。 | | トークン | `POST /oauth-admin/token`は、**アクセストークン**(`ak_o...`キー、有効期限1時間、または接続終了時のいずれか早い方)と**リフレッシュトークン**(`akr_...`)を返します。リフレッシュごとに新しいリフレッシュトークンが発行され、古いトークンは無効になります。接続は選択した日数後に終了します。 | | 取り消し | 「Connected apps」で**Revoke**を実行するか、アプリから`POST /oauth-admin/revoke`(RFC 7009)を呼び出します。 | アクセストークンは、付与したスコープを持つ管理者キーと同様に動作します(同一のスコープルール、確認、レート制限、アクティビティログが適用されます)。その呼び出しは**Activity**タブに表示されます。 ## 確認 {#verify} 1. アプリで「run system_health」(または「what tools do you have?」)と入力します。スコープで許可されているツールがアプリに一覧表示されます([the tool list](https://nexcmp.com/ja/docs/configure-with-ai/mcp-admin/#tools))。 2. **Connected apps**を開きます。**Last used**が更新されます。 3. **Activity**を開きます。呼び出し履歴にアプリの名前と`mcp`が記載されて一覧表示されます。 ## 制限と注意事項 {#limits-notes} - 1時間経過後にアプリが再度サインインを求める場合、クライアントがリフレッシュを行わない通常の動作です。再接続してください。 - リフレッシュトークンが2回使用された場合は盗難とみなされ、接続全体が取り消されます。アプリから再接続してください。 - 2回使用された認可コードは拒否され(`invalid_grant`)、すでに発行済みのトークンは取り消されます。 - OAuthアクセスはスコープルールの制限を超えることはありません。[what a key can never do](https://nexcmp.com/ja/docs/configure-with-ai/admin-api-keys/#what-a-key-can-never-do)は接続されたアプリにも適用されます。 - ベンダーによりメニューやサポート内容は変更されます。ベンダーのアプリが現在のプランでカスタムコネクタを提供していない場合は、代わりにデスクトップまたはコマンドラインクライアントで[admin API key](https://nexcmp.com/ja/docs/configure-with-ai/admin-api-keys/)を使用してください。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | 同意画面に「Wrong browser」と表示される | サインインしているブラウザとは別のブラウザでリクエストが開始された | 同じブラウザ上のAIアプリから接続をやり直してください。 | | 同意画面にリクエストの期限切れまたは欠落が表示される | 10分以上経過したか、リンクが2回開かれた | AIアプリから接続をやり直してください。 | | 「Unknown client」または「redirect address does not match」ページが表示される | アプリの登録情報が古いか、登録されていないリダイレクトアドレスが使用されている | アプリ内でコネクタを削除し、再度追加してください。 | | `invalid_target` | `resource` に送信された値がこのパネルの `/mcp/admin` URL と一致しない | **Connect an AI**タブに表示されている正確なURLを使用してください。 | | `invalid_request` about PKCE | クライアントが `code_challenge_method=S256` を送信していない | PKCEをサポートするOAuth 2.1対応のクライアントを使用してください。 | | アプリは接続されるが、呼び出し時に `insufficient_scope` が返される | そのスコープにチェックが入っていなかった | 接続を取り消し、該当のスコープにチェックを入れて再度接続してください。 | | アプリがURLに到達できない | DNS、TLS、またはリバースプロキシによって `/mcp/admin`、`/oauth-admin/`、`/.well-known/` がブロックされている | プロキシのルールを確認してください。 | --- # 構成のコード化 {#configuration-as-code} > **管理画面での場所:** System › Settings › Import/Export(`/agent/config`)。サーバー上での操作: コマンド `nexcmp config export`、`plan`、`apply`、および `nexcmp admin `。 ## 動作内容 {#what-it-does} パネルの設定(ブランディング、一般設定、メール、Telegram通知、モジュール、通貨、決済ゲートウェイ、制限、ゾーン、プラン、AIプロバイダー、利用規約などの法的ページ)を1つのYAMLファイルとして保存できます。ファイルを自分で編集したり、AIアシスタントに編集を依頼したり、バージョン管理下で維持したり、同じパネルや別のパネルに適用したりすることができます。変更が適用される前には、必ず差分の一覧が表示されます。機密情報(シークレット)がファイルに書き込まれることはありません。 セットアップを2台目のインストール先にクローンしたり、本番稼働前に変更点を確認したり、誤操作後に設定を復元したり、AIに設定全体を提案させて1つのドキュメントとして確認したりするために使用します。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | NexCMP | 1.4.0 以降。 | | コマンドライン | パネルサーバーに `root` でログインしています(`sudo` を使用)。コマンドは自動的にパネルに一時キー(15分間、全スコープ)を要求します。代わりに特定の制限されたキーを使用するには、`NEXCMP_KEY` を [admin API key](https://nexcmp.com/ja/docs/configure-with-ai/admin-api-keys/) に設定し、sudo経由で維持します(例: `sudo --preserve-env=NEXCMP_KEY nexcmp config plan -f nexcmp.yaml`)。 | | 管理画面 | 管理者にサインインしていること。デモパネルではこのページは読み取り専用です。 | | シークレット | 適用時に指定される値([Secrets](#secrets) を参照);ファイル内には含まれません。 | ## エクスポート、編集、プレビュー、適用 {#export-edit-preview-apply} 1. 現在の設定をエクスポートします: ```bash sudo nexcmp config export -o nexcmp.yaml ``` `-o` がない場合、YAMLは画面に出力されます。 2. `nexcmp.yaml` を編集します(以下の [example](#example-file) を参照)。先頭に `version: 1` を維持してください。 3. 変更される内容をプレビューします。これによって何も変更されません: ```bash sudo nexcmp config plan -f nexcmp.yaml ``` 各行には、セクション、アイテム、フィールド、および `old → new` が表示されます。`$` とマークされた行は課金セクションに属します([Billing sections](#billing-sections) を参照)。パネルがすでにファイルと一致している場合は、「No changes」と表示されます。 4. 適用します。`--yes` がない場合、コマンドは **ドライラン** となり、同じ一覧のみが出力されます: ```bash sudo nexcmp config apply -f nexcmp.yaml --yes ``` 5. 結果を読み取ります: `applied`、`pending`(確認待ち)、`skipped`、および `errors`。 | オプション | 意味 | |---|---| | `-f ` | YAMLファイル(`plan` および `apply` に必要)。 | | `--yes` | 実際に適用します。これがない場合、`apply` はドライランになります。 | | `--confirm-billing` | 課金セクション(`payments`、`currency`、`plans`)も適用します。これがない場合、これらはスキップされます。 | | `--section ` | このセクションのみを適用します。複数のセクションに対してオプションを繰り返します。 | | `-o ` | `export` を指定した場合: YAMLをファイルに書き込みます。 | すべてが適用された場合または何も変更されなかった場合の終了コードは0、エラーが返された場合は1、使用法またはキーのエラーの場合は2となります。 ### シークレット {#secrets} ファイルには、機密情報の代わりに `password: secret://smtp_password` などの参照が保持されます。適用時、値は `NEXCMP_SECRET_` という名前の環境変数に大文字の参照名を加えたものから取得されます: ```bash sudo -i read -rs NEXCMP_SECRET_SMTP_PASSWORD && export NEXCMP_SECRET_SMTP_PASSWORD read -rs NEXCMP_SECRET_STRIPE_SECRET_KEY && export NEXCMP_SECRET_STRIPE_SECRET_KEY nexcmp config apply -f nexcmp.yaml --yes --confirm-billing ``` 参照に値がない場合、パネルに既に保存されているシークレットが**保持**されます。一度も保存されておらず、提供もされていないシークレットは空のままになります。 | 参照名 | 格納先 | |---|---| | `smtp_password` | `email.smtp.password` | | `telegram_bot_token` | `telegram.bot_token` | | `stripe_secret_key`, `stripe_webhook_secret` | `payments.stripe` | | `paypal_client_secret` | `payments.paypal.client_secret` | | `binance_api_key`, `binance_api_secret` | `payments.crypto` | | `sepay_api_token`, `sepay_webhook_secret` | `payments.bank` | | `ai_provider_key` | `ai_provider.api_key` | ## ファイルの例 {#example-file} ```yaml # NexCMP configuration. Preview: nexcmp config plan -f nexcmp.yaml version: 1 branding: name: Example Cloud primary: "#1677ff" currency: usd seller_name: Example Cloud LLC settings: brand_name: Example Cloud support_email: support@example.com default_lang: en invoice_prefix: EX company_name: Example Cloud LLC company_address: "1 Example Street, New York, NY" min_topup_cents: 500 email: smtp: host: smtp.example.com port: 587 security: starttls username: mailer@example.com password: secret://smtp_password from_email: no-reply@example.com from_name: Example Cloud reply_to: support@example.com telegram: enabled: true chat_id: "123456789" bot_token: secret://telegram_bot_token modules: s3: true k8s: false currency: site_currency: usd manual_rate_vnd: 0 # 0 = automatic payments: stripe: mode: test publishable_key: pk_test_XXXX secret_key: secret://stripe_secret_key webhook_secret: secret://stripe_webhook_secret bank: bank_code: BANK account_number: "0000000000" account_name: EXAMPLE CLOUD LLC prefix: EX api_token: secret://sepay_api_token channels: pay_card_enabled: true quotas: quota_enabled: true quota_max_vms_24h: 5 quota_max_vms_30d: 30 zones: - slug: new-york name: New York country: US city: New York enabled: true is_default: true plans: - slug: vps-1c-1g name: 1 vCPU, 1 GB RAM, 25 GB cpu: 1 ram_mb: 1024 disk_gb: 25 hourly_usd: 0.0112 cs_offering_id: OFFERING_ID enabled: true visible: true ai_provider: enabled: true name: Example AI base_url: https://api.example.com/v1 model: example-model fallback_models: [example-model-mini] reasoning_effort: low api_key: secret://ai_provider_key legal: terms: en: | # Terms of service Your terms in simple markdown (no HTML). privacy: en: | # Privacy policy Your policy in simple markdown (no HTML). ``` ファイルには任意のセクションのサブセットを含めることができます。省略したセクションは変更されません。1MBを超えるファイル、`version: 1` の欠落、異なるバージョン番号、または不明なセクションがある場合、処理が実行される前に拒否されます。 ## セクション {#sections} | セクション | 制御内容 | 備考 | |---|---|---| | `branding` | ブランド名(60文字まで)、プライマリカラー、表示通貨(`usd` または `vnd`)、販売者名。 | ロゴはファイルに含まれません。[branding page](https://nexcmp.com/ja/docs/customers/branding/) を使用してください。 | | `settings` | 一般設定の固定リスト: `brand_name`、`support_email`、`support_telegram_url`、`default_lang`、`require_email_verified`、`min_topup_cents`、`max_topup_cents`、`invoice_prefix`、`company_name`、`company_address`、`company_tax_id`、`auto_destroy_days`、`low_balance_cents`。 | その他のキーは無視されます。 | | `email.smtp` | SMTPホスト、ポート、セキュリティ(`starttls`、`tls`、`none`)、ユーザー、パスワード、送信者名とアドレス、返信先。 | [SMTP and e-mail templates](https://nexcmp.com/ja/docs/administration/smtp-and-emails/)。ホスト、ポート、またはセキュリティを変更する場合は、パスワードを再度入力する必要があります。 | | `telegram` | アラートチャネルの有効/無効、チャット ID、ボットトークン。 | [Telegram notifications](https://nexcmp.com/ja/docs/administration/telegram-notifications/)。 | | `modules` | オプションモジュールの有効/無効(`key: true/false`)。 | パネルで切り替え可能なキーのみ。[Modules](https://nexcmp.com/ja/docs/infrastructure/modules/)を参照してください。 | | `currency` | 表示通貨と手動の USD/VND レート(`0` は自動、それ以外は 15000 から 50000)。 | 課金セクション。[Currency and exchange rates](https://nexcmp.com/ja/docs/catalog/currency-and-exchange-rates/)を参照してください。 | | `payments` | `stripe`、`paypal`、`crypto`、`bank` の資格情報と `channels` のスイッチ(`pay_card_enabled`、`pay_wallets_enabled`、`pay_alipay_enabled`、`pay_paypal_enabled`、`pay_usdt_enabled`、`pay_sepay_enabled`)。 | 課金セクション。[Payment channels](https://nexcmp.com/ja/docs/billing/payment-channels/)を参照してください。 | | `quotas` | `quota_*` の制限。 | [Quotas](https://nexcmp.com/ja/docs/billing/quotas/)を参照してください。 | | `zones` | `slug` によるゾーン(必須:`slug`、`name`、`country`;任意:`city`、`enabled`、`is_default`)。 | 新しいゾーンが作成されます。既存のゾーンはファイルによって**変更されません**。[Zones](https://nexcmp.com/ja/docs/infrastructure/zones/)を参照してください。 | | `plans` | `slug` によるプラン(必須:`slug`、`name`、`cpu`、`ram_mb`、`disk_gb`、`hourly_usd`;任意:`cs_offering_id`、`backend_id`、`zone_id`、`enabled`、`visible`、`sort`、`description`)。 | 課金セクション。新しいプランが作成され、既存のプランはスラッグによって更新されます。価格は 1 時間あたりの USD です。[Plans](https://nexcmp.com/ja/docs/catalog/plans/)を参照してください。 | | `ai_provider` | カスタマー向けの AI Chat および AI Agent で使用されるパネルの AI プロバイダー。 | [AI provider](https://nexcmp.com/ja/docs/ai/ai-providers/)。 | | `legal` | 言語ごとの利用規約およびプライバシーのテキスト(`en`、`vi`)。 | [Legal pages](https://nexcmp.com/ja/docs/customers/legal/)。 | 適用の順序は上記の通りです。インフラストラクチャ関連の項目がプランの前に処理されます。 ## 覚えておくべきルール {#rules-to-remember} - **べき等性。** 同じファイルを二度適用しても、2 回目は何も変更されません。`plan` に「No changes」と表示されます。 - **削除なし。** このファイルによってゾーン、プラン、設定が削除されることはありません。ファイルからエントリを削除しても、パネルの状態はそのまま維持されます。 - **通常の安全性に関するルールが引き続き適用されます。** コマンドラインからの各変更は、API の変更と同じチェック(スコープや IP ルール)を通過します。確認が必要な変更(サイト全体の設定スイッチなど)は、適用される代わりに `pending` のもとでプレビュー付きで報告されます。ただし `--confirm-billing` を渡した場合は、それらがすべて確認済みとして処理されます。 - **AI クライアントで課金を解除することはできません。** MCP クライアントから `config_apply` が呼び出された場合、`confirm_billing` は無視され、金銭に関する変更はユーザーの承認待ちとなります。 - **適用前に確認する。** JSON Schemaにはすべてのフィールドが記述されています。エディターで参照するか、AI に渡して有効な YAML を作成させてください:`https://cloud.example.com/v1/admin/agent/config/schema.json`(一般公開)。 ### 課金セクション {#billing-sections} `payments`、`currency`、`plans` は価格や金銭のパスを変更します。`nexcmp config apply --yes` は、`--confirm-billing` を追加しない限りこれらを**スキップ**します。スキップされた項目は `skipped`(「billing section - pass confirm_billing」)の下に一覧表示されます。このフラグは確認を意味します。これを指定すると、ファイル内のすべての課金に関する変更(および確認を求めるその他の変更)が、再確認なしで適用されます。最初に `plan` を実行し、`$` とマークされた各行を確認してください。 AI(MCP クライアントまたは AI Chat 内の `config_apply` ツール)によって同じファイルが適用された場合、フラグは無視され、金銭に関する変更はユーザーの承認待ちとなります。 ## Import/Export ページの使用 {#use-the-import-export-page} 1. **System › Settings › Import/Export** を開きます。 2. **Export** で **Get current configuration** をクリックし、**Download .yaml** をクリックして `nexcmp.yaml` を保存します。シークレットはプレとして表示されます。 3. **Import** でファイルを選択するか、ボックスにドラッグするか、YAML を貼り付けます。 4. オプション:**Secrets that come with it (not in the file)** を開き、各参照の名前と値を追加します(例:`smtp_password`)。 5. **Preview changes** をクリックします。テーブルでは変更内容がセクションごとにグループ化され、金銭関連のセクションには「Money-related」タグが付与されます。不要なセクションのチェックを外してください。 6. 金銭関連のセクションがリストされている場合は、**Also apply money-related changes (prices, payment gateways, balances)**にチェックを入れます。チェックを入れないとスキップされます。 7. **Apply selected**をクリックします。結果には、適用されたもの、スキップされたもの、失敗したものが表示されます。確認待ちとして返された変更は確認カードとして表示されるため、その上の**Confirm**を押します。 右上の**JSON Schema**ボタンでスキーマが開きます。 ![ExportカードとエクスポートされたYAMLを保持するImportカードが表示されたImport/Exportページ](https://nexcmp.com/ja/docs/images/configure-with-ai/config-as-code-01-import-export.webp) ![課金タグとApply selectedボタンを持つ、セクションごとにグループ化された変更のプレビューテーブル](https://nexcmp.com/ja/docs/images/configure-with-ai/config-as-code-02-preview.webp) ## コマンドラインから任意のツールを実行する {#run-any-tool-from-the-command-line} `nexcmp admin`はAIアシスタントと同じツール([the tool list](https://nexcmp.com/ja/docs/configure-with-ai/mcp-admin/#tools))を実行し、JSONを出力します: ```bash sudo nexcmp admin tools # name, scope and title of every tool sudo nexcmp admin system_health sudo nexcmp admin customers_search q=customer@example.com sudo nexcmp admin settings_update --json '{"values":{"support_email":"support@example.com"}}' ``` 引数は`key=value`ペア(値は解析できる場合はJSONとして、それ以外はテキストとして読み込まれます)または1つの`--json '{...}'`オブジェクトです。アクションに確認が必要な場合、コマンドはプレビューを表示し、終了コード3と「Nothing changed」で停止します。プレビューを確認し、`--yes`を指定して同じコマンドをもう一度実行して適用します。rootとして実行すると、コマンドはすべてのスコープを持つ15分間のキーを取得するため、確認ステップが保護機能となります。`NEXCMP_KEY`を指定すると、キー自体のスコープが適用されます。 ## 確認 {#verify} 1. `sudo nexcmp config plan -f nexcmp.yaml`の直後の`apply --yes`は「No changes」を出力します。 2. 管理画面では、変更したページに新しい値が表示され、**Logs › Admin actions**に変更がリストされます。 3. 同じファイルを再度適用しても何も変更されません。 ## 制限と注意事項 {#limits-notes} - ファイルが対象とするのは上記の設定であり、顧客、サーバー、請求書、インフラストラクチャソース(CloudStackおよびProxmoxの接続)は対象外です。これらは[AI Chat](https://nexcmp.com/ja/docs/configure-with-ai/ai-chat-in-admin/)または管理画面で接続してください。 - ゾーンとプランは`slug`でマッチングされます。ファイル内のスラッグの名前を変更しないでください。変更すると新しいアイテムとして作成されてしまいます。 - すでに顧客が使用しているプランのサイズを変更することはできません。代わりに新しいプランを作成してください。 - エクスポートされたファイルには機密情報が含まれていない場合でも、価格、住所、アカウント名がリストされているため、非公開に保ってください。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | `missing version: 1` | ファイルが`version: 1`で始まっていない | 追加してください。 | | `unsupported version 2` | ファイルのバージョン番号が異なっている | このパネルはバージョン1のみを読み取ります。 | | `unknown section 'x' (known: ...)` | スペルミスのある、またはサポートされていないトップレベルキー | 上記のセクションを使用してください。 | | `YAML error: ...` | 無効なYAML(インデント、タブ) | メッセージに示されている行を修正してください。 | | `config is larger than 1 MB` | ファイルが大きすぎます | 分割して`--section`を使用してください。 | | `no API key: set NEXCMP_KEY=ak_... or run as root on the server` | コマンドがキーを見つけられませんでした | `sudo`を指定して実行するか、`NEXCMP_KEY`をエクスポートしてsudoで保持してください。 | | `panel not reachable` | パネルサービスがデフォルトポートで実行されていません | `sudo nexcmp status`を確認してください。 | | `skipped`の下の課金行 | 課金セクションには`--confirm-billing`が必要です | フラグを追加し、最初に`$`行を確認してください。 | | `pending`の下のアイテム | 変更の確認が必要です | **API & AI agents**を開くか、Import/Exportの結果を開き、カードの**Confirm**を押します。 | | シークレットが更新されませんでした | `NEXCMP_SECRET_`の値が設定されなかったため、保存されたシークレットが維持されました | 変数をエクスポートして再度適用してください。 | | `errors` 下のエントリ、HTTP 403 `insufficient_scope` | キーにそのセクションのスコープがありません | スコープを持つキーを使用するか、rootとして実行してください。 | | `errors` 下のエントリ、HTTP 403 `demo_read_only` | デモパネル | 実際のインストール環境で適用します。 | --- # プロンプトの例 {#example-prompts} > **管理画面での場所:** AI Chat(`/agent`)または任意の管理画面ページのフローティングの**Ask AI**ボタン。[MCP](https://nexcmp.com/ja/docs/configure-with-ai/mcp-admin/)経由で接続された任意のAIクライアントでも同じプロンプトが動作します。 ## 動作内容 {#what-it-does} これらのプロンプトは質問の仕方の例を示しています。それぞれ、アシスタントが裏側で実行する処理、必要なスコープ(外部クライアントまたはキーの場合)、および承認を求められる場所が記載されています。例の値を独自の値に置き換えてください。 ::: tip チャットテキストに機密情報を入力しないでください パスワード、APIキー、トークンには、AI Chat入力欄の隣にある**Secret**フィールドを使用します([詳細](https://nexcmp.com/ja/docs/configure-with-ai/ai-chat-in-admin/#secrets))。AIには値そのものではなく、機密情報を表すプレースホルダーのみが表示されます。外部AIクライアントを使用する場合、機密情報は経由するため、管理画面での入力を優先してください。 ::: ## 現在の状態を確認する {#check-where-you-are} ```text Check my setup progress and tell me the next three things to do, in order. ``` アシスタントは`setup_checklist`と`system_health`を呼び出し(スコープ`admin:read`)、実際の状態に基づいて回答します。[Setup progress checklist](https://nexcmp.com/ja/docs/configure-with-ai/setup-checklist/)を参照してください。 ## 初期セットアップ {#first-setup} ```text Help me finish the initial setup. Go through the checklist, explain each open step in one sentence, ask me for what you need, and show me every change before it is applied. ``` これはMCPプロンプト`initial-setup`と同じです。`admin:read`および受け入れる手順のスコープが必要です。AI Chatでの各変更に対して確認カードが表示されます。 ## Proxmox VEクラスターの追加 {#add-a-proxmox-ve-cluster} ```text I want to sell servers from my Proxmox VE cluster at https://pve.example.com:8006. Add it, test the connection, create a zone called "New York" in the US, attach the cluster to it, and then propose starter plans. ``` 処理内容: 1. アシスタントはAPIトークンID(`user@realm!tokenid`)とそのシークレットを要求します。シークレットを**Secret**フィールドに入力してください。最初に制限付きトークンを作成します:[Proxmox VE](https://nexcmp.com/ja/docs/infrastructure/proxmox/)。 2. `proxmox_add`、`proxmox_test`、`zone_create`、`proxmox_attach_zone`を呼び出します。 3. `plans_from_offerings`を使用してプランを提案し、承認を待ちます(次の例を参照)。 スコープ:`infra:write`、`secrets:write`、`catalog:write`、`admin:read`。 ## 40%のマージンを持つプランテーブルの作成 {#create-a-plan-table-with-a-40-margin} ```text Suggest a starter plan table from my CloudStack offerings. My costs are $4 per vCPU per month, $2 per GB of RAM per month and $0.08 per GB of disk per month. Use a 40% margin, show me the table with cost, price per month and price per hour, and create the plans only after I approve. ``` アシスタントは`plans_from_offerings`を呼び出し、`margin_pct` 40と原価を指定します。マージンとは販売価格に占める利益の割合です。40%の場合、原価$60のプランは$100で販売されます。最初の呼び出しではプレビューのみが返されます。承認すると、ツールを`apply=true`で再度呼び出します。これによりプランがワンステップで作成され、価格が関係するため1回の確認が求められます。Proxmoxの場合、`backend_id`とデフォルトのサイズリスト(1、2、2、4 vCPU)を使用します。スコープ: `catalog:write`、`admin:read`。[Plans](https://nexcmp.com/ja/docs/catalog/plans/)を参照してください。 ![コスト、月額料金、時間額料金のプランプレビューテーブルを表示するAI Chatの回答](https://nexcmp.com/ja/docs/images/configure-with-ai/example-prompts-01-plan-preview.webp) ## メールの設定とテストメッセージの送信 {#configure-email-and-send-a-test-message} ```text Configure outgoing email with smtp.example.com, port 587, STARTTLS, user "mailer@example.com", sender name "Example Cloud", sender address "no-reply@example.com". Use my Secret field for the password "smtp_password". Then send a test email to admin@example.com. ``` アシスタントは`smtp_get`、`smtp_configure`、`smtp_test`を呼び出し、メッセージが受け付けられたかどうかを伝えます。スコープ:`settings:write`、`secrets:write`。[SMTP and e-mail templates](https://nexcmp.com/ja/docs/administration/smtp-and-emails/)を参照してください。 ## Stripeの設定 {#set-up-stripe} ```text Set up Stripe in test mode. My publishable key is pk_test_XXXX. Use the secret key and the webhook secret from my Secret field (names stripe_secret_key and stripe_webhook_secret). Then test the credentials and tell me which webhook URL I must add in Stripe. ``` `payment_configure`は常に2段階のアクションです:シークレット値がマスクされたプレビューが表示され、それを承認します。その後、`payment_test`がStripeで資格情報を確認します。スコープ:`billing:write`、`secrets:write`。テスト決済が成功した後にのみライブモードに切り替えてください。[Stripe](https://nexcmp.com/ja/docs/billing/stripe/)を参照してください。 ## Telegramアラートを有効にする {#turn-on-telegram-alerts} ```text Add my Telegram chat 123456789 for admin alerts. The bot token is in my Secret field as telegram_bot_token. Send a test message. ``` アシスタントは`telegram_configure`と`telegram_test`を呼び出します。スコープ:`settings:write`、`secrets:write`。[Telegram notifications](https://nexcmp.com/ja/docs/administration/telegram-notifications/)を参照してください。 ## 顧客の検索とクレジットの追加 {#find-a-customer-and-add-credit} ```text Find the customer with e-mail customer@example.com, show me their balance and servers, and add $10.00 of credit because of the outage on Monday. ``` アシスタントは`customers_search`と`customer_get`(読み取り専用)を呼び出した後、`customer_adjust_balance`に`delta_cents` 1000と理由を指定して呼び出します。これには**必ず**承認が必要です:確認カードには「顧客残高を変更します」と表示され、金額と監査ログに記録される理由が表示されます。スコープ:`admin:read`、`billing:write`。 ## 設定のエクスポート {#export-my-configuration} ```text Export my whole configuration as YAML. Do not include secrets. Then tell me which settings differ from a typical new installation. ``` アシスタントは`config_export`を呼び出します。シークレットは`secret://`参照に置き換えられます。結果を`nexcmp.yaml`として保存し、バージョン管理で保管してください。[Configuration as code](https://nexcmp.com/ja/docs/configure-with-ai/config-as-code/)を参照してください。スコープ:`admin:read`。 ## 効果的なプロンプトの作成 {#write-good-prompts} - 目的と事実(名前、価格、メールアドレスなど)を伝えてください。機密情報を貼り付けないでください。 - 費用が発生する操作やデータを削除する操作については、事前にプレビューを求めてください。 - アシスタントに「変更する前に現在の値を読み取る」よう依頼してください。組み込みの指示ですでに指定されています。 - 回答がおかしいと感じた場合は、「どのツールをどのような引数で呼び出しましたか?」と尋ねてください。AI Chatのツールカードに両方が表示されます。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | アシスタントが「そのようなツールはない」と答える | そのツールのスコープが許可されていないか、アクションがAIに対して禁止されています | [Admin API keys](https://nexcmp.com/ja/docs/configure-with-ai/admin-api-keys/#what-a-key-can-never-do)を確認するか、管理画面で行ってください。 | | パスワードの入力を求めてくる | モデルが指示を無視した | 拒否し、Secretフィールドを使用するか、管理画面で値を入力してください。 | | 「do it」を実行しても何も変わらない | 変更が確認待ちの状態になっている | 確認カードまでスクロールし、**Confirm**を押してください。 | | 予期しない価格でプランが作成された | プロンプト内のコストまたはマージンが間違っていた | Plansページでプランを編集するか、アシスタントに価格の再設定を依頼してください。価格変更には確認が必要です。 | --- # セットアップ進捗チェックリスト {#setup-progress-checklist} > **管理画面の場所:** Overview › Dashboard (`/`)、上部の **Setup progress** カード。Plans、Customers、Zones、Payments、Infrastructureのリストが空の場合も同様のヘルプが表示されます。 ## 動作内容 {#what-it-does} 新規インストールでは、最初のお客様が注文して支払いを行うまでに10の項目の準備が必要です。**Setup progress**カードは実際の構成からそれらの状態をチェックし、完了した数、**次のステップ**の名称、および設定を行うページへのリンクを表示します。AIソースが接続されている場合、**Do it for me**をクリックすると、そのステップに関する質問が入力された状態で[AI assistant](https://nexcmp.com/ja/docs/configure-with-ai/ai-chat-in-admin/)が開きます。アシスタント(および[MCP](https://nexcmp.com/ja/docs/configure-with-ai/mcp-admin/)経由のAIクライアント)は、`setup_checklist`ツールを使用して同じリストを読み取ることができます。 ## 10のステップ {#the-ten-steps} | # | ステップ | 完了とみなされる条件 | 設定を行う場所 | |---|---|---|---| | 1 | ライセンス有効 | ドメインに対してライセンスがアクティベートされている | System › Admin › License & updates (`/license`)。[License and purchase](https://nexcmp.com/ja/docs/getting-started/license-and-purchase/)を参照してください。 | | 2 | インフラストラクチャソースの接続 | CloudStackが接続されているか、少なくとも1つのProxmox VEクラスターが追加されている | Infrastructure › Cloud provider › Providers (`/infra/providers`)。[CloudStack](https://nexcmp.com/ja/docs/infrastructure/cloudstack/)および[Proxmox VE](https://nexcmp.com/ja/docs/infrastructure/proxmox/)を参照してください。 | | 3 | ゾーンの作成 | 少なくとも1つのゾーンが存在する | Infrastructure › Datacenter › Zone (`/infra/zones`)。[Zones](https://nexcmp.com/ja/docs/infrastructure/zones/)を参照してください。 | | 4 | OSテンプレート | 少なくとも1つのテンプレートが有効になっている | Services › Virtual Machines › Plans & pricing、タブ Templates (`/vm/catalog?tab=templates`)。[OS templates](https://nexcmp.com/ja/docs/infrastructure/templates/)を参照してください。 | | 5 | プランの作成 | 少なくとも1つのプランが有効になっている | Services › Virtual Machines › Plans & pricing (`/vm/catalog`)。[Plans and pricing](https://nexcmp.com/ja/docs/catalog/plans/)を参照してください。 | | 6 | 決済の設定 | Stripe、PayPal、暗号資産、または銀行振込が構成されている | Finance › Payment channels (`/payments`)。[決済チャネル](https://nexcmp.com/ja/docs/billing/payment-channels/)をご覧ください。 | | 7 | Email (SMTP) | 送信メールが設定されていること | System › Settings › Email (`/settings/email`)。[SMTPとメールテンプレート](https://nexcmp.com/ja/docs/administration/smtp-and-emails/)をご覧ください。 | | 8 | ブランディング | ロゴがアップロードされている、またはブランド名がデフォルトから変更されていること | System › Settings › Brand (`/settings/branding`)。[ブランディング](https://nexcmp.com/ja/docs/customers/branding/)をご覧ください。 | | 9 | 利用規約とプライバシー | 少なくとも1つの法的文書が入力されていること | System › Settings › Legal (`/settings/legal`)。[法務ページ](https://nexcmp.com/ja/docs/customers/legal/)をご覧ください。 | | 10 | テスト注文を行う | 少なくとも1つの注文が存在すること | すべてが正常に動作するか確認するため、カスタマーポータルで顧客として注文を行います。カードはBillingページ(`/billing`)にリンクしています。 | カードには`done/total`(例: 6/10)、プログレスバー、**Open**付きの次のステップが表示され、AIソースが接続されている場合は**Do it for me**が表示されます。ステップをクリックするとそのページにジャンプします。ステップの横にある小さなリンクから対応するドキュメントページが開きます。一部のステップには「2 zone(s)」などの詳細も表示されます。 ![10ステップ中3ステップが完了し、OpenおよびDo it for meボタンが表示されたOverviewのセットアップ進捗カード](https://nexcmp.com/ja/docs/images/configure-with-ai/setup-checklist-01-card.webp) ## 使用方法 {#use-it} 1. Overviewを開きます。カードは上部に配置されています。矢印を使用して折りたたむと、ブラウザが選択を記憶します。 2. **Open**をクリックして次のステップのページに移動するか、**Do it for me**をクリックします。 3. **Do it for me** を使用すると、アシスタントは「提供内容から40%のマージンのスタータープランテーブルを提案し、作成する前にプレビューを表示してほしい」といったリクエストとともに開きます。その質問に答え、内容を確認してから各カードの **Confirm** を行います。[AI Chat in the admin](https://nexcmp.com/ja/docs/configure-with-ai/ai-chat-in-admin/) を参照してください。 4. 10ステップすべてが完了すると、カードは消えます。 ### 空のリスト {#empty-lists} Plans、Customers、Zones、Payments、またはInfrastructureが空の場合、ページには**Next step**ブロックが表示されます。ここには説明、アクション用ボタン、**Do it for me**、ドキュメントへのリンクが含まれるため、空のテーブルで操作に迷うことはありません。 ![次のステップの説明とDo it for meボタンが表示された空のPlansページ](https://nexcmp.com/ja/docs/images/configure-with-ai/setup-checklist-02-empty.webp) ## 自分の言葉で依頼する {#ask-for-it-in-your-own-words} カードは必要ありません。AI Chatまたは接続されたAIクライアントで次のように質問できます: ```text Check my setup progress and take me through the open steps, one at a time. ``` これはMCPプロンプト`initial-setup`でもあります。アシスタントは`setup_checklist`を呼び出し、未完了の各ステップが重要である理由を説明し、必要な情報を求めて一致するツールを使用します。必要なスコープ:リストを読み取るための`admin:read`、および完了させたいステップのスコープ。[プロンプト例](https://nexcmp.com/ja/docs/configure-with-ai/example-prompts/)をご覧ください。 ## 確認 {#verify} 1. ステップを完了すると、次にOverviewが読み込まれたときにカードのカウントが増加します。 2. アシスタントでは、`setup_checklist`で同じ数値が返され、完了したステップには`done: true`が表示されます。 ## 制限と注意事項 {#limits-notes} - チェックは動作するかどうかではなく、保存されている内容を確認します。設定されたゲートウェイは、そのテストが失敗した場合でも完了としてカウントされます。各ページの**Test**ボタンと、問題解決のための`system_health`ツールを使用してください。 - カードは管理者専用です。 - **Do it for me**にはSystem › Settings › AI accountsで接続されたAIソースが必要です。接続されていない場合は**Open**のみが表示されます。 - 10ステップはどのインストールでも同じです。使用する予定のないステップ(プライベートクラウド上の決済など)も未完了としてカウントされます。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | カードが表示されない | 10ステップすべてが完了している、またはカードを読み込めなかった | 概要を再読み込みします。状態を確認するには、AI Chatで `setup_checklist` と質問してください。 | | 実行したにもかかわらずステップが未完了のままになる | 保存が完了していないか、条件がまだ満たされていません(例:テンプレートは存在するが無効になっている場合など)。 | ステップのページを開き、上の表を確認してください。 | | ロゴの変更後もブランディングが開いたままになる | ロゴが存在するか、ブランド名がデフォルトの「NexCMP」と異なる場合にカウントされます。 | ロゴをアップロードするか、独自の名称を設定してください。 | | **Do it for me** が何も動作しない | AIソースが接続されていないか、デモパネルである場合 | AIアカウントでソースを接続してください。 | --- # SMTPとメールテンプレート {#smtp-and-e-mail-templates} > **管理画面の場所:** System › Settings › Email (`/settings/email`) — **SMTP**タブと**Email templates**タブ。配信ログ:Overview › Support › Sent emails (`/support/emails`)。 ## 動作内容 {#what-it-does} NexCMPは、サインアップ認証、パスワードリセット、「VM準備完了」(初期パスワード付き)、請求書、残高不足、更新、トップアップ、サポート返信などのメールを送信します。これらはすべて**お客様が用意した1つのSMTPアカウント**を経由して送信されます。メッセージとテンプレートは16言語に対応しており、顧客の言語が使用されます。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | SMTPサーバー | 任意のプロバイダーのホスト、ポート、および認証情報(自社サーバー、Brevo、Amazon SES、Mailgun、Google Workspaceなど) | | ネットワーク | NexCMPサーバーからSMTPホストおよびポート(587 STARTTLS、465 TLS、または25)への外向きTCP | | 送信元ドメイン | プロバイダー向けに**SPFとDKIM**が公開されており、DMARCレコードが設定されている、お客様が管理するドメイン | | 権限 | SMTPアカウントに**From**アドレスとしての送信が許可されている必要があります。 | ::: warning 到達性 「VM準備完了」などのメールにはパスワードが含まれています。送信元ドメインのSPF/DKIM/DMARCがSMTPプロバイダーと一致しない場合、迷惑メールとして判定されます。このページではその点について注意を促しています。 ::: ## メールプロバイダーの準備 {#prepare-the-e-mail-provider} 1. プロバイダーのパネルで送信ドメインを追加し、検証します(例:`example.com`)。 2. プロバイダーに表示されるSPF、DKIM、DMARCのDNSレコードを公開します。 3. SMTPユーザー(またはAPI-SMTPキー)を作成し、ホスト、ポート、ユーザー名、パスワードを控え置きます。 ## NexCMP での接続 {#connect-in-nexcmp} 1. **System › Settings › Email**を開き、**SMTP**タブを選択します。 2. フォームに必要事項を入力します: | 項目 | Example | 備考 | |---|---|---| | ホスト | `smtp.example.net` | SMTPサーバー | | ポート | `587` | | | セキュリティ | STARTTLS (587) | プロバイダーが必要とするモードを選択します | | ユーザー名 | `smtp-user` | | | パスワード | (非表示) | 書き込み専用:設定されているかどうのみが表示されます | | 送信元メールアドレス | `no-reply@example.com` | プロバイダーで承認されている必要があります | | 送信元名 | `Example Cloud` | デフォルトではブランド名が使用されます | | 返信先(オプション) | `support@example.com` | 顧客からの返信の宛先 | ![ホスト、ポート、セキュリティ、ユーザー名、送信元フィールド、「Send test」ボタンがあるSettingsのSMTPタブ](https://nexcmp.com/ja/docs/images/administration/smtp-and-emails-01-smtp.webp) 3. **Save**をクリックし、**Send test**をクリックしてご自身のメールアドレスを入力します。 設定はアクセス権が制限されたファイル(`smtp.json`、モード 0600)に保存され、メールの送信はバックグラウンドワーカー `nexcmp-vmd` のみが行い、Webサービスはキューイングのみを行います。 ## 確認 {#verify} - テストメッセージが受信トレイに届きます(迷惑メールフォルダもご確認ください)。メッセージのソースで `dkim=pass` と `spf=pass` を確認します。 - **Support › Sent emails** を開きます。各メッセージにはステータス(queued、sent、failed)と配信結果が表示されます。失敗したメッセージは最大3回まで再試行されます。 - ポータルでテスト顧客を登録し、確認メールが届くことを確認します。 ## メールテンプレートの編集 {#edit-e-mail-templates} タブ **Email templates** には、すべてのテンプレートがキーごとに、対応する言語(例: `verify_email`、`reset_password`、`vm_ready`、`invoice_paid`、`low_balance`、`topup_received`、`ticket_reply`、`scale_up` …)とともに一覧表示されます。 1. テンプレートをクリックし、言語を選択します。 2. 件名と本文を編集します。プレースホルダーはメッセージがキューに入れられたときに値に置き換えられます。 3. 保存します。変更は、その後キューに入れられるメッセージに**直ちに**適用されます。 ![テンプレートのキーとその言語が一覧表示される Email templates タブ](https://nexcmp.com/ja/docs/images/administration/smtp-and-emails-02-templates.webp) ## 制限と注意点 {#limits-and-notes} - 1つのインストールにつき1つのSMTPアカウントとなります。リセラーの顧客は、リセラーが個別に設定されていない限り、同じアカウントを通じてメールを受信します。 - プロバイダーの送信制限が適用されます。NexCMP側では再試行以外のスロットリングは行いません。 - SMTPなしでもパネルは機能しますが、顧客によるサインアップの確認やパスワードリセットを完了できません。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | テストメールが届かない | 認証情報の誤り、ポートのブロック、送信者未承認 | `journalctl -u nexcmp-vmd` でSMTPエラーを確認し、STARTTLSを指定してポート587を試し、プロバイダー側でFromアドレスを確認してください。 | | メッセージが迷惑メールフォルダに入る | SPF/DKIM/DMARCが未設定、または設定が不整合 | プロバイダーのレコードを公開し、そのドメインから送信してください。 | | Sent emails で "failed" になっている | プロバイダーによってメッセージが拒否された | 行を開いてプロバイダーからの応答を確認してください。 | | 保存後にパスワード欄が空に見える | 仕様上の動作です(書き込み専用) | パスワードが保存されると、ラベルに "current: set" と表示されます。 | --- # Telegramと管理者アラート {#telegram-and-admin-alerts} > **管理画面での場所:** System › Settings › Admin alerts (`/settings/alerts`)。サポートショートカット: Customers › Support › Tickets (`/support/tickets`)、タブ **Settings**。 ## 動作内容 {#what-it-does} NexCMPは、注意が必要な状況が発生したとき、および顧客のサインアップや入金の入金処理が行われたときに、オペレーターである**あなた**に通知します。アラートは、Telegram、Webhook、メールのいずれか1つ以上の**チャンネル**に送信されます。 管理者チャンネルに送信されるイベントには、デプロイ失敗、VMの消失、ネットワーク障害、空きIPが30未満、期限切れ間近のアイテム(1時間前の警告)、Stripeの異議申し立て、ワーカーの停止、クラスターRAMが閾値を超過、新規顧客のサインアップ、入金のクレジット処理が含まれます。顧客イベントは耐久キューに保存され、Telegramが受け入れるまで、遅延を増やしながら(30秒から最大1時間)再試行されます。 ## 要件 {#requirements} | 項目 | 要件 | |---|---| | Telegram | **@BotFather** で作成したボット(トークン)と、メッセージを受信するグループまたはユーザーの **chat ID** | | ネットワーク | `api.telegram.org` へのアウトバウンドHTTPS | | Webhook(代替) | アラートペイロードを受け付けるHTTPSエンドポイント | ## Telegramの準備 {#prepare-telegram} 1. Telegramで**@BotFather**を開き、`/newbot`を送信して名前を選び、**bot token**(`123456789:AA...`)をコピーします。 2. グループを作成し、そこにbotを追加して、任意のメッセージを送信します。 3. ブラウザで`https://api.telegram.org/bot/getUpdates`を開いて`chat.id`を確認し、**chat ID**を見つけます(グループIDは`-`で始まります)。 ## NexCMP での接続 {#connect-in-nexcmp} 1. **System › Settings › Admin alerts**を開きます。 2. **Add channel**で**Type: Telegram**を選択し、**Destination**にchat IDを、**Secret (bot token)**にトークンを設定します。**Add**をクリックします。 3. トグルスイッチ**Send admin Telegram (VM module)**がオンになっていることを確認します。*VM module status (read-only)*の行に「on」と表示されます。 ![Telegramに設定されたAdd channelフォームが表示されたAdmin alertsページ](https://nexcmp.com/ja/docs/images/administration/telegram-notifications-01-channel.webp) ## 確認 {#verify} チャンネルが**Configured channels**の下に表示されます。イベント(テスト顧客の登録など)をトリガーすると、メッセージがグループに届きます。チャンネルが設定されていない場合、ページには「Without a channel, attacks will go unnoticed」という警告が表示され、ログにはTelegramイベントがローカルにのみ記録されます。 ## 顧客向けサポートショートカット {#support-shortcuts-for-customers} カスタマーサポートウィジェットには、**Telegram**および**Zalo**ボタンを表示できます。サポート設定で構成されるまで非表示になります:Telegramの`https://t.me/...`リンクと、ZaloのリンクまたはQRコードを入力します。受け付けられるのは`https://`リンクのみです。サポートチャットでは、質問と回答のドラフトをTelegramグループに通知することもできます。[AI Chat](https://nexcmp.com/ja/docs/ai/ai-chat/)をご覧ください。 ## 制限と注意点 {#limits-and-notes} - botトークンはチャンネルとともに保存され、二度と再表示されません。 - Telegramイベントは、宛先とトークンの両方が設定されている有効な最初のTelegramチャンネルを使用します。 ## トラブルシューティング {#troubleshooting} | 症状 | 原因 | 対処法 | |---|---|---| | メッセージが届かない | チャットIDが間違っている、botがグループにいない、またはbotにメッセージが一度も送られていない | `getUpdates`を使用してIDを再確認します。最初にbotまたはグループにメッセージを送信してください。 | | しばらく動作した後に停止する | BotFatherでトークンが取り消された | 新しいトークンを作成し、チャンネルを更新します。 | | ログ内の`Telegram: no channel` | 有効なTelegramチャンネルがない | 上記のように追加します。 | --- # 監査ログとアクティビティ {#audit-log-and-activity} > **管理画面での場所:** System › Logs › Activity(`/logs`)、Admin actions(`/logs/admin`)、Console(`/logs/console`)、Login(`/logs/logins`)、VM events(`/logs/vm-events`);Overview › Support › Sent emails。 NexCMPはすべての重要なアクションを記録します。単一のタイムラインとして**Activity**ページを使用し、他のタブで絞り込みます。 ## タブ {#tabs} | タブ | コンテンツ | |---|---| | **Activity** | すべてのソースにわたる統合タイムライン:管理者アクション、VMイベント、ログイン、アフィリエイト、システムエラー | | **Admin actions** | 管理者が変更した内容(例:`customer.block`、`customer.delete`)、および管理者のIP | | **Console** | 管理コンソールへのサインイン、およびアップデートリクエストなどのシステムリクエスト | | **Login** | 顧客のサインインと失敗 | | **VM events** | 仮想マシンごとのデプロイ手順、作成、パスワード、破棄、その他のライフサイクルイベント | ## 行の読み方 {#reading-a-row} 列:**Time**、**Source**、**Level**、**Actor**(実行者)、**Target**、**Services**、**Action**(`customer.delete`などのイベントコード)、**Details**。完全なレコードを表示するには**Open**をクリックします。 ![タイムラインの上のソース、サイト、サービスのフィルターが表示されたアクティビティページ](https://nexcmp.com/ja/docs/images/administration/audit-log-01-activity.webp) ## フィルターと検索 {#filter-and-search} 1. ドロップダウンから**ソース**、**サイト**、**サービス**を選択します。 2. **From date** / **To date**の範囲を設定します。 3. 検索ボックスにイベントコード(例:`customer.block`や`destroy`)を入力します。アクティビティ検索はイベントコードに一致します。 ## 保持とエクスポート {#retention-and-exports} レコードは`/var/lib/nexcmp`内のNexCMPデータベースに保存され、[backups](https://nexcmp.com/ja/docs/getting-started/backup-and-restore/)に含まれます。保持期間はログによって異なります。180日より前の顧客サインイン試行および60日より前の顧客APIキーリクエストログはクリーンアップされます。管理者APIキー監査は、最大約200,000件の最新レコードを保持します。これらの制限は、統合アクティビティタイムラインにも同じ保持期間が適用されることを意味するものではありません。 ## 一般的な用途 {#common-uses} | 質問 | 確認場所 | |---|---| | この顧客を停止したのは誰ですか? | 管理者アクション、検索 `customer.block` | | VM が消えた原因は何ですか? | VM イベント、VM の ID でフィルター。アクティビティも確認 | | 顧客はメールを受信しましたか? | Overview › Support › Sent emails | | 最後のアップデートが要求されたのはいつですか? | Console タブ | --- # セキュリティ {#security} > **管理画面での場所:** System › Admin › Console security (`/account`)、Admin users (`/users`)、System › Settings › Customer logins (`/settings/login`)。 ## 管理コンソール {#admin-console} ### 二要素認証(TOTP) {#two-factor-authentication-totp} コンソールはインターネットからアクセスできるため、TOTPを有効にしてください。 1. **System › Admin › Console security**を開きます。 2. **Two-factor authentication (TOTP)**の下にある**Start setup**をクリックします。 3. Google Authenticator、Authy、1Password、BitwardenなどでQRコードをスキャンし、6桁のコードを入力します。 ### 許可されたコンソール IP 範囲 {#allowed-console-ip-ranges} **Allowed console IP ranges**に、1行につき1つのIPまたはCIDR(IPv4またはIPv6)を入力します。**空欄の場合はどこからでも許可されます。** 範囲外からのアクセスでは、サインインと管理 API の両方がブロックされます。 ::: warning アクセス不可の状態を防ぐ ページには現在の IP が表示され、新しいリストにそれを含める必要があります。**+ Add my IP** を使用してください。万が一ロックアウトされた場合は、サーバーから [emergency access](https://nexcmp.com/ja/docs/getting-started/cli-reference/#emergency-access) を使用してください。 ::: ### パスワードの変更 {#change-password} **Current password**、**New password**、**Confirm new password**を入力します。長くて一意のパスワードを使用してください(12文字以上。セットアップウィザードでは最初の管理者に12文字を強制します)。 ### 管理者アカウントとロール {#administrator-accounts-and-roles} **System › Admin › Admin users**を開き、**+ Create account**を使用します。 | ロール | アクセス権 | |---|---| | `admin` | 管理 API へのフルアクセス | | `staff` | システム全体の読み取り専用 | | `user` | 1 つの顧客リソースの読み取り専用ビュー | ルートアカウントは[setup wizard](https://nexcmp.com/ja/docs/getting-started/setup-wizard/)で作成されたものです。行のアクション: **Edit**、**Reset PW**、**Key**、**Delete**。パスワードはソルト付きハッシュとして保存され、アカウントの変更やロックを行うとセッションが即座に終了します。 ## 顧客サインイン {#customer-sign-in} **System › Settings › Customer logins**を開きます。 | 設定 | 動作内容 | |---|---| | **Google sign-in** | 有効にしてから、OAuthクライアントIDとシークレットを入力します。ページに表示されている **Callback URL** を *Google Cloud Console › APIs & Services › Credentials › OAuth client ID › Authorized redirect URIs* にコピーします。**Test configuration** を使用します。 | | **GitHub login** | 同様に、*GitHub › Settings › Developer settings › OAuth Apps › Authorization callback URL* を使用します | | **Passkey** | 指紋、PIN、またはハードウェアキーによるログイン。デフォルトで有効です。パスキーはドメインに紐付けられており、各リセラーのドメインは個別に動作します。リブランディング後に顧客が適切なヒントを得られるよう、*Legacy passkey Domain* に古いドメインを入力してください | | **サインイン方法の追加時に再認証する** | パスキーの追加やGoogle/GitHubの連携を行う前に、再度パスワードの入力を求めます(デフォルトでは無効) | | **Captcha** | サインアップ時にCloudflare TurnstileまたはGoogle reCAPTCHAを使用します。有効化し、プロバイダーを選択して、サイトキーとシークレットキーを入力します | | **Block e-mail domains** | 1行に1ドメイン(最大2000件)。一致するアドレスはサインアップ時に拒否されます(`email_domain_blocked` | ![GoogleサインインとコールバックURLが表示されたお客様ログインページ](https://nexcmp.com/ja/docs/images/administration/security-01-customer-logins.webp) ### 組み込みポリシー {#built-in-policies} | ポリシー | 値 | |---|---| | 顧客パスワード | 10文字以上、英字と数字を含める | | 顧客セッション | 30日間。「顧客としてログイン」セッションは1時間 | | メール認証 | 販売設定で *require e-mail verified* が有効な場合、VM作成前に必須 | | アンチカードング | 最低トップアップ額未満のアカウントは、作成できるVMの数が制限されます | ## サーバーのハードニング {#server-hardening} - セットアップとTLSの設定後、ポート3000は閉じられます。[Installation](https://nexcmp.com/ja/docs/getting-started/installation/#the-panel-port-3000) を参照してください。 - サービスは特権を持たない `nexcmp` ユーザーとして、制限されたsystemdサンドボックス内で実行されます。 - APIキー、決済資格情報、SMTPパスワードは暗号化されて保存されます。マスターキーは `/var/lib/nexcmp/secrets` にあります — [backups](https://nexcmp.com/ja/docs/getting-started/backup-and-restore/) を保護してください。 - リリースは、インストール前にSHA-256とEd25519署名で検証されます。 --- # 一般設定 {#general-settings} > **管理画面での場所:** System › Settings › General (`/settings`)。変更は即座に適用されます(30秒のキャッシュ)。 このページには3つのセクションがあります。 ## ブランディングとURL {#branding-urls} | 項目 | 用途 | |---|---| | ブランド名(メール、請求書) | メールや請求書に表示されます。ロゴとカラーは [Branding](https://nexcmp.com/ja/docs/customers/branding/) にあります | | デフォルト言語 | 新規訪問者の言語 | | 顧客アプリURL | ポータルの公開アドレス(例: `https://cloud.example.com`) | | コンソールURL | VMコンソールサービスのアドレス | | 管理画面URL | リセラーの顧客として「ログイン」するときに使用されるリンク | | パートナーコンソールURL | 招待リンク、リセラーからのメール、トップアップ後のリダイレクトで使用されます | ウィザードがドメインからこれらを自動入力します。ポータルを移動する場合にのみ変更してください。 ## 販売者と請求書 {#seller-invoicing} すべての請求書に印刷されます: | 項目 | Example | |---|---| | 法人の正式名称 | Example Cloud Ltd | | 税金ID | `TAX-000000` | | 住所 | 1 Example Street, New York | | 連絡先メールアドレス | `billing@example.com` | | 請求書番号のプレフィックス | `INV` (1〜8文字、A〜Zおよび0〜9) | 既存の請求書には発行時の販売者詳細と番号が保持され、変更は**新規**請求書のみに適用されます。 ## メンテナンスと地域 {#maintenance-region} **Customer app MAINTENANCE**を有効にすると、管理コンソールが機能している間、バナーが表示され、**すべての顧客の書き込みアクションがブロック**されます。顧客に表示される**Maintenance message**を入力してください。インフラストラクチャのアップグレード時に使用します。 ![ブランド名、デフォルト言語、URLフィールドが表示された「General settings」ページ](https://nexcmp.com/ja/docs/images/administration/general-settings-01-general.webp) ## その他の設定ページ {#other-settings-pages} | ページ | ガイド | |---|---| | Brand | [Branding](https://nexcmp.com/ja/docs/customers/branding/) | | Legal | [Legal](https://nexcmp.com/ja/docs/customers/legal/) | | Customer logins | [Security](https://nexcmp.com/ja/docs/administration/security/) | | Email | [SMTPとメールテンプレート](https://nexcmp.com/ja/docs/administration/smtp-and-emails/) | | Admin alerts | [Telegramと管理者アラート](https://nexcmp.com/ja/docs/administration/telegram-notifications/) | | AIプロバイダー | [AI providers](https://nexcmp.com/ja/docs/ai/ai-providers/) | --- # バグの報告 {#report-a-bug} > **管理画面での場所:** Top bar › **Report a bug**(Docs の横。メイン管理者のみに表示されます)。 NexCMPで不具合が見つかりましたか?**Report a bug**を押し、問題を記入して送信してください。報告はライセンスアカウントのチケットとしてNexCMPチームへ直接届きます。他の場所にログインしたり、手動でログファイルをコピーしたりする必要はありません。どのプランでも利用可能で、NexCMP FreeでもNexCMP Sourceでもバグ修正に対応しています。 ::: info バグ報告はサポート依頼ではありません NexCMP Freeにはテクニカルサポートが含まれていないため、このフォームはソフトウェアの不具合報告専用となります。セットアップ支援や移行作業は[NexCMP Source](https://nexcmp.com/pricing)に含まれています。 ::: ## 要件 {#requirements} | 項目 | 必要な要件 | |---|---| | Version | NexCMP 1.5.2以降 | | 送信可能な権限 | メイン管理者アカウント。スタッフアカウント(読み取り専用)、リセラーコンソール、顧客、および読み取り専用デモからは送信できません | | ライセンス | アクティベーション済みで停止されていないライセンス(FreeまたはSource) | | ネットワーク | サーバーからHTTPS経由で`https://nexcmp.com`へアクセス可能であること(ライセンス確認やアップデートで使用するアドレスと同じ) | ## レポートを送信する {#send-a-report} 1. トップバーの**Report a bug**をクリックします。スマートフォンの場合はメニューを開き、**Report a bug**を選択します。 2. 短い**Subject**を入力します。 3. **What happened**欄に、行った操作、表示された内容、および期待していた動作を記入します。 4. 必要に応じて**Steps to reproduce**(再現手順)を記入します。 5. **Impact**を選択します: **Blocking**(作業不可)、**Major**(主要機能の障害)、または**Minor**(軽微または表示上の問題)。 6. **Attach diagnostics**をオンのまま(推奨)にし、**What will be sent**枠の内容を確認します。 7. **Send report**をクリックします。 1.6.1では、スマートフォンを含め、アクションボタンが表示されたままフォーム本文がスクロールします。`password:`または`password=`に続くパスワードの値は、レポートの他の部分を削除することなくマスクされます。送信前に入力内容を確認し、顧客データや認証情報は除外してください。 ![タイトル、説明、影響度、および送信内容一覧が表示されたReport a bugダイアログ](https://nexcmp.com/ja/docs/images/administration/report-a-bug-01-dialog.webp) レポートが受理されると、ダイアログにチケット番号とリンクが表示されます。チームからの返信がある場合はnexcmp.comのライセンスアカウントのメールアドレスに届き、ライセンス所有者としてログインすると**Support**にもチケットが表示されます。 ## 送信される情報 {#what-is-sent} 送信をクリックする前に、**What will be sent**枠に以下の内容が正確に表示されます: | 送信項目 | 詳細 | |---|---| | 入力されたテキスト | 件名、説明、手順、影響度 | | バージョン、プラン、ドメイン | ご利用のNexCMPバージョン、FreeまたはSource、およびインストールのドメイン | | 現在のページ | 管理コンソールで開いているページ(`?`または`#`以降は除外) | | ブラウザ | ブラウザのユーザーエージェント文字列(ブラウザ名、バージョン、OS、最大200文字に切り詰め) | | 直近のエラー | このブラウザタブ内の最新5件までのエラー。スクリプトエラーはメッセージのみ、失敗したリクエストはメソッド、パス、ステータスコードのみ | **Attach diagnostics**をオフにすることも可能です。その場合、入力したテキストとバージョン、プラン、ドメインのみが送信されます。 ## 送信されない情報 {#what-is-never-sent} - パスワード、トークン、Cookie、APIキー。入力テキスト内やエラーメッセージに含まれるそれらに類似する文字列は、送信前にサーバー側で自動的にマスク処理(`***`または`[redacted]`と表示)されます。 - リクエストおよびレスポンスの内容 — 失敗したリクエストはメソッド、パス、ステータスのみが記録されます - 顧客データ(氏名、メールアドレス、注文、請求書)およびそのIPアドレス - ブラウザのIPアドレスおよびサーバー上のファイル。通常のライセンス確認と同様に、ライセンスサーバーにはサーバーの接続元IPアドレスのみが表示されます チケットはサーバーが保持するライセンス トークンによってインストール環境と紐付けられているため、バージョン、ドメイン、インストール環境の情報はサーバー側で設定され、ブラウザから変更することはできません。 ## 制限事項 {#limits} | 制限 | 値 | |---|---| | 件名 | 150文字 | | 説明および再現手順 | 合計8 KB | | レポート | インストール環境全体で1時間に5回、1日に20回まで | ネットワークエラー後などに同じレポートを2回送信しても、重複してチケットが作成されることはありません。 ## トラブルシューティング {#troubleshooting} | メッセージ | 原因 | 対処法 | |---|---|---| | 先にライセンスをアクティベートしてください | インストール環境でライセンスがアクティベートされていません | **License & updates** を開いてアクティベートしたうえで、再度送信してください | | ライセンスサーバーに接続できませんでした | サーバーが `nexcmp.com` にアクセスできません | サーバーからの送信HTTPS通信およびDNSを確認し、再度 **Send report** をクリックしてください(入力したテキストは保持されます) | | このインストール環境からのバグ報告が多すぎます | 1時間あたり5回、または1日あたり20回の上限に達しました | しばらく待ってから再試行するか、オープン状態の既存チケットに追加情報を追記してください | | このライセンスは停止されています | ライセンスが一時停止されているか、返金されています | [License and purchase](https://nexcmp.com/ja/docs/getting-started/license-and-purchase/) をご確認ください | | このインストール環境は失効しています | ライセンスポータルでこのインストール環境が無効化されました | **License & updates** から再度アクティベートしてください | | ライセンス トークンを更新できませんでした | サーバーがライセンス トークンを更新できませんでした | **License & updates** を開き、**Refresh** をクリックしたうえで、再度送信してください | | Report a bug ボタンが表示されない | スタッフ、リセラー、顧客アカウントでサインインしているか、読み取り専用デモを使用しています | メイン管理者としてサインインしてください | ::: tip AIアシスタントおよびAPIキーに関する注意 管理者画面のAIアシスタントおよび管理者APIキーから代理でバグ報告を送信することはできません。このボタンを使用するには、メイン管理者としてサインインした実ユーザーである必要があります。 ::: --- # インストールエラー {#installation-errors} インストーラーは最初のエラーで停止し、`✗`で始まる赤い行を出力します。原因を修正して**同じコマンドを再度実行してください**。インストーラーは何度実行しても安全です。情報メッセージは`•`で、成功したステップは`✓`で始まります。 ## マシンのチェック {#machine-checks} | メッセージ | 原因 | 対処法 | |---|---|---| | `must be run as root (sudo)` | root権限で実行されていません | コマンドの前に`sudo`を付けるか、rootとして実行してください。 | | `only Ubuntu 22.04/24.04 is supported (this host: …)` | 別のディストリビューションまたはバージョン | Ubuntu 22.04または24.04サーバーを使用してください。 | | `only x86_64 is supported` | ARMまたはその他のCPU | x86_64サーバーを使用してください。 | | `requires ≥ 2 GB RAM (host has … MB)` | メモリが不足しています | RAMを追加してください。 | | `requires ≥ 8 GB free disk space on / (… GB available)` | ルートファイルシステムの空き容量がほぼありません | 空き容量を確保するか、`/`を拡張してください。 | | `missing --license` / `missing --domain` | これらのパラメータを指定せずに最初にインストールしました | 両方を指定してください — [Installation](https://nexcmp.com/ja/docs/getting-started/installation/#parameters)を参照してください。 | | `unknown argument: …` | パラメータの入力ミス | スペルを確認し、`--help`を指定して実行してください。 | | `apt-get failed (another apt/dpkg process, e.g. unattended-upgrades, may still be running)` | パッケージマネージャーがロックされています | 数分待ってから(クリーンなUbuntuは起動後に自動アップデートを実行するため)、再実行してください。 | | `… is a symlink — aborting` | `/opt/nexcmp`または`/etc/nexcmp`がシンボリックリンクになっています | 実際のディレクトリに置き換えてください。セキュリティ上の理由から、インストーラーはシンボリックリンクを拒否します。 | ## ライセンス認証 {#license-activation} | メッセージ | 原因 | 対処法 | |---|---|---| | `cannot connect to https://nexcmp.com` | ライセンスサーバーへのアウトバウンドHTTPS通信がありません | サーバーのDNS、ファイアウォール、プロキシを確認してください: `curl -I https://nexcmp.com`。 | | `license activation failed (HTTP …): ` | ライセンスサーバーによってキーが拒否されました | メッセージを確認してください:無効なキー、ライセンスに一致しないドメイン、停止または失効したライセンス。[nexcmp.com/licenses](https://nexcmp.com/licenses)でライセンスページを確認してください。 | | `no release available for this license yet` | ライセンスにダウンロード可能なリリースがありません | 営業担当にお問い合わせください。[Support](https://nexcmp.com/ja/docs/troubleshooting/support/)をご覧ください。 | ## ダウンロードと検証 {#download-and-verification} | メッセージ | 原因 | 対処法 | |---|---|---| | `failed to download release X` | ダウンロード中のネットワーク問題 | 再実行してください。 | | `sha256 mismatch (… ≠ …)` | ファイルが破損しているか、改変されて届きました | 再実行してください。問題が続く場合は、プロキシがダウンロードを書き換えている可能性があります。別のネットワークからお試しください。 | | `release X is unsigned — refusing to install` | サーバーから署名が提供されませんでした | 絶対にバイパスせず、サポートにお問い合わせください。 | | `INVALID SIGNATURE for version X — aborting` | Ed25519署名の検証に失敗しました | インストールしないで**ください**。サポートにお問い合わせください。これはファイルが公式リリースではないことを意味します。 | | `openssl failed to read public key` | 非常に古い、または破損したOpenSSL | `openssl`パッケージをアップデートしてください。 | | `invalid version: …` | サーバーからの予期しないデータ | 再実行してください。解決しない場合はサポートにお問い合わせください。 | ## サービスの起動 {#service-start} | メッセージ | 原因 | 対処法 | |---|---|---| | `service failed to start — check: journalctl -u nexcmp -n 50` | パネルが3分以内に`/healthz`に応答しませんでした | ジャーナルを確認してください。一般的な原因:ポート(デフォルトは3000)がすでに使用されている(`ss -ltnp | grep 3000`)→ `--port`で再インストールする、`/var/lib/nexcmp`内のファイルの所有者がrootになっている → `sudo nexcmp fix-owner`を実行する。 | ## nginxとTLS {#nginx-and-tls} | メッセージ | 原因 | 対処法 | |---|---|---| | `DNS does not point to (nor to Cloudflare) — skipping nginx/TLS` | AまたはAAAAレコードが存在しないか、間違っています | [DNS and Cloudflare](https://nexcmp.com/ja/docs/getting-started/dns-and-cloudflare/)を参照してから再実行してください。 | | `certbot could not get a certificate yet — re-run the installer once DNS has settled` | Let's Encryptの検証に失敗しました(ポート80がブロックされている、DNSが伝播していない、レート制限) | ポート80を開放し、DNSの伝播を待ってから再実行してください。`/var/log/letsencrypt/letsencrypt.log`を確認してください。 | | `certbot could not renew now — keeping the existing certificate` | 一時的な更新失敗 | 問題ありません。後で再実行してください。 | | `nginx rejected the HTTPS configuration — kept the previous one (check: nginx -t)` | 別のnginxサイトと競合しています(同じ`server_name`、重複する設定) | `sudo nginx -t`を実行して競合を修正してから、再実行してください。 | | `apt-get could not install nginx` / `certbot`、または`E: Failed to fetch … 404 Not Found` | パッケージマネージャーがロックされているか、サーバーのパッケージインデックスが古くなっています(しばらくアップデートされていないテンプレートイメージで典型的です) | `sudo apt-get update`を実行し、他のaptプロセスが終了するのを待ってから、インストーラーを再実行してください。 | | `openssl could not create the self-signed certificate` | OpenSSLの問題 | `openssl`をアップデートしてから再実行してください。 | ## インストール後 {#after-installation} | 症状 | 原因 | 対処法 | |---|---|---| | ブラウザで`https://`を開けない | DNSまたはTLSの準備ができていません | `sudo nexcmp status`; [emergency access](https://nexcmp.com/ja/docs/getting-started/cli-reference/#emergency-access)を使用してください。 | | `ERR_TOO_MANY_REDIRECTS` | CloudflareのSSLモードが**Flexible**になっている | **Full (strict)**を設定する — [詳細](https://nexcmp.com/ja/docs/getting-started/dns-and-cloudflare/)。 | | ウィザードで「セットアップコード」が正しくないと表示される | 入力ミス、または以前のインストールのコードである | `sudo nexcmp status`を実行し、現在のコードをコピーする。 | | ライセンスが HTTP 421 を返す | `/var/lib/nexcmp`内のファイルの所有者が root になっている | `sudo nexcmp fix-owner`、次に`sudo systemctl restart nexcmp`を実行する。 | --- # アップデートエラー {#update-errors} > **管理画面での場所:** System › Admin › License & updates (`/license`) アップデートについては[Updating NexCMP](https://nexcmp.com/ja/docs/getting-started/updating/)で説明されています。アップデートカードまたは`sudo nexcmp update`にエラーが表示された場合: | メッセージ | 原因 | 対処法 | |---|---|---| | `update plan expired — renew on the license page to receive this feature release` | 「有効期限」の日付がリリース日よりも前です。セキュリティ修正は引き続き提供されますが、機能リリースは提供されません | [nexcmp.com/licenses](https://nexcmp.com/licenses)(NexCMP Freeの場合は年間 $99)で更新してから、再度確認してください。その間もソフトウェアは動作し続けます。 | | `sha256 mismatch (downloaded …, expected …)` | ダウンロードファイルが破損しているか、改ざんされている | 再試行してください。繰り返す場合は、通信経路上のプロキシを確認してください。 | | `downgrade/same version rejected: X is not newer than Y` | 選択されたバージョンが実行中のバージョンよりも新しくありません | 処理はありません — すでに最新バージョンです。 | | `extraction failed / main binary missing` | アーカイブが破損しているか、ディスクの空き容量が不足している | `df -h`を確認して再試行してください。 | | `systemctl restart failed` | バイナリの置換後にサービスを再起動できませんでした | `journalctl -u nexcmp -n 80`;古いバイナリは`/opt/nexcmp/bin/nexcmp.bak`として保持されます — 以下のロールバックを参照してください。 | | アップデートサーバーへの接続でサーバーエラーが発生しました | `nexcmp.com`へのルートがないか、ライセンスのトークンが期限切れです | アウトバウンドのHTTPSを確認し、ライセンスカードの**Check now**をクリックしてください。 | ## ロールバック {#roll-back} 新しいバージョンで問題が発生した場合: ```bash sudo systemctl stop nexcmp-vmd nexcmp sudo cp /opt/nexcmp/bin/nexcmp.bak /opt/nexcmp/bin/nexcmp echo | sudo tee /opt/nexcmp/VERSION sudo systemctl start nexcmp nexcmp-vmd ``` データベースのマイグレーションがすでに実行されている場合は、アップデート前に取得した[バックアップ](https://nexcmp.com/ja/docs/getting-started/backup-and-restore/)も復元してください。 ## `sudo nexcmp update`がインストーラーを見つけられないと表示される {#sudo-nexcmp-update-says-it-cannot-find-the-installer} `nexcmp update`は、インストール済みのリリース内に含まれているインストーラー(`/opt/nexcmp/releases//share/install.sh`)を実行します。そのファイルが見つからない場合は、ライセンスページからインストールコマンドを再度実行してください。 --- # FAQ {#faq} ## ライセンス {#licensing} **ライセンスの期限が切れた場合や、サーバーがインターネット接続を失った場合どうなりますか?** トークンは14日間有効であり、毎日更新されます。その後は、お客様は**新規**サービスの作成ができなくなりますが、稼働中のサービス、課金、ログインは引き続き動作します。[License and purchase](https://nexcmp.com/ja/docs/getting-started/license-and-purchase/)を参照してください。 **アップデートの有効期限が切れた後もセキュリティ修正は受けられますか?** はい — セキュリティリリースは常に提供されますが、機能リリースには有効なライセンスが必要です。 **NexCMPを2台目のサーバーやドメインで実行できますか?** ライセンスに登録されているキーとドメインで有効化してください — [License and purchase](https://nexcmp.com/ja/docs/getting-started/license-and-purchase/#moving-to-a-new-server-or-domain)を参照してください。 ## インストール {#installation} **NexCMPにはDocker、PostgreSQL、Redisが必要ですか?** いいえ。SQLiteデータベースを使用する単一のプログラムであり、特権を持たないユーザーとして systemd によって実行されます。[Requirements](https://nexcmp.com/ja/docs/getting-started/requirements/)を参照してください。 **パブリックドメインなしでインストールできますか?** はい、`--no-nginx`とSSHトンネルを使用してください — [Installation](https://nexcmp.com/ja/docs/getting-started/installation/#installing-without-a-public-domain-lab-or-test)を参照してください。 **セットアップ後にポート3000が閉じているのはなぜですか?** セキュリティのため、ウィザードが完了しTLSが有効になると、パネルは`127.0.0.1`でリッスンします。緊急時には`sudo nexcmp open-port`を使用してください。 ## インフラストラクチャ {#infrastructure} **CloudStackとProxmox VEを同時に使用できますか?** はい。1つのゾーンに両方を含めることができ、プランごとにソースを選択できます。[Proxmox VE](https://nexcmp.com/ja/docs/infrastructure/proxmox/)および[Zones](https://nexcmp.com/ja/docs/infrastructure/zones/)を参照してください。 **CloudStackのROOT APIキーが必要ですか?** いいえ。使用すべきではありません。専用のアカウントを作成してください — [CloudStack](https://nexcmp.com/ja/docs/infrastructure/cloudstack/)。 **仮想マシンで一部のタブやボタンが表示されないのはなぜですか?** ページには、VMのソースがサポートしている機能のみが表示されます(たとえば、Proxmox VEにはポートフォワーディングがありません)。[Proxmox VE](https://nexcmp.com/ja/docs/infrastructure/proxmox/) の機能テーブルを参照してください。 ## 操作 {#operations} **NexCMPを別のサーバーに移行するにはどうすればよいですか?** バックアップを取得し、新しいサーバーに同じライセンスで同一バージョンをインストールして復元します — [バックアップと復元](https://nexcmp.com/ja/docs/getting-started/backup-and-restore/)を参照してください。 **ログの場所:** `journalctl -u nexcmp -u nexcmp-vmd`、`/var/log/nexcmp`、および System › Logs 下の管理コンソール。詳細は [Audit log](https://nexcmp.com/ja/docs/administration/audit-log/) を参照してください。 **インストール前にカスタマーポータルを確認できますか?** はい、可能です。[nexcmp.com](https://nexcmp.com/platform/) のサービスページでは、サンプルデータを用いてカスタマーポータルをタブごとにご覧いただけます。全画面ビューアーで確認するには *View demo* を開いてください。実際の導入環境をご覧になりたい場合は、営業担当までお問い合わせください。 --- # サポート {#support} ## お問い合わせ {#contact} お問い合わせフォームはございません。ライセンス、更新、ドメイン、技術的なご質問に関するお問い合わせは、**sales@nexcmp.com**までメールにてお送りください。また、[nexcmp.com/licenses](https://nexcmp.com/licenses)のライセンスページからも同じアドレスをご確認いただけます。 ## お問い合わせいただく前に {#before-you-write} 1. ドキュメントを検索するか(`/`を押下)、[Installation errors](https://nexcmp.com/ja/docs/troubleshooting/installation-errors/)および[Update errors](https://nexcmp.com/ja/docs/troubleshooting/update-errors/)をご確認ください。 2. 以下の情報を収集していただくと、サポートスタッフが1回の返信で正確な回答を提供できるようになります。 ## 含めるべき内容 {#what-to-include} | 項目 | 取得方法 | |---|---| | NexCMPのバージョン | `sudo nexcmp status`または System › Admin › License & updates | | メインドメインとライセンスキーの末尾4桁 | License & updates(キーの全体を送信しないでください) | | 行った操作と期待される動作 | 具体的な手順 | | エラーテキストまたはスクリーンショット | 送信前に機密情報を隠す | | サービスのステータス | `sudo nexcmp status` | | 直近のログ行 | `sudo journalctl -u nexcmp -u nexcmp-vmd -n 100 --no-pager` | | インフラストラクチャ | CloudStackまたはProxmox VEのバージョン、単一ゾーンか複数ゾーンか | ::: warning 機密情報を絶対に送信しないこと ライセンスキー、APIキー、パスワード、セットアップコード、決済資格情報、バックアップアーカイブは送信しないでください。ログやスクリーンショットではこれらをマスクしてください。 ::: ## セキュリティ報告 {#security-reports} 脆弱性を発見されたと思われる場合は、件名に「Security」と記載して同じアドレス宛てにメールでお知らせください。修正されるまで、詳細を公開しないようお願いいたします。