쉬운 문
Easy Gate는 자체 호스팅 인프라의 중앙 허브 역할을 하도록 설계된 간단한 웹 애플리케이션입니다. 구성 파일의 서비스 및 메모를 실시간으로 구문 분석하는 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를 호스팅해야 하는 경우 예제 디렉터리에 있는 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 구성 파일을 찾을 수 있습니다. 독립 실행형 및 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 : []