mTLS والنشر
كيفية حماية مشروع OneEntry برمز أو بشهادة mTLS، ونشر التطبيق على خادم باستخدام Nginx وDocker وGitLab أو GitHub.
الجزء 1: إعداد mTLS
حماية واجهة API
- الرمز: أنشئ رمزًا في إعدادات OneEntry وأرسله في ترويسة الطلب
x-app-token. - mTLS: فعّل mTLS في لوحة تحكم OneEntry وأنشئ شهادة في إعدادات OneEntry.
إعداد الشهادة
- في لوحة التحكم، افتح علامة التبويب Access وبدّل من الرمز إلى mTLS.
- أنشئ شهادة جديدة في OneEntry (Settings → Application Certificates → Create New Certificate).
- نزّلها واستخرجها إلى مجلد
certفي جذر مشروعك.
إعداد البيئة المحلية (مثال React)
- نزّل setupProxy.js واحفظه في المجلد
src. - اضبط المعامل
targetعلى عنوان مشروعك. - ثبّت
http-proxy-middleware:npm install http-proxy-middleware. - شغّل التطبيق.
تهيئة SDK
عند تفعيل mTLS لا تتحقق واجهة API من رمز التطبيق. هيّئ SDK بعنوان مشروعك كالمعتاد. لا يزال SDK 1.0.175 يتطلب قيمة token غير فارغة، لذا مرّر أي سلسلة نصية بديلة:
const api = defineOneEntry('https://your-project.oneentry.cloud', {
token: 'mtls', // not checked when mTLS is enabled
});
الجزء 2: إعداد الخادم
تجهيز الخادم
- حدّث معلومات المستودعات:
apt update. - أضف مستودع Docker وثبّت الحزم:
apt install nginx certbot docker-ce pwgen.
إعداد UFW
- احظر جميع الاتصالات الواردة:
ufw default deny incoming. - اسمح بجميع الاتصالات الصادرة:
ufw default allow outgoing. - اسمح باتصالات TCP الواردة على المنافذ 22 و80 و443:
ufw allow 22,80,443/tcp.
إعداد SSH
- عدّل إعدادات خادم SSH:
nano /etc/ssh/sshd_config. - عيّن
PasswordAuthentication no. - أعد تشغيل خادم SSH:
systemctl restart ssh.
إعداد Nginx
- احذف ملف الإعدادات الافتراضي:
rm /etc/nginx/sites-available/default. - أنشئ ملف إعدادات جديدًا:
nano /etc/nginx/sites-available/my_app. - نزّل إعدادات Nginx الخاصة بـ OneEntry واستبدل "your_domain.com" بنطاقك.
- نفّذ:
ln -s /etc/nginx/sites-available/my_app /etc/nginx/sites-enabled، مع استبدال "my_app" باسم ملف إعداداتك. - أصدر شهادات SSL باستخدام Certbot:
certbot certonly --webroot -w /var/www/html -d your_domain. - تحقّق من التجديد التلقائي للشهادات:
certbot renew --dry-run. - عدّل مهمة cron الخاصة بـ Certbot ليعيد Nginx تحميل إعداداته بعد إصدار الشهادات:
nano /etc/cron.d/certbot، مع استبدال السطر الأخير بـ:echo "0 */12 * * * root certbot -q renew && nginx -s reload" > /etc/cron.d/certbot - أزل التعليق عن الأسطر في ملف الإعدادات
nano /etc/nginx/sites-available/my_app(حيثmy_appهو اسم ملف إعداداتك). - تحقّق من إعدادات Nginx:
nginx -t. - أعد تحميل Nginx بعد كل تغيير:
nginx -s reload.
الجزء 3: نشر التطبيق باستخدام GitLab أو GitHub
صلاحيات المشغّل. ينضم مستخدم مشغّل GitHub إلى المجموعتين
dockerوsudo، ويعمل مشغّل GitLab في الوضع المميّز (privileged) مع مقبس Docker الخاص بالمضيف. وكلاهما يمنح تحكمًا بمستوى root في المضيف، لذا سجّل المشغّل لمستودعك الخاص فقط ولا تسمح له بتشغيل مهام من التفرعات (forks) أو طلبات الدمج غير الموثوقة. إصدارات الصور هي التي اختُبر عليها هذا الدليل؛ استخدم الإصدارات المدعومة الحالية منgitlab/gitlab-runnerوdocker.
GitHub
إنشاء مستخدم لمشغّل GitHub
- أنشئ كلمة مرور:
pwgen -s 15 1. - أنشئ مستخدمًا جديدًا:
useradd -m github-runner. - عيّن كلمة مرور له:
passwd github-runner. - أضف المستخدم الجديد إلى المجموعات:
usermod -aG docker github-runnerوusermod -aG sudo github-runner. - غيّر الصدفة (shell) لمستخدم الـ runner:
chsh -s /bin/bash github-runner. - انتقل إلى المستخدم الجديد:
sudo su - github-runner.
إعداد مشغّل GitHub
- أنشئ مشغّلًا: في إعدادات مستودعك، افتح Actions → Runners وانقر New self-hosted runner.
- اتبع التعليمات في كتلة Download ونفّذ الأمر الأول في كتلة Configure.
- أضف الـ runner إلى التشغيل التلقائي للنظام:
sudo ./svc.sh install. أدخل كلمة المرور التي أنشأتها سابقًا. - شغّل الـ runner:
sudo ./svc.sh start. - في Actions → Runners، تأكد من أن المشغّل يعمل.
- عد إلى المستخدم
root. - أنشئ مجلد عمل:
mkdir -p /var/apps/frontend. - امنح المستخدم
github-runnerالصلاحيات:chown -R github-runner:docker /var/apps/frontend.
إعداد متغيرات البيئة في GitHub
- أنشئ المتغيرات
DOMAINوMTLS_USER_CERTوMTLS_USER_KEYفي مستودع GitHub الخاص بك (Settings → Secrets and Variables). - أنشئ شهادة في OneEntry وضع الشهادة والمفتاح في المتغيرات. عيّن
DOMAINإلى عنوان مشروعك بدون https. - نزّل الملف docker-compose.yml والأرشيفين .github و.docker.
- ضع
docker-compose.ymlوالأرشيفين في المجلد الجذر لمشروعك واستخرجهما (يمكنك حذف الأرشيفين بعد ذلك). - ادفع التغييرات إلى مستودعك.
- تابع التشغيل في علامة التبويب Actions.
- افتح التطبيق في المتصفح للتحقق من أنه متاح.
GitLab
تجهيز إعدادات مشغّل GitLab (منفّذ Docker)
-
أنشئ المجلدات اللازمة:
mkdir -p /var/apps/gitlab-runner/volumes/etc/gitlab-runner. -
أنشئ
docker-compose.yaml:cat <<EOT > /var/apps/gitlab-runner/docker-compose.yamlversion: '3'services:runner:image: 'gitlab/gitlab-runner:v16.2.0'restart: alwayscontainer_name: 'gitlab-runner'privileged: truevolumes:- './volumes/etc/gitlab-runner:/etc/gitlab-runner'- '/var/run/docker.sock:/var/run/docker.sock'EOT
تسجيل GitLab runner
- افتح Settings → CI/CD → Runners وانقر New project runner.
- عيّن الوسمين
docker, frontendوأنشئ الـ runner. - انتقل إلى مجلد الـ runner:
cd /var/apps/gitlab-runner. - شغّل الأمر لبدء عملية التسجيل:
docker compose run runner register. - أدخل رابط GitLab، مثل https://gitlab.com/.
- انسخ رمز التسجيل من قسم Runners في المشروع على GitLab والصقه في الطرفية.
- عيّن المنفّذ (executor) إلى
docker. - عيّن الصورة الافتراضية إلى
docker:20.10.16.
تعيين متغيرات البيئة في GitLab
- أنشئ المتغيرات
DOMAINوMTLS_USER_CERTوMTLS_USER_KEYفي مستودع GitLab الخاص بك (Settings → CI/CD → Variables). - أنشئ شهادة في OneEntry، وضع الشهادة والمفتاح في المتغيرات، وعيّن
DOMAINإلى عنوان مشروعك بدون https. - نزّل docker-compose.yml وأرشيف .gitlab-ci.yml وأرشيف .docker، وضعها في جذر مشروعك واستخرج الأرشيفات (يمكنك حذفها بعد ذلك).
إعداد مشغّل GitLab
- عدّل ملف الإعدادات:
nano volumes/etc/gitlab-runner/config.toml. - عيّن المعامل
privilegedإلىtrueلتفعيل Docker-in-Docker. - غيّر قيمة
volumesإلى['/var/run/docker.sock:/var/run/docker.sock', '/cache']ليعمل Docker بشكل صحيح. - أضف
user = 'gitlab-runner'في بداية الملف لتشغيل الـ runner بصلاحيات هذا المستخدم. - احفظ التغييرات واخرج من المحرر.
تشغيل مشغّل GitLab والتحقق منه
- شغّل الـ runner:
docker compose up -d. - في GitLab، تحقق من أن المشغّل نشط؛ تظهر حالته في قسم Runners في المشروع.
إعداد مشغّل إضافي على المضيف (منفّذ shell)
- اتبع التعليمات لتثبيت مشغّل إضافي يعمل مباشرة على المضيف، لا في Docker.
- عيّن وسوم الـ runner:
shell, frontend.
صلاحيات المشغّل
- أضف المستخدم إلى المجموعة:
usermod -aG docker gitlab-runner. - لتغيير مالك ملف أو مجلد ومجموعته:
chown -R gitlab-runner:docker /var/apps/frontend.
الفحص النهائي
- تأكد من أن جميع المشغّلات مضبوطة وجاهزة.
- ادفع التغييرات إلى مستودعك.
- تابع التقدم في Build → Pipelines.
- افتح التطبيق في المتصفح للتحقق من أنه متاح.