porte facile
Easy Gate est une application Web simple conçue pour servir de hub central pour votre infrastructure auto-hébergée. Grâce à l'analyse en temps réel des services et des notes d'un fichier de configuration, Easy Gate garantit des mises à jour transparentes sans qu'il soit nécessaire de redémarrer l'application. De plus, il offre la flexibilité d'attribuer des éléments à des groupes d'utilisateurs spécifiques, permettant un accès personnalisé en fonction de leurs adresses IP.
Afin d'exécuter Easy Gate en tant qu'exécutable autonome, vous pouvez le créer à partir du code source ou télécharger un binaire prédéfini à partir de la dernière version.
Construire à partir des sources :
git clone https://github.com/r7wx/easy-gate.git
cd easy-gate
make
Exécutez l'exécutable :
easy-gate < path-to-config-file >
Le fichier de configuration peut être un fichier JSON ou YAML.
Vous pouvez déployer une instance d'Easy Gate à l'aide de Docker :
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
Par défaut, l'image Easy Gate recherchera un fichier de configuration dans /etc/easy-gate/easy-gate.json, mais cette valeur peut être remplacée en utilisant la variable d'environnement 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
Vous pouvez exécuter Easy Gate en utilisant le fichier docker-compose fourni :
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
Par défaut, l'image Easy Gate recherchera un fichier de configuration dans /etc/easy-gate/easy-gate.json, mais cette valeur peut être remplacée en utilisant la variable d'environnement 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
Si vous devez héberger Easy Gate derrière une instance nginx déjà en cours d'exécution (ou d'autres proxys inverses), vous pouvez utiliser le fichier docker-compose dans le répertoire examples :
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
Afin d'utiliser correctement la fonctionnalité de groupes, l'instance nginx (ou votre autre proxy inverse) doit être configurée pour utiliser l'en-tête X-Forwarded-For :
[...]
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ;
proxy_pass http://easy-gate:8080;
}
[...]
Il est également obligatoire de définir "behind_proxy" à true dans votre fichier de configuration easy-gate :
[ ... ]
"behind_proxy" : true ,
[ ... ]
Vous pouvez trouver les fichiers de configuration complets de docker-compose et nginx dans le répertoire des exemples. La même logique s'applique aux déploiements autonomes et Docker.
Easy Gate peut être configuré par un fichier de configuration JSON ou YAML. Un exemple de configuration est fourni dans le répertoire racine de ce référentiel (easy-gate.json/easy-gate.yml).
Le thème Easy Gate peut être configuré en fournissant des couleurs pour l’arrière-plan et le premier plan. Les changements de thème seront appliqués immédiatement.
Exemple de thème en mode sombre :
"theme" : {
"background" : " #1d1d1d " ,
"foreground" : " #ffffff " ,
}
theme :
background : " #FFFFFF "
foreground : " #000000 "
Il est également possible d'utiliser un fichier CSS personnalisé en fournissant le chemin d'accès au fichier :
"theme" : {
"custom_css" : " /path/to/custom.css "
}
theme :
custom_css : " /path/to/custom.css "
Gardez à l'esprit que même si vous fournissez un fichier CSS personnalisé, les couleurs d'arrière-plan et de premier plan seront toujours appliquées tant que vous fournissez les clés de modèle correctes dans votre fichier CSS personnalisé, comme suit :
body {
background: {{.Background}};
color: {{.Foreground}};
}
Les entrées de groupe sont utilisées pour définir quels utilisateurs peuvent voir quels éléments, en fournissant le sous-réseau de l'utilisateur. La fonctionnalité de groupe est utile lorsqu'il s'agit à la fois d'utilisateurs de réseau interne et de 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
Une entrée de service est utilisée pour définir un service disponible dans l'infrastructure. Chaque service possède les paramètres configurables suivants :
{
"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 : []
Une entrée de note est utilisée pour définir une note de texte simple qui a un titre et un contenu. Chaque note a un nom, le contenu de la note (texte) et les groupes qui peuvent la voir (définis dans la section groupes). Si aucun groupe n'est fourni, l'élément peut être vu par tous les utilisateurs :
{
"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 : []