easy-gate
Easy Gate is a simple web application designed to serve as the central hub for your self-hosted infrastructure. With real-time parsing of services and notes from a configuration file, Easy Gate ensures seamless updates without the need to restart the application. Moreover, it offers the flexibility to assign items to specific user groups, allowing tailored access based on their IP addresses.
In order to run Easy Gate as a standalone executable, you can build it from source code or download a pre-built binary from the latest release.
Build from source:
git clone https://github.com/r7wx/easy-gate.git
cd easy-gate
make
Run executable:
easy-gate <path-to-config-file>
Configuration file can be either a JSON or a YAML file.
You can deploy an instance of Easy Gate by using 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
By default the Easy Gate image will look for a configuration file in /etc/easy-gate/easy-gate.json, but this value can be overridden by using the EASY_GATE_CONFIG_PATH environment variable:
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
You can run Easy Gate by using the provided docker-compose file:
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
By default the Easy Gate image will look for a configuration file in /etc/easy-gate/easy-gate.json, but this value can be overridden by using the EASY_GATE_CONFIG_PATH environment variable:
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
If you need to host Easy Gate behind an already running nginx instance (or other reverse proxies), you can use the docker-compose file in the examples directory:
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
In order to correctly use the groups feature, the nginx instance (or your other reverse proxy) must be configured to use the X-Forwarded-For header:
[...]
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://easy-gate:8080;
}
[...]
It is also mandatory to set "behind_proxy" to true in your easy-gate configuration file:
[...]
"behind_proxy": true,
[...]
You can find the complete docker-compose and nginx configuration files in the examples directory. The same logic applies to standalone and Docker deployments.
Easy gate can be configured by a JSON or a YAML configuration file. An example configuration is provided in the root directory of this repository (easy-gate.json/easy-gate.yml).
Easy Gate theme can be configured by providing colors for background and foreground. Theme changes will be applied immediately.
Example of a dark mode theme:
"theme": {
"background": "#1d1d1d",
"foreground": "#ffffff",
}
theme:
background: "#FFFFFF"
foreground: "#000000"
It is also possible to use a custom css file by providing the path to the file:
"theme": {
"custom_css": "/path/to/custom.css"
}
theme:
custom_css: "/path/to/custom.css"
Keep in mind, even if you provide a custom css file, the background and foreground colors will still be applied as long as you provide the correct templating keys in your custom css file like so:
body {
background: {{.Background}};
color: {{.Foreground}};
}
Group entries are used to define which users can see which items, by providing the user subnet. Group functionality is useful when dealing with both internal network and VPN users.
"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
A service entry is used to define a service that is available in the infrastructure. Each service has the following configurable parameters:
{
"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: []
A note entry is used to define a simple text note which has a title and a content. Each note has a name, the note content (text) and the groups that can see it (defined in the groups section). If no group is provided the item can be seen by all users:
{
"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: []