Portaliteのご紹介:アプリにPortal Ingressを追加するための超軽量オープンソースクライアントおよびSDK
以前、Portalを紹介した際に、私たちは現代のウェブの課題について論じました。AIコーディングツールの台頭により誰もがウェブサイトを構築できるようになりましたが、それを世に公開する作業は依然として巨大プラットフォームやクラウドの独占領域にとどまっています。Portalは、ウェブのホ스팅とコンテンツ制作を分離し、個人のローカルサービスをエンドツーエンドで暗号化されたリレーを介して世界中に接続することによって、公開する権利を再び個人の手に返還するプロジェクトです。
Portaliteを発表します
本日、私はPortaliteを発表します。Portaliteは、最小限の依存関係で構築された超軽量なPortalクライアントであり、Go SDKです。
Portalが「ウェブをどのように変革するか」という哲学であるならば、Portaliteはその哲学を開発者のアプリケーションに組み込むための最も薄い接着剤です。開発者は複雑なクラウド設定やデプロイパイプラインなしで、SDKをインポートし数行のコードを追加するだけで、自身のアプリケーションにPortalのingressを組み込むことができます。アプリケーションが実行された瞬間、ローカル環境でのみ稼働していたサーバーは、インターネット上のどこからでもアクセス可能なパブリックサービスとなります。
1. コード2行で完了するパブリックIngress
Portaliteは、Goの標準インターフェースであるnet.Listenerをサポートしています。既存のウェブフレームワークやサーバーコードのリスナーを置き換えるだけで、即座に動作します。
1identity, err := portalite.GenerateIdentity("my-service")
2
3listener, err := portalite.Expose(ctx, portalite.ExposeConfig{
4 Relays: portalite.DefaultRelays(),
5 Identity: identity,
6})
7
8http.Serve(listener, handler)
- ゼロ設定(Zero-config): ポートフォワーディング、固定IP、ファイアウォールのインバウンドルール設定が一切不要です。
- 標準互換:
http.Server、grpc.Server、Gin、Echo、Chiなど、標準のnet.Listenerを使用するすべてのGoライブラリと100%の互換性を持ちます。
2. コア: マルチリレー同時バインディング(Multi-Relay Binding)
大部分のトンネリングツールは単一のエンドポイントに依存しているため、リレーサーバーが停止するとサービスも同時に切断されます。Portaliteは、複数のリレーサーバーに同時に接続して動作します。
- 無停止の障害隔離(Failover): 複数のリレーの一部がダウンしたりネットワーク遅延が発生したりしても、稼働中の残りのリレーが同一の仮想リスナーを介してトラフィックを継続的に流入させます。
- 単一障害点(SPOF)の排除: すべてのリレーセッションが同時に切断されない限り、アプリケーションの
Accept()ループは中断されません。 - エンドツーエンド暗号化(E2EE): トラフィックは暗号化された状態で中継されるため、リレーサーバーがデータを閲覧したり改ざんしたりすることはできません。
- 自動再接続およびセルフヒーリング(Self-Healing): 一時的なネットワーク切断やリレーの再起動時にも、バックグラウンドでセッションとトークンを自動的に再ネゴシエーションし、接続を復旧します。
3. CLIコマンド1行で即時利用
Goコードを使用しない場合や、迅速なテストが必要な場合は、CLIにポート番号を渡すだけで実行可能です。
1$ go install gosuda.org/portalite/cmd/portalite@latest && portalite expose --name "my-service" 3000
2URL https://my-service.rly.best
3URL https://my-service.s-h.day
4
コマンドの実行と同時にマルチリレーのURLが発行され、直ちに外部からアクセス可能な状態となります。
4. 軽量でありながら強力な機能
- 最小限の依存関係: サードパーティ依存関係を排除しているため、バイナリが軽量でビルドが高速です。
- TLSおよびUDPのサポート: HTTPやgRPCなどのTLSトラフィックはもちろん、QUICデータグラムのバックホールを介して、ゲームサーバーのようなUDPサービスも容易に公開できます。
はじめに
- GitHubリポジトリ: https://github.com/gosuda/portalite
- Goパッケージ:
go get gosuda.org/portalite