pull/139/head
Yeuoly 2024-07-07 19:20:44 +08:00
parent cd5bc0c356
commit 65c11e5b41
No known key found for this signature in database
GPG Key ID: A66E7E320FB19F61
4 changed files with 70 additions and 0 deletions

View File

@ -102,6 +102,11 @@
* [サポートの求め](community/support.md)
* [貢献者ガイド](community/contribution.md)
## 開発 <a href="#development" id="development"></a>
* [バックエンド](development/backend/README.md)
* [DifySandbox](development/backend/sandbox/README.md)
## もっと読む <a href="#learn-more" id="learn-more"></a>
* [アプリケーションケース](learn-more/apurikshonksu/README.md)

View File

@ -0,0 +1 @@
# バックエンド

View File

@ -0,0 +1,15 @@
`DifySandboxディファイサンドボックス`は、PythonやNode.jsなど複数のプログラミング言語に対応した、軽量・高速・安全なコード実行環境です。Dify Workflowの様々な要素コードード、テンプレート変換ード、LLMード、ツールードのコードインタプリターなどの基盤となる実行環境として機能します。DifySandboxは、ユーザーが提供したコードを実行しつつ、システムのセキュリティを確保します。
### 特徴
- **複数言語対応**DifySandboxはSeccompをベースに構築され、複数のプログラミング言語をサポートする低レベルのセキュリティ機構を実現しています。現在はPythonとNode.jsに対応しています。
- **システムセキュリティ**:予期せぬセキュリティ侵害を防ぐため、特定のシステムコールのみを許可する許可リストポリシーを採用しています。
- **ファイルシステムの隔離**:ユーザーのコードは独立したファイルシステム環境で実行されます。
- **ネットワーク隔離**
- **DockerCompose環境**専用のSandboxネットワークとプロキシコンテナを使用してネットワークアクセスを提供します。これにより、内部ネットワークのセキュリティを保ちつつ、柔軟なプロキシ設定が可能になります。
- **Kubernetes環境**Egressポリシーを用いて直接ネットワーク隔離戦略を設定できます。
### プロジェクトリポジトリ
プロジェクトのソースコードの入手や、導入・使用方法に関する詳細な情報については、[DifySandbox](https://github.com/langgenius/dify-sandbox)リポジトリをご覧ください。
### 貢献
`DifySandbox`の開発に参加する方法については、[貢献ガイド](./contribution.md)をご参照ください。

View File

@ -0,0 +1,49 @@
# 貢献
### コード構造
以下のコードファイル構造を参照すると、コードの構成をより理解しやすくなります。
```
[cmd/]
├── server // サーバー起動のエントリーポイント
├── lib // 共有ライブラリのエントリーポイント
└── test // 一般的なテストスクリプト
[build/] // 各種アーキテクチャとプラットフォーム用のビルドスクリプト
[internal/] // 内部パッケージ
├── controller // HTTPリクエストハンドラ
├── middleware // リクエスト処理用ミドルウェア
├── server // サーバーのセットアップと設定
├── service // コントローラー用のサービス提供
├── static // 設定ファイル
│ ├── nodejs_syscall // Node.jsシステムコールのホワイトリスト
│ └── python_syscall // Pythonシステムコールのホワイトリスト
├── types // エンティティ
├── core // 分離と実行のためのコアロジック
│ ├── lib // 共有ライブラリ
│ ├── runner // コード実行
│ │ ├── nodejs // Node.jsランナー
| | └── python // Pythonランナー
└── tests // CI/CD用のテスト
```
### 原理
現在、コアロジックには2つの主要なエントリーポイントがあります。1つは`DifySandbox`のHTTPサービスエントリーポイント、もう1つは動的リンクライブラリのエントリーポイントです。Sandboxがコードを実行する際、まず一時的なコードファイルが生成されます。このファイルの冒頭で動的リンクライブラリを呼び出して実行環境Sandboxを初期化し、その後にユーザーコードが実行されます。最終的に、ユーザーが提出したコードを直接実行するのではなく、この一時ファイルを実行することで、システムの安全性を確保します。
動的リンクライブラリでは、`Seccomp`Secure Computing Modeを使用してシステムコールを制限しています。許可されるシステムコールは`static`ディレクトリの`nodejs_syscall`および`python_syscall`ファイルに定義されており、ARM64とAMD64の両アーキテクチャ向けのシステムコールホワイトリストを提供しています。特別な理由がない限り、これらのファイルを変更しないでください。
### 貢献方法
タイポやバグなどの小さな問題については、直接プルリクエストPRを送信してください。大規模な変更や新機能の提案については、まずイシューを作成し、議論を行ってください。
#### 今後の課題
現在検討中の課題がいくつかあります。興味があれば、以下のタスクに取り組んでいただけます:
- [ ] 新しいプログラミング言語のサポート:
- 現在、PythonとNodejsをサポートしていますが、他の言語のサポートも検討しています。
- 新しい言語を追加する際は、ARM64とAMD64の両アーキテクチャに対応し、安全性を確保するためのCIテストを提供する必要があります。
- [ ] Nodejsの依存関係の問題
- 現在、Pythonの依存関係のサポートは完了していますが、Nodejsについては`node_modules`の複雑さから、まだ適切な解決策がありません。この課題に取り組んでいただけると助かります。
- [ ] 画像処理:
- 将来的にマルチモーダルが主流になると予想されるため、Sandboxでの画像処理のサポートは重要です。
- Pillowなどのライブラリのサポートを追加し、DifyからSandboxに画像を渡して処理できるようにすることを検討しています。
- [ ] 包括的なCIテスト
- 現在のCIテストはまだ不十分で、基本的なケースしかカバーしていません。より広範なテストの追加が必要です。
- [ ] マルチモーダルデータの生成:
- Sandboxを使用して、テキストと画像を組み合わせたデータなど、マルチモーダルデータの生成に挑戦してみてください。