بوابة سهلة
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.
يمكنك نشر مثيل Easy Gate باستخدام 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
افتراضيًا، ستبحث صورة 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
يمكنك تشغيل 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
إذا كنت بحاجة إلى استضافة Easy Gate خلف مثيل nginx قيد التشغيل بالفعل (أو وكلاء عكسيين آخرين)، فيمكنك استخدام ملف 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;
}
[...]
من الضروري أيضًا ضبط "behind_proxy" على القيمة true في ملف تكوين البوابة السهلة لديك:
[ ... ]
"behind_proxy" : true ,
[ ... ]
يمكنك العثور على ملفات تكوين docker-compose وnginx الكاملة في دليل الأمثلة. ينطبق نفس المنطق على عمليات النشر المستقلة وDocker.
يمكن تكوين البوابة السهلة بواسطة ملف تكوين 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 : []