イージーゲート
Easy Gate は、セルフホスト型インフラストラクチャの中央ハブとして機能するように設計されたシンプルな Web アプリケーションです。 Easy Gate は、構成ファイルからのサービスとメモをリアルタイムに解析することで、アプリケーションを再起動することなくシームレスな更新を保証します。さらに、アイテムを特定のユーザー グループに割り当てる柔軟性を提供し、IP アドレスに基づいてカスタマイズされたアクセスを可能にします。
Easy Gate をスタンドアロンの実行可能ファイルとして実行するには、ソース コードからビルドするか、最新リリースから事前にビルドされたバイナリをダウンロードします。
ソースからビルドする:
git clone https://github.com/r7wx/easy-gate.git
cd easy-gate
make
実行可能ファイルを実行します:
easy-gate < path-to-config-file >
構成ファイルは、JSON ファイルまたは YAML ファイルのいずれかです。
Docker を使用して Easy Gate のインスタンスをデプロイできます。
docker run -d --name=easy-gate
-p 8080:8080
-v /path/to/easy-gate.json:/etc/easy-gate/easy-gate.json
--restart unless-stopped
r7wx/easy-gate:latest
デフォルトでは、Easy Gate イメージは /etc/easy-gate/easy-gate.json で構成ファイルを検索しますが、この値は EASY_GATE_CONFIG_PATH 環境変数を使用してオーバーライドできます。
docker run -d --name=easy-gate
-p 8080:8080
-v /path/to/easy-gate.yml:/another/path/easy-gate.yml
--restart unless-stopped
-e EASY_GATE_CONFIG_PATH=/another/path/easy-gate.yml
r7wx/easy-gate:latest
提供されている docker-compose ファイルを使用して Easy Gate を実行できます。
services :
easy-gate :
image : r7wx/easy-gate:latest
build : .
container_name : easy-gate
restart : unless-stopped
ports :
- 8080:8080
volumes :
- ./easy-gate.json:/etc/easy-gate/easy-gate.json
docker-compose up
デフォルトでは、Easy Gate イメージは /etc/easy-gate/easy-gate.json で構成ファイルを検索しますが、この値は EASY_GATE_CONFIG_PATH 環境変数を使用してオーバーライドできます。
services :
easy-gate :
image : r7wx/easy-gate:latest
build : .
container_name : easy-gate
restart : unless-stopped
environment :
- EASY_GATE_CONFIG_PATH=/etc/easy-gate/easy-gate.yml
ports :
- 8080:8080
volumes :
- ./easy-gate.yml:/etc/easy-gate/easy-gate.yml
すでに実行中の nginx インスタンス (または他のリバース プロキシ) の背後で Easy Gate をホストする必要がある場合は、example ディレクトリにある docker-compose ファイルを使用できます。
services :
easy-gate :
image : r7wx/easy-gate:latest
container_name : easy-gate
expose :
- 8080
networks :
- nginx-net
volumes :
- ../easy-gate.json:/etc/easy-gate/easy-gate.json
nginx :
image : nginx:latest
container_name : nginx
ports :
- 80:80
networks :
- nginx-net
volumes :
- ./nginx.conf:/etc/nginx/conf.d/default.conf
networks :
nginx-net :
driver : bridge
グループ機能を正しく使用するには、nginx インスタンス (または他のリバース プロキシ) が X-Forwarded-For ヘッダーを使用するように構成されている必要があります。
[...]
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ;
proxy_pass http://easy-gate:8080;
}
[...]
easy-gate 構成ファイルで「behind_proxy」を true に設定することも必須です。
[ ... ]
"behind_proxy" : true ,
[ ... ]
完全な docker-compose および nginx 構成ファイルは、example ディレクトリにあります。同じロジックがスタンドアロン デプロイメントと Docker デプロイメントに適用されます。
Easy Gate は、JSON または YAML 構成ファイルによって構成できます。構成例は、このリポジトリのルート ディレクトリ (easy-gate.json/easy-gate.yml) に提供されています。
Easy Gate テーマは、背景と前景の色を指定することで構成できます。テーマの変更はすぐに適用されます。
ダークモードテーマの例:
"theme" : {
"background" : " #1d1d1d " ,
"foreground" : " #ffffff " ,
}
theme :
background : " #FFFFFF "
foreground : " #000000 "
ファイルへのパスを指定することで、カスタム CSS ファイルを使用することもできます。
"theme" : {
"custom_css" : " /path/to/custom.css "
}
theme :
custom_css : " /path/to/custom.css "
カスタム CSS ファイルを指定した場合でも、次のようにカスタム CSS ファイルに正しいテンプレート キーを指定している限り、背景色と前景色は引き続き適用されることに注意してください。
body {
background: {{.Background}};
color: {{.Foreground}};
}
グループ エントリは、ユーザー サブネットを指定することで、どのユーザーがどのアイテムを表示できるかを定義するために使用されます。グループ機能は、内部ネットワーク ユーザーと VPN ユーザーの両方を扱う場合に便利です。
"groups" : [
{
"name" : " internal " ,
"subnet" : " 192.168.1.1/24 "
},
{
"name" : " vpn " ,
"subnet" : " 10.8.1.1/24 "
}
]
groups :
- name : internal
subnet : 192.168.1.1/24
- name : vpn
subnet : 10.8.1.1/24
サービス エントリは、インフラストラクチャで利用可能なサービスを定義するために使用されます。各サービスには次の構成可能なパラメータがあります。
{
"name" : " Git " ,
"url" : " https://git.example.internal " ,
"groups" : [
" vpn "
]
},
{
"name" : " Portainer " ,
"url" : " https://portainer.example.all " ,
"category" : " Test " ,
"icon" : " data:image/png;base64,[...] " ,
"groups" : []
}
- name : Git
url : https://git.example.internal
groups :
- vpn
- name : Portainer
url : https://portainer.example.all
category : " Test "
icon : data:image/png;base64,[...]
groups : []
メモ エントリは、タイトルと内容を持つ単純なテキスト メモを定義するために使用されます。各メモには名前、メモの内容 (テキスト)、およびそれを表示できるグループ (グループ セクションで定義) があります。グループが指定されていない場合、アイテムはすべてのユーザーに表示されます。
{
"name" : " Simple note " ,
"text" : " This is a simple note for vpn users " ,
"groups" : [
" vpn "
]
},
{
"name" : " Global note " ,
"text" : " This note will be visible to everyone " ,
"groups" : []
}
- name : Simple note
text : This is a simple note for vpn users
groups :
- vpn
- name : Global note
text : This note will be visible to everyone
groups : []