Skip to content
forked from r7wx/easy-gate

A gate to your self hosted infrastructure

License

Notifications You must be signed in to change notification settings

ppetrucz/easy-gate

 
 

Repository files navigation


easy-gate

A gate to your self hosted infrastructure

Release Docker Pulls CodeFactor


Easy Gate is a simple web application built in Go and React that acts as the home page for your self-hosted infrastructure. Services and notes are parsed from a JSON file in real-time (without restarting the application). Items can also be assigned to one or more groups to show them only to specific users (based on their IP addresses).

Features

  • Service and note parsing from a JSON file in real-time (without restarting the application).
  • Service and note assignment to one or more groups to show items only to specific users (based on their IP addresses).
  • Customizable theme.
  • Run as dependecy free standalone executable or as a Docker image.

Future updates/features

  • Persistant data storage
  • New section: Most popular
  • New section: Announcement with calendar
  • Additional/Improved UI components
  • Extensive branding settings
  • Minimal login for additional service filtering

Deployment

Standalone Executable

In order to run Easy Gate as a standalone binary, 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 easy-gate.json>

If no command line argument is provided Easy Gate will search the configuration file in current directory.

Docker

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

Docker Compose

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

Docker Compose (behind nginx)

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 easy-gate.json:

[...]
"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 image deployments.

Configuration

Easy gate can be configured by the easy-gate.json file. An example configuration is provided in the root directory of this repository (easy-gate.json).

Options

  • addr: IP address to listen on
  • use_tls: If true, the application will use TLS
  • cert_file: Path to the SSL certificate file (if TLS is enabled)
  • key_file: Path to the SSL key file (if TLS is enabled)
  • behind_proxy: If true, the application will use the X-Forwarded-For header to determine the IP address of the client
  • title: Title of the application
  • icon: Font-awesome icon to use as the application icon
  • motd: Message to display on home page

Theme

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"
}

Groups

Group entries are used to define which users can see which items, by providing the user subnet:

"groups": [
  {
    "name": "internal",
    "subnet": "192.168.1.1/24"
  },
  {
    "name": "vpn",
    "subnet": "10.8.1.1/24"
  }
]

Services

A service entry is used to define a service that is available in the infrastructure. Each service has a name, an url, an icon 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:

{
  "icon": "fa-brands fa-git-square",
  "name": "Git",
  "url": "https://git.example.vpn",
  "groups": [
      "vpn"
  ]
},
{
  "icon": "fa-brands fa-docker",
  "name": "Portainer",
  "url": "https://portainer.example.internal",
  "groups": []
}

Notes

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": []
}

Icons

Icons are provided by the Font Awesome library. Get the appropriate icon name by using the Font Awesome website (only free icons are available).

About

A gate to your self hosted infrastructure

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 64.8%
  • JavaScript 31.5%
  • Makefile 2.0%
  • Other 1.7%