メインコンテンツまでスキップ

迅速な展開

このページでは、Docker Compose を使用して 5 分で Aivory プロダクション スタックの完全なセットを作成します: PostgreSQL、Redis、Qdrant、組み込みコード サンドボックス、および同時にサーバーのフロントエンド SPA、および/api裏側のappコンテナ(両方とも同じソースで、ドメイン名やCORS設定は必要ありません)。

スタック全体は、以下のようなサービスを含む compose ファイルで説明されています:

サービス鏡像役割
postgrespostgres:16-alpine関係型ストレージ:ユーザー、会話、ナレッジベース、使用量など
redisredis:7-alpineキャッシュ、フロー制限カウンター、プロセスストップストリーム出力の pub/sub
qdrantqdrant/qdrant:v1.12.4RAG ベータ検索
sandboxghcr.io/hjxwz123/aivory-sandbox-sidecar内蔵コード実行 サンドボックス、内蔵ネットワークのみ
appghcr.io/hjxwz123/aivory-appシングルコンテナ同源サービス SPA と/api
丸く走りたくない?

Aivory のバックエンドは環境変数によって自動的に選択されます: PostgreSQL でない場合に SQLite を内蔵し、Redis でない場合にプロセス内キャッシュし、Qdrant でない場合に RAG を回帰して全体に注入します。SQLite モデルこのページでは、推奨される完全な生産展開を説明しています。

事前要求

プロジェクト要求
Docker Engine正常に動作し、正常に動作する。docker info(誤報なし)
Docker Composev2(docker compose旧版ではなく旧版です。docker-compose)
機械の仕様2 コア CPU + 4 GB メモリスタート
ポートホスト機 80 ポート空き(変更可能、下記参照)
ディスクデータベース、ベータ、アップロードファイルは本機で永続化され、使用量に応じて予約されます。
サンドボックスにはドッカーソケットが必要です。

組み込みコード サンドボックス によって吊るされた/var/run/docker.sockホストコンテナはセッションごとに分離コンテナを生成するため、ホストは Docker を直接実行する必要があります(Docker ホストプロセスなしのホストコンテナプラットフォームには適用されません)。app訪問。

ステップ1:コードの取得

git clone https://github.com/hjxwz123/Aivory.git
cd Aivory/deploy

配布に関連する書類はすべてdeploy/目録の下:docker-compose.prod.yml.env.example

ステップ 2: .env を作成および編集

cp .env.example .env

.env修正すべき残りはすべてデフォルトで維持できますが、そのうちの3つは、起動失敗または重大なセキュリティ上の問題を引き起こす可能性があります。

# 生成三个强随机值
openssl rand -hex 24 # 用作 POSTGRES_PASSWORD
openssl rand -hex 24 # 用作 REDIS_PASSWORD
openssl rand -hex 32 # 用作 JWT_SECRET
変数要求説明
POSTGRES_PASSWORD必定PostgreSQL パスワード. compose が設定されないときに起動を直接拒否
REDIS_PASSWORD必定Redis パスワード. compose が設定されないとき、起動を直接拒否
JWT_SECRET長さは最低でも32文字。ログイン トークンのキーを発行します Aivory は、生産環境下で、占有値または短いキーを検出します。スタートを拒否
JWT_SECRET 一度漏洩すると全アカウント譲渡に等しい

ぜひ使用してください。openssl rand -hex 32生成し、推測可能な文字列を使用しないでください。同時に注意:置き換えJWT_SECRETすべての登録されたセッションを無効にします。

モデル サーバーの API キー(Anthropic / OpenAI / Gemini など)** はありません.env設定** では、データベースのチャンネルテーブルに存在し、デプロイが完了すると、管理コンソール で追加します。初めての運用配置

ステップ3:スタート

メソッド 1 は、プレビルド グラフィックを引っ張り(GitHub Container Registry から推奨)します。

docker compose -f docker-compose.prod.yml pull
docker compose -f docker-compose.prod.yml up -d

方法 2 、ソースコードからローカルに構築する(コードに変更が行われた場合、または公式の鏡像が CPU アーキテクチャに覆われていない場合):

docker compose -f docker-compose.prod.yml up -d --build
同じ compose ファイルを 2 つの方法でサポート

appサービスも同時に発表。image:build:: Compose は、プレビュー グラフィックがローカルに存在する場合に、プレビュー グラフィックを優先的に使用する場合に、ローカル グラフィックに戻ります。データベース スケーマは、アプリケーションの起動時に自動移行によって作成され、手動で SQL を実行する必要はありません。

ステップ4:検証

docker compose -f docker-compose.prod.yml ps

5 つのサービスが見られます:postgresredis存在するhealthy,qdrantapp存在するrunning,sandbox初めて起動する際にはまずサンドボックス 実行時刻の鏡を引っ張り、健康チェックは120秒の起動ウィンドウを予約し、少し待つことができます。healthy

最初のページをお願いします。app容器内部の監視8787ポート、compose はデフォルトでそれをホストにマッピングします80ポート :

curl -sI http://localhost

戻るHTTP/1.1 200SPA ページのコンテンツのデプロイが成功した場合、ポートマッピングを別のページに変更した場合(たとえば、8080:8787)は、コマンド内のポートを代替します。

80 ポータルはどうなるの?

ポートマッピングは環境変数に従わない、直接編集docker-compose.prod.ymlappサービスのports段落は、"80:8787"左側を変える(例えば、"8080:8787"右側は,8787コンテナ内のポートを監視し、変更しないでください。

ステップ5:サイトを開いて初期設定へ

ブラウザ訪問http://<你的服务器 IP 或域名>新しいデプロイはユーザーなしで、ページは自動的に初期設定に戻ります:最初に作成したアカウントはすぐに管理者になります。 次の作成番号、チャンネルの追加、モデルの作成などの手順を参照初めての運用配置

竜の命令

次のコマンドブロックはゼロから完了します:クローン、キー生成、書き込み.env鏡を引っ張り、スタートします。新しいマシンに直接貼り付けるのに適しています。

git clone https://github.com/hjxwz123/Aivory.git \
&& cd Aivory/deploy \
&& cp .env.example .env \
&& sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 24)|" .env \
&& sed -i "s|^REDIS_PASSWORD=.*|REDIS_PASSWORD=$(openssl rand -hex 24)|" .env \
&& sed -i "s|^JWT_SECRET=.*|JWT_SECRET=$(openssl rand -hex 32)|" .env \
&& docker compose -f docker-compose.prod.yml pull \
&& docker compose -f docker-compose.prod.yml up -d \
&& docker compose -f docker-compose.prod.yml ps
保存する .env

上のコマンドは、ランダムキーを直接入力します。deploy/.envこのファイルは、あなたがデプロイしたキーチェーンに等しいので、バックアップを含め、公開倉庫に提出しないでください。

.env.example 変数の説明

下に押す。.env.exampleそれぞれの変数が変更されないことを説明する。

鏡の源

変数デフォルト値変えるべきではない
IMAGE_OWNERhjxwz123一般的に変わらない あなたのアカウントは、倉庫を fork し、GHCR ネームスペースでイメージを公開したときにのみ変更されます。
IMAGE_TAGlatest一般的に変更されません。バージョンをロックする必要がある場合は、相応の鏡のラベルに変更し、latest漂流

ネットワークと跨領域

変数デフォルト値変えるべきではない
ALLOWED_ORIGINS未設定(コメント状態)保有なし単一コンテナでのSPA配備と/api同じソースで、クロスドメインは存在せず、前端を API とは異なる origin に分割する場合にのみ必要です。リバースプロキシ

注意:なしWEB_PORTPUBLIC_ORIGINこのような変数: ホストポートは compose ファイルで変更されます; ドメイン名は設定する必要はありません、コンテナはどのホストによってアクセスされ、どのホストが使用できるか、複数のドメイン名を同時に指すこともできます。

PostgreSQL

変数デフォルト値変えるべきではない
POSTGRES_USERaivory変える必要ない
POSTGRES_DBaivory変える必要ない
POSTGRES_PASSWORD占拠価値必変,openssl rand -hex 24

Redis

変数デフォルト値変えるべきではない
REDIS_PASSWORD占拠価値必変,openssl rand -hex 24

Qdrant

変数デフォルト値変えるべきではない
QDRANT_URLhttp://qdrant:6333変更する必要はありません。カバーは、外部の Qdrant クラスターを指す場合にのみ適用されます
QDRANT_API_KEY変更なし 空き時間qdrantサービスとapp同じ内蔵の内部キーを共有し、開箱で使用する; Qdrant はホストポートを発行しません。openssl rand -hex 24カバー

認定

変数デフォルト値変えるべきではない
JWT_SECRET占拠価値必変,openssl rand -hex 32少なくとも 32 文字でなければ、生産環境が起動を拒否します。

データカタログとバックアップ

変数デフォルト値変えるべきではない
DATA_DIR./dataディスクのプランによって異なります。ホストパス、コンテナに縛られる/app/dataユーザーがファイルをアップロードし、生成した製品を保存し、バックアップが必要です。
BACKUP_DIR/app/data/backups変更する必要はありません コンテナ内パス、コンソール 非同期生成の完全移行 ZIP ストレージを管理し、ホスト上の対応DATA_DIR/backups
MAX_BACKUP_BYTES21474836480(20 GiB)通常変更なし 管理コンソール導入バックアップサイズの上限、ベクトルデータを含むパッケージの総量は大きい可能性があり、時間制限を超える

データベース、Redis、Qdrantのデータはそれぞれ名称ボリュームにpgdataredisdataqdrantdata中、戦術見学。バックアップと移行

デモモデル

変数デフォルト値変えるべきではない
ENABLE_MOCK_PROVIDERfalse選択可能 設定true内蔵のデモチャンネルを注入し、本物の API Key を必要とせずに端から端までセッションを実行し、先にデプロイを検証するのに最適; 管理コンソールで本物のチャンネルを追加した後に変更false

ネット検索(オプション)

変数デフォルト値変えるべきではない
SEARCH_PROVIDER選択可能 検索バックエンドタイプ:serper / brave必要配SEARCH_API_KEY;searxng必要配SEARCH_BASE_URLキーは必要ありません。
SEARCH_API_KEYSEARCH_PROVIDER確定
SEARCH_BASE_URLsearxng後部の必要性

これらの3つは、管理コンソールオンラインの設定後に展開することもできます。.env値はスタート時点のみで、まず空のままにします。

埋め込みモデル(オプション、ナレッジベース 検索品質関連)

変数デフォルト値変えるべきではない
EMBEDDING_BASE_URL生産設定を推奨します。空き時には、256D 内蔵のローカル embedder を使用しますが、生産には適していません。OpenAI 形式のいずれかを指します。/v1/embeddings端点でいい
EMBEDDING_API_KEYサービスに組み込まれる
EMBEDDING_MODELtext-embedding-3-smallお使いのサービスに合わせて変更
EMBEDDING_DIM1536埋め込まれたモデルの出力次元と一致する必要があります.Qdrant では、個別 collection を使用し、不一致した次元はローカル 256 次元 embedder を返します。

MinerU ドキュメント解析(オプション)

変数デフォルト値変えるべきではない
MINERU_API_URLhttps://mineru.net一般に変わらない
MINERU_API_KEYオプション: スキャン版/画像型 PDF 用の OCR 解像度; 構成されていない場合、このようなドキュメントはナレッジベースにアップロードできますが、コンテンツは 1 行だけです。

コード サンドボックス (コメント状態、通常は何も設定する必要はありません)

サンドボックスサービスがスタートし、appプライベートネットワーク経由でアクセスすると、両方とも同じ内蔵のデフォルトキーを共有し、オープンボックスを使用します。 デフォルトの制限をカバーする必要がある場合にのみコメントをキャンセルします:

変数デフォルト値説明
SANDBOX_API_KEY内蔵共有デフォルト値カスタマイズされたキーで設定する場合は、appsandbox同時に読む。
SANDBOX_MEMORY2g各セッションコンテナのメモリ上限
SANDBOX_CPUS1各セッションコンテナの CPU クォータ
SANDBOX_MAX_SESSIONS16サンドボックス セッション数の上限
SANDBOX_WORKSPACE_SIZE512m各セッション/workspaceサイズ
SANDBOX_NETWORKnoneサンドボックス内コードネットワークなしネットワークを変えるときにbridge

サンドボックス 構造とセキュリティの境界コード サンドボックス 展開同時に、管理コンソールの設定を保持してください。sandbox_base_url / sandbox_api_key2 つのフィールドは空であるため、組み込みサンドボックスが有効になります。

次のステップ