Easy-Gate
Easy Gate ist eine einfache Webanwendung, die als zentraler Knotenpunkt für Ihre selbst gehostete Infrastruktur dienen soll. Durch die Echtzeitanalyse von Diensten und Notizen aus einer Konfigurationsdatei gewährleistet Easy Gate nahtlose Aktualisierungen, ohne dass die Anwendung neu gestartet werden muss. Darüber hinaus bietet es die Flexibilität, Elemente bestimmten Benutzergruppen zuzuweisen und so einen maßgeschneiderten Zugriff auf der Grundlage ihrer IP-Adressen zu ermöglichen.
Um Easy Gate als eigenständige ausführbare Datei auszuführen, können Sie es aus dem Quellcode erstellen oder eine vorgefertigte Binärdatei aus der neuesten Version herunterladen.
Aus dem Quellcode erstellen:
git clone https://github.com/r7wx/easy-gate.git
cd easy-gate
make
Führen Sie die ausführbare Datei aus:
easy-gate < path-to-config-file >
Die Konfigurationsdatei kann entweder eine JSON- oder eine YAML-Datei sein.
Sie können eine Instanz von Easy Gate mithilfe von Docker bereitstellen:
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
Standardmäßig sucht das Easy Gate-Image nach einer Konfigurationsdatei in /etc/easy-gate/easy-gate.json, aber dieser Wert kann mit der Umgebungsvariablen EASY_GATE_CONFIG_PATH überschrieben werden:
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
Sie können Easy Gate ausführen, indem Sie die bereitgestellte Docker-Compose-Datei verwenden:
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
Standardmäßig sucht das Easy Gate-Image nach einer Konfigurationsdatei in /etc/easy-gate/easy-gate.json, aber dieser Wert kann mit der Umgebungsvariablen EASY_GATE_CONFIG_PATH überschrieben werden:
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
Wenn Sie Easy Gate hinter einer bereits laufenden Nginx-Instanz (oder anderen Reverse-Proxys) hosten müssen, können Sie die Docker-Compose-Datei im Beispielverzeichnis verwenden:
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
Um die Gruppenfunktion korrekt nutzen zu können, muss die Nginx-Instanz (oder Ihr anderer Reverse-Proxy) für die Verwendung des X-Forwarded-For-Headers konfiguriert sein:
[...]
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ;
proxy_pass http://easy-gate:8080;
}
[...]
Außerdem ist es zwingend erforderlich, „behind_proxy“ in Ihrer Easy-Gate-Konfigurationsdatei auf „true“ zu setzen:
[ ... ]
"behind_proxy" : true ,
[ ... ]
Die vollständigen Docker-Compose- und Nginx-Konfigurationsdateien finden Sie im Beispielverzeichnis. Die gleiche Logik gilt für Standalone- und Docker-Bereitstellungen.
Easy Gate kann über eine JSON- oder eine YAML-Konfigurationsdatei konfiguriert werden. Eine Beispielkonfiguration finden Sie im Stammverzeichnis dieses Repositorys (easy-gate.json/easy-gate.yml).
Das Easy Gate-Design kann durch die Bereitstellung von Farben für Hintergrund und Vordergrund konfiguriert werden. Theme-Änderungen werden sofort übernommen.
Beispiel für ein Dark-Mode-Theme:
"theme" : {
"background" : " #1d1d1d " ,
"foreground" : " #ffffff " ,
}
theme :
background : " #FFFFFF "
foreground : " #000000 "
Es ist auch möglich, eine benutzerdefinierte CSS-Datei zu verwenden, indem Sie den Pfad zur Datei angeben:
"theme" : {
"custom_css" : " /path/to/custom.css "
}
theme :
custom_css : " /path/to/custom.css "
Beachten Sie, dass die Hintergrund- und Vordergrundfarben auch dann angewendet werden, wenn Sie eine benutzerdefinierte CSS-Datei bereitstellen, solange Sie in Ihrer benutzerdefinierten CSS-Datei die richtigen Vorlagenschlüssel wie folgt angeben:
body {
background: {{.Background}};
color: {{.Foreground}};
}
Gruppeneinträge werden verwendet, um zu definieren, welche Benutzer welche Elemente sehen können, indem das Benutzersubnetz angegeben wird. Die Gruppenfunktionalität ist nützlich, wenn es sowohl um interne Netzwerk- als auch um VPN-Benutzer geht.
"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
Mit einem Diensteintrag wird ein Dienst definiert, der in der Infrastruktur verfügbar ist. Jeder Dienst verfügt über die folgenden konfigurierbaren Parameter:
{
"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 : []
Ein Notizeintrag wird verwendet, um eine einfache Textnotiz zu definieren, die einen Titel und einen Inhalt hat. Jede Notiz hat einen Namen, den Inhalt der Notiz (Text) und die Gruppen, die sie sehen können (definiert im Abschnitt „Gruppen“). Wenn keine Gruppe angegeben ist, kann das Element von allen Benutzern gesehen werden:
{
"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 : []