البحث في الموقع
المحتوى عن 'الحوسبة السحابية'.
-
يُعرّف سجل دوكر Docker Registry بأنه تطبيق يُدّير عمليات تخزين صور حاويات Docker وتسليمها للمطورين، حيث تكون صور الحاويات متاحة أمامهم في سجلٍ مركزي واحد ومُضمّن فيها جميع المكونات الضرورية لعملها، وفي هذا استثمارٌ كبير لوقت المطوّر، إذ تكفل صور دوكر بيئة تشغيل مماثلة لمتطلباته عبر المحاكاة الافتراضية، وبهذا يمكن للمطور سحب الصورة التي يحتاجها من السجل مع كل ما يلزم وتنزيلها بهيئة مضغوطة، بدلًا من تنزيل الاعتماديات والحزم واحدة واحدة وتثبيتها داخل الحاوية في كل مرة، وبالمثل أيضًا يستطيع المطوّر أتمتة عمليات نشر الصور على السجل باستخدام أدوات التكامل المستمر (CI) مثل TravisCI أو غيرها لتحديث صوره باستمرار في مراحل التطوير والإنتاج. قد تكون سجلات Docker عامة أو خاصة ولعل Docker Hub هو أبرز مثال على سجلات دوكر العامة، فهو مجاني ومتاح للجميع ويمكنك تخصيص صورك حسب احتياجات عملك واستضافتها عليه، وإذا رغبت بمستوى أعلى من السرية والخصوصية فيمكنك استخدام سجل خاص بك فهو الخيار الأفضل للتطبيقات مغلقة المصدر، إذ تتضمن الصور عادةً جميع التعليمات البرمجية اللازمة لعمل التطبيق، ويبقيها السجل الخاص في متناول مجموعة محددة من الأشخاص فقط. سنشرح لك في هذا المقال كيفية إعداد سجلك الخاص لصور حاويات Docker، وطريقة تأمينه، واستخدام كل من Docker Compose لضبط إعدادات التحكم بتشغيل الحاويات، وخادم Nginx لتوجيه حركة مرور البيانات القادمة من الإنترنت إلى حاوية Docker قيد التشغيل. وستمتلك في النهاية المعرفة الكافية لرفع صورة Docker إلى سجلك الخاص، وسحب الصور بأمان من خادمٍ بعيد. متطلبات العمل ستحتاج لتوفير المتطلبات التالية لتتابع معنا سير العمل خطوة بخطوة: خادمين مثبت عليهما نظام تشغيل أوبنتو (الإصدار 22.04 )، ويمكنك اتباع هذا الدليل لتجهيزهما، حيث يتضمن هذا الدليل طريقة إنشاء مستخدم جديد غير مستخدم الجذر لكنه يتمتع بصلاحيات sudo بالإضافة إلى آلية إعداد جدار الحماية للخادم، احرص على تنفيذ هذه الخطوات إذ سيستضيف أحد الخادمين سجل Docker الخاص بك وسنسميه الخادم المضيف host، وسيكون الخادم الآخر عميلًا client يستخدم السجل. تثبيت Docker على الخادمين، تساعدك الخطوتان 1 و 2 من مقال كيفية تثبيت دوكر واستخدامه على دبيان في تنفيذ المطلوب فتثبيت Docker على دبيان يشبه تثبيته على أوبنتو. اضبط بعد ذلك الإعدادات التالية على الخادم المضيف: ثبّت عليه دوكر كومبوزر Docker Compose مستعينًا بالخطوات الواردة في مقال تثبيت الأداة دوكر كومبوز Docker Compose واستخدامها ضمن نظام لينكس أوبونتو. ثبّت عليه إنجن إكس Nginx بإتباع الإرشادات الواردة في مقال كيفية تثبيت Nginx على أوبونتو 18.04. أمّن حماية الخادم Nginx الموجود على المضيف بشهادات مصدقة من Let’s Encrypt مثلًا لحماية سجل Docker الخاص الذي تنشؤه، اطلّع على مقال كيف تؤمّن خادم ويب NGINX على أوبنتو 16.04 على أكاديمية حسوب أو مقال تأمين خادم NGINX باستخدام Let’s Encrypt على DigitalOcean لإنجاز هذه الخطوة. وتأكد من توجيه حركة مرور البيانات الواردة إلى تطبيقك من HTTP إلى HTTPS. احجز اسم نطاق لخادمك المضيف لسجل Docker، واسم النطاق المعتمد في المقال هو your_domain، وتوفير اسم النطاق ضروري قبل البدء بإعدادات خدمة Let’s Encrypt. الخطوة 1: تثبيت سجل Docker وإعداده يفيدك تشغيل Docker من سطر الأوامر في بداية التشغيل وعند اختبار الحاويات، لكن استمرارك باستخدامه من سطر الأوامر لن يكون عمليًّا مع تقدم سير العمل، وبالأخص في عمليات النشر واسعة النطاق أو تلك التي تتطلب التحكم بعدة حاويات تعمل معًا على التوازي. لذا يستخدم المطورون أداة Docker Compose، حيث تكتب ملف yml. واحد لكل حاوية يتضمن إعداداتها والمعلومات التي تحتاجها للتواصل مع بقية الحاويات. ويمكنك استخدام تعليمة docker compose لتطبيق الأوامر دفعةً واحدة على جميع الأجزاء المكوّنة لتطبيقك والتحكم بها على أنها مجموعة. تُستخدم أداة Docker Compose أيضًا لإدارة سجل دوكر ومكوناته فهو تطبيق في نهاية الأمر ويتكون من عدة أجزاء. لتشغيل مثيل instance لسجل Docker على Docker Compose عليك إعداد الملف docker-compose.yml لتعريف السجل، وتوفير مساحة تخزينية له على القرص الصلب ليُخزّن البيانات. أنشئ في البداية مجلدًا اسمه docker-registry على الخادم المضيف وفق التالي، إذ سنُخزّن فيه إعدادات السجل: $ mkdir ~/docker-registry انتقل إلى المجلد الجديد بكتابة التالي: $ cd ~/docker-registry وأنشئ بداخله مجلدًا فرعيًّا باسم data، وفق الأمر التالي حيث سيُخزّن السجل صور الحاويات بداخله: $ mkdir data أنشئ أيضًا ملفًا نصيًّا باسم docker-compose.yml باستعمال محرر نصوص مثل نانو كما يلي: $ nano docker-compose.yml واكتب ضمنه المعلومات التالية، التي تُعرّف المثيل الأساسي لسجل Docker: version: '3' services: registry: image: registry:latest ports: - "5000:5000" environment: REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data volumes: - ./data:/data لنشرح المعلومات السابقة، عرّفنا في البداية خدمةً جديدة باسم registry، وحددنا الصورة التي ستُبنى انطلاقًا منها وهي registry، أما الكلمة latest فتعني أنك تطلب استخدام أحدث إصدار متوفر من الصورة، وفي القسم التالي وجهّنا المنفذ port رقم 5000 على الخادم المضيف إلى المنفذ 5000 على الحاوية، وذلك يعني أن الطلبات الواردة إلى المنفذ 5000 على الخادم سترسل مباشرةً إلى السجل. أما في قسم بيئة العمل environment فقد أسندنا القيمة data/ للمتغير REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY وهو المسؤول عن تحديد المجلد المخصص لتخزين بيانات السجل. وفي القسم volumes وصلنا المجلد data/ على نظام ملفات الخادم المضيف بالمجلد data/ داخل الحاوية، الذي يُعدّ بمثابة معبر فقط إذ ستُخزّن البيانات فعليًّا على الخادم المضيف. احفظ التغييرات على الملف، وأغلقه وشغّل الآن الإعدادات بتنفيذ الأمر التالي: $ docker compose up سيبدأ تحميل حاوية السجل مع اعتمادياتها، وستصبح في وضع التشغيل، ثم ستحصل على خرج يشبه التالي: [+] Running 2/2 ⠿ Network docker-registry_default Created 0.1s ⠿ Container docker-registry-registry-1 Created 0.1s Attaching to docker-registry-registry-1 docker-registry-registry-1 | time="2024-01-19T14:31:20.40444638Z" level=warning msg="No HTTP secret provided - generated random secret. This may cause problems with uploads if multiple registries are behind a load-balancer. To provide a shared secret, fill in http.secret in the configuration file or set the REGISTRY_HTTP_SECRET environment variable." go.version=go1.16.15 instance.id=4fb8d420-eaf8-4a69-b740-bdc94fa52d91 service=registry version="v2.8.1+unknown" docker-registry-registry-1 | time="2024-01-19T14:31:20.404960549Z" level=info msg="redis not configured" go.version=go1.16.15 instance.id=4fb8d420-eaf8-4a69-b740-bdc94fa52d91 service=registry version="v2.8.1+unknown" docker-registry-registry-1 | time="2024-01-19T14:31:20.412312462Z" level=info msg="using inmemory blob descriptor cache" go.version=go1.16.15 instance.id=4fb8d420-eaf8-4a69-b740-bdc94fa52d91 service=registry version="v2.8.1+unknown" docker-registry-registry-1 | time="2024-01-19T14:31:20.412803878Z" level=info msg="Starting upload purge in 52m0s" go.version=go1.16.15 instance.id=4fb8d420-eaf8-4a69-b740-bdc94fa52d91 service=registry version="v2.8.1+unknown" docker-registry-registry-1 | time="2024-01-19T14:31:20.41296431Z" level=info msg="listening on [::]:5000" go.version=go1.16.15 instance.id=4fb8d420-eaf8-4a69-b740-bdc94fa52d91 service=registry version="v2.8.1+unknown" ... يتضمن الخرج السابق رسالة تحذير مفادها عدم توفر اتصال HTTP آمن No HTTP secret provided، لا تقلق سنعالجها في الفقرات القادمة. إذا دققت في السطر الأخير، ستجده يعلمك بإتمام عملية التشغيل بنجاح، وبأن السجل جاهز لاستقبال الطلبات على المنفذ 5000. يمكنك الآن الضغط على CTRL+C لإيقاف التنفيذ. إذًا فقد أنشأنا في هذه الخطوة إعدادات Docker Compose التي شغّلت سجل Docker على المنفذ 5000، وسنعمل في الخطوات التالية على استعراضه باسم النطاق المخصص له، وعلى ضبط إعدادات المصادقة Authentication للتحكم بصلاحية الوصول إليه. الخطوة 2: ضبط إعدادات التوجيه لمنفذ Nginx ذكرنا في بداية المقال أن تفعيل بروتوكول HTTPS على اسم نطاقك هو أحد متطلبات العمل الأولية، وسنعمل الآن على توجيه حركة مرور البيانات من اسم النطاق إلى حاوية السجل لنضمن أن الوصول لسجل Docker سيجري عبر اتصالٍ آمن. لابد أنك جهزت الملف etc/nginx/sites-available/your_domain/ أثناء إعدادك لخادم Nginx، إذ يحتوى هذا الملف على قسمٍ خاص بإعدادات الخادم، افتحه بواسطة أي محرر نصوص وفق التالي، لنجري عليه بعض التعديلات: $ sudo nano /etc/nginx/sites-available/your_domain ابحث ضمنه عن القسم المسمى location: ... location / { ... } ... المطلوب في حالتنا أمران: توجيه حركة مرور البيانات إلى المنفذ 5000 الذي يتلقى السجل عبره الطلبات، وإضافة ترويسات headers للطلبات الموجهة إلى السجل تحتوي معلوماتٍ إضافية عنها يضيفها الخادم. استبدل محتوى القسم location بالتالي لتنفيذهما: ... location / { # Do not allow connections from docker 1.5 and earlier # docker pre-1.6.0 did not properly set the user agent on ping, catch "Go *" user agents if ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" ) { return 404; } proxy_pass http://localhost:5000; proxy_set_header Host $http_host; # required for docker client's sake proxy_set_header X-Real-IP $remote_addr; # pass on real client's IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 900; } ... تتأكد الجملة if من توفر عدة شروط قبل أن تسمح للطلب بالمرور إلى السجل، فتتحقق من وكيل المستخدم صاحب الطلب User Agent، ومن كون إصدار Docker الذي يستعمله أعلى من 1.5، ومن أنه ليس تطبيق مبرمج بلغة Go ويسعى للوصول إلى السجل. يمكنك معرفة المزيد عن ترويسة nginx بمراجعة دليل إعداد Ngin لسجل Docker من توثيقات Docker الرسمية. احفظ التغييرات على الملف، وأعِد تشغيل Nginx بكتابة التعليمة التالية، حتى تأخذ التغييرات مفعولها: $ sudo systemctl restart nginx إذا حصلت على أي رسالة خطأ تفيد بعدم نجاح عملية إعادة التشغيل، فتحقق مجددًا من صحة التعديلات التي أجريتها على الملف. سنشغل السجل الآن لنتأكد من توجيه Nginx الطلبات الواردة إلى حاوية السجل، اكتب الأمر التالي: $ docker compose up استعرض العنوان التالي في متصفحك، والذي يتضمن اسم النطاق يليه v2 نقطة الوصول endpoint: https://your_domain/v2 سيعرض لك المتصفح كائن JSON فارغ على الشكل: وستحصل في الطرفية على الخرج التالي: docker-registry-registry-1 | time="2024-01-19T14:32:50.082396361Z" level=info msg="response completed" go.version=go1.16.15 http.request.host=your_domain http.request.id=779fe265-1a7c-4a15-8ae4-eeb5fc35de98 http.request.method=GET http.request.remoteaddr=87.116.166.89 http.request.uri="/v2" http.request.useragent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36" http.response.contenttype="text/html; charset=utf-8" http.response.duration="162.546µs" http.response.status=301 http.response.written=39 docker-registry-registry-1 | 172.19.0.1 - - [19/Nov/2022:14:32:50 +0000] "GET /v2 HTTP/1.0" 301 39 "" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36" docker-registry-registry-1 | 172.19.0.1 - - [19/Nov/2022:14:32:50 +0000] "GET /v2/ HTTP/1.0" 200 2 "" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36" docker-registry-registry-1 | time="2024-01-19T14:32:50.132472674Z" level=info msg="response completed" go.version=go1.16.15 http.request.host=your_domain http.request.id=0ffb17f0-c2a0-49d6-94f3-af046cfb96e5 http.request.method=GET http.request.remoteaddr=87.116.166.89 http.request.uri="/v2/" http.request.useragent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36" http.response.contenttype="application/json; charset=utf-8" http.response.duration=2.429608ms http.response.status=200 http.response.written=2 يخبرك السطر الأخير أن الطلب GET قد وصل إلى نقطة الوصول /v2/ المذكورة في العنوان الذي طلبته من المتصفح، واستقبلته حاوية السجل (بفضل إعدادات التوجيه التي عملنا عليها) وأرسلت استجابة بكائن JSON {} مع رمز الاستجابة 200 الذي يشير لنجاح العملية. اضغط الآن CTRL+C لإيقاف التنفيذ. أنهينا بذلك إعدادات التوجيه وننتقل لإعدادات تأمين السجل. الخطوة 3: ضبط إعدادات المصادقة Authentication يتيح Nginx لمستخدمه إعداد آلية مصادقة Authentication باسم مستخدم وكلمة مرور لتقييد الوصول إلى مواقعهم المستضافة عليه وذلك بإنشاء ملف مصادقة htpasswd وكتابة أسماء المستخدمين المسموح له بالوصول إليه مع كلمات مرورهم. سنستخدم هذه الآلية هنا لحماية سجل Docker. يمكنك الحصول على الأداة htpasswd بتثبيت الحزمة apache2-utils وفق الأمر التالي: $ sudo apt install apache2-utils -y سننشئ الآن المجلد docker-registry/auth/~ لتخزين ملف المصادقة الذي يتضمن بيانات الاعتماد، وفق ما يلي: $ mkdir ~/docker-registry/auth انتقل للمجلد الجديد بكتابة التالي: $ cd ~/docker-registry/auth نفذّ الأمر المبين أدناه لإنشاء المستخدم الأول، واستبدل العبارة username باسم المستخدم الفعلي، واحرص على كتابة الراية B- فهي مسؤولة عن تفعيل خاصية التشفير bcrypt التي تشترطها Docker: $ htpasswd -Bc registry.password username سيُطلب منك إدخال كلمة المرور الخاصة بهذا المستخدم، أدخلها بدقة. وستخزن بيانات الاعتماد هذه التي أدخلتها في registry.password. ملاحظة: أعِدّ تنفيذ الأمر السابق بدون الراية c- لإضافة مستخدمين آخرين إلى الملف وفق التالي: $ htpasswd -B registry.password username إذ تشير الراية c- إلى إنشاء ملف جديد، وتعني إزالتها التعديل على الملف الحالي (أي إضافة مستخدمين جدد). عدّل الآن الملف docker-compose.yml ليستخدم Docker ملف بيانات الاعتماد -الذي أنشأناه- لإجراء المصادقة مع المستخدمين للتحقق من هوياتهم. افتح أولًا الملف بكتابة التالي: $ nano ~/docker-registry/docker-compose.yml أضف الأجزاء المتعلقة بالمصادقة إلى محتواه، ليصبح كما يلي: version: '3' services: registry: image: registry:latest ports: - "5000:5000" environment: REGISTRY_AUTH: htpasswd REGISTRY_AUTH_HTPASSWD_REALM: Registry REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.password REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data volumes: - ./auth:/auth - ./data:/data أضفت بهذه التعديلات بعض المتغيرات إلى متغيرات البيئة لفرض استخدام المصادقة مع بروتوكول HTTP، ولتوفير مسار الملف htpasswd. فقد حدد المتغير REGISTRY_AUTH الذي يحمل القيمة htpasswd مخطط المصادقة المستخدم أو authentication scheme، وأُسندت القيمة التي تدل على مسار ملف المصادقة إلى المتغير REGISTRY_AUTH_HTPASSWD_PATH، أما المتغير REGISTRY_AUTH_HTPASSWD_REALM فيوضح نطاق تنفيذ المصادقة htpasswd. وفي السطر ما قبل الأخير وصلت المجلد auth/. إلى داخل حاوية السجل ليكون متاحًا ضمنها. احفظ التغييرات على الملف وأغلقه. ودعنا نتأكد من استخدام السجل لإجراء المصادقة. توجه في البداية إلى مجلد السجل الأساسي بكتابة الأمر: $ cd ~/docker-registry شغّل السجل بتنفيذ ما يلي: $ docker compose up حدّث الصفحة في متصفح الويب إذا كان ما يزال مفتوحًا لديك، أو اطلب مجددًا اسم النطاق الذي حددته للسجل، ولاحظ الفرق. سيطلب منك في هذه المرة اسم مستخدم وكلمة مرور. أدخل البيانات الصحيحة وستحصل على الخرج السابق نفسه، كائن JSON فارغ كما يلي، وهو ما يشير لصحة التنفيذ: نجحت إذا عملية المصادقة وسُمح لك بالوصول للسجل بعد إدخال بيانات الاعتماد الصحيحة. يمكنك الخروج بالضغط على CTRL+C في نافذة الطرفية. خطوتنا التالية هي تحويل السجل إلى خدمة تعمل في الخلفية، وتقلع تلقائيًا، مع الإبقاء على المرونة التي تسمح لنا بإعادة تشغيلها. الخطوة 4: بدء تشغيل سجل Docker بصفته خدمة يعني تحويل سجل Docker إلى خدمة ضبط بعض الإعدادات في Docker Compose لإبقاء حاوية السجل في وضع التشغيل دائمًا، فتُقلع تلقائيًا مع إقلاع نظام التشغيل، ويُعاد تشغيلها بعد أي عطل. اكتب الأمر التالي، وافتح الملف docker-compose.yml لنجري عليه بعض التعديلات: $ nano docker-compose.yml ابحث ضمن الملف عن قسم السجل المسمى registry، واكتب تحته السطر التالي: ... registry: restart: always ... يعني ضبط المحدد restart على القيمة always أن حاوية السجل سيُعاد تشغيلها دائمًا بعد أي طارئ يسبب إيقافها. احفظ الآن التغييرات على الملف، وأغلقه لننتقل إلى الإجراء التالي. اكتب الأمر المبين أدناه لبدء تشغيل حاوية السجل بصفتها عملية تعمل في الخلفية background process، وذلك بتمرير الراية d-: $ docker compose up -d يمكنك إغلاق جلسة SSH والاطمئنان بأن حاوية السجل لن تتوقف فهي الآن تعمل في الخلفية. ستتناول الخطوة التالية زيادة حجم الملفات التي يُسمح برفعها على خادم Nginx ليناسب حجوم صور الحاويات التي ستحفظ على السجل. الخطوة 5: زيادة حجم الملفات المسموح رفعها على Nginx الحجم الأعظمي المسموح رفعه على خادم Nginx افتراضيًا هو 1m أي 1 ميجا بايت للملف الواحد، ويُعدّ صغيرًا نسبيًا موازنةً بحجوم صور الحاويات، لذا يتحتم علينا تغيره قبل البدء برفع الصور إلى السجل. يمكنك تغييره بتعديل قيمته في ملف إعدادات Nginx الموجود في المسار etc/nginx/nginx.conf/. افتح ملف إعدادات Nginx بكتابة الأمر التالي: $ sudo nano /etc/nginx/nginx.conf أضف السطر التالي إلى القسم http ضمنه: ... http { client_max_body_size 16384m; ... } ... زدنا بهذا التعديل الحجم الأعظمي للملف المسموح برفعه إلى 16 جيجا بايت، وذلك بضبط قيمة المحدد client_max_body_size على 16384m. احفظ التغييرات على الملف وأغلقه. أعِدّ تشغيل الخادم Nginx لتأخذ التغييرات مفعولها، وفق التالي: $ sudo systemctl restart nginx يمكنك الآن رفع الصور إلى السجلات بدون أي أخطاء تتعلق بالحجم من Nginx. الخطوة 6: نشر صور الحاويات على سجل Docker الخاص أصبح خادم السجل قادرًا على استيعاب الملفات كبيرة الحجم، لذا سنجرب نشر صورة تجريبية عليه، فإذا لم يتوفر لديك أي صورة لرفعها، يمكنك تحميل صورة أوبنتو من Docker Hub (سجل Docker العام) لتجرب نشرها على هذا السجل. افتح جلسة طرفية جديدة على الخادم العميل، ونفذّ الأمر المبين أدناه لتحميل صورة الحاوية ubuntu وتشغيلها (تذكر أننا طلبنا وجود خادمين ضمن المتطلبات الأولية خادم مضيف وخادم عميل): $ docker run -t -i ubuntu /bin/bash تمنحك الرايتان t- و i- واجهة صدفة shell تفاعلية لتُنفذ بواسطتها الأوامر داخل حاوية أوبنتو. أنشئ الآن ملفًا يدعى SUCCESS داخل حاوية أوبنتو وفق التالي: root@f7e13d5464d1:/# touch /SUCCESS أنشأنا هذا الملف داخل الحاوية كنوع من التخصيص لتمييزها عن غيرها، فيمكننا لاحقًا استعراضه للتأكد من استخدامنا الحاوية الصحيحة. اخرج من صدفة الحاوية بكتابة التالي: root@f7e13d5464d1:/# exit أنشئ الآن صورة عن هذه الحاوية بعد تخصيصها، بكتابة الأمر التالي: $ docker commit $(docker ps -lq) test-image أصبح لديك صورة عن حاوية أوبنتو المخصصة محفوظة محليًا على خادمك، سجِّل دخول إلى سجل Docker وفق التالي لنحاول نشرها عليه: $ docker login https://your_domain سيُطلب منك إدخال اسم مستخدم وكلمة مرور، أدخل بيانات أحد المستخدمين الذين أنشأتهم في الخطوة 3 قبل قليل، وستحصل على الخرج التالي: Login Succeeded بعد تسجيل الدخول بنجاح عدّل تسمية صورة الحاوية كما يلي: $ docker tag test-image your_domain/test-image انشرها الآن على سجلك بكتابة الأمر التالي: $ docker push your_domain/test-image وستحصل على خرج يشبه ما يلي يؤكد لك نجاح العملية: Using default tag: latest The push refers to a repository [your_domain/test-image] 1cf9c9034825: Pushed f4a670ac65b6: Pushed latest: digest: sha256:95112d0af51e5470d74ead77932954baca3053e04d201ac4639bdf46d5cd515b size: 736 إذًا فقد نشرنا صورة حاوية Docker على السجل الخاص، وتأكدنا من فعالية عملية المصادقة، إذ لم نتمكن من الوصول للسجل والنشر عليه بدون إدخال اسم مستخدم وكلمة مرور صحيحين، لنختبر الآن سحب الصور من السجل. سحب الصور من سجل Docker الخاص سنحاول سحب الصورة نفسها التي نشرتها على السجل في الخطوة السابقة. اكتب الأمر التالي، وسجل دخول إلى سجل Docker من الخادم الرئيسي باستخدام بيانات المستخدمين الذين أنشأتهم سابقًا: $ docker login https://your_domain جرّب سحب الصورة test-image من السجل كما يلي: $ docker pull your_domain/test-image حمَّل Docker الآن هذه الصورة إلى خادمك المحلي، شغّل حاوية جديدة باستخدامها عبر كتابة ما يلي: $ docker run -it your_domain/test-image /bin/bash يوفر لنا هذا الأمر صدفة shell تفاعلية مع الحاوية المُشغّلة. اكتب ضمنها الأمر التالي لنستعرض نظام ملفاتها: root@f7e13d5464d1:/# ls لاحظ الخرج التالي، إنه يتضمن الملف SUCCESS الذي أنشأناه قبلًا لتمييز صورة الحاوية قبل نشرها على السجل، وهذا يؤكد أن الحاوية المُشغّلة حاليًّا مبنية على الصورة نفسها المسحوبة من السجل: root@f7e13d5464d1:/# SUCCESS bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var اخرج الآن من صدفة الحاوية بكتابة الأمر التالي: $ exit أنهينا بذلك إنشاء سجل Docker خاص وآمن لتخزين صور الحاويات التي تخصصها حسب احتياجاتك، وجربنا معًا نشر صورة تجريبية عليه وسحبها منه إلى الخادم المحلي. الخلاصة يساعدك هذا المقال التعليمي على إنشاء سجلك الخاص لحفظ صور حاويات Docker ونشر الصور عليه بمرونة وأمان، ويمكنك أيضًا الاستفادة من بعض الأدوات الخاصة بالتكامل المستمر لأتمتة عمليات النشر عليه. وتذكر دائمًا أن اعتمادك على حاويات Docker في سير عملك يعني أن الصور التي تتضمن الشيفرات البرمجية لتطبيقاتك ستعمل دائمًا بالصورة المطلوبة نفسها على أي جهاز وفي أي بيئة العمل سواءً في مرحلة التطوير أو الإنتاج. لمزيد من المعلومات عن حاويات Docker وتفاصيل التعامل معها، وطرق كتابة ملفات Docker، ننصحك بالاطلاع على مقالات قسم Docker باللغة العربية على أكاديمية حسوب أو على توثيقات Docker الرسمية. ترجمة -وبتصرف- للمقال How To Set Up a Private Docker Registry on Ubuntu 22.04 لصاحبيه Young Kim و Savic. اقرأ أيضًا ما هي تقنية Docker؟ استخدام الأمر docker exec في حاويات Docker مدخل إلى دوكر Docker تثبيت الأداة دوكر كومبوز Docker Compose واستخدامها ضمن نظام لينكس أوبونتو
-
الاستضافة السحابية Cloud Hosting هي التقنية التي تتيح لك استخدام الخوادم الافتراضية حسب طلبك عبر الإنترنت، إذ يمكنك إنشاؤها أو تعديلها أو حذفها وفق ما تريد. تُستضاف الخوادم السحابية على خوادم مادية موجودة لدى مزود الخدمة، وتأخذ منها الموارد الحاسوبية التي تحتاجها من وحدات معالجة وذواكر ومساحات تخزين وغيرها، وبإمكانك تثبيت نظم التشغيل والبرمجيات التي تختارها على الخوادم السحابية. تستخدم الاستضافة السحابية عمومًا لاستضافة مواقع الويب أو التطبيقات الموزعة المعتمدة على الويب أو أي خدمات أخرى مشابهة. يتناول المقال المفاهيم الأساسية للاستضافة السحابية، ويشرح آلية عمل الحوسبة الافتراضية Virtualization مع عرضٍ لأهم مكوناتها، وأخيرًا مقارنة موجزة بين الاستضافة السحابية والاستضافات الأخرى. ما هي السحابة؟ السحابة مصطلح شائع يشير إلى الخوادم المتاحة للاستخدام العام عبر الإنترنت، وذلك إما باستئجارها استئجارًا مدفوعًا أو استخدامها بوصفها جزءًا من برنامج أو منصة خدمية. تتنوع الخدمات السحابية التي تستطيع استخدامها ومنها مثلًا: استضافة مواقع الويب، واستضافة الملفات ومشاركتها، واستضافة البرامج الموزعة وغير ذلك. تشير السحابة أيضًا إلى الحوسبة السحابية Cloud Computing، وهي التقنية التي تتيح لك توسيع نطاق المهمة التي تنفذها لتشمل خوادم متعددة، فبدلًا من تنفيذها على خادم واحد بمواصفات عالية توزع المهمة على مجموعة خوادم أصغر تسمى العقد nodes. كيف تعمل الحوسبة الافتراضية؟ تتضمن بيئة الاستضافة السحابية مكونين رئيسيين: الخوادم الافتراضية التي تستضيف التطبيقات ومواقع الويب، والمضيفين الماديين المسؤولين عن إدارة الخوادم الافتراضية، وتتمثل الحوسبة الافتراضية في العلاقة بينهما، وهي التي تمنح الاستضافة السحابية مرونتها وقابليتها للتوسع مميزةً إياها عن الاستضافات الأخرى. الخوادم الافتراضية Virtual Servers الخادم الافتراضي الخاص Virtual private server أواختصارًأ VPS هو الأسلوب الأكثر انتشارًا للاستضافة السحابية، وخادم VPS هو خادم افتراضي يكافئ في عمله الحاسوب المادي، وله نظام تشغيله الخاص وعملياته الخاصة، ورغم أن الخوادم الافتراضية الموجودة على المضيف نفسه تتشارك في موارده الفيزيائية إلّا أن عمليات كل خادم افتراضي تبقى مستقلة تمامًا عن عمليات الخوادم الافتراضية الأخرى، فلا تتأثر أو تؤثر بها. تُنشر الخوادم الافتراضية وتُدار بواسطة برنامج خاص يسمى المراقب Hypervisor ويكون موجودًا على المضيف الفيزيائي، وبواسطته تُثبت نظم التشغيل على الخوادم الافتراضية. عمليًّا يعادل استخدام الخادم الافتراضي استخدام خادم مادي مخصص فلن تشعر بفرق بينهما، رغم أن الخادم الافتراضي يتشارك موارد مضيفه مع الخوادم الافتراضية الأخرى التي تقاسمه الاستضافة. المضيفون Hosts المُضيف هو الخادم الفيزيائي أو المادي الذي يستضيف الخادم الافتراضي، ويزوده بالموارد الحاسوبية اللازمة لعمله. يستخدم المُضيف طبقة برمجية تدعى برنامج المراقب Hypervisor لإدارة الموارد الحاسوبية ونشرها ومنحها للخوادم الافتراضية الموجودة تحت سلطته. يستخدم البعض مصطلح Hypervisor للإشارة إلى المضيفين الفيزيائيين المّثبت عليهم برامج المراقب مع خوادمهم الافتراضية. يخصص المضيف كل خادم افتراضي بذاكرة، ووحدات معالجة مركزية CPU، واتصالًا شبكيًا بمجرد تشغيله، ويعمل المراقب على جدولة العمليات بين CPU الافتراضية ونوى المعالجة الحقيقية في مهمة مستمرة وعالية الدقة فقد تستخدم خوادم افتراضية متعددة نوى المعالجة الحقيقية نفسها. يوجد عدة أنواع لبرنامج المراقب، تختلف عن بعضها بطريقة جدولة العمليات ومشاركة الموارد. المراقبون Hypervisors يتوفر لمضيفي السحابة اليوم عددٌ قليل من برامج Hypervisor الشائعة، ولكل منها أساليبه الخاصة في الحوسبة الافتراضية، لكن مهما بلغت الاختلافات بينها فجميع برمجيات المراقب في نهاية الأمر تؤدي دورًا جوهريًا واحدًا، هو تأمين الأدوات التي يحتاجها المضيف لنشر الخوادم الافتراضية، وصيانتها، ونقلها، وحذفها حسب الطلب. KVM، تختصر العبارة Kernel-Based Virtual Machine أو الأجهزة الافتراضية المعتمدة على نواة لينكس. تمامًا كما يوحي الاسم فهي بنية تحتية للحوسبة الافتراضية مدمجة في نواة نظام لينكس، وبمجرد تفعيلها يتحول الخادم المثبت عليه لينكس إلى Hypervisor، ويمكنه استضافة الخوادم الافتراضية مباشرةً بدون أي إضافات أخرى. تختلف KVM عن بقية برامج Hypervisor بأنها لا تحتاج إلى القيام بعملية إنشاء أو محاكاة لمكونات نواة خاصة بالاستضافة الافتراضية. يمكنك التعرف عليها عن قرب بمراجعة المقال أساسيّات الحوسبة الافتراضيّة Virtualization باستخدام KVM على Red Hat Enterprise Linux. Xen، من أشهر برامج Hypervisor، يعتمد على نواته المصغرة الخاصة لتأمين الأدوات اللازمة لدعم الخوادم الافتراضية بدون الحاجة لإجراء أي تعديل على نواة المضيف كما في KVM، يدعم Xen طريقتين مختلفتين للحوسبة الافتراضية: تدعى الطريقة الأولى الحوسبة شبه الافتراضية Paravirtualization، ليست حوسبة افتراضية كاملة لأنها لا تجري محاكاةً للعتاد الصلب إنما فقط تعديلات على نظم تشغيل الخوادم الافتراضية لتتمكن من التخاطب معه بكفاءة، أما الطريقة الثانية تسمى الحوسبة الافتراضية بمساعدة العتاد الصلب أو HVM فإنها تستخدم ميزات خاصة موجودة في بعض أنواع العتاد الصلب لمحاكاة الخادم الافتراضي بدون أي تعديل على نظام التشغيل. لاقت HVM انتشارًا واسعًا حوالي العام 2006 وخصوصًا مع توفر المعالجات الاستهلاكية عالية الأداء التي سمحت لمعظم الحواسيب المكتبية والمحمولة بتحقيق الأداء نفسه عند تشغيلها أجهزة افتراضية أو حاويات معتمدة على النوى المصغرة مثل حاويات دوكر. ESXi، موجه للمؤسسات، طورته شركة VMware. ميزته الأساسية أنه لا يتطلب وجود نظام تشغيل على المضيف لأن ESXi نفسه يؤدي دور نظام التشغيل، يسمى هذا النوع من المراقبين بالنمط الأول type one، ويعمل بكفاءة عالية بسبب عدم وجود أي برمجية وسيطة بين العتاد الصلب والخوادم الافتراضية. Hyper-V، من أشهر تقنيات الحوسبة الافتراضية المستخدمة مع خوادم ويندوز، تجده بين خدمات النظام في ويندوز سيرفر ومعظم نسخ الويندوز الحديثة، يتوفر أيضًا بوصفه خادمًا مستقلًا يمكنك العمل معه مباشرةً بدون نظام تشغيل آخر. يمكنك قراءة المقال تطبيق Hyper-V في ويندوز 10 المتضمن خطوات إرشادية لتثبيت Hyper-V. لماذا أختار الاستضافة السحابية؟ تتبلور مميزات الحوسبة الافتراضية في بيئات الاستضافة السحابية، فيسهل في هذه البيئات بناء الخوادم الافتراضية، وإعدادها، وتخصيصها بالموارد حسب الطلب، ويمكنك مع مرور الوقت زيادة الموارد المخصصة أو إنقاصها حسب تغيرات عملك، أضف إلى ذلك ما يقدمه لك بعض مضيفي السحابة من توافرية عالية للخدمة، فيعملون على نقل الخادم الافتراضي من مراقب إلى آخر عند الحاجة بأدنى فترة ممكنة من التوقف عن العمل أو حتى دون أي توقف، ويؤمنون في بعض الحالات بديلًا عن الخادم الافتراضي يماثله تمامًا لينوب عنه في حال فشلت إحدى العقد. التخصيص يفضل المطورون غالبًا استخدام الخوادم الافتراضية الخاصة VPS لما توفره لهم من تحكم كامل ببيئتهم الافتراضية. فيحصلون افتراضيًا على حسابات الجذر ذات الصلاحيات الكاملة أو sudo، ليتمكنوا من تثبيت البرامج التي يحتاجونها أو التعديل عليها حسب طلباتهم. تبدأ أريحية التخصيص لديهم من حرية اختيار نظام التشغيل، إذ تقبل معظم برمجيات المراقب تثبيت أي نظام تشغيل على الخادم الضيف بدون قيود، بدءًا من النظم مفتوحة المصدر مثل لينكس و BSD إلى نظم المملوكة مثل ويندوز، وبعد اعتماد نظام التشغيل يستطيع كل مطور تثبيت البرمجيات التي يحتاجها بالتتابع ليصل للبنية الحاسوبية التي يحتاجها على الخادم السحابي، والتي قد تتضمن خادم ويب مثلًا أو قاعدة بيانات أو تطبيقًا جاهزًا للتوزيع أو غير ذلك. التوسعة تتميز الخوادم السحابية بمرونتها وقابليتها للتوسع أفقيًا وعموديًا، وهو أمرٌ تتفوق فيه الاستضافة السحابية على غيرها من الاستضافات، فمعظم الاستضافات الأخرى تقبل التوسعة إما أفقيًا أو عموديًا، ويرجع ذلك إلى البيئة الافتراضية المبني عليها الخادم السحابي، فموارده في نهاية الأمر جزءٌ من مجموعة موارد مادية أوسع بكثير، يمكنك نقلها إلى مراقبين آخرين أو إنشاء تكرارات عنها لديهم حسب الحاجة. التوسع الأفقي، أو scaling out هو زيادة عدد العقد في النظام العنقودي، قد يعني ذلك زيادة عدد خوادم الويب لتحسين إدارة حركة مرور البيانات إلى تطبيقك، أو إضافة خوادم لمناطق معينة لتسريع الاستجابة، أو زيادة عدد العاملين workers في قاعدة البيانات لرفع سرعة نقل البيانات أو غير ذلك. التوسع العمودي، أو scaling up يُقصد به ترقية خادم واحد، وزيادة موارده ليتمتع بمواصفات أعلى، بزيادة الذواكر المخصصة له أو نوى المعالجة المركزية أو غير ذلك، توفر هذه الموارد المحسنة البيئة اللازمة لتشغيل مثيلات البرامج الإضافية بكفاءة على الخادم، على سبيل المثال: إذا وسعت عدد عمال قاعدة البيانات، فإن ترقية الخادم عموديًا تعطيهم الموارد اللازمة للعمل بكفاءة أعلى. بقي التوسع العمودي لفترة طويلة الطريقة السائدة لرفع مواصفات الاستضافة السحابية، ثم تغير الأمر مع تقديم المزودين عروضًا اقتصادية للتوسعة الأفقية. بالنتيجة يستطيع المطورون توسعة استضافاتهم السحابية، إما أفقيًا بزيادة عدد عقد VPS التي يستخدمونها، أو عموديًا ترقية مواصفات الخادم، أو القيام بالأمرين معًا حسب احتياجات عملهم. الخلاصة نأمل أنك أخذت فكرةً جيدة عن آلية عمل الاستضافة السحابية، والعلاقة بين الخوادم الافتراضية والمراقب Hypervisor المسؤول عن إدارتها، وتبينت خصائص الاستضافة السحابية التي تميزها عن غيرها من الاستضافات، لتتمكن من اختيار الاستضافة المناسبة لحالتك. ترجمة -وبتصرف- للمقال An Introduction to Cloud Hosting لصاحبه Josh Barnett. اقرأ أيضًا المقال السابق: نظرة عامة على الحوسبة السحابية مقدمة إلى الخوادم السحابية مفهوم السحابة Cloud كل ما تود معرفته عن السحابة الهجينة Hybrid Cloud تعلم الحوسبة السحابيّة: المتطلبات الأساسيّة، وكيف تصبح مهندس حوسبة سحابيّة
-
تقدم لنا الواجهات الرسومية أو GUI تجربةً بصرية بديهية، وسهلة الاستخدام للتعامل مع الحواسيب والهواتف الذكية، والأجهزة اللوحية، فتجدنا ننتقل بين التطبيقات وصفحات الويب والمستندات والصور بنقرات بسيطة على الأيقونات والقوائم المنسدلة وبقية عناصر سطح المكتب التي توفرها نظم التشغيل المختلفة، مثل: ويندوز وماك ولينكس. وعلى الرغم من سهولة استخدامها من قبل المستخدم العادي إلّا أن واجهات المستخدم الرسومية تبقى قاصرة نوعًا ما عن منحنا التحكم الإداري الكامل بالأجهزة بالكيفية التي نريدها، فقد تمنعنا من عمليات التثبيت أو التعديل أو الحذف لبعض البرامج والميزات والملفات، وهنا يبرز دور واجهة سطر الأوامر. يشار لها بالرمز CLI وهو اختصار command-line interface، ويُعدّ إتقانها والتعود على استخدامها عبر الطرفية Terminal من أهم طرق التنقل بين حاسوبك الشخصي والخوادم السحابية، بغرض الوصول إليها والتحكم بها عن بعد بدون الحاجة للواجهات الرسومية. توجد الواجهات الطرفية (التي تكتب ضمنها الأوامر) في معظم نظم التشغيل الحاسوبية، وتتوفر لها محاكيات خاصة بهيئة تطبيقات تُثبّت على الهواتف الذكية والأجهزة اللوحية. وهي تمنح المستخدمين تحكمًا أكبر بأجهزتهم عبر تعزيز صلاحيات الوصول المتاحة لمدير النظام administrator، وزيادة قدرة المستخدم على تخصيص بيئات العمل، وأتمتة العمليات التي يحتاجها، وإعطائه إمكانية الوصول إلى الأجهزة البعيدة، مثل الخوادم السحابية. إذا كنت من مستخدمي واجهة سطر الأوامر الجدد، فسيعطيك هذا التمهيد فكرةً جيدة عن أساسيات استخدامها عبر الطرفية، وستكون في نهايته قادرًا على تطبيقها مع لينكس وماك، سواء على حاسوبك الشخصي أو على الخوادم. لمعلومات أكثر يمكنك أيضًا الاطلاع على مقال مقدمة إلى طرفية لينكس، ومقال دليل استخدام سطر الأوامر في عملية تطوير الويب من طرف العميل. فهم النافذة الطرفية عندما تستخدم حاسوبًا أو أي هاتف محمول لأول مرة عبر الواجهات الرسومية، ستبدأ رحلة التعرف عليه باستعراض التطبيقات الموجودة، وأماكن توضع الأشياء، لتتمكن من تخصيصه حسب احتياجاتك، والحالة نفسها لاستكشافه مع الطرفية، وهو ما سنتعرف عليه تباعًا ضمن المقال. الطرفية المستخدمة هنا هي طرفية أوبنتو 20.04، إحدى أشهر توزيعات لينكس، المبني أساسًا على يونيكس، فإذا كان نظام التشغيل على حاسوبك هو لينكس أو ماك يمكنك تطبيق الأمثلة الواردة هنا بحرفيتها، فطرفية النظامين مشابهة لطرفية أوبنتو المعتمدة في المقال، وكليهما مبني على يونيكس. وإذا كنت تستخدم ويندوز يمكنك الاستعانة بمقال تثبيت نظام لينكس داخل نظام ويندوز في بيئة وهمية لتهيئة بيئة لينكس على حاسوبك نفسه. افتح الآن الطرفية على حاسوبك أو استخدام أحد المواقع التي توفر طرفيات تفاعلية للتجربة مثل Glitch.com، وستحصل على نافذة شبيهة بهذه الصورة. لاحظ رمز الدولار $ والمؤشر الوامض هنا ستبدأ الكتابة. تدّل الرموز الموجودة في نهاية محث الأوامر prompt على مستوى مستخدم الطرفية، وفق التالي، وهي تنطبق على معظم نظم التشغيل المعتمدة على يونيكس أو التي تسمى nix*: رمز الدولار $ للمستخدم العادي أي أنك سجلت دخول بحساب مستخدم عادي. رمز المربع# للمستخدم صاحب أعلى الامتيازات. يُعرف المستخدم ذو الرمز # بأنه مستخدم الجذر Root، ويُعدّ مستخدمًا مميزًا أو مدير النظام الافتراضي. ستجد الرمز $ في جميع الأمثلة هنا فقد طبقت بواسطة مستخدم عادي، لكنه يستطيع الحصول على امتيازات الجذر باستعمال الأمر sudo. افتح الطرفية على حاسوبك لنبدأ بالأمثلة العملية. التآلف مع المجلدات الأوامر التي نكتبها في سطر الأوامر هي تعليمات تخبر حاسوبك بما تريد تنفيذه، تكتب الأمر، ثم تضغط على زر ENTER أو RETURN ليبدأ التنفيذ. اكتب مثلًا الأمر التالي في الطرفية، واضغط ENTER: $ pwd نفذ الأمر، وستحصل على الخرج التالي: /home/sammy يرمز الأمر pwd إلى مجلد العمل الحالي، وهو اختصار للعبارة present working directory، ويساعدك على معرفة مكان وجودك الحالي ضمن نظام الملفات أي المجلد الذي تُنفذ منه الأوامر. مجلد العمل الحالي في مثالنا هو home/sammy/، وsammy هو اسم المستخدم، قد يكون أي اسم آخر، فإذا سجلت دخولًا بحساب مستخدم الجذر root صاحب أعلى الامتيازات، فسيكون مجلد العمل الحالي root/، وعلى حاسوبك الشخصي سيسمى المجلد باسم المستخدم الذي تستعمله، غالبًا ما يطلق مالك الحاسوب اسمه على المستخدم فتجد المجلد باسمه أيضًا. مجلد العمل الحالي فارغ الآن، لذا سننشئ ضمنه مجلدًا جديدًا اسمه الملفات أو files مثلًا، نخزن فيه الملفات التي ستطبق عليها أمثلة المقال. تُنشَأ المجلدات بواسطة الأمر mkdir، وهو اختصار لعبارة make directory، ثم نكتب اسم المجلد الذي نود إنشائه بعد الأمر mkdir، يلعب اسم المجلد هنا دور الوسيط، لأنه يمرر القيمة المدخلة إلى الأمر حتى يأخذ بها عند التنفيذ. يشبه الوسيط المفعول به في القواعد النحوية، فهو يمثل ما يتصرف به الفعل أو الأمر البرمجي في حالتنا. اكتب السطر التالي في الطرفية لديك، يبدأ السطر بالأمر mkdir، ويليه الوسيط files وهو اسم المجلد الذي ننشئه: $ mkdir files اضغط Enter ونفذ الأمر، وفور ظهور المؤشر الوامض في السطر التالي سيكون مجلدك الجديد قد أُنشئ، وتكون جاهزًا لكتابة الأوامر التالية، لن تحصل على خرج يخبرك بإتمام عملية الإنشاء، فقط المؤشر الوامض. عرض محتويات المجلدات وفهم صلاحيات العمل عليها سنستخدم الأمر ls المستوحى من كلمة list، لإظهار محتويات مجلد العمل الحالي (حيث أنشأنا مجلدنا الجديد)، يمكنك بهذه الطريقة التثبت من صحة إنشائه بما أنك لم تحصل على خرج صريح يؤكد ذلك. $ ls انظر الخرج، أنه يؤكد وجود المجلد files: files يعطيك هذا الأمر معلومات عامة عن محتويات مجلد العمل الحالي، وتستطيع الحصول على معلومات تفصيلية أكثر باستعمال الرايات Flags. تكتب الرايات في لينكس بشكل شرطة - متبوعة بحرف. تُمرِر الرايات للأمر الأساسي خياراتٍ إضافية أو وسطاء إضافيين. فعلى سبيل المثال يمكنك إضافة الراية l- للأمر السابق ليظهر خرجه بتنسيق قائمة طويلة فيها معلومات مفصلة عن محتويات المجلد. جرب كتابة الأمر مع الراية كما يلي: $ ls -l اضغط زر ENTER للتنفيذ، وستحصل على الخرج الآتي: total 4 drwxr-xr-x 2 sammy sammy 4096 Nov 13 18:06 files يشير السطر الأول من الخرج إلى عدد الكتل blocks المحجوزة للمجلد في ذاكرة الحاسوب، عددها هنا 4، أما السطر الثاني فيتضمن صلاحيات المستخدم على المجلد وبعض التفاصيل الأخرى. يمكنك أيضًا استعمال الراية h- أو human-readable-- لتحصل على خرج أكثر مقروئية، فيظهر الحجم المخصص للمجلد في الذاكرة مقدرًا بالكيلو بايت مثلًا أي بصيغة أسهل للقراءة والفهم، كما هو موضح أدناه. ستلاحظ عند تعاملك مع الرايات: أن الشرطة الوحيدة - تشير إلى راية يُعبر عنها بحرف وحيد، والشرطتان -- إلى الرايات التي تكتب بالكلمات، وتستخدم بعض الرايات الصيغتين فقد تكتب بحرف وحيد أو بالكلمات، يمكنك أيضًا كتابة أمر متعدد الرايات أو متعدد الوسطاء بتجميع رموز عدة رايات معًا مثل lh-. انظر الأمرين أدناه لهما المعنى نفسه تمامًا، لكن كل منهما مكتوب بطريقة: $ ls -lh $ ls -l --human-readable سيعطي كلاهما الخرج نفسه، وهو مشابه لما حصلنا عليه سابقًا مع فارقٍ وحيد، إذ سيظهر الحجم بتنسيق سهل القراءة بسبب الراية الخاصة بالمقروئية: total 4.0K drwxr-xr-x 2 sammy sammy 4.0K Nov 13 18:06 files يبين الخرج السابق مجموعة معلومات عن المجلد، مثل: حجمه في الذاكرة 4K، وصلاحيات المستخدمين عليه وغير ذلك، انظر الجدول التالي للتوضيح: نوع الملف الصلاحيات عدد الوصلات اسم المالك مجموعة العمل حجم الملف تاريخ آخر تعديل اسم الملف d rwxr-xr-x 2 sammy sammy 4.0K Nov 13 18:06 files يتضمن الجدول سطرًا واحدًا فقط، لأننا نملك مجلدًا واحدًا files في مجلد العمل الحالي home/sammy/، ولو كان لدينا عدة مجلدات أو ملفات كنت ستجد سطورًا بعددها. لنوضح الآن الرموز الموجودة في بداية السطر الثاني من الخرج: المحرف الوصف d أي مجلد أو directory، والمجلد في علم الحاسوب هو العنصر التنظيمي الذي يحتوي عدة ملفات، وإذا لم يكن العنصر مجلدًا فستجد شرطة - بدل الحرف d r تعني صلاحية القراءة read، وتسمح للمستخدم بفتح الملف وقراءته، أو باستعراض محتويات المجلد w صلاحية الكتابة write، تتيح تعديل محتويات الملف، وإضافة ملفات إلى المجلد أو حذف بعض من ملفاته أو تغيير أسمائها x صلاحية تنفيذ ملف execute أو تشغيله كبرنامج، ومن جهة المجلدات تعني الصلاحية الدخول إلى المجلد والوصول إلى ملفاته حاول الآن قراءة الخرج السابق مجددًا، فلنبدأ بسلسلة المحارف drwx، يعني المحرف الأول d أن العنصر الموصوف هو مجلد، فلو كان نوعًا آخر، لبدأت السلسلة بالشرطة - بدلًا منه على هذا الشكل rwx-، أما المحارف الثلاثة التالية مخصصة لأذونات مالك المجلد، وتعني أن المالك لديه صلاحيات القراءة والكتابة والتنفيذ على مجلده المجلد files، وإن استبدل أي محرف منها بالشرطة - فسيفقد المالك الصلاحية التي يمثلها هذا المحرف. وتمثل المحارف الثلاثة التي تليها صلاحيات مجموعة العمل، وهي r-x في حالتنا، وتعني أن لدى المستخدمين المنتمين للمجموعة صلاحيات القراءة والتنفيذ على هذا المجلد، لكن لا يمكنهم التعديل عليه أبدًا فلا يملكون صلاحية الكتابة، إذ إن المحرف w مستبدل بالشرطة -. أما المحارف الثلاثة الأخيرة r-x فيقصد بها صلاحيات مجموعات العمل الأخرى على المجلد، وكما ترى تنحصر صلاحياتهم في القراءة والتنفيذ، ولا يملكون صلاحية الكتابة على المجلد. يشير الرقم 2 (الذي يلي سلسلة المحارف) إلى عدد روابط المجلد، تشبه الروابط Links في لينكس الاختصارات التي تسهل على المستخدمين الوصول إلى نظام الملفات. وعند تنشئ أي ملف أو مجلد سيبني له لينكس تلقائيًا رابطين، رابط مطلق، ورابط ذاتي المرجع يتيح الوصول إليه عبر مسار نسبي، سيتضح لك معنى النسبي والمطلق في القسم التالي من المقال. ويمكنك معرفة المزيد عن روابط لينكس بمراجعة المقال دليل المستخدم للروابط في نظام ملفات لينكس. ستجد بعد الرقم 2 كلمة sammy مكررة مرتين، تشير الأولى منها إلى اسم مالك المجلد، وقد تعرفنا على صلاحياته قبل قليل وهيrwx، أما لماذا sammy هو المالك فالسبب أننا أنشأنا المجلد files من حسابه. يفيدك دائمًا معرفة اسم المستخدم مالك الملفات في بيئة العمل الفعلية. وتدّل كلمة sammy الثانية على اسم مجموعة العمل المستفيدة من المجلد files أي التي تملك حق الوصول إليه، وصلاحياتها كما رأينا r-x، يتطابق اسم المستخدم هنا مع اسم مجموعة العمل، لكنه ليس أمرًا إلزاميًا، فستصادف في بيئات العمل الفعلية مجموعات عمل مختلفة، مثل: مجموعة الموظفين العاديين وقد يكون اسمها staff، ومجموعة مدراء النظام باسم admin مثلًا أو غير ذلك. أما بقية المعلومات الموجودة في الخرج فهي: الحجم المخصص للمجلد في الذاكرة، وقدره 4 كيلو بايت، بالإضافة إلى تاريخ آخر تعديل أجري عليه قبل تنفيذ التعليمة. أصبح لدينا الآن أرضية ننطلق منها لقسمنا التالي المتعلق بالتنقل عبر نظام الملفات. التنقل ضمن نظام الملفات تعلمت كيف تحدد موقعك الحالي في نظام الملفات، وكيف تنشئ مجلدًا جديدًا، وتستعرض محتوياته، وتحدد صلاحيات الوصول إليه والتحكم به. سنجرب الآن التنقل بين مجلدات نظام الملفات، أنشأنا المجلد files في المجلد الأساسي للمستخدم sammy وهو home/sammy/، فما طريقة الانتقال من home/sammy/ إلى home/sammy/files/؟ يمكنك الانتقال باستعمال الأمر cd، وهو اختصار للعبارة change directory التي تعني تغيير المجلد، اكتب إذًا السطر التالي في واجهة الطرفية لديك: $ cd files لن تحصل على رسالة أو خرج يؤكد لك صحة تنفيذ الأمر، وأنك في المسار home/sammy/files/، كما هو الحال مع أمر إنشاء المجلد في القسم السابق، ستتلقى فقط المؤشر الوامض، لذا استعمل الأمر pwd لتتأكد من ذلك: $ pwd سيظهر الخرج التالي: /home/sammy/files يؤكد الخرج السابق وجودك في المجلد home/sammy/files/ الذي يقع ضمن مجلد المستخدم home/sammy/، تبدو هذه المسارات المفصولة بالشرطات المائلة مألوفة بالنسبة لك؟ ملاحظتك صحيحة لأنها تشبه عناوين URL لمواقع الويب، فهذه المواقع في نهاية الأمر تتوضع ضمن مجلدات على خوادم الويب. يساعدك الأمر / cd على الوصول إلى المجلد الرئيسي للخادم من أي مكان في نظام الملفات: $ cd / نفذ الآن الأمر التالي لتستعرض محتويات المجلد الرئيسي: $ ls ستحصل على هذا الخرج: bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run s sbin srv sys tmp usr var هذه هي محتويات المجلد الرئيسي / لنظام لينكس، ويسمى أيضًا مجلد الجذر، وهو يختلف تمامًا عن مستخدم الجذر الافتراضي root، ويتمتع بأهمية كبيرة في نظام لينكس إذ يتضمن كل المجلدات الضرورية لعمل نظام التشغيل، فعلى سبيل المثال: يحتوي المجلد الفرعي sys على نواة النظام kernel، ومعلومات النظام عن نظام الملفات الافتراضي، يمكنك معرفة المزيد عن محتويات مجلد الجذر بمراجعة توثيقات لينكس الرسمية. لاحظ أن المجلد home/ الخاص بالمستخدمين موجودٌ هنا أيضًا، ويمكنك الانتقال إليه من مجلد الجذر / ثم الانتقال إلى المجلد files، أو استخدام الأمر cd والانتقال إلى files مباشرةً من مجلد الجذر / وفق التالي: $ cd /home/sammy/files نفذ الآن الأمر pwd وستحصل على home/sammy/files/ في الخرج. سنعرض الآن المسارات في لينكس، مسار الملف File Path هو توصيف لمكان وجود الملف أو المجلد على حاسوبك أو على الخادم، المسارات نوعان نسبي ومطلق، النسبي هو الذي يحدد موقع الملف أو المجلد الهدف نسبةً إلى مجلد العمل الحالي، يشبه طريقة انتقالنا إلى داخل المجلد /files عندما كنا في مجلد العمل الحالي home/sammy/. أما المسار المطلق فهو موقع الملف انطلاقًا من مجلد الجذر، كما فعلنا في الأمر أعلاه باستخدام home/sammy/files/، فقد بدأنا بمجلد الجذر /، ثم استدعينا home/sammy/، وبعدها /files الموجود بداخله، إذًأ فالمسار المطلق يبدأ دائمًا بإشارة الجذر /. النقط dot أيضًا هي أسلوب للتنقل عبر المسارات النسبية في لينكس. تشير النقطة الوحيدة . إلى مجلد العمل الحالي، والنقطتان .. إلى المجلد الأب، فمثلًا لو كنت في المجلد home/sammy/files/ يمكنك استخدام النقطتين للوصول إلى المجلد الأب home/sammy/، وفق التالي: $ cd .. يمكنك اختبار صحة التنفيذ باستخدام pwd لعرض مجلد العمل الحالي، ستحصل عندها على home/sammy/، وتستطيع أيضًا تنفيذ ls لعرض المحتويات فسيظهر لك المجلد files. يوجد رمزٌ آخر يفيدك في التنقل هو الرمز ~، ينقلك مباشرةً من أي مكان في نظام الملفات إلى المجلد الأساسي home للمستخدم الذي سجلت دخولًا باسمه، في مثالنا المسخدم هو sammy والمجلد الأساسي له يدعى home/sammy/، على حاسوبك سيكون باسم المستخدم الذي تنفذ الأوامر من حسابه. جرب الأمر التالي على الطرفية لديك، وسيأخذك بنقلة واحدة إلى المجلد الأساسي لمستخدمك: $ cd ~ سنتعلم في القسم التالي كيفية التعامل مع الملفات النصية. إنشاء الملفات النصية وتعديلها تأكد في البداية من وجدوك في المجلد /files، لديك طريقتين للقيام بذلك، إما الاستعلام عن مسار العمل الحالي بواسطة الأمر pwd، أو الانتقال مباشرة إلى المجلد بواسطة مساره المطلق وفق التالي: $ cd /home/sammy/files سننشئ الآن ملفًا نصيًا بلاحقة txt. وهي لاحقة قياسية يقرأها نظام التشغيل بدون أي برامج إضافية كما هو الحال مع ملفات doc. مثلًا. والنصوص المكتوبة ضمن الملفات من نوع txt. هي نصوص غير منسقة، يمكن استخدامها بسهولة داخل نافذة سطر الأوامر، أو عند التعامل مع النصوص برمجيًا، مثل: التحليل الآلي للنص، أو سحب المعلومات من نص معين، أو غير ذلك. سننشئ الملف بكتابة الأمر touch، المخصص لإنشاء الملفات النصية وتعديلها، ثم تمرير اسم الملف النصي بصفته وسيطًا له، وفق التالي: $ touch ocean.txt بمجرد الضغط على زر ENTER ستنتقل لسطر جديد في نافذة سطر الأوامر بدون أي رسالة تؤكد إنشاء الملف النصي، لذا يمكنك استعراض محتويات المجلد /files للتأكد من وجود الملف بداخله. $ ls وسيكون الخرج: ocean.txt أنشأنا إذًا الملف النصي ocean.txt لكنه فارغ، ولو أردنا إنشاء ملف نصي مجهز ببعض الكلمات فسيفيدنا في ذلك الأمر echo المخصص لعرض السلاسل النصية في نافذة سطر أوامر لينكس. يعمل الأمر echo على ترديد ما تكتبه بعده في نافذة سطر الأوامر. لنجرب ذلك بالعبارة المعتادة !Hello, World: $ echo Hello, World! وهذا هو الخرج: Hello, World! يأتي اسم echo أو الصدى من إيكو حورية الجبل التي تردد ما يقال لها فقط دون أي قدرة على حديث نابع من نفسها، حسب الأسطورة اليونانية القديمة في كتاب التحولات لأوفيد، والأمر echo هنا يكرر ما يكتب بعده فقط دون اجتهاد، وفي مثالنا أظهر العبارة !Hello, World كما هي في نافذة سطر الأوامر. أما لو رغبت باستخدامه لتخزين هذه العبارة أو غيرها في ملف نصي ما، فيتعين عليك كتابته بهذه الطريقة: $ echo "Sammy the Shark" > sammy.txt يبدأ السطر السابق بالأمر echo، يليه العبارة النصية التي نريد كتابتها في الملف، وبعده سهم إعادة التوجيه <، ثم اسم الملف النصي الجديد sammy.txt. تفحص الآن وجود الملف sammy.txt بواسطة الأمر ls وفق التالي: $ ls وسيكون الخرج: ocean.txt sammy.txt يظهر الخرج السابق وجود ملفين في المجلد home/sammy/files/، يمكنك استعراض الملف sammy.txt للتأكد من وجود العبارة النصية التي خزنتها فيه، وذلك باستخدام الأمر cat، وهو من أشهر أوامر لينكس، ويستعمل لعرض مضمون الملفات النصية ووظائف أخرى تتعلق بها: $ cat sammy.txt نفذ الأمر وستحصل على الخرج التالي: Sammy the Shark جرب استخدام cat مع الملف ocean.txt، لن تحصل على شيء لأنه فارغ من أي محتوى، أضف إليه أي عبارة تريدها بواسطة الأمر echo كما شرحنا سابقًا، سنضيف مثلًا اقتباسًا شهيرًا للكاتبة زورا نيل هيرستون، انظر للأمر التالي: $ echo "Some people could look at a mud puddle and see an ocean with ships." > ocean.txt استخدم cat معه مجددًا ولاحظ الفرق في الخرج: Some people could look at a mud puddle and see an ocean with ships. سنتعرف الآن على طريقة تعديل محتوى الملف النصي، ستحتاج لهذا العمل محرر نصوص يعمل مع سطر الأوامر، الخيارات متنوعة أبرزها: vim و Emacs و nano. سنستخدم هنا nano. يمكنك استدعائه بالأمر nano وتمرير اسم الملف الذي تريده تعديله بصفته وسيطًا له، انظر التالي: $ nano sammy.txt سيفتح الآن الملف sammy.txt، وتجد فيه المحتوى التالي: Sammy the Shark حرك المؤشرة باستعمال أسهم لوحة المفاتيح لتصل إلى نهاية العبارة الموجودة في الملف، واكتب ما تريده بعدها. لنفترض أنك أضفت التعديلات التالية إلى الملف: Sammy the Shark Hello, I am Sammy. I am studying computer science. Nice to meet you! حان الآن موعد الحفظ، فكيف تحفظ التعديلات؟ لاحظ الكلمات الموجودة في أسفل النافذة الطرفية لديك، تبدو مثل هذا: ^G Get Help ^O WriteOut ^R Read File ^Y Prev Page ^K Cut Text ^C Cur Pos ^X Exit ^J Justify ^W Where Is ^V Next Page ^U UnCut Text ^T To Spell هي تشرح نفسها نوعًا ما، فبجانب كل رمز كلمة توضح وظيفته. أو ما ينبغي معرفته أن الرمز ^ يشير لزر CTRL أو Control على لوحة المفاتيح. وما دام أننا أنهينا التعديلات سنضغط CTRL مع حرف X معًا لنحصل على مفعول Exit، ونغلق الملف، وانتبه لكتابة الحرف x حرف صغير أي بدون استخدام الزر Shift. CTRL x ستجدها في التوثيقات مكتوبة بصيغة CTRL + X أو Ctrl+x، وهي تعني الضغط على الزرين في الوقت نفسه. اضغط الزرين الآن، وستحصل مباشرةً على الرسالة التالية: Save modified buffer? Y Yes N No ^C Cancel اضغط الزر Y لحفظ التغييرات. Y وسيؤكد لك النظام عملية الحفظ بإظهار الخرج التالي: File Name to Write: sammy.txt تتضمن الرسالة خيارات إضافية مثل الضغط على CTRL + C للإلغاء، لكن إذا كنت واثقًا من رغبتك بالخروج من الملف اضغط على ENTER لحفظ التغييرات على الملف والخروج منه. لنفترض على سبيل المثال أنك تريد إنشاء عدد من الملفات النصية لطلبة أكاديمية حسوب، ملف لكل طالب، وسامي sammy هو أحد الطلاب، ستنشئ في البداية مجلدًا جديدًا يدعى الطلاب students مثلًا ضمن المجلد /files، ثم تنقل الملف sammy.txt إليه. أولًا تعليمة إنشاء المجلد: $ mkdir students والآن تعليمة النقل بواسطة الأمر mv (المستوحى من كلمة move)، يأخذ هذا الأمر وسيطين، الوسيط الأول هو الملف المراد نقله، والوسيط الثاني هو موقعه الجديد، انظر التعليمتين التاليتين فلهما النتيجة نفسها: $ mv sammy.txt students $ mv sammy.txt students/sammy.txt تعمل mv في التعليمة الأولى على نقل الملف مع الحفاظ على اسمه، أما في الثانية فيمكنك تغيير اسم الملف عند نقله إذا رغبت بذلك، تستطيع مثلًا كتابتها على الشكل التالي: mv sammy.txt students/sammy-the-shark.txt إذا استعرضت محتويات المجلد /files باستخدام الأمر ls، ستجد ضمنه الملف ocean.txt، والمجلد الجديد students، انتقل إلى المجلد /students، وفق الآتي: $ cd students أنت الآن ضمن المجلد /students، فلنفترض أنك تحتاج لاستخدام الملف sammy.txt على أنه قالب يسهل عليك إنشاء ملفات بقية الطلاب، فأول ما يتبادر إلى ذهنك هو نسخ الملف sammy.txt إلى عدة نسخ ثم التعديل عليها حسب بيانات كل طالب، تجري عملية النسخ باستخدام الأمرcp وهو اختصار لكلمة copy. وعلى غرار mv فإنه يأخذ وسيطين، الوسيط الأول اسم الملف الأصلي أي المطلوب نسخه، والوسيط الثاني اسم الملف الجديد، انظر التعليمة التالية لإنشاء نسخة من ملف الطالب سامي sammy.txt وتسميتها باسم جديد لتمثل طالب آخر أليكس alex.txt مثلًا: $ cp sammy.txt alex.txt افتح الآن الملف alex.txt باستخدام محرر النصوص، ستجد محتواه مطابق تمامًا لمحتوى الملف sammy.txt، عدّل البيانات التي تحتاج لتعديلها، ليصبح مثلًا كما هو مبين أدناه، ونود لفت انتباهك إلى قدرتك على حذف سطر كامل من الملف بخطوة واحدة، عبر الضغط على CTRL + K معًا: Alex the Leafy Seadragon Hello, I am Alex. I am studying oceanography. Nice to meet you! أغلق الملف الجديد الآن واحفظ التغييرات، بالضغط على CTRL + x ثم Y ثم ENTER. حاول إنشاء ملفات نصية أخرى للتدريب، وعندما تصبح جاهزًا انتقل معنا للقسم التالي لنتعرف على أوامر ومميزات جديدة. الإكمال التلقائي وسجل الأوامر المحفوظة توفر معظم واجهات سطر الأوامر مميزات، مثل: الإكمال التلقائي للأوامر، وإعادة استخدام الأوامر السابقة، تسهل عمل المستخدمين عليها، وتسرّع وتيرته. جرب بنفسك، حاول مثلًا كتابة الأمر cat مع الأحرف الأولى من أحد الملفات التي عملنا عليها نحو cat sa قبل أن تكمل اسم الملف sammy.txt بالكامل، اضغط على زر TAB من لوحة المفاتيح ولاحظ ميزة الإكمال التلقائي، فالطرفية ستكمل اسم الملف تلقائيًا وتظهره لك دون أن تكمل أنت كتابته، كما هو مبين أدناه: $ cat sammy.txt والآن إذا ضغطت ENTER ستنفذ التعليمة بطريقة طبيعية، ويظهر محتوى الملف النصي. حاول بعدها الضغط على السهم الأعلى UP من أسهم التمرير في لوحة المفاتيح، وشاهد ما سيظهر، ستجد أن الطرفية تعرض عليك آخر أمر نفذته، اضغط السهم UP بوتيرة أسرع وسترى الأوامر التي نفذتها مؤخرًا، يمكنك بذلك الوصول إلى الأمر الذي تريد إعادة تنفيذه دون كتابته من جديد. تستطيع أيضًا استعراض كافة الأوامر المستخدمة سابقًا في هذه الجلسة، باستخدام الأمر history: $ history ستحصل في الخرج على سجل يتضمن جميع الأوامر المحفوظة، مثل التالي: 1 pwd 2 mkdir files 3 ls 4 ls -l ... تفيدك هذه الاختصارات في رفع إنتاجيتك عند العمل مع واجهة سطر الأوامر. العمل مع الملفات عبر الويب تتيح لك واجهة سطر الأوامر، الموجودة على حاسوب متصل بالإنترنت، الوصول إلى جميع الموارد المتاحة على الويب، يمكنك مثلًا: الاتصال بخادم سحابي عن طريقها إذا كنت تعرف بيانات الاعتماد الخاصة به، أو إدارة البنية التحتية السحابية لشركتك، أو القيام بأنشطتك الخاصة بتطوير تطبيقات الويب أو غير ذلك. وما دام أنك تعلمت طريقة التعامل مع الملفات النصية، فستكون خطوتنا الأولى التعرف على كيفية سحب ملف نصي من الويب ليكون متاحًا على حاسوبك الشخصي. انتقل للمجلد /files: $ cd /home/sammy/files سنستخدم الآن الأمر crul، والذي يرمز إلى client URL، لجلب البيانات من الويب إلى طرفيتك. رفعنا -يقول كاتب المقال- ملف نصيًا لغرض التجربة يتضمن مقطعًا قصيرًا من رواية على خادم سحابي، وسنستخدم عنوان URL الخاص به في تعليمة crul التالية: $ curl https://assets.digitalocean.com/articles/command-line-intro/verne_twenty-thousand-leagues.txt ما إن تضغط على زر ENTER ستتلقى محتوى الملف النصي في واجهة الطرفية، وهو في حالتنا مقطعًا من رواية، وفق التالي: "You like the sea, Captain?" "Yes; I love it! The sea is everything. It covers seven tenths of the terrestrial globe. ... "Captain Nemo," said I to my host, who had just thrown himself on one of the divans, "this is a library which would do honor to more than one of the continental palaces, and I am absolutely astounded when I consider that it can follow you to the bottom of the seas." ظهر محتوى الملف النصي على واجهتك الطرفية، لكنه في الواقع لم يخزن على حاسوبك المحلي حتى الآن، يمكنك التأكد من ذلك بواسطة الأمر ls، فما طريقة تخزينه إذًا؟ الحل هو استخدام الخيار أو الراية O- مع الأمر curl، وعندها سيُخَزَّن الملف محليًا باسم الملف البعيد نفسه. $ curl -O https://assets.digitalocean.com/articles/command-line-intro/verne_twenty-thousand-leagues.txt وستحصل على رسالة في واجهة الطرفية، تخبرك بنجاح عملية التنزيل، تشبه صيغتها التالي: % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 2671 100 2671 0 0 68487 0 --:--:-- --:--:-- --:--:-- 68487 يمكنك أيضًا تنزيل الملف من الويب وحفظه على الحاسب باسم مختلف عن اسمه الأصلي، بالاسم jules.txt مثلًا، وذلك بتمرير الاسم الجديد بصفة وسيط إضافي للأمر crul مع الخيار o-، وفق التالي: $ curl -o jules.txt https://assets.digitalocean.com/articles/command-line-intro/verne_twenty-thousand-leagues.txt تستطيع الآن عرض الملف بواسطة cat، أو تحرير عبر nano. يفيدك أيضًا مراجعة المقال دليل استخدام سطر الأوامر في عملية تطوير الويب من طرف العميل لمزيد من الأمثلة من المعلومات المفيدة. يتناول القسم الأخير من المقال طرق حذف الملفات وإنهاء تنفيذ الأوامر. حذف الملفات وإنهاء تنفيذ الأوامر ستتعرض بالتأكيد لحالات تحتاج فيها لحذف ملف أو مجلد، أو لإنهاء تنفيذ أمر معين، أو الخروج من تطبيق تستخدمه، سنتعلم ذلك. بالعودة إلى مثال طلاب الأكاديمية، فلنفترض أنك تحتاج لحذف ملفات بعض الطلاب لأنهم تخرجوا مثلًا. تأكد أولًا من وجودك في المجلد /students، يمكنك تنفيذ الأمر التالي للانتقال إليه: $ cd /home/sammy/files/students نفذ الآن الأمر ls لاستعراض محتويات المجلد، وبما أننا أنشأنا عددًا من الملفات مسبقًا، فستحصل على الخرج التالي: alex.txt drew.txt jamie.txt jesse.txt sammy.txt taylor.txt يمكنك حذف الملفات المفردة من مجلد الطلاب /students باستخدام الأمر rm. لنحذف مثلًا الملف sammy.txt وفق الآتي: $ rm sammy.txt استعرض مجددًا محتويات المجلد باستخدام ls، ولاحظ عدم وجود الملف sammy.txt بينها: alex.txt drew.txt jamie.txt jesse.txt taylor.txt إذا رغبت بحذف المجلد /students كاملًا مع كافة محتوياته، فستحتاج للأمر rmdir الذي يختصر العبارة remove directory. انتقل في البداية إلى المجلد الأب files ونفذ أمر حذف المجلد /students من هناك، فلا يمكنك حذف أي مجلد طالما أنك تعمل ضمنه. $ cd .. نحن الآن في المجلد /home/sammy/files/، وحاول حذف مجلد الطلاب students من هنا باستخدام rmdir، وفق التالي: $ rmdir students وستحصل على رسالة الخطأ التالية في الخرج: rmdir: failed to remove 'students': Directory not empty تفيد الرسالة بعدم إمكانية حذف المجلد لأنه غير فارغ، يمكنك بالتأكيد معالجة الموضوع بحذف الملفات الفردية من المجلد students واحدًا تلو الآخر، ثم حذف المجلد، لكنها ليست بالطريقة الأمثل وخاصة إذا كان عدد الملفات كبير. بالمناسبة يمكنك إنشاء مجلد فارغ ومحاولة حذفه باستخدام الأمر rmdir والتأكد من فعاليته مع المجلدات الفارغة. أما حذف المجلدات الممتلئة، فيتطلب استخدام الأمر rm مع الراية أو الخيار r-، ترمز هذه الراية إلى الكلمة الإنكليزية recursion أو العودية التي تصف الدوال أو العمليات الحاسوبية التي تستدعي نفسها ذاتيًا مرارًا وتكرارًا، فبالتالي عند استخدامها مع أمر الحذف سيُحذَف العنصر مع كل محتوياته. اكتب إذًا الأمر التالي، ومرر اسم المجلد students بعد أمر الحذف: $ rm -r students تأكد من صحة حذف المجلد /students مع جميع ملفاته، بتنفيذ الأمر ls. أنهيت أعمالك في الطرفية سواء كنت تعمل على حاسوبك الشخصي أو تتصل بخادم بعيد وتريد الخروج منها؟ اكتب إذًا الأمر exit وفي حال كنت متيقنًا من كل شيء اضغط على زر ENTER، فمجرد مغادرتك لجلسة العمل لن تتمكن من استعادتها مجددًا. $ exit ستحصل على الخرج التالي بعد الضغط على زر إنتر، ليؤكد لك إنتهاء جلسة العمل وخروجك منها. Session ended الخلاصة قدم المقال بداية تعريفية لكل راغب ببدء العمل مع الواجهة الطرفية وسطر الأوامر، سواء لإدارة الحواسيب أو الخوادم السحابية البعيدة. يوجد العديد من المقالات المفيدة في هذا المجال على أكاديمية حسوب، استعرض قسم لينكس وقسم الحوسبة السحابية، واقرأ ما يناسبك منها. ترجمة -وبتصرف- للمقال A Linux Command Line Primer لصاحبته Lisa Tagliaferri. اقرأ أيضًا ما هو سطر الأوامر؟ مرجع إلى أشهر أوامر لينكس التعامل مع واجهة سطر الأوامر (CLI) في PHP إعداد البيئة وواجهة سطر الأوامر في بايثون
-
لقد غيّرت الحوسبة السحابية كثيرًا في طريقة عمل الشركات والمستخدمين، ولا يسعنا اليوم تجاهل أثرها، فمعظم البرامج التي نستعملها باتت توجد على السحابة، وبفضلها أصبحت الشركات الناشئة قادرة على تطوير برمجياتها ونشرها بدون شراء خوادم مرتفعة الثمن وتجهيز مراكز بيانات قياسية لتشغيلها، بل وأصبح المطورون المستقلون قادرين على إطلاق تطبيقاتهم الخاصة عبر الإنترنت بأقل التكاليف، والحالة مشابهة للباحثين، فقد مكنتهم الحوسبة السحابية من مشاركة البيانات وتحليلها على نطاق واسع كان في الماضي حكرًا على المشاريع كبيرة التمويل، وحتى المستخدم العادي استفاد منها فقد وضعت في متناوله مساحات تخزين كبيرة تتجاوز بكثير قدرات حاسوبه الشخصي لتخزين الوسائط الرقمية ومشاركتها. فما هي السحابة بالضبط؟ كيف تقدم خدماتها للمشتركين؟ وما هي فوائدها؟ وما المخاطر التي تنطوي عليها؟ وكيف تستخدمها لمشروعك الخاص؟ سنجيبك في الفقرات التالية على كل هذه التساؤلات. ما هي الحوسبة السحابية؟ الحوسبة السحابية Cloud Computing هي توفير الموارد الحاسوبية للمستخدم بصيغة خدمة، وتبقى ملكية هذه الموارد لمزود الخدمة السحابية، وهو المسؤول عن إدارتها، قد تتضمن أي شيء تحتاجه بدءً من التطبيقات المستندة إلى المتصفح وهي تطبيقات تعمل مباشرة من خلال متصفح الويب دون الحاجة إلى تثبيت أي برامج إضافية على الجهاز مثل يوتيوب وسبوتيفاي، ومنصات الطرف الثالث المخصصة لتخزين الصور والوسائط الرقمية الأخرى، مثل: أيكلاود ودروبوكس، ووصولًا إلى خوادم الطرف الثالث التي تستخدم لدعم البنية التحتية للأعمال أو المشاريع البحثية أو الشخصية. قبل انتشار الحوسبة السحابية كان كل من يرغب باستخدام الموارد الحاسوبية يذهب لشراء التجهيزات والبرمجيات التي يحتاجها، ويتولى مهمة تشغيلها وصيانتها بنفسه أو يوظف تقنيين مؤهلين لأداء المهمة، أما اليوم مع التوفر الواسع للتطبيقات وخدمات التخزين والأجهزة الافتراضية المستندة إلى السحابة، أصبح بإمكان الأفراد والشركات تحصيل إمكانات هائلة من الموارد حسب طلبهم عبر الإنترنت. وقد وفر عليهم هذا الانتقال من الموارد المحلية إلى الموارد الموزعة تكاليف شراء البرمجيات والتجهيزات، وتشغيلها، وصيانتها. ترافق ذلك مع ظهور نمط جديد من الأعمال المعتمدة كليًّا على السحابة، وتغيرت مهام تقنية المعلومات في الشركات، وتحولت الكثير من النشاطات اليومية إلى عمليات حاسوبية. ولم يقتصر تأثيرها على الأعمال فقط بل امتدّ للأفراد أيضًا، فيمكنهم اليوم عقد اجتماعات افتراضية عبر الإنترنت أو استخدام المنصات التعاونية للعمل على المشاريع المشتركة، بالإضافة إلى إمكانية الوصول للمحتوى الترفيهي والتعليمي حسب الطلب، ولا ننسَى تقنيات المنازل الذكية التي تتيح التحكم بالأجهزة المنزلية عن بعد، والتطبيقات الذكية التي تسمح لنا بطلب سيارة أجرة أو إجراء حجز فندقي من منازلنا بمنتهى السهولة عبر هواتفنا المحمولة. تعريف الحوسبة السحابية نورد فيما يلي تعريف الحوسبة السحابية حسب المعهد الوطني للمعايير والتكنولوجيا (NIST)، وهو وكالة غير تنظيمية تتبع لوزارة التجارة الأمريكية وتشجع على الابتكار: يحدد NIST خمس خصائص رئيسية للحوسبة السحابية: الخدمة الذاتية حسب الطلب: لا يستلزم الوصول إلى الموارد السحابية أو توفيرها أي تفاعل بشري مع مزود الخدمة، إذ يصل المشترك مباشرةً إلى الخدمات السحابية بمجرد التسجيل SignUp. وتستطيع المؤسسات أيضًا إنشاء آليات خاصة تمنح بواسطتها موظفيها أو عملائها أو شركائها صلاحيات الوصول إلى خدماتها السحابية الداخلية وفق قواعد تحددها مسبقًا، وبطريقة سهلة بدون الاستعانة بخدمات تقنية المعلومات. الوصول الشبكي واسع النطاق: يستطيع المستخدمون الوصول إلى الخدمات والموارد السحابية من أي جهاز وفي أي موقع متصل بالشبكة بشرط امتلاكهم أذونات الوصول. تجميع الموارد: موارد مزود الخدمة السحابة مشتركة بين عدة مشتركين، مع ضمان الاستقلالية والخصوصية وحجب بيانات كل مشترك عن الآخرين. المرونة السريعة: يمكن للمشترك زيادة موارد الحوسبة السحابية المحجوزة لصالحه أو تخفيضها أو تعديلها حسب احتياجات عمله بسرعة ومرونة، على عكس التجهيزات والبرامج الموجودة لديه محليًّا في منزله أو شركته. قياس الخدمة: توفر الحوسبة السحابية أدوات خاصة لقياس نسب استخدام الموارد السحابية، ويدفع المشتركون مقابل الموارد التي استخدموها فقط في كل دورة فوترة. تساعد هذه الخصائص الشركات على الانتقال إلى الحوسبة السحابية، وتوفر لهم فوائد عديدة سنعرضها في متن المقال، أما فقرتنا التالية فسنتناول تاريخ الحوسبة السحابية. تاريخ الحوسبة السحابية ترجع جذور الحوسبة السحابية إلى خمسينيات القرن العشرين، عندما كانت الشركات والجامعات تؤجر حواسيبها المركزية للمستخدمين لأوقات عمل محددة، فقد كانت الحواسيب حينها غالية الثمن وكبيرة الحجم لدرجة لا تسمح للأفراد العاديين باقتنائها، فاستئجار العمل عليها كان سبيلهم الوحيد لاستخدامها. لاحقًا مع بداية الستينيات، بدأ علماء الحاسوب أمثال جون مكارثي John McCarthy من جامعة ستانفورد، وجي سي آر ليكليدر J.C.R Licklider من وكالة مشاريع الأبحاث المتقدمة التابعة لوزارة الدفاع الأمريكية (ARPA)، باقتراح أفكار مهدت للحوسبة السحابية كما نعرفها اليوم، مثل: تصور مفهوم الحوسبة بهيئة مرفق عام أو منفعة عامة يمكن للناس الوصول إليها بواسطة شبكة من الحواسيب المنتشرة حول العالم. وبالرغم من هذه الأفكار المبكرة لم تصبح الحوسبة السحابية حقيقة ملموسة ومفهومًا واسع الانتشار حتى العقد الأول من القرن الحادي والعشرين، فقد شهدت هذه الفترة إطلاق أشهر الخدمات السحابية العالمية، مثل: Amazon’s Elastic Compute وخدمة التخزين البسيطة S3 في العام 2006، و Heroku في 2007، و Google Cloud Platform في 2008، ومنصة Alibaba Cloud في 2009، و Windows Azure في 2010 المعروفة حاليًّا بمنصة Microsoft Azure، وأخيرًا SmartCloud من شركة IBM و DigitalOcean في العام 2011. ساعدت هذه الخدمات أصحاب الأعمال على ضبط نفقاتهم المالية، عبر تهجير البنى التقنية من مقرات شركاتهم إلى المنصات السحابية، وأيضًا أفادت المطورين المستقلين وفرق التطوير الصغيرة، فوفرت لهم الموارد الحاسوبية اللازمة لتطوير تطبيقاتهم ونشرها. انتشرت في هذه الفترة التطبيقات القائمة على السحابة، والمعروفة باسم البرمجيات بصيغة خدمة SaaS، التي نناقشها بالتفصيل في فقراتنا القادمة، وتزامن انتشارها مع تراجع أعداد البرمجيات المستضافة محليًا على خوادم الشركات، وأيضًا البرمجيات التي يتعين على المستخدمين تثبيتها على أجهزتهم قبل استثمارها وصيانتها على الدوام. خلاصة القول: أن SaaS سهلت توافر التطبيقات، وساهمت في انتشارها عبر السماح للمستخدمين بالوصول إليها من مجموعة متنوعة من الأجهزة وحسب الطلب. تتنوع التطبيقات القائمة على السحابة، فبعضها يعود للشركات نفسها التي تمتلك المنصات السحابية، مثل: تطبيقات جوجل (أي جيميل وجوجل درايف ومستندات جوجل)، وتطبيق مايكروسوفت 365 النسخة السحابية من Microsoft Office Suite، وبعضها الآخر مملوك لشركات أخرى استثمرت خدمات مزودي الخدمات السحابية ووائمت تطبيقاتها الموجودة مسبقًا معها، مثل تطبيق Adobe Creative Cloud. وظهرت أيضًا موجة من التطبيقات السحابية الخالصة المعتمدة على SaaS، أبرزها: منصة Spotify في 2008، وخدمة استضافة الملفات Dropbox التي انطلقت في 2009، ومنصة زووم لاتصالات الفيديو في العام 2012، و Slack للتواصل الاجتماعي في 2013. أصبحت البنية التقنية القائمة على السحابة خيارًا مفضلًا لكثير من الشركات، وعلى ما يبدو أن انتشارها أخذٌ بالازدياد أكثر فأكثر. نماذج الحوسبة السحابية تُقَدَّم الخدمات السحابية للمشتركين بنماذج متعددة كلٌ حسب احتياجات عمله، ولكل نموذم مستوى معين من الدعم والمرونة. البنية التحتية بصيغة خدمة IaaS البنية التحتية بصيغة خدمة Infrastructure as a Service واختصارها Iaas، هي تقديم مكونات البنية التحتية للمشترك حسب الطلب، مثل: نظم التشغيل والشبكات ومساحات التخزين وغيرها، يمثل هذا النموذج المكافئ الافتراضي للخوادم المادية، لأنه يغني المشترك عن شرائها وصيانتها، ويقدم له المرونة في توسيع الموارد حسب حاجته والدفع لقائها. يناسب Iaas الشركات الراغبة باستثمار الحوسبة السحابية، ولديها مهندسين ومديري نظم أكفاء وقادرين على تثبيت نظم التشغيل، وأدوات التطوير، وكافة مكونات البنية التحتية الأخرى، مع إعدادها وإدارتها، ويستخدمه أيضًا المطورون والباحثون وغيرهم من الراغبين بتخصيص البنية التحتية للحوسبة السحابية كما يريدون. تدعم خدمات IaaS كامل احتياجات البنية التحتية بسبب مرونتها العالية، بدءًا من البنية التحتية لحوسبة الشركة، وصولًا إلى استضافة الويب، وتحليل البيانات الضخمة. النظام الأساسي بصيغة خدمة PaaS النظام الأساسي بصيغة خدمة Platform as a Service واختصارها Paas، يعمل مزود الخدمة هنا على تثبيت البنية التحتية الأساسية، مثل: نظام التشغيل، والبرامج الأساسية الأخرى، ويكون مسؤولًا عن إعدادها وصيانتها، وهو ما يؤمن للمستخدمين بيئةً معيارية مستقرة الأداء، ومختبرة جيدًا، تتيح لهم التركيز على تطوير تطبيقاتهم ونشرها، لذا فمطورو البرمجيات وفرق التطوير التعاونية هم أكثر من يستخدم خدمات PaaS فهي تخفف عنهم عبء إعداد البيئة الحاسوبية للتطوير، وصيانتها فيما بعد، بالإضافة لكونها تناسب طبيعة العمل الموزع، وتسهل التعاون بينهم. إذًا PaaS خيارٌ مثالي لكل مطور لا يحتاج بالضرورة إلى تخصيص البنية التحتية لبيئته الحاسوبية بنفسه، أو يفضل تركيز اهتمامه على تطوير التطبيق بدلًا من تنفيذ مهام DevOps وإدارة النظام. البرمجيات بصيغة خدمة SaaS البرمجيات بصيغة خدمة Software as a Service واختصارها SaaS، هي تطبيقات قائمة على السحابة cloud-based، يصلها المستخدمون عبر الإنترنت، ولا يحتاجون لتثبيتها على أجهزتهم ولا إلى صيانتها، والأمثلة كثيرة نحو: مستندات جوجل، و GitHub، و Slack، و Adobe Creative Cloud وغيرها. تحظى خدمات SaaS بشعبية كبيرة بين الشركات والمستخدمين عمومًا لعدة أسباب أبرزها: سهولة الاعتماد عليها، وتبنيها نهجًا جديدًا للعمل، وإمكانية الوصول إليها من أي جهاز، وتوفيرها إصدارات أو باقات متنوعة تناسب جميع الفئات، مثل: المجانية، والمميزة Premium، والخاصة بالمؤسسات Enterprise. تتشابه SaaS مع PaaS بأنها تعفي المشترك من المسؤوليات الخاصة بالبنية التحتية للتطبيق فلا يتاح له التفاعل مع الواجهة إلّا التي يستخدمها. البيئات السحابية تستند الخدمات السحابية إلى موارد حاسوبية عامة أو خاصة، ولكل منها أغراض محددة: السحابة العامة تشير السحابة العامة Public Cloud إلى الخدمات السحابية التي يقدمها مزود خدمة تجاري للأفراد والشركات، مثل: الأجهزة الافتراضية أو مساحات التخزين أو التطبيقات، والتي تكون مواردها أو بنيتها التحتية مستضافة بالكامل في مقر المزود، ويصل إليها المشتركون عبر الإنترنت. لا تُعدّ هذه الخدمات مناسبة دائمًا للمؤسسات التي تشترط مستوى عالي من الأمان، مثل: مؤسسات الرعاية الصحية أو المؤسسات المالية، فقد لا تتوافق مع لوائحها المتعلقة بخصوصية بيانات العملاء. السحابة الخاصة يُقصد بالسحابة الخاصة Private Cloud الخدمات السحابية التي تملكها وتديرها المؤسسة التي تستخدمها، وتكون متاحة حصرًا لموظفيها وعملائها. توفر السحابة الخاصة للمؤسسة إمكانات تحكم عالية ببيئتها الحاسوبية والبيانات المخزنة عليها، وموازنةً بالسحابة العامة فهي تقدم مستويات أمان أعلى إذ يصل إليها المستخدمون عبر شبكات خاصة، وتشرف المؤسسة بنفسها على أمان السحابة، وهذا يجعلها الخيار الأفضل للمؤسسات عالية التنظيم، مثل المؤسسات الحكومية والمالية. يقدم بعض مزودي الخدمة السحابية العامة خدماتهم بهيئة تطبيقات يستطيع المشترك تثبيتها على سحابته الخاصة، وبذلك تحتفظ المؤسسات ببنيتها التحتية وبياناتها في مقر عملها، وتحقق معايير الأمان، وتستفيد بالوقت نفسه من أحدث ميزات السحابة العامة. يفيدك الاطلاع على المقال 7 تدابير أمنية لحماية خواديمك بصفته دليلًا مبدئيًا تستند إليه في تأمين خوادمك الخاصة. السحابة الهجينة والسحابة المتعددة تستخدم العديد من المؤسسات بيئة سحابية هجينة Hybrid Cloud تجمع بين السحابة العامة والخاصة، وتحقق التوازن بين حاجتها للاعتماد على مزود سحابة عامة في بعض الجوانب، وضرورة التزامها باللوائح التي تنظم عملها. أما السحابة المتعددة Multicloud فيقصد بها اعتماد المؤسسة على أكثر من مزود سحابي عام لتأمين احتياجاتها، على سبيل المثال: الاشتراك بالخدمات السحابية لأمازون وديجتال أوشن بالوقت نفسه. فوائد الحوسبة السحابية تقدم الحوسبة السحابية فوائد جمّة للأفراد أصحاب الأعمال والمطورين والمؤسسات المختلفة، تختلف باختلاف أهدافهم وطبيعة نشاطاتهم. للأعمال والقطاعات المختلفة تحتاج أي مؤسسة مهما كان نشاطها إلى موارد حاسوبية من تجهيزات وبرمجيات لتتمكن من أداء أعمالها الحاسوبية، وقبل انتشار الحوسبة السحابية، كانت معظم الشركات والمؤسسات تشتري هذه الموارد من تجهيزات وبرامج وتهتم بتشغيلها وصيانتها، أما اليوم مع توفر الحوسبة السحابية على نطاق واسع اعتمدت عليها معظم المؤسسات في تخزين بياناتها وتوفير برمجيات عملها سواء التجارية أو المؤسساتية، بالإضافة لاستخدامها في نشر تطبيقاتها وخدماتها الإلكترونية للعملاء عبر الإنترنت. تتخصص بعض الخدمات السحابية بمجالٍ معين، مثل: الرعاية الصحية أو التعليم أو غيره، فتجد مثلًا خدمات سحابية مصممة خصصيًا لتخزين بيانات المرضى ومشاركتها أو للتواصل معهم، وخدمات أخرى مناسبة للأوساط الأكاديمية يعتمدها المعلمون والباحثون، نحو: تطبيقات التدريس، والبحث المستندة إلى السحابة. ومع ذلك يوجد أيضًا عدد كبير من الأدوات السحابية العامة التي لا تنحصر فائدتها لصناعة معينة أو قطاع محدد، مثل: تطبيقات الإنتاجية، والمراسلة، وإدارة النفقات، ومؤتمرات الفيديو، وإدارة المشاريع، والنشرات الإخبارية، والاستطلاعات، وإدارة علاقات العملاء، وخدمات إدارة الهوية، وجدولة المهام والقائمة تطول. يُظهر هذا النمو المتسارع لتطبيقات الأعمال والبنى التحتية القائمة على السحابة، أن الحوسبة السحابية أكثر من تقنية غيرت إستراتيجية تقنية المعلومات للأعمال المختلفة: بل أنها أيضًا عملٌ مزدهر في حد ذاته. تتعدد المزايا التي توفرها التقنيات السحابية للشركات، ولعل أبرزها تخفيض تكاليف تجهيز البنية التحتية التقنية للشركة داخل مقرها، وتخفيض نفقات تشغيلها وصيانتها، بسبب الاستعاضة عنها بالموارد الحاسوبية المستأجرة على السحابة، والتي يمكن توسيعها بسرعة ومرونة حسب رغبة الشركة، والدفع لقاء ما تستهلك منها فقط، أضف إلى ذلك مساهمة الخدمات السحابية في تعزيز التعاون داخل الشركة، ومشاركة البيانات بين الموظفين في الزمن الحقيقي، ورفع كفاءة عمليات تقنية المعلومات الداخلية، فتسرع مثلًا وصول الموظفين إلى الخدمة عند الطلب دون المرور بسلسلة طويلة من الإجراءات والموافقات التقنية. للمطورين المستقلين جعلت الحوسبة السحابية الموارد -التي كانت سابقًا حكرًا على الشركات والمؤسسات الكبيرة- في متناول المطورين المستقلين حسب الطلب عبر الإنترنت، وبتكاليف بسيطة نسبةً إلى تكاليفها السابقة، فيمكنهم الآن إنجاز عمليات نشر البرمجيات واختبارها بسرعة ويُسر باستخدام التطبيقات السحابية، وبالإضافة إلى ذلك سهلت هذه التطبيقات مثل GitHub مشاركة الشيفرات البرمجية بين المطورين، والتعاون على مشاريع مفتوحة المصدر. كما أتاحت المنصات التعليمية السحابية دورات برمجة تفاعلية ووسّعت خيارات التَعلُّم أمام المطورين، ومكنتهم من تعلم البرمجة بمرونة في الوقت الذي يناسبهم. ساهمت هذه الموارد الحاسوبية والتعليمية القائمة على السحابة بتخفيف العوائق التي تحول دون تعلُّم المطورين المهارات البرمجية التي يحتاجونها، ونشرهم التطبيقات عبر إلى السحابة. فبوجودها لم يعد تلقي التدريب الرسمي، ووجود الشركة الداعمة، ورأس المال الكبير شروطًا إلزامية ليخوض الأفراد تجربة إنشاء التطبيقات ونشرها، بل ولينافسوا اللاعبين الأساسيين في هذا المجال. للباحثين برزت الحاجة إلى الحوسبة السحابية في مشاريع البحث العلمي مثل: الفلك والفيزياء وعلم الوراثة والذكاء الاصطناعي، ومع تزايد اعتماد هذه البحوث على أساليب التعلم الآلي الذي يجمع ويحلل كميات كبيرة من البيانات الضخمة التي تستوجب موارد حاسوبية عالية الأداء تتجاوز مواصفات أي حاسوب يملكه باحث فردي أو توفره جامعة. وهنا يأتي دور الخدمات السحابية فهي تسمح للباحثين بالوصول إلى الموارد الحاسوبية التي يتطلبها عملهم والدفع لقائها فقط، بالإضافة إلى تسهيل التعاون مع شركاء البحث في الزمن الحقيقي وأينما كانوا حول العالم. ولولا الخدمات السحابية المتوفرة للمستخدمين اليوم كانت غالبية بحوث التعلم الآلي الأكاديميةمقتصرة على قلة من الأفراد المتاح لهم الوصول إلى موارد حاسوبية عالية المواصفات. للمعلمين والطلاب أمنت الحوسبة السحابية للطلاب أدواتٍ وفرصًا متعددة لاستكمال تحصيلهم العلمي، وتطبيق مهاراتهم التقنية عمليًّا في أثناء تعلمهم. فهناك العديد من المنصات السحابية التي تتيح مشاركة البيانات والشيفرات البرمجية، وتدريسها، والتعاون عليها، مثل: GitHub، و Jupyter Notebooks، وهو ما يساعد الطلاب على صقل مهاراتهم والتدّرب العملي عليها عبر الدراسة، والنشر، والمساهمة في المشاريع مفتوحة المصدر والمشاريع البحثية المتعلقة بمجال دراستهم أو طموحاتهم المهنية. ويستطيع الطلاب أيضًا، مثل المطورين المستقلين، الاستفادة من موارد الحوسبة السحابية، ونشر شيفراتهم البرمجية والتطبيقات التي عملوا عليها للعموم لتلقي الآراء، وفهم المتطلبات والاحتياجات الحقيقية للعملاء وسوق العمل. كما تساعد الحوسبة السحابية الطلاب والباحثين والمعلمين على دعم البنية التحتية الأكاديمية الخاصة بالمؤسسات العلمية التي ينتمون إليها، وزيادة مستوى التحكم في بيئاتها الحاسوبية، فيحددون مثلًا الأدوات والتطبيقات التي يفضلون استخدامها، ويخصصون وظائفها المختلفة حسب شروطهم، أو يضعون قيودًا على عمليات جمع البيانات أو غير ذلك. وفي هذا الإطار ظهرت مجموعة من المنصات المخصصة للقطاع الأكاديمي، والتي حلت بالتدريج مكان العروض السحابية الموجهة للأكاديميين، على سبيل المثال لا الحصر: منصة voyant التي توفر وظائف التحليل النصي للمستندات بدون برمجة، و منصة The HathiTrust التي تتيح الوصول إلى مجموعة كبيرة من المجلدات العلمية الإلكترونية في مختلف المجالات، بالإضافة إلى منصات Reclaim Hosting، و Commons in a Box، و Humanities Commons، و Manifold المتضمنة مجموعة مهمة من الأدوات التعليمية، والشبكية، والأدوات المساعدة على نشر البحوث المصممة خصيصًا لدعم الأكاديميين. للبنية التحتية المجتمعية يفضل بعض الأفراد والمجتمعات في الشركات أو فرق العمل تثبيت برنامجهم السحابي وإدارته بأنفسهم، لعدة أسباب منها: تلبية احتياجات مجتمعهم وقيمه التي يلتزم بها، وتخصيص وظائف البرنامج بالكيفية التي يريدونها، وحماية بيانات المستخدمين، والتحكم أكثر ببيئتهم الحاسوبية. ويوجد العديد من البرمجيات مفتوحة المصدر التي تؤمن طلبهم، على الرغم من كونها تتطلب جهدًا أكبر في الإدارة والتحكم، إلّا أنها تُعدّ بدائل مقبولة لخدمات SaaS التجارية، ومنصات التواصل الاجتماعي التجارية التي تحدّ غالبًا إمكانات التحكم والخصوصية وإدارة البيئة الحاسوبية الممنوحة للمستخدمين، وتفضلها بعض المجتمعات على خدمات SaaS بسبب مخاوفهم من طريقة تعامل المنصات الشهيرة والشركات التجارية مع البيانات الشخصية للمستخدمين، نذكر لك بعضًا من هذه المنصات مفتوحة المصدر على سبيل المثال لا الحصر: أداة التواصل الاجتماعي Mastodon، وبرنامج مؤتمرات الفيديو Jitsi، ومحرر النصوص التعاوني Etherpad، وأداة الدردشة Rocket Chat. المخاطر والتكاليف والأخلاقيات في الحوسبة السحابية وسط كل الفوائد التي تقدمها الحوسبة السحابية للمستخدمين، يوجد بعض الاعتبارات التي ينبغي أخذها بالحسبان عند الاعتماد على أي خدمة سحابية، أهمها: المخاطر المحتملة، والتكاليف، والمعايير الأخلاقية. ويختلف أثرها على المستخدمين باختلاف طبيعة عملهم على السحابة، فبعضها يؤثر على جميع المستخدمين سواء كانوا أفرادًا أم شركات، وبعضها الآخر يملك تأثيرًا أكبر على الشركات والمؤسسات التي تخزن بيانات عملائها على السحابة. اعتبارات تهم جميع مستخدمي السحابة الأمان: الموارد السحابية معرضة للثغرات الأمنية أكثر من مراكز البيانات التقليدية الموجودة داخل مقرات الشركات، لأن مرونتها في الوصول إلى قطاعات واسعة من المستخدمين تفرض عليها استعمال أدوات، مثل: واجهات برمجة التطبيقات APIs، وبيانات المصادقة القائمة على السحابة، والخدمات عند الطلب، التي قد تسهل حصول المخترقين على وصول غير مصرح به للموارد السحابية. لذا ننصحك عند اختيار خدمتك السحابية بتحري تدابير الحماية التي يعتمدها مزود الخدمة لحماية بيانات مشتركيه من السرقة والهجمات الأخرى، وبالاطلاع على أفضل الممارسات التي يتبعها المستخدمون عادةً لحماية بياناتهم على السحابة، وأيضًا على خدمات الحماية الإضافية التي يمكنهم استخدامها. يمكنك مراجعة مقال ما هو الأمن السيبراني وما أهميته؟. فقدان البيانات: تتعرض البيانات المخزنة على السحابة لخطر الفقدان، مثلها مثل البيانات المخزنة على الأجهزة المملوكة أو المُدارة من المستخدم، وذلك بسبب الكوارث أو الأعطال أو الأخطاء البرمجية أو أخطاء المستخدم أو غيرها من الحالات الطارئة. لذا احرص على تفحص خدمات النسخ الاحتياطي التي يوفر لك المزود السحابي، وفيما إذا كانت أوتوماتيكية أم يدوية، مجانية أم مدفوعة، وانظر أيضًا إذا كان باستطاعتك تشغيل النسخ الاحتياطي بنفسك. التمسك بالبيانات: يفضل بعض مستخدمي الخدمات السحابية التأكد من حذف بياناتهم الشخصية التي قدموها لمزود الخدمة في أثناء اشتراكهم، ويصعب عليهم التأكد من حذفها، فهذه العملية طويلة ومعقدة وتاكد تكون مستحيلة. فإذا كنت أحد هؤلاء وتفكر بحذف بياناتك لاحقًا، حاول التعرّف أكثر على سياسات مزود الخدمة بخصوص حذف بيانات المستخدمين قبل منحه حق الوصول لبياناتك الشخصية. التكاليف: توفر الحوسبة السحابية على المستخدمين تكاليف امتلاك الموارد نفسها محليًا هذا أمرٌ لا ريب فيه، لكن فواتير استخدامها قد ترتفع مع زيادة الاستهلاك، لذا ننصحك عند الاشتراك بأي خدمة سحابية بتفقد كافة تفاصيل الفوترة، وفهم طرق احتسابها، وآليات قياس الخدمات والاستهلاك، ويمكنك أيضًا الاستفادة من خصائص توفيرية، مثل: تثبيت حدود قصوى للاستهلاك لا يسمح لك بتخطيها، أو تلقي إشعارات عند تجاوزك حد معين من الباقة. التقيُّد بمزود معين: مستخدمو الخدمات السحابية المملوكة أو مغلقة المصدر هم الفئة الأكثر عرضة لخطر التقيُّد بمزود خدمة معين، فيصعب أو يستحيل عليهم تغيره فيما بعد، فقد نظموا جميع عملياتهم الحاسوبية لتتلائم مع نظامه المغلق. يساعدك استخدام المنصات السحابية مفتوحة المصدر في تخفيف هذه المخاطر، فتُسهّل عليك المعايير المفتوحة التي تعتمدها ترحيل عملياتك من مزود خدمة سحابية إلى آخر. لكن في جميع الأحوال، تُعدّ عمليات ترحيل الأنظمة من أدق العمليات التقنية التي ينبغي لمستخدمي الحوسبة السحابية إدراك حساسيتها وحاجتها لقدر كبير من العمل والتخطيط والخبرة. استخدام المزود لبياناتك: يستخدم بعض مزودي الخدمات السحابية بيانات عملائهم، لأغراض متعددة، مثل: فهم سلوكهم وطريقة تفاعلهم مع المنتجات السحابية، وبيع الإعلانات أو تخصيصها لاستهداف شرائح معينة منهم، وتدريب خوارزميات التعلم الآلي، وقد يبيعونها لجهات خارجية أو غير ذلك. لذا إذا كنت متخوفًا من كيفية استخدام المزود السحابي لبياناتك الشخصية أو بيانات شركتك أو مؤسستك، تأكد من سياسات مزود الخدمة فيما يتعلق بطرق استخدامه للبيانات قبل الاشتراك بخدماته. القيم الأخلاقية للمزود: يتمتع بعض مزودي الخدمات السحابية بتأثير وسلطة لا يستهان بها على القضايا العالمية، لذا يسعى الكثير من مستخدمي السحابة عند اختيارهم للمزود إلى معرفة القيم التي يدعمها ومواقفه الأخلاقية من مسائل مثل: جمع بيانات المستخدمين، والإعلانات، وخطاب الكراهية، والبيئة، وتقديم المعلومات المضللة، والعمالة… إلخ. فقدان التحكم الكامل: موارد الحوسبة السحابية في نهاية الأمر هي موارد طرف ثالث لذا يستحيل على المشترك التحكم بها تحكمًا كاملًا، والحصول على رؤية شاملة لكل جوانبها، يوّلد هذا النقص لدى المستخدم السحابي مخاوف تقنية، ومخاوف أخرى تتعلق بالثقة وآلية استخدام البيانات الشخصية، فهو يشعر دائمًا أن خللًا ما قد يحدث دون أن يتحوط له. يتعامل المستخدمون عادةً مع هذه المخاوف بعدة طرق، أبرزها: استخدام أدوات المراقبة والتحليل ليبقوا على اطلاعٍ دائم بمدى جاهزية بنيتهم التحتية، ويكونوا على استعداد للاستجابة العاجلة لأي طارئ، بالإضافة إلى اهتمامهم بمعرفة سياسات مزود الخدمة حول استخدام بيانات العملاء. اعتبارات إضافية تهم الشركات والمؤسسات القوانين الناظمة: تخضع بعض القطاعات، مثل: الصحة والمالية والتعليم، إلى قوانين صارمة تحدد شروط تعاملهم مع بيانات العملاء لجهة تخزينها واستخدامها، وقد يمنع بعضها تخزين بياناتهم في الخدمات السحابية العامة، لذا تلجأ الجهات التابعة لهذه القطاعات إلى استخدام نماذج سحابية هجينة وحلول تقنية خاصة للامتثال لهذه الضوابط، وإلى جانب القوانين الخاصة بكل قطاع توجد أيضًا لوائح تنظيمية تتعلق بحماية بيانات العملاء في بعض المناطق حول العالم، فيتعين عليهم أيضًا الامتثال لقوانين البلد الذي يقطن فيه عملائهم، فعلى سبيل المثال يلتزم مزودو الخدمات السحابية بالنظام الأوروبي العام لحماية البيانات (GDPR) عند تعاملهم مع عملاء من الاتحاد الأوروبي. التعقيد: تهجير الموارد الحاسوبية للمؤسسة إلى البيئة السحابية عملية حساسة ومعقدة للغاية، وتتطلب تخطيطًا دقيقًا، وحوكمة إدارية، وإشرافًا مستمرًا لتجنب مشكلات عدم التوافق، ومخاطر فقدان البيانات، وزيادة التكاليف غير المدروسة. خلاصة القول: تساعد الحوسبة السحابية المؤسسات على خفض تكاليف تجهيز بنيتها التحتية، لكنها بالمقابل تحتاج خبراء تقنيين للتخطيط للبنية التحتية وإدارتها وتوجيهها بالاتجاه الصحيح. الملخص تؤمن التقنيات السحابية فرصًا كبيرة للشركات والمطورين المستقلين والباحثين والمعلمين والطلاب. لكن استفادتك الحقيقية من ميزاتها وعروضها تتطلب منك فهمًا جيدًا لأنواع الخدمات السحابية، ونماذج تقديمها، وفوائدها، ومخاطرها، لتختر منها ما يناسب طبيعة عملك، وميزانيتك، وخصوصية بياناتك. ترجمة -وبتصرف- للمقال A General Introduction to Cloud Computing لصاحبته Erin Glass. اقرأ أيضًا المقال السابق: مقدمة إلى الخوادم السحابية مفهوم السحابة Cloud تعلم الحوسبة السحابيّة: المتطلبات الأساسيّة، وكيف تصبح مهندس حوسبة سحابيّة كل ما تود معرفته عن السحابة الهجينة Hybrid Cloud
-
الخادم السحابي Cloud Server هو بنية تحتية متاحة للمستخدمين عبر الإنترنت، تؤمن لهم ما يحتاجونه من الموارد الحاسوبية عن بعد، مثل مساحات التخزين والذواكر والمعالجات وغيرها، يمكنك النظر إليه على أنه حاسوب خاص تستطيع إعداده والتحكم به بالطريقة نفسها التي تتعامل بها مع أجهزتك المحلية، سواء كانت خوادم أو حواسيب شخصية أو محمولة. يعرض هذا المقال بنية الخادم السحابي ومكوناته، والفرق بينه وبين عروض الاستضافة السحابية الأخرى، مع بعض النصائح لاختيار الاستضافة الأنسب لموقعك الإلكتروني أو تطبيقك على الويب. ستصادف في هذا المجال مصطلحات "خادم" و"خادم سحابي" و"خادم ويب" بالتبادل، ويشير الخادم السحابي عادةً إلى بيئة لينكس كاملة أو فعليًّا إلى حاسوب كامل. تعمل الخوادم السحابية بصفتها أجهزة افتراضية (VMs) أو برمجيات تحاكي الحواسيب التقليدية، وتجدها دائمًا ضمن مجموعات كبيرة أو عناقيد Clusters في تقنية تسمى الحوسبة الافتراضية Virtualization. يمكنك معرفة المزيد عن آلية عملها بمراجعة مقال [مقدمة إلى الاستضافة السحابية](). البرمجيات المستخدمة على السحابة التعرُّف عليها ضروري لفهم الخوادم السحابية، سنعرضها باختصار: نظم التشغيل: تثبيت نظام التشغيل هو خطوتك الأولى في إعداد الخادم السحابي، يعتمد معظم مستخدمي السحابة نظام تشغيل لينكس بتوزيعاته المختلفة، مثل: أوبنتو Ubuntu أو روكي لينكس Rocky Linux لبناء خوادمهم، نظرًا لانتشاره الواسع في بيئات الخوادم، والدعم الكبير الذي يحظى به من المجتمع التقني، والذي يسهل عليك إيجاد مصادر للتعلُّم، بالإضافة لكونه مجاني في الأساس، وحتى إن احتجت لتراخيص فتراخيصه مرنة موازنةً بغيره. يمكنك الاطلاع على مقال [كيف تختار توزيعة لينكس المناسبة لك؟]() لتتعرف أكثر على توزيعات لينكس، وتختار ما يناسبك منها. برمجيات جانب الخادم: يقصد بها مجموعة واسعة من البرمجيات والأدوات المستخدمة لإعداد الخوادم، وهي مصممة للعمل في البيئات السحابية، ومناسبة تمامًا لها، حيث لا شاشات عرض ولا بيئة سطح مكتب، فغالبًا ما تُثَبّت برمجيات جانب الخادم Server-Side وتُضبَط إعداداتها باستخدام واجهة سطر الأوامر، ويصل إليها المستخدم النهائي عبر المتصفح أو التطبيقات الأخرى. تتنوع هذه الأدوات وسيساعدك فهم أساسياتها على تجهيز خادمك السحابي. خوادم الويب: تسمح خوادم الويب لخادمك السحابي بالتواصل مع المستخدمين عبر الإنترنت بواسطة بروتوكول HTTP، وهي من أدوات جانب الخادم، تُبَرمَج للاستجابة بطريقة محددة مع كل طلب يطلبه العميل عبر برمجيات جانب العميل Client-Side، لنفترض على سبيل المثال: أن المستخدم طلب URL معين من المتصفح (الذي يلعب هنا دور العميل)، سيستجيب له الخادم، ويجلب مستند HTML المناسب، ثم يرسله للمتصفح فيعرض صفحة الويب المطلوبة. ستحتاج خادم ويب حتمًا، إذا كنت تبني خادمك السحابي من الصفر، وتنوي تجهيزه لاستضافة موقع إلكتروني أو تطبيق ويب، وأشهر خوادم الويب المستخدمة هي Nginx و Apache. يمكنك الاطلاع على مدخل إلى خادم الويب لمزيد من المعلومات. خوادم API: واجهات برمجة التطبيقات أو APIs هي برمجيات وسيطة تسمح للتطبيقات المختلفة بالتخاطب مع بعضها. خادم الويب نفسه هو خادم API يطبق HTTP API، ويوجد أنواع كثيرة غيره، مثل APIs الخاصة بمعلومات الطقس أو رحلات الطيران أو غيرها، يستخدمها الخادم السحابي لتبادل البيانات مع التطبيقات الخارجية ومصادر البيانات الخارجية، وقد يتصل الخادم بأكثر من واجهة API حسب طبيعة تطبيقك، وتدعى نقاط اتصال API بالتطبيق، أي النقاط التي تنفذ عمليات API، بنقاط الوصول أو endpoints، وتكون مثلًا عناوين URL تدل على الموارد المطلوب الاستعلام عنها. خوادم قواعد البيانات: يمكنك تسميها بقواعد البيانات فقط، وهي نوع آخر من خوادم API، لكنها بخلاف خوادم الويب لا تعرض البيانات المطلوبة منها بهيئة صفحات HTML ضمن المتصفح، إنما يجري التواصل معها عبر واجهات برمجة تطبيقات خاصة تسمى واجهات استعلام قاعدة البيانات. بعض قواعد البيانات متاح للاستعلام الخارجي عبر الويب، وبعضها الآخر مخصص للاستخدام الداخلي من قبل برمجياتك السحابية فقط. الخوادم السحابية وبدائلها الخادم السحابي هو حاسوب افتراضي كامل، لذا فجميع المنتجات السحابية الأخرى تتعلق به، ومزودو الخدمة السحابية يقدمون لك في عروضهم ميزة أو وظيفة محددة فقط من وظائف هذا الخادم، على سبيل المثال استضافة ويب مخصصة أو استضافة قاعدة بيانات مخصصة، وكل حل سحابي يوفر خادم ويب أو قاعدة بيانات ينبثق فعليًّا من خادم سحابي، غالبًا ما تبنى الخوادم السحابية باستخدام عناقيد من الخوادم المادية أو الفيزيائية التي تعمل معًا بتقنية الحوسبة الافتراضية. فالفرق الجوهري إذًا بين الخادم السحابي (الذي يسمى VPS أو الخادم الافتراضي الخاص Virtual Private Server) والعروض السحابية الأخرى هو أنك تستطيع تثبيت التطبيقات التي تريدها على الخادم السحابي، وتشغيلها بحرية حسب احتياجك، بينما تفرض عليك العروض الأخرى مجموعة ميزات ووظائف بعينها لا يسعك الخروج عنها. أحدثت الحوسبة الافتراضية تغييرًا كبيرًا في سوق الخدمات السحابية خلال العقود الماضية، فقبل ظهورها كان مزود الخدمة يوفر خادمًا مثل Nginx أو Apache لتقديم الاستضافة لعشرات المواقع مع أذونات مخصصة لكل مشترك، ولم يكن المشترك مسؤولًا عن أي مهام إدارية على الخادم، لكن بالمقابل اقتصرت المواقع المستضافة وقتها على المواقع ذات الطبيعة الثابتة أي التي تتضمن عناصر HTML و CSS وجافا سكريبت ثابتة بدون محرك خلفي، وأيضًا مواقع drop-in PHP التي لا تمتلك أي اعتماديات سوى خادم الويب. ولاحقًا بعد انتشار الحوسبة الافتراضية، ازداد الطلب على عروض VPS أو الخوادم السحابية الكاملة، بسبب مرونتها العالية، لكن تشغيلها وتحديدًا في بيئة الإنتاج، يتطلب منك مهارات خاصة، لا يهتم المبرمجون بتحصيلها عادةً، لأنها لا ترتبط مباشرةً بكتابة الشيفرات البرمجية، أبرزها مثلًا: معرفة جيدة بأساسيات لينكس، وكيفية التعامل مع سطر الأوامر، ومهام إدارة النظام، بالإضافة إلى هندسة DevOps لإدارة عمليات النشر وتلبية المعايير الأمنية للتشغيل. هل أستخدم خادمًا سحابيًا لمشروعي؟ تحتوي الخوادم السحابية ميزات حماية افتراضية مدمجة فيها، ولست مضطرًا لخوض عملية نشر على نطاق تجاري بحذافيرها لتُشغل تطبيقًا مفتوح المصدر بطريقة آمنة وموثوقة على خادم سحابي، أضف إلى ذلك أن إعدادات الأمان الافتراضية مضبوطة بإحكام على معظم الحزم المستخدمة في الخوادم، وتخضع للتحديث الدوري لسد ثغراتها الأمنية، لذا يكفيك في معظم الأحيان تثبيت جدار حماية بسيط مثل ufw أو الجدار الناري غير المعقد ليتحكم ببوابات الشبكة على خادمك السحابي، فيسمح أو يمنع اتصالات معينة حسب متطلبات عملك، أو على الأقل يمررها إلى خادم ويب مخضرم مثل Nginx تعتمده ملايين الخوادم حول العالم. إضافةً إلى الخوادم السحابية، يوفر بعض مزودي الخدمات السحابية عروضًا أخرى يمكن تشبيهها بمضيفي الويب، تلائم مواقع الويب ذات المكونات الثابتة المعتمدة على ميزات جافا سكريبت الحديثة، التي تخفف الحاجة إلى الخادم الخلفي Backend، يسمى هذا النوع من الاستضافة نظام إدارة محتوى بدون رأس Headless CMS، ويقدم المزود معه عادةً أدوات تأليف ونماذج ويب تعد جزءًا من عرض أوسع يسمى البرنامج بصيغة خدمة أو Software As A Service. ويقدم بعض المزودين أيضًا استضافة الخوادم الخفية Serverless أو ما يسمى الوظائف بدون خادم، ويقصد بها كتابتك التعليمات البرمجية لتطبيقك مرةً واحدة بمعزل عن البنية التحتية للخوادم، ثم نشرها في البيئة السحابية ليجري تشغيلها فقط عند الطلب، يطلق على هذا الأسلوب عند استخدامه مع مواقع الويب الثابتة اسم جامستاك Jamstack. تتميز خدمات الحوسبة خفية الخوادم وخدمات نشر مواقع الويب الثابتة بأنها تقنيات قابلة للنقل، وتشبه الاستضافات القديمة إذ تعفي صاحب التطبيق تقريبًا من جميع مسؤوليات الأمن والصيانة التي ترافق عمليات النشر الكاملة على الخوادم، لكنها مع ذلك تظل محدودة النطاق، وقد لا تفي بالغرض في بعض الحالات، فإذا تطلب مشروعك على سبيل المثال نشر حاوية دوكر خلف خادم Nginx في مكدس واحد، لن تكفيك هذه الاستضافات وستحتاج خادمًا سحابيًا كاملًا. عمومًا، أي تطبيق تنشره على الخادم السحابي يمكنك نشره على حاسوبك المحلي أيضًا، مع بعض الاختلافات لصالح الخادم السحابي، فنادرًا ما يثبت الأفراد نظام تشغيل لينكس على حواسيبهم الشخصية، كما هو الحال في الخوادم السحابية، بل يعتمدون ويندوز أو ماك، ومعظم أدوات جانب الخادم لا تعمل مباشرةً مع هذه النظم على عكس لينكس. قد لا تكون هذه النقطة مؤثرة كثيرًا بالنسبة لك، لكن ما نريد إيصاله أن الخادم السحابي يناسب جميع الاحتياجات، ويمكنك إعداده لأي غرض تريده تمامًا كما تفعل مع حاسوبك المحلي. كيفية تحديد مواصفات الخادم يعتمد أداء الخوادم السحابية وسعرها على مواصفات العتاد الصلب، ويخصص لكل خادم سحابي ضمن العنقود Cluster مقدار معين من الموارد الحاسوبية، يمكن زيادته أو إنقاصه بمرونة تامة وبسرعة، على عكس الحواسيب الفيزيائية، لذا قبل حجز خادمك السحابي حدد أولًا مواصفاته الفنية، وادرس تأثيرها على جودة عمل التطبيق، ثم وازن ذلك مع ميزانيتك، وبعدها اختر الخادم المناسب. تُحَدَّد مواصفات الخوادم السحابية عادةً بعدد نوى المعالجات المركزية CPU المتوفرة لديها، وحجم ذاكرة الوصول العشوائي RAM المتاحة، وما يخصص لها من مساحات تخزينية على الأقراص الصلبة. ونظرًا لاختلاف مقاييس سرعة الأقراص والمعالجات في الخوادم السحابية عنها في ظروف التشغيل في العالم الحقيقي، فقد اعتمد معظم مزودي الخدمات السحابية مواصفاتٍ موحدة لها، فمتوسط سرعة الأقراص يعادل تقريبًا سرعة أقراص SSD، وسرعة وحدة المعالجة المركزية تماثل سرعة نواة Intel Xeon. وبالإضافة إلى المواصفات السابقة يفرض بعض المزودين قيودًا على الخوادم السحابية في الطبقة الدنيا، مثل: تحديد عدد عمليات الإدخال والإخراج المسموحة على القرص (IOPS)، وإجمالي حركة المرور المتبادلة مع الخودام عبر الشبكة وغير ذلك، قد تسبب هذه القيود اختناقات لبعض البرامج المستضافة. أما بخصوص الحجوم التخزينية، فيوفر لك معظم المزودين إمكانية حجز مساحات تخزين إضافية حسب احتياجاتك، بتقنيات مثل: التخزين الكتلي والتخزين الكائني، وربطها بخادمك الخاص VPS، وهذا أفضل من احتفاظك بجميع البيانات في مكان واحد على القرص التخزين الأساسي داخل VPS وتوسيع مساحته باستمرار. يُعطى لكل خادم سحابي عنوان IP عام مخصص له، للاتصال به عبر شبكة الإنترنت، وقد يكون العنوان من الإصدار الرابع IP4 وفق الصيغة 123.123.123.123 أو من الإصدار السادس IP6 من نمط 2001:0db8:0000:0000:0000:ff00:0042:8329، والحالة المعتادة أن يقابل عنوان IP اسم دومين مثل: https://my_domain.com. تتضمن بعض عروض الاستضافة السحابية تزويدك بعنوان IP لكل خادم VPS تحجزه، بينما يطلب منك بعض المزودين شراء عناوين IP بنفسك وتسجيلها للخوادم، تسمى هذه العناوين بعناوين IP المحجوزة Reserved IPs، وهي مناسبة لعمليات النشر واسعة النطاق. يمكنك شراء اسم الدومين من مزود الاستضافة نفسه فبعضهم مثل ديجيتال أوشن يقدمون لك المنتجين معًا، وتستطيع أيضًا الحصول عليه من مصدر آخر ثم إنجاز الربط بينهما بواسطة سجلات DNS. الوصول للخادم السحابي يتطلب الوصول إلى الخوادم السحابية إتقانك العمل في بيئة سطر الأوامر أو الطرفية Terminal محليًا أو عن بعد، وأكثر البروتوكولات استخدامًا في هذا المجال بروتوكول SSH الذي يستخدم البوابة 22 ويعتمد عليه مسؤولو الخادم، وبروتوكول HTTP على البوابة 80 و HTTPS على البوابة 443 المخصصين أكثر للمستخدم النهائي، تتمحور إدارة النظام السحابي حول هذه الخوادم والخدمات والبروتوكولات. الخاتمة تناول هذا المقال التعليمي نظرة عامة على الخوادم والعروض السحابية، وكيفية تطورها مع الزمن، ليضعك على بداية الطريق في العمل مع هذه الخدمات، ويعينك على اختيار أنسبها لمشروعك. ترجمة -وبتصرف- للمقال Cloud Servers: An Introduction لصاحبه Alex Garnett. اقرأ أيضًا مفهوم السحابة Cloud تعلم الحوسبة السحابيّة: المتطلبات الأساسيّة، وكيف تصبح مهندس حوسبة سحابيّة الحوسبة الافتراضية virtualization وأوجه اختلافها عن الحاويات containers كل ما تود معرفته عن السحابة الهجينة Hybrid Cloud
-
يمكن أن يشير المصطلح "خادم ويب Web Server" إلى العتاد الصلب أو البرمجيات، أو كلاهما معًا. من ناحية العتاد الصلب: يُعد خادم الويب حاسوبًا يُخزّن البرمجيات اللازمة لإدارة خادم الويب كما يخزّن الملفات التي تتكون منها مواقع الويب (مثل ملفات HTML وCSS وملفات جافاسكربت). يتصل خادم الويب بالإنترنت ويدعم التبادل الفيزيائي للبيانات مع الأجهزة الأخرى المتصلة بالإنترنت. من ناحية البرمجيات: يتألف خادم الويب من عدة أقسام تتحكم بكيفية دخول مستخدمي ويب إلى الملفات التي يستضيفها. يتكون خادم ويب على الأقل من خادم HTTP ويضم برمجيات قادرة على فهم عناوين ويب URL وبرتوكول HTTP (البروتوكول الذي يستخدمه المتصفح لعرض محتوى صفحات الويب). يمكن الولوج إلى خادم HTTP من خلال أسماء النطاقات الخاصة بمواقع الويب التي يُخزّنها ويعيد محتوى هذه المواقع التي يستضيفها إلى جهاز المستخدم النهائي عندما يطلبها. ولو أردنا التكلم ببساطة شديدة نقول: عندما يحتاج المتصفح إلى ملف يستضيفه خادم ويب، يطلب المتصفح هذا الملف عبر بروتوكول HTTP، وعندما يصل الطلب إلى خادم الويب الصحيح (خادم الويب كعتاد صلب)، يقبل خادم HTTP (الناحية البرمجية من خادم ويب) الطلب ويبحث عن الملف المطلوب، ويعيده إلى متصفح الخاص بالمستخدم عبر بروتوكول HTTP أيضًا. إن لم يعثر الخادم على الملف فسيستجيبُ برسالة خطأ ذات الرمز 404. ستحتاج لخادم ويب ساكن Static أو ديناميكي Dynamic لنشر موقع الويب الخاص بك. والفرق بين هذه الخوادم هو: خادم الويب الساكن: هو حاسوب مزوّد بخادم HTTP يعيد الملفات التي يستضيفها كما هي تمامًا إلى المتصفح الذي يطلبها. خادم الويب الديناميكي: يتكون من خادم ويب ساكن بالإضافة إلى برمجيات إضافية تتمثل عادة بخادم تطبيقات وقاعدة بيانات، ويُعد هذا الخادم ديناميكيًا لأن خادم التطبيقات سيُحدّثُ الملفات التي يستضيفها قبل إرسال محتوياتها إلى المتصفح عبر خادم HTTP. لكي ترى صفحة الويب بشكلها النهائي على المتصفح، سيملأ خادم التطبيقات -على سبيل المثال- قالب HTML معين بمحتويات مصدرها قاعدة بيانات ثم يرسلها. تحتوي مواقع الويب الضخمة مثل MDN أو ويكيبيديا مثلًا على آلاف صفحات الويب، وهذه المواقع مكوّنة أساسًا من عدة قوالب HTML جاهزة وقاعدة بيانات ضخمة جدًا بدلًا من آلاف مستندات HTML الجاهزة للتسليم. إذ تتيح هذه التقنية سهولة في الصيانة وتسليم المحتوى. سنتعرف في هذا المقال على ماهية خادم الويب وأنواعه ونكتسب فهمًا عامًا لآلية عمله. ننصحك قبل الشروع في قراءة هذا المقال بالاطلاع على المقال كيف تعمل شبكات الإنترنت؟ وأن تكون على دراية بالفرق بين صفحة الويب وموقع الويب وخادم الويب ومحرك البحث. الملفات المستضافة قبل أن نتعمق أكثر، لنتذكر سريعًا أن المتصفح يُرسل طلبًا إلى خادم ويب عندما يريد إحضار صفحة ويب والذي يبحث بدوره عن الملف المطلوب ضمن مخازنه. عندما يجد الخادم الملف يقرأه أو يعالجه بالطريقة المطلوبة ثم يرسله إلى المتصفح. لننظر إذًا إلى هذه الخطوات بشيء من التفصيل. يجب على خادم الويب في البداية أن يخزّن جميع الملفات المرتبطة بموقع ويب معين وتحديدًا جميع مستندات HTML والملفات المساعدة لها كملفات تنسيق الصفحات CSS، وملفات المعالجة كملفات جافاسكربت، وخطوط الكتابة والفيديوهات وغيرها. بالإمكان استضافة كل أنواع الملفات السابقة تقنيًا على حاسوبك الشخصي، لكن من الأفضل تخزينها على خادم ويب بعيد ومخصص وذلك للأسباب التالية: خوادم الويب المخصصة لاستضافة الملفات متاحة دومًا (أي في حالة عمل مستمر). خوادم الويب متصلة دومًا بالإنترنت باستثناء أوقات الصيانة وعند حدوث مشاكل آنية في منظوماتها. يبقى لخادم الويب عنوان آي بي ثابت دومًا (ما يعرف بعنوان آي بي مخصص Dedicate IP)، إذ لا تؤمن جميع مزودات خدمة الإنترنت ISPs عنوان آي بي ثابت للخطوط المنزلية. تُصان الخوادم المخصصة تقليديًا من قبل جهة مستقلة (طرف ثالث). وبالتالي فإن إيجاد مضيف جيد لملفات وموارد موقعك هي خطوة مفتاحية من خطوات بناء الموقع. تفحص الخدمات المتنوعة التي تقدمها شركات الاستضافة، واختر الشركة التي تقدم الخدمات التي تحتاجها ضمن حدود ميزانيتك فيمكن أن تكون الاستضافة مجانية ويمكن أن تصل إلى آلاف الدولارات شهريًا. عليك في الخطوة التالية أن ترفع ملفاتك إلى الخادم بعد أن تؤمن استضافة موقعك على مزود خدمة. الاتصال عبر بروتوكول HTTP يدعم خادم ويب بروتوكول النقل HTTP ويأتي الاسم كاختصار للعبارة Hypertext Transfer Protocol وهو بروتوكول نقل النصوص التشعبية. يحدد البروتوكول طريقة نقل النصوص التشعبية (مستندات ويب مترابطة) بين حاسوبين. والبروتوكول: هو مجموعة من القواعد التي يجب على حاسوبين اتباعها ليتواصلا بطريقة صحيحة. ويعدّ بروتوكول HTTP بروتوكولًا نصيًا Textual أي لا يتعلق بالحالة Stateless. عمومًا الفرق بين البروتوكول النصي وعديم الحالة هو على الشكل التالي: بروتوكول نصي Textual: جميع الأوامر على شكل نصوص يمكن للبشر قراءتها. بروتوكول عديم الحالة Stateless: لا يمكن للخادم ولا العميل أن يتذكرا أي شيء عن الاتصال السابق بينهما. فمثلًا بالاعتماد على بروتوكول HTTP لا يمكن أن يتذكر الخادم كلمة السر التي أدخلتها أو المرحلة التي وصلت إليها خلال عملية تحويل غير مكتملة، ولإدارة خدمات كهذه ستحتاج إلى خادم تطبيقات. يحدد بروتوكول HTTP قواعد واضحة لآلية التواصل بين الخادم والعميل. عليك في هذه المرحلة أن تنتبه إلى النقاط التالية: عندما يطلب المتصفح ملفًا من خادم ويب عبر بروتوكول HTTP لا بد أن يزود الخادم بعنوان URL للملف. على خادم الويب أن يجيب على كل طلب HTTP يصله برسالة خطأ على الأقل. يُعد خادم HTTP المثبت على خادم الويب مسؤولًا عن معالجة الطلبات القادمة والرد عليها، ومن مسؤولياته نذكر: يتحقق خادم HTTP عند استلام الطلب إن كان هناك تطابق بين عنوان URL وأحد الملفات التي يستضيفها الخادم. يعيد الخادم محتوى الملف المطلوب إن وجد تطابقًا، وإن لم يجد يحضّر خادم التطبيقات ملف الاستجابة اللازم لفشل الطلب. إن لم يتمكن الخادم من تنفيذ أي من الخطوتين السابقتين سيعيد رسالة خطأ إلى المتصفح، وهي عادةً رسالة الخطأ 404 الصفحة غير موجودة. يعدّ هذا الخطأ كثير الحدوث لذلك يحاول مصممو مواقع الويب بذل الجهد في إخراج صفحات الخطأ بطريقة لبقة. المحتوى الثابت والمحتوى المتغير لصفحة ويب يمكن القول أن خادم ويب قادر على التعامل مع المحتويات الثابتة والمتغيرة (الديناميكية). لكن تذكر أن مصطلح "محتوى ساكن (أو ثابت)" يعني "يقدم كما هو". لذلك ستجد أن مواقع الويب الساكنة هي الأسهل إعدادًا ونقترح أن يكون موقعك الأول موقع ويب ساكن. ويعني المصطلح "محتوى متغير" أن الخادم سيعالج هذا المحتوى أو يولّده أثناء المعالجة انطلاقًا من قاعدة بيانات. يتيح لك هذا الخيار مرونة أكثر لكن تبعاته التقنية أعقد، مما يجعل عملية بناء مواقع ديناميكية أكثر صعوبة. هناك العديد من خوادم التطبيقات وكل واحد منها له تقنيات مختلفة لذلك من الصعب أن نقترح عليك خادمًا محددًا. لأن خوادم التطبيقات مثلًا تتعلق بفئة معينة من مواقع الويب مثل المدونات أو مواقع المحتوى القابل للتغيير wikis أو مواقع التجارة الإلكترونية، بينما يكون بعضها الآخر أكثر عموميةً. خذ وقتك في إنتقاء خادم التطبيقات الذي يناسبك عندما تفكر في بناء موقع ديناميكي. إلا إذا رغبت في تعلم برمجة خوادم الويب وبناء خادمك الخاص (وهو أمر مثير بحد ذاته)، وعمومًا لا تُعد اختراع العجلة وانتق خادم تطبيقات جاهز. ترجمة -وبتصرف- للمقال What is a web server اقرأ أيضًا دورة علوم الحاسوب ماهي أسماء النطاقات في شبكة الإنترنت؟ ما هي الأدوات المستخدمة في بناء مواقع ويب؟ ما التكلفة المادية الكاملة لبناء موقع ويب؟ ما هي أدوات مطوري الويب المدمجة في المتصفحات؟
-
على الرغم من امتلاك نظام لينكس ميزات كثيرة إلا أن ويندوز لا يزال النظام الأكثر شيوعًا من ناحية الاستخدام، لذا نقدم في هذا المقال عشر خيارات لتجريب نظام لينكس ويتيح كل منها استكشاف النظام والتعرف عليه ومعرفة مزاياه، يمكن للمستخدم اختيار أي طريقة حسب رغبته. 1. تجربة صدفة لينكس Free shell يقوم العديد من مديري الأنظمة بإعادة استخدام أجهزة الحاسوب المهملة عن طريق إنشاء حسابات صدفة مجانية والتي تتيح استخدام طرفية لينكس في تعلم الأوامر وأساسيات تطوير الويب ولغة بايثون Python بالإضافة إلى كتابة سكربت لينفذ في الصدفة، جميع هذه الميزات مجانية وتختصر وقت عمل المستخدم، وفيما يلي قائمة ببعض الخيارات: الخيار الأول Freeshell.de وهو نظام لينكس متاح بشكل عام ويعمل منذ عام 2002 ويسمح للمستخدم بالحصول على وصول إلى الصدفة الآمنة عبر SSH أو IPv6 و OpenSSL لتجريبها في صدفة لينكس بالإضافة إلى إمكانية طلب قاعدة بيانات MySQL. الخيار الثاني Blinkenshell يعمل هذا النظام منذ عام 2006 ويوفر صدفة لينكس لتعلم يونكس Unix واستخدام الدردشة عبر الإنترنت IRC وتأمين استضافة لمواقع ويب بسيطة ومشاركة ملفات. الخيار الثالث نظام الوصول العام في يونكس SDF تم تأسيسه عام 1987 لتقديم حسابات NetBSD مجانية حيث أن NetBSD لا يعد لينكس ولكنه يونكس مفتوح المصدر لذا يقدم تجربة مماثلة، كما أنه يمتلك العديد من التطبيقات يمكن تنزيلها بواسطة مدير الحزم homebrew مما يجعله الفاصل بين النهج القديم BBS والصدفة القديمة المجانية. غالبًا ما يُساء استخدام حسابات صدفة المجانية لذا يتوجب على مستخدمي هذه الحسابات إظهار الوفاء والاستعداد للمشاركة في نشاطات المجموعة ومن خلال طلب خاص أو تبرع صغير لإثبات حسن النية، يمكن حينها الوصول إلى المُصرّفات ولغات البرمجة المتقدمة بالإضافة إلى مشغّلات قواعد البيانات وطلب تثبيت برامج ومكتبات إضافية والتي تساعد على تحسين تجربته وتتم الموافقة على الطلب من قبل المدير المسؤول. على الرغم من أن هذه الطريقة تعد رائعة لتجريب نظام لينكس حقيقي ولكن لا يحصل المستخدم فيها على صلاحيات المستخدم الجذر root لذلك عليه تعلم إدارة البرامج المحلية دون الدخول في التفاصيل. 2. استخدام لينكس على ويندوز بواسطة WSL 2 بدأت شركة مايكروسوفت منذ حزيران عام 2019 بإصدار لينكس مع ويندوز مما يتيح تشغيل تطبيقات لينكس من ويندوز باعتباره التكرار الثاني لنظام ويندوز الفرعي لنظام لينكس وهو اسم الطريقة WSL 2 أي Windows Subsystem for Linux والرقم 2 يرمز إلى التكرار الثاني. تستهدف هذه الطريقة بشكل أساسي المطورين وسيجد مستخدمو ويندوز أن WSL 2 هي بيئة لينكس من سطح مكتب مريح ومألوف بدون طرق وهمية تستهلك موارد إضافية. تعتبر WSL أداة تطويرية وتعليمية وسهلة التعلم ويحصل المستخدم فيها على صلاحيات مدير النظام ويتمكن من تشغيل توزيعات لينكس وتطبيقاته لكنها لاتزال في مراحلها الأولى والعمل عليها مستمر لذا فهي عرضة للتغيير وقد يواجه المستخدم أخطاء أثناء العمل عند استخدامها في أمور معقدة، كما لا تمتلك مسارًا واضحًا للاستخدام حتى الآن ولا تغطي جميع تفاصيل التجربة الواقعية مما يجعلها تجربة غير مثالية وتناسب فقط المستخدم الذي يرغب فقط بتجريب لينكس، وتتطلب منه تعلم بعض الأوامر الأساسية في لينكس لتساعده على إنجاز الأعمال البسيطة في هذه البيئة. 3. تحميل لينكس على محرك أقراص عبر منفذ USB يحصل المستخدم في هذه الطريقة على نظام لينكس محمول، يمكن الاحتفاظ به وتشغيله على أي جهاز حاسوب في أي مكان مع عدم تأثر بيانات الجهاز المُضيف أو بيانات نظام لينكس أبدًا مما يجعلها طريقة مناسبة لأجهزة الحاسوب العامة في المدارس والمكتبات ومراكز الأعمال التجارية في الفنادق، كما يمكن استخدامها كمنصة حوسبة أساسية في رحلات السفر الخاصة بالعمل، ويمكن اعتبارها نسخة احتياطية لحالات المشاكل والأعطال التي تواجه نظام تشغيل الحاسوب، أو حتى بهدف استخدام نظام لينكس من فترة لأخرى. توفر هذه الطريقة توزيعة لينكس كاملة ومستقرة وموثوقة ومزودة ببيئة سطح مكتب قابلة للتخصيص وتتيح الوصول إلى جميع البرمجيات، كما تكون مشابهة تمامًا لبيئة لينكس الواقعية إلا أنه يوجد القليل من التفاصيل لا يمكن القيام بها على نظام التشغيل المحمول. تخزين البيانات فيها مستمر ولكنه يتم بشكل مختلف قليلًا، حيث يتم حفظ البيانات في نظام ملفات مضغوط والذي يتم تطبيقه بعد ذلك كتراكب على النظام عند الإقلاع، تتيح هذه المرونة خيارات في الإقلاع فإما يتم الإقلاع في الوضع الدائم، أو حفظ جميع البيانات مرة أخرى على قرص التخزين، أو الإقلاع في الوضع المؤقت والذي يختفي فيه كل ما تم تنفيذه بمجرد إيقاف التشغيل، أي استخدامه كنظام آمن ومحدود النطاق على حاسوب غير موثوق أو كنظام تشغيل محمول على أجهزة الحاسوب الموثوقة. يوجد العديد من التوزيعات المماثلة التي يمكن تجربتها يحتوي بعضها على الحد الأدنى من بيئات سطح المكتب لحواسيب منخفضة الطاقة والبعض الآخر مزود بسطح مكتب كامل، منها Porteus Linux وهي نظام تشغيل لينكس متكامل ومحسن ليتم تشغليه بهذا الشكل، ولإنشاء نسخة من التوزيعة على محرك أقراص مصغر قابل للإقلاع يجب تنزيل Fedora Media Writer مثلًا سواء على نظام ماك أو ويندوز. 4. التجول في لينكس والتعرف عليه بعيون الآخرين مشاهدة التجربة جزء من التجربة، ومن ذلك يمكنك البحث عبر الإنترنت ومشاهدة الفيديوهات التعريفية والشروحات عن لينكس وتجربته وكل ما يتعلق به وبها تأخذ فكرة أوسع عن النظام وواجهته والتعامل معه من الآخرين وكأنك استعرت أعينهم لتنظر عبرها. تناسب هذه الطريقة مستخدمي لينكس الجدد وتعطيهم شعور الألفة مع النظام وتزودهم بنظرة عامة حول بيئته والتطبيقات المتاحة وشكل سطح مكتب لينكس وغير ذلك بناءً على خبرة وتجربة الآخرين لذا فهي مجرد جولة استطلاعية فعليًا قبل البدء بالتجربة العملية. 5. تشغيل لينكس في المتصفح بواسطة جافا سكربت JavaScript منذ وقت ليس بعيد كانت الأنظمة الوهمية مكلفة من ناحية الحوسبة ومتاحة فقط للمستخدمين الذين يمتلكون أجهزة متميزة، أما الآن تم تحسينها لدرجة أنه يمكن تنفيذها بواسطة محرك جافا سكربت وذلك بفضل فابريس بيلارد Fabrice Bellard وهو مبتكر المحاكي الممتاز والمفتوح المصدر QEMU. بدأ بيلارد Bellard أيضًا مشروع JSLinux الذي يسمح بتشغيل لينكس وأنظمة التشغيل الأخرى في المتصفح ولا يزال مشروعًا تجريبيًا لكنه سيكون أعجوبة تقنية. تتيح هذه الطريقة تشغيل لينكس على نظام أساسي بدلًا من تشغيله على حاسوب قديم عديم المزايا، وتتطلب فتح متصفح الويب على صفحة JSLinux فقط ثم يمكن للمستخدم تشغيل صدفة لينكس أو نظام لينكس مزود بواجهة رسومية مبسطة، كما يمكنه تحميل وتنزيل الملفات إلى مضيف JSLinux الخاص بالمستخدم أو (نظريًا) إرسال الملفات إلى موقع نسخ احتياطي للشبكة لأن JSLinux لديه إمكانية الوصول إلى الإنترنت من خلال مقبس VPN (على الرغم من السرعات المحددة إلا أنها تعتمد على خدمة VPN). 6. القراءة عنه هذه هي الطريقة الأقل تقليدية لتجربة لينكس وتناسب المستخدم الذي يفضل ترك مسافة أمان بينه وبين كل شيء جديد عنه ويفضل المراقبة والبحث والاستفسار قبل البدء بالتجربة الفعلية، كما تناسب من لا يملك فكرة واضحة حول ما يشمله لينكس. يتوفر الكثير من المعلومات حول كيفية عمل لينكس وطريقة تشغيله واستخدامه وما يحدث في عالم لينكس، وكلما تعمق المستخدم أكثر في معرفة عالم الأنظمة والبرامج مفتوحة المصادر أصبح من السهل عليه فهم لينكس والحصول على معلومات أكثر دقة بدلًا من المعلومات الشائعة والكلام العام. يوجد الكثير من الكتب لهذا الهدف لكن يُنصح بكتاب سحر لينكس The Charm of Linux للكاتب Hazel Russman، وكتاب دليل خوادم أوبنتو وكتاب سطر أوامر لينُكس، بالإضافة إلى العديد من المقالات المتوفرة على أكاديمية حسوب. 7. بواسطة راسبيري باي Raspberry Pi راسبيري باي مُصمّم ليكون حاسوبًا ذا تكلفة منخفضة (أقل من 100 دولار) وذو استهلاك منخفض للطاقة لذا لا يدعم إمكانية تعدد المهام كما في طرق أخرى بل يناسب الأعمال محدودة المهام. استخدامه يعني تشغيل لينكس ويمكن الاستعانة بدليل إرشادي عن طريق موقع الويب الخاص به للحصول على معلومات حول جميع إمكانيات راسبيري باي ولينكس. تمنح هذه الطريقة إمكانية تعلم لينكس وجميع خياراته وتعطي صورة واضحة عن قوة الحوسبة المبسّطة صغيرة الحجم والصديقة للبيئة. 8. بالاعتماد على الحاويات يعلم الغالبية الإمكانيات المتطورة للحاويات، حيث يمكن استخدام دوكر وكوبيرنيتيس على أنظمة التشغيل ويندوز وAzure وماك ولينكس ولكن مالا يعلمه الكثير هو أن الحاويات هي نفسها لينكس، حيث تعد كل من تطبيقات الحوسبة السحابية والبنية التحتية أنظمة لينكس مصغرة تعمل جزئيًا بشكل وهمي وجزئيًا في بيئة مجردة bare metal والتي تُثبّت فيها الأجهزة الافتراضية مباشرةً على العتاد hardware بدلًا من تثبيتها في داخل نظام التشغيل المضيف. فعند تشغيل حاوية فإن ما يتم تشغيله هو توزيعة لينكس مصغرة شديدة التحديد ولكن تختلف الحاويات عن الأجهزة الافتراضية أو الخوادم الفعلية بحيث لا يتم استخدامها كنظام تشغيل للأغراض العامة، ومع ذلك يمكن لمطوري الحاويات معرفة كيفية هيكلة بنية نظام لينكس ومكان حفظ الملفات المهمة والأوامر الأكثر شيوعًا. تعتبر الحاويات مصممة لتكون خاصة بمهمة واحدة ولكن باعتبارها لينكس هذا ما يجعلها مرنة ويمكن استخدمها حسب ما هي مصممة لأجله أو استخدامها بهدف تجريب لينكس ومع أنها لا تعتبر تجربة مناسبة لحاسوب المستخدم ولكنها تجربة لينكس كاملة ويمكن تجربتها عبر الانترنت. في هذا الصدد، يمكنك الرجوع إلى مقال أبرز المفاهيم التي يجب عليك الإلمام بها عن الحاويات ومقال دليل لفهم حاويات لينكس وكيفية التعامل معها. 9. تثبيت لينكس على جهاز وهمي تعد برامج الأنظمة الوهمية أبسط وأسهل طريقة لتجريب أي نظام تشغيل ويوجد العديد من هذه البرامج أشهرها برنامج VirtualBox وهو مفتوح المصدر ويعمل على أي نظام تشغيل مُضيف مثل ويندوز وماك، انظر هنا مقال تثبيت نظام لينكس داخل نظام ويندوز في بيئة وهمية. تمتلك هذه الطريقة كل ميزات التجربة الواقعية وتتميز بالبساطة وسهولة الاستخدام حيث يمكن استخدام هذا النظام الوهمي كما لو كان مجرد تطبيق في الحاسوب، وتُستخدم إما كنسخة تجريبية لنظام لينكس أو كحالة خاصة عند الحاجة إلى بيئة لينكس مما يوفر بديلًا عن استخدام نظامي تشغيل سويًا والتي تعد معقدة وغير مرغوبة وتتطلب عملية إعادة التشغيل مع كل مرة يحتاج المستخدم فيها لتبديل النظام الحالي إلى النظام الثاني. يتميز النظام الوهمي بالانعزال فمن غير الممكن أن يتم تثبيته عن طريق الخطأ على نظام التشغيل المضيف، ويستخدم عتاد وهمي لذا فإن نظام التشغيل المضيف يقود الأجهزة الملحقة كلوحة المفاتيح والفأرة غيرها من وحدات الإدخال والإخراج. العيب الوحيد لهذه الطريقة هو حصر استخدام النظام في مهمات محدودة وضرورة العودة إلى نظام التشغيل المضيف لتنفيذ المهمات الأساسية. 10. تثبيت لينكس كنظام تشغيل أساسي في حال عدم اتخاذ القرار بشأن الطريقة الأنسب بين الطرق المذكورة سابقًا لتجريب لينكس هناك دومًا الطريقة التقليدية وهي تنزيل لينكس كنظام التشغيل الأساسي على الحاسوب. نظام لينكس مفتوح المصدر مما يعني أنه يمكن لأي شخص أن يقوم بتجميع لينكس وجميع البتات والأجزاء التي تجعله قابلاً للاستخدام في ما يسمى عادةً بالتوزيعة، إذ يوجد العديد من التوزيعات ولا يمكن تحديد أي توزيعة هي الأفضل لأن الأمر نسبي تبعًا لاحتياجات المستخدم وعمله لذا ينصح عادةً بتجريب بعض التوزيعات الشائعة قبل اختيار التوزيعة الأنسب، فمثلًا عند الحاجة إلى استخدام كاميرا الويب وأثناء تجريب توزيعة فشلت في التعرف على كاميرا الويب يجب الانتقال لتوزيعة أخرى تتعرف على كاميرا الويب، كما يمكن الاطلاع على مقال عرض موجز لأشهر توزيعات لينكس الذي يقترح مجموعة من توزيعات لينكس المناسبة مهما كانت خبرة وإمكانيات المستخدم. خطوات التثبيت سهلة ولا تتطلب خبرة سابقة وتتضمن: تنزيل التوزيعة والتي تكون عبارة عن ملف ISO، ثم تنزيل Fedora Media Writer والذي يقوم بإنشاء مثبت على قرص تخزين خارجي أو قرص DVD ومن ثم تثبيت نظام لينكس على جهاز الحاسوب، ويمكن ذلك إما عبر تثبيت لينكس مع نظام ويندوز، أو بتثبيت لينكس بمفرده كنظام تشغيل أساسي وللفائدة يمكن الاطلاع على خطوات تثبيت توزيعة أوبنتو من لينكس. بعد الاستخدام سيكتشف المستخدم ميزات لا غنى عنها على الرغم من عدم معرفته بها مسبقًا. باختيار أي طريقة مما سبق لخوض تجربة لينكس سيجد المستخدم أن التجربة تستحق عناء التعلم. ترجمة -وبتصرف- للمقال 10 ways to get started with Linux لصاحبه Seth Kenlon. اقرأ أيضًا دورة علوم الحاسوب ما هو نظام التشغيل لينكس؟ تثبيت نظام لينكس داخل نظام ويندوز في بيئة وهمية مرجع إلى أشهر أوامر لينكس تثبيت لينكس مع نظام ويندوز
-
تُستخدَم قواعد البيانات العلاقيّة منذ وقت طويل. لقد اكتسبت قواعد البيانات من هذا النوع شُهرة بفضل أنظمة إدارتها التي تستخدم النموذج العلاقيّ بشكل جيّد للغاية، وهو النموذج الذي أثبت نفسه كطريقة رائعة للتعامل مع البيانات وخاصة في التطبيقات ذات المهام الحرجة. سنحاول في هذا المقال شرح الفروقات الرئيسيّة في بعض أكثر أنظمة إدارة قواعد البيانات العلاقيّة (RDBMS) شُهرة واستخدامًا. سنستكشف الفروقات الرئيسيّة بينها من حيث المزايا والأداء الوظيفيّ، وكيفية عملها، ومتى تتفوق إحداها على الأخرى، وذلك من أجل مساعدة المطورين على اختيار نظام إدارة قواعد بيانات علاقية (RDBMS). أنظمة إدارة قواعد البيانات قواعد البيانات هي مساحات تخزين مرتبة منطقيًّا لكل الأنواع المختلفة من المعلومات (البيانات). لكل نوع من قواعد البيانات –باستثناء عديمة المخطط– نموذج يقدم هيكلة للبيانات التي يتم التعامل معها. أنظمة إدارة قواعد البيانات هي تطبيقات (أو مكتبات) تدير قواعد البيانات بأشكالها وأحجامها وأنواعها المختلفة. أنظمة إدارة قواعد البيانات العلاقية تستخدم أنظمة قواعد البيانات العلاقيّة النموذج العلاقيّ للعمل على البيانات. يشكّل النموذج العلاقيّ المعلومات التي ستُخَزَّن مهما كان نوعها، وذلك بتعريفها ككيانات مترابطة ذات خصائص تتعدى الجداول (أي مخططات). تتطلب أنظمة إدارة قواعد البيانات من هذا النوع أن تكون البُنى (كالجداول مثلًا) معرّفة لتحوي بيانات وتتعامل معها. لكلّ عمود (مثل الخصائص) في الجداول نوعٌ مختلف من المعلومات (نوع البيانات). يُترجَم كلّ سجلّ في قاعدة البيانات –مُعرّف بمفتاح فريد– إلى صفّ ينتمي إلى جدول، وتكون مجموعة خصائص كل سجل معروضة كأعمدة للجدول. وتكون كلها مرتبطة ببعضها كما هو محدد في النموذج العلاقيّ. العلاقات وأنواع البيانات يمكن اعتبار العلاقات مجموعات حسابية تحوي مجموعة من الخصائص التي تشكّل معًا قاعدة البيانات والمعلومات المحفوظة فيها. تسمح هذه الطريقة في التعريف والتجميع لقواعد البيانات العلاقيّة بالعمل بالطريقة التي تعمل بها. عند تعريف جدول لإدخال سجلات، يجب أن يطابق كلّ عنصر يشكل سجلًّا (كالصفة attribute مثلًا) نوع البيانات المحدّد له (كأن يكون عددًا صحيحًا أو تاريخًا مثلًا). تستخدم أنظمة إدارة قواعد البيانات العلاقيّة أنواعًا مختلفة من البيانات ولا يمكن في العادة تبديل واحدة من هذه الأنواع مكان الأخرى. التعامل مع وعبر قيود –كالتي ذكرناها قبل قليل– شائع مع قواعد البيانات العلاقيّة. في الحقيقة، تشكّل القيودُ مركزَ العلاقات. ملاحظة: إذا كنت تحتاج للتعامل مع معلومات غير مترابطة إطلاقًا وممثلة عشوائيًّا (كالمستندات مثلًا)، فقد تكون مهتمًّا باستخدام NoSQL (قواعد البيانات عديمة المخططات schema-less). قواعد بيانات علاقية شائعة وهامة سنتعرف في هذا المقال على ثلاثة أنواع رئيسيّة وهامّة من أنظمة إدارة قواعد البيانات العلاقيّة مفتوحة المصدر التي ساهمت في تكوين عالم تطوير البرمجيات: SQLite: نظام إدارة قواعد بيانات علاقيّة مضمّن وقويّ جدًّا. MySQL: نظام إدارة قواعد البيانات العلاقيّة الأشهر والأكثر استخدامًا. PostgreSQL: نظام إدارة قواعد البيانات العلاقيّة الكيانيّ مفتوح المصدر المتوافق مع SQL الأكثر تقدّمًا. ملاحظة: تقريبًا دائمًا تتيح التطبيقات مفتوحة المصدر حريّة استخدام الطريقة التي تريدها. وفي غالب الأحيان تسمح لك أيضًا إنشاء تفرّع (fork) عن المشروع (وبالتالي استخدام نصوصه البرمجيّة) لإنشاء شيء جديد. إذا كنت مهتمًّا بأنظمة إدارة قواعد البيانات، فقد ترغب بالاطلاع على بعض المشاريع المتفرّعة المبنية على هذه المشاريع الشهيرة، مثل MariaDB. SQLite إنّ SQLite مكتبة رائعة تُضمَّن في التطبيقات التي تستخدمها. وكونها قاعدة بيانات قائمة بذاتها ومعتمدة على الملفات. تقدّم SQLite مجموعة رائعة من الأدوات للتعامل مع كل أنواع البيانات بقيود أقلّ بكثير وسهولة مقارنة بقواعد البيانات المستضافة المعتمدة على العمليات (خواديم قواعد البيانات). عندما يستخدم برنامج ما SQLite، يعمل هذا التكامل بنداءات (calls) مباشرة ومؤدية للغرض موجهة لملف يحوي البيانات (كقاعدة بيانات SQLite) بدلًا من التواصل عبر واجهة من نوع ما (كالمنافذ ports والمقابس sockets). هذا يجعل SQLite كفؤة وسريعة للغاية، وقويّة كذلك، وهذا بفضل التقنية التي بنيت عليها هذه المكتبة. أنواع البيانات التي تدعمها SQLite: NULL: قيمة فارغة NULL. INTEGER: عدد صحيح ذو إشارة (موجب أو سالب) محفوظ في بايت واحد، 2، 3، 4، 6، أو 8 بايت، وهذا يعتمد على حجم القيمة. REAL: قيمة النقطة العائمة (floating point)، مخزنة كرقم نقطة IEEE عائمة ذي 8-بايت. TEXT: سلسلة نصيّة مخزنة باستخدام ترميز قاعدة البيانات (UTF-8, UTF-16BE or UTF-16LE). BLOB: فقاعة من البيانات، تخزّن كما أدخِلَت تمامًا. ملاحظة: لمعرفة المزيد عن أنواع بيانات SQLite والعلاقات بين أنواع SQLite، ألقِ نظرة على التوثيق الرسميّ حول الموضوع. مزايا SQLite: معتمدة على الملفات: تتكون قاعدة البيانات بأكملها من ملف واحد على القرص، مما يجعلها محمولة تمامًا. مدركة للمعايير: رغم أنها قد تبدو كتطبيق قواعد بيانات "بسيط"، إلّا أن SQLite تستخدم SQL. ورغم أنّها أزالت بعض المزايا ( RIGHT OUTER JOIN أو FOR EACH STATEMENT) إلّا أنها تحوي بداخلها مزايا أخرى إضافيّة. ممتازة للتطوير، بل وحتى للاختبار: أثناء مرحلة تطوير التطبيقات، في الغالب يحتاج أغلب الناس لحلّ يمكن تطويعه للطلبات المتعدّدة. لدى SQLite قاعدة مزايا غنيّة، ويمكنها تقديم أكثر مما تحتاجه للتطوير، وبسهولة العمل مع ملف وحيد ومكتبة مرتبطة مبنية على C. عيوب SQLite: لا توفّر إدارة للمستخدمين: تأتي قواعد البيانات المتقدّمة بإدارة للمستخدمين –فمثلًا، فيها اتصالات مُدارة بصلاحيات الوصول إلى قواعد البيانات والجداول–. وبأخذ هدف وطبيعة SQLite بعين الاعتبار (عدم وجود مستوىً عالٍ من تعدّد المستخدمين في ذات الوقت)، لا وجود لهذه الميزة. عدم توفر إمكانية التلاعب بها للحصول على أداء أفضل: ونظرًا لطبيعة تصميمها أيضًا، لا يمكن التلاعب بـ SQLite للحصول على قدر كبير من الأداء. المكتبة سهلة الضبط والاستخدام. وبما أنها ليست معقّدة، فلا يمكن تقنيًّا جعلها أكثر أداءًا مما هي عليه، وبشكل يفوق أداءها الحاليّ الرائع. متى تستخدم SQLite: التطبيقات المضمّنة: كلّ التطبيقات التي تحتاج لقابليّة النقل، والتي لا تحتاج لتحجيم، كتطبيقات المستخدم المحلي والوحيد، وتطبيقات الهاتف النقّال أو الألعاب. كبديل عن الوصول إلى القرص: في العديد من الحالات، يمكن أن تستفيد التطبيقات التي تحتاج للقراءة من والكتابة إلى الملفات على القرص مباشرة من الانتقال إلى SQLite من أجل المزيد من الوظائف والسهولة اللتان تأتيان من استخدام لغة الاستعلام البنيويّة (Structured Query Language – SQL). الاختبار: من التبذير أن تستخدم نسبة كبيرة من التطبيقات عمليّة إضافيّة لاختبار منطقيّة العمل (أي الهدف الرئيسيّ للتطبيق: الوظيفيّة). متى لا تستخدم SQLite: في التطبيقات متعدّدة المستخدمين: إذا كنت تعمل على تطبيق يحتاج فيه العديد من المستخدمين الوصول إلى نفس قاعدة البيانات واستخدامها، فالغالب أنّ مدير قواعد بيانات علاقيّ كامل المزايا (مثل MySQL) خيار أفضل من SQLite. في التطبيقات التي تحتاج لقدر كبير من الكتابة: من محدوديّات SQLite عمليات الكتابة. يسمح نظام إدارة قواعد البيانات هذا عملية كتابة واحدة وحيدة أن تتم في وقت محدّد، مما يسمح بقدر محدود من الدفق. MySQL تعد MySQL أشهر خوادم قواعد البيانات الكبيرة. وهو منتج مفتوح المصدر غنيّ بالمزايا، ويشغّل الكثير من المواقع والتطبيقات على الإنترنت. من السهل البدء باستخدام MySQL، ولدى المطورين وصول إلى كمّ هائل من المعلومات المتعلقة بقواعد البيانات على الإنترنت. ملاحظة: يجب أن نذكر أنّه نتيجة لشيوع المُنتَج، فإنّ هناك الكثير من تطبيقات الشركات الأخرى وأدواتها ومكتباتها المضمّنة التي تساعد كثيرًا في الهديد من نواحي العمل مع نظام إدارة قواعد البيانات العلاقيّة هذا. ورغم عدم محاولتها تطبيق معيار SQL كامل، إلّا أنّ MySQL تقدّم الكثير من الوظائف للمستخدمين. وكخادم SQL قائم بذاته، تتصل التطبيقات بعملية مراقب MySQL (وهو تطبيق يعمل في الخلفية بعيدًا عن مرأى المستخدم، ويشار إليه أحيانًا بعبارة جنيّ أو عفريت) للوصول إلى قواعد البيانات ذاتها على خلاف SQLite. أنواع البيانات التي تدعمها MySQL: TINYINT: عدد صحيح متناهي الصغر. SMALLINT: عدد صحيح صغير. MEDIUMINT: عدد صحيح متوسّط الحجم. INT or INTEGER: عدد صحيح بحجم عاديّ. BIGINT: عدد صحيح كبير. FLOAT: عدد بفاصلة عائمة صغير أحاديّ الدقّة (single-precision floating-point). لا يمكن إلغاؤه. DOUBLE, DOUBLE PRECISION, REAL: عدد بفاصلة عائمة متوسط الحجم مزدوج الدقّة (normal-size/double-precision floating-point). لا يمكن إلغاؤه. DECIMAL, NUMERIC: عدد بفاصلة عائمة غير مُحتوىً. لا يمكن إلغاؤه. DATE: تاريخ. DATETIME: تجميعة من الوقت والتاريخ TIMESTAMP: ختم زمني (وقت وتاريخ حدوث حدث ما). TIME: وقت. YEAR: سنة بهيئة منزلتين أو أربعة منازل (المبدئيّ 4 منازل). CHAR: سلسلة نصّيّة ذات طول محدّد يتم دائمًا إكمالها من ناحية اليمين بفراغات إلى الطول المحدّد عند تخزينها. VARCHAR: سلسلة نصيّة ذات طول متغيّر. TINYBLOB, TINYTEXT: عمود نصّ أو فقاعة (blob) بحدّ أقصى للطول قدره 255 (أي 2^8 – 1) محرفًا. BLOB, TEXT: عمود نصّ أو فقاعة (blob) بحدّ أقصى للطول قدره 65535 (أي 2^16 – 1) محرفًا. MEDIUMBLOB, MEDIUMTEXT: عمود نصّ أو فقاعة (blob) بحدّ أقصى للطول قدره 16777215 (أي 2^24 - 1) محرفًا. LONGBLOB, LONGTEXT: عمود نصّ أو فقاعة (blob) بحدّ أقصى للطول قدره 4294967295 (أي 2^32 - 1) محرفًا. ENUM: تِعداد. SET: مجموعة. مزايا MySQL سهلة الاستخدام: يمكن تثبيت MySQL بسهولة شديدة. أدوات الأطراف الخارجية (third-party)، بما فيها المرئيّة (أي الواجهات الرسوميّة) تجعل البدء مع قواعد البيانات سهلًا للغاية. غنيّة بالمزايا: تدعم MySQL الكثير من وظائف SQL المتوقّع وجودها في أنظمة إدارة قواعد البيانات العلاقيّة، سواء بطريقة مباشرة أو غير مباشرة. آمنة: الكثير من مزايا الأمن وبعضها متقدّم مبنيّة في MySQL. قويّة وقابلة للتحجيم: يمكن لـMySQL التعامل مع الكثير من البيانات، ويمكنها أيضًا استخدامها على نطاق واسع إذا احتاج الأمر. سريعة: التخليّ عن بعض المعايير سمح لـ MySQL بالعمل بكفاءة عالية وبطريقة سلسة، مما أكسبها سرعة عالية. عيوب MySQL المحدوديّات المعروفة: من حيث التصميم، لا تنوي MySQL عمل كلّ شيء، وتأتي بمحدوديّات وظيفيّة قد تتطلبها بعض التطبيقات المتقدّمة جدًّا من الناحية الفنيّة. القضايا المتعلّقة بالمتانة: الطريقة التي يتم التعامل فيها مع بعض الوظائف في MySQL (كالمراجع، والتبادلات، والتدقيق، وغيرها) تجعلها أقل متانة بقليل من بعض أنظمة إدارة قواعد البيانات العلاقيّة الأخرى. بطء تطويرها: رغم أنّ MySQL ما زالت من الناحية الفنيّة منتجًا مفتوح المصدر، إلّا أنّ هناك انتقادات تتعلق بعمليّة تطويرها منذ الاستحواذ عليها. ولكن علينا التنويه إلى أنّ هناك قواعد بيانات مبنيّة على MySQL ومتكاملة معها تمامًا تضيف مزايا على تثبيت MySQL القياسيّ (مثل MariaDB). متى تستخدم MySQL العمليّات الموزّعة: عندما تحتاج لأكثر مما تتيحه SQLite، فإنّ تضمين MySQL في قائمة التطوير لديك – كذلك بالأمر بالنسبة لتضمين أيّ خادم قواعد بيانات مستقل – يقدّم لك الكثير من الحريّة في العمل إلى جانب بعض المزايا المتقدّمة. الأمان العالي: مزايا MySQL الأمنيّة تقدّم حماية يُعتمد عليها للوصول إلى البيانات (واستخدامها) بطريقة بسيطة. المواقع وتطبيقات الوِب: يمكن للأغلبية العُظمى من المواقع (وتطبيقات الوِب) العمل ببساطة مع MySQL رغم القيود. هذه الأداة المرنة والتي يمكن تحجيمها إلى حدّ ما سهلةُ الاستخدام والإدارة؛ وهذا مفيدٌ جدًّا على المدى البعيد. الحلول الخاصّة: إذا كنت تعمل على حلول محدّدة جدًّا ومخصّصة للغاية، يمكن لـMySQL العمل ضمن احتياجاتك بسهولة، وذلك بفضل إعدادات الضبط الغنيّة فيها وأوضاع العمل. متى لا تستخدم MySQL التوافقيّة مع SQL: بما أنّ MySQL لا تطبّق (ولا تسعى لتطبيق) معيار SQL بأكمله، فإنّ هذه الأداة ليست متوافقة بالكامل مع SQL. إذا كنت قد تحتاج التكامل مع أنظمة إدارة قواعد بيانات علاقيّة كهذه، فإنّ الانتقال من MySQL لن يكون سهلًا. التعدّدية Concurrency: رغم أنّ MySQL وبعض محرّكات الحفظ تعمل بأداء جيّد جدًّا في عمليات القراءة، إلا أنّ عمليات القراءة والكتابة متزامنتين قد تكون سيئة. نقص المزايا: مجدّدًا نقول، اعتمادًا على اختيار محرّك قواعد البيانات، يمكن أن لا تحوي MySQL على بعض المزايا، كالبحث في النصوص الكاملة. PostgreSQL إنّ PostgreSQL هي نظام إدارة قواعد البيانات العلاقيّة الكيانيّ مفتوح المصدر الأكثر تقدّمًا، والتي هدفها الرئيسيّ أن تكون موافقة للمعايير ويمكن الزيادة عليها. تسعى PostgreSQL (أو Postgres) إلى تبني معايير ANSI/ISO SQL مع مراجعاتها. تتميّز PostgreSQL عن أنظمة إدارة المحتوى الأخرى بدعمها للتوجه الكيانيّ (object-oriented) المتكامل والمطلوب بشدّة و/أو وظائف قواعد البيانات العلاقيّة، كدعمها الكامل للتبادلات (القيود transactions) التي يعتمد عليها، أي أن تكون مكونة من عناصر غير قابلة للتجزئة، وأن تكون متّسقة ومعزولة وذات قدرات تحمل عالية (Atomicity, Consistency, Isolation, Durability – ACID). وبسبب التقنية القوية التي تقف خلفها، لدى Postgres قدرات عالية جدًّا في التعامل مع العديد من المهام بكفاءة عالية. يتم الوصول إلى التعدّدية (concurrency) دون قفل قراءة، وذلك بفضل تطبيق تحكم التعدّديّة متعدد الإصدارات (Multiversion Concurrency Control – MVCC). يمكن برمجة الكثير في PostgreSQL، وبالتالي يمكن توسعتها، وذلك باستخدام إجراءات مخصّصة تُدعى "إجراءات التخزين" (store procesures). يُمكن إنشاء هذه الإجراءات لتسهيل تنفيذ عمليات قاعدة البيانات المكررة والمعقدة والتي تكثر الحاجة إليها. رغم أنّ نظام إدارة قواعد البيانات هذا لا يحظى بشعبيّة MySQL، إلّا أنّ هناك الكثير من أدوات الأطراف الأخرى ومكتباتهم مصمّمة لجعل العمل مع PostgreSQL سهلًا، رغم طبيعته القويّة. يمكن الحصول على PostgreSQL هذه الأيام كحزمة تطبيقات من خلال مدير الحزم المبدئيّ للعديد من أنظمة التشغيل بسهولة. أنواع البيانات التي تدعمها PostgreSQL bigint: عدد صحيح من 8-بايت ذو إشارة bigserial: عدد صحيح من 8-بايت يزداد تلقائيًّا [(bit [(n: سلسلة ثنائيّة ذات طول محدّد [(bit varying [(n: سلسلة ثنائيّة متغيرة الأطوال boolean: متغيّر منطقي (صواب/خطأ) box: صندوق مستطيل في سطح مستوٍ bytea: بيانات ثنائيّة ("مصفوفة بايت") [(character varying [(n: سلسلة محارف (character string) ذات طول متغير [(character [(n: سلسلة محارف ذات طول ثابت cidr: عنوان شبكة IPv4 أو IPv6 circle: دائرة في سطح مستوٍ date: تاريخ في تقويم (السنة، الشهر، اليوم) double precision: عدد فاصلة عائمة ذو دقّة مزدوجة (8 بايت) inet: عنوان مضيف IPv4 أو IPv6 integer: عدد صحيح من 4 بايت ذو إشارة [(interval [fields] [(p: مدة زمنية line: خط لا نهائيّ في مستوى lseg: جزء من خطّ مستقيم في مستوى macaddr: عنوان تحكم بالوصول إلى الوسيط (Media Access Control – MAC) money: مقدار من المال [(numeric [(p, s: دقّة رقميّة محدّدة أو يمكن اختيارها path: مسار هندسيّ على سطح point: نقطة هندسيّة على سطح polygon: شكل هندسيّ مغلق على سطح real: عدد فاصلة عائمة ذي دقّة أحاديّة (4 بايت) smallint: عدد صحيح من 2-بايت ذو إشارة serial: عدد صحيح من 4 بايت يزداد تلقائيًّا text: سلسلة محارف ذات طول متغيّر [time [(p)] [without time zone: وقت في اليوم (دون منطقة زمنية) time [(p)] with time zone: الوقت من اليوم (مع منطقة زمنية) [timestamp [(p)] [without time zone: تاريخ ووقت (دون منطقة زمنية) timestamp [(p)] with time zone: تاريخ ووقت يشمل المنطقة الزمنيّة tsquery: استعلام بحث نصّيّ tsvector: مستند بحث نصيّ txid_snapshot: لَقطَة (transaction) لهويّة التبادل على مستوى المستخدم uuid: معرّف فريد عالميًّا xml: بيانات XML مزايا PostgreSQL نظام إدارة قواعد بيانات مفتوح المصدر موافق لمعايير SQL: PostgreSQL مفتوح المصدر ومجانيّ، ولكنه نظام إدارة قواعد بيانات علاقيّة قويّ جدًّا. مجتمع قويّ: PostgreSQL مدعوم من مجتمع خبيرٍ ومخلص يمكن الوصول إليه عبر مواقع الأسئلة والإجابات والقاعدة المعرفيّة طوال الوقت ومجانًا. دعم قويّ من الأطراف الأخرى: بغض النظر عن المزايا المتقدّمة جدًّا، تُزيّن PostgreSQL العديدُ من الأدوات الجيّدة ومفتوحة المصدر من أطراف أخرى لتصميم وإدارة واستخدام نظام الإدارة هذا. إمكانية التوسعة: يمكن توسعة PostgreSQL برمجيًّا باستخدام إجراءات مخزّنة، كما يفترض أن يكون الوضع في نظام إدارة قواعد بيانات علاقيّة متقدّم. كيانيّ: ليس PostgreSQL مجرّد نظام إدارة قواعد بيانات علاقيّة، ولكنه كيانيّ (objective) أيضًا – ويدعم التضمين (nesting)، ومزايا أخرى. عيوب PostgreSQL الأداء: للعمليات البسيطة كثيفة القراءة، يمكن أن تكون PostgreSQL مبالغًا فيها، ويمكن أن تبدو أقلّ أداءً من منافساتها، مثل MySQL. الشعبيّة: نظرًا لطبيعة هذه الأداة، فإنها تقبع في الخلف فيما يتعلق بشعبيتها، رغم كثرة من استخدامها – مما قد يؤثر على سهولة الحصول على دعم. الاستضافة: نتيجة للعوامل المذكورة أعلاه، يصعب إيجاد مستضيفين أو مقدمي خدمة يعرضون خدمات PostgreSQL مُدارة. متى تستخدم PostgreSQL صحّة البيانات: عندما تكون صحّة البيانات وإمكانية التعويل عليها ضرورة حتميّة، ولا يكون هناك عذر إذا حدث خطب ما، فستكون PostgreSQL الخيار الأفضل. الإجراءات المخصّصة المعقّدة: إذا كنت تتطلّب من قاعدة بياناتك أداء إجراءات مخصّصة، فـPostgreSQL هي الخيار الأفضل، كونه يمكن توسعتها. التكامل: إذا كان يُحتمل في المستقبل أن تكون هناك حاجة لنقل نظام قاعدة البيانات بأكمله إلى حلّ مملوك (مثل أوراكل)، فستكون PostgreSQL الأكثر توافقًا والأسهل في التعامل معها عند الانتقال. التصاميم المعقّدة: مقارنة بتطبيقات أنظمة إدارة قواعد البيانات العلاقيّة المجانية ومفتوحة المصدر الأخرى، تقدّم PostgreSQL لتصاميم قواعد البيانات المعقّدة أكبر قدر من الوظائف والإمكانات دون التفريط بالأمور الأخرى. متى لا تستخدم PostgreSQL السرعة: إذا كان كلّ ما تطلبه عمليات قراءة سريعة، فليست PostgreSQL الأداة التي عليك استخدامها. سهولة الإعداد: إذا لم تكن تحتاج لصحّة مطلقة للبيانات، أو للتوافق مع ACID أو التصاميم المعقّدة، فقد تكون PostgreSQL مبالغًا فيها للإعدادات البسيطة. التكرار: إذا لم تكن مستعدًّا لقضاء الوقت، وبذل الجهد والموارد، فالحصول على التكرار (أو تعدّد النُسَخ) في MySQL قد يكون أسهل لمن ليست لديهم خبرة في إدارة الأنظمة وقواعد البيانات. ترجمة -وبتصرّف- للمقال: SQLite vs MySQL vs PostgreSQL: A Comparison Of Relational Database Management Systems لصاحبه O.S. Tezer.
-
عند إنشاءك خادم أوبونتو 18.04 للمرة الأولى، يجب عليك اتخاذ بعض الخطوات كجزء من الإعدادات الأولية. سيزيد ذلك من أمان وسهولة استخدام الخادم، ويمنحك أساسًا قويًا لإجراءات لاحقة. ملاحظة: يشرح المقال أدناه الخطوات التي نوصي بها لإكمال تهيئة خادم أوبنتو 18.04 يدويا. اتباع هذه الاعدادات اليدوية سيساعدك في تعلم بعض المهارات الأساسية لإدارة الخادم وكتمرين لفهم الإجراءات التي تحدث في الخادم بصورة عامة. إن كنت تريد تهيئة الخادم وبدء استخدامة بسرعة، يمكنك استخدام نصنا البرمجي لتهيئة الخادم الأولي والذي ينفذ خطوات التهيئة تلقائيا. خطوة 1 - تسجيل الدخول كمستخدم مسؤول (root) تحتاج لمعرفة عنوان بروتوكول الإنترنت العام (public IP) للخادم الخاص بك لتسجيل الدخول. تحتاج أيضا إلى كلمة المرور، أو المفتاح السري لمستخدم مسؤول (ما يسمى ب root users) إن كنت قد ثبتت مفتاح SSH للمصادقة. إن لم تكن قد سجلت الدخول إلى الخادم الخاص بك، فيمكنك اتباع المقال حول كيفية الاتصال ب Droplet باستخدام SSH. قم بتسجيل الدخول إلى الخادم كمستخدم مسؤول root إن كنت غير متصلا حتى الآن باستخدام الأمر التالي. استبدل النص المظلل بعنوان بروتوكول الإنترنت العام للخادم الخاص بك. $ ssh root@your_server_ip في حال ظهور تحذير عن موثوقية المضيف قم بقبوله. إن كنت تقوم بالدخول باستخدام إثبات الهوية؛ قم بتقديم كلمة المرور. أما إن كنت تستخدم مفتاح SSH المحمي بعبارة مرور (passphrase)، سيُطلب منك إدخال عبارة المرور في بداية كل جلسة. قد يُطلب منك أيضا تغيير كلمة المرور للمستخدم المسؤول root في أول مرة تقوم بالتسجيل بها. عن المستخدم root المستخدم المسؤول root في بيئة لينكس هو المتحكم والذي يمتلك صلاحيات عديدة. ونظرا لهذه الصلاحيات فلا ينصح باستخدامه دائمًا وذلك لتجنب القيام بتغييرات عن طريق الخطأ. الخطوة التالية هي إعداد مستخدم بديل بصلاحيات أقل للعمل اليومي. كما سنشرح كيفية إضافة صلاحيات في أي وقت تحتاج إليها. خطوة 2 - إنشاء مستخدم جديد بعد تسجيل دخولك كمستخدم مسؤول root، فأنت جاهز لإضافة حساب مستخدم جديد لاستخدامه من الآن فصاعدا. الأمر التالي يقوم بإنشاء مستخدم بالاسم sammy، يمكنك تسمية المستخدم بأي اسم تريده. # adduser sammy ستُعرض عليك بعض الاسئلة بدأَ بكلمة مرور للحساب الجديد. يجب أن تقوم بإدخال كلمة مرور قوية. ومن ثم تعبئة باقي المعلومات والتي تعتبر اختيارية ويمكنك تجاوزها بالضغط على زر ENTER. خطوة 3 - منح صلاحيات إدارية يمتلك الحساب الذي قمنا بإنشائه صلاحيات اعتيادية. لكن قد نحتاج في بعض الأحيان إلى صلاحيات إدارية. لتجنب الخروج من هذا المستخدم والدخول إلى المستخدم المسؤول root بكثرة؛ يمكننا إعداد ما يسمى بصلاحيات المستخدم الأعلى أو صلاحيات مسؤول root لحساب المستخدم العادي، مما يتيح للمستخدم العادي تنفيذ الأوامر التي تحتاج إلى صلاحيات إدارية عن طريق استخدام الكلمة "sudo" قبل كل أمر. لإضافة هذه الصلاحيات للمستخدم الجديد، نحتاج لإضافة هذا المستخدم إلى مجموعة sudo. يمكن للمستخدمين ضمن مجموعة sudo في اوبنتو 18.14 استخدام الأمر sudo. نفِّذ الأمر التالي لإضافة المستخدم الجديد إلى مجموعة sudo، يجب أن تكون متصلا بالخادم باستخدام حساب مسؤول root (استخدم اسم المستخدم الذي أنشأته مسبقا). # usermod -aG sudo sammy الآن يمكنك الدخول باستخدام الحساب الجديد وتنفيذ الأوامر ذات الصلاحيات العليا عن طريق كتابة "sudo" قبل هذه الأوامر. خطوة 4 - إعداد جدار حماية رئيسي يمكن لخادم أوبونتو 18.04 استخدام جدار الحماية Uncomplicated Firewall) UFW) -جدار الحماية في نظام لينكس- للتأكد من عدم الاتصال سوى بخدمات معينة. يمكن إعداد جدار حماية رئيسي بسهولة باستخدام تطبيق UFW. ملاحظة: إن كان الخادم الخاص بك يعمل على DigitalOcean؛ فيمكنك استخدام DigitalOcean Cloud Firewalls بدلا من تطبيق UFW وذلك يعد اختياريا. يستحسن استخدام جدار حماية واحد فقط لتجنب أي تعارضات والتي قد تكون صعبة التصحيح. يمكن لمختلف التطبيقات تسجيل ملفات التعريف الخاصة بها مع UFW أثناء تثبيتها. تسمح هذه الملفات لتطبيق UFW بإدارة هذه التطبيقات وفقا لاسم التطبيق. لدى خدمة OpenSSH (Open Secure Shell) -أداة الاتصال الأولى لتسجيل الدخول عن بُعد باستخدام بروتوكول SSH- التي تتيح لنا الاتصال بالخادم ملف تعريف مسجل لدى UFW. لرؤية ذلك نستخدم الأمر: # ufw app list المخرجات: Available applications: OpenSSH يجب التأكد من أن جدار الحماية يسمح لاتصالات SSH حتى نتمكن من تسجيل الدخول مرة أخرى. يمكن القيام بذلك باستخدام الأمر: # ufw allow OpenSSH ثم يمكننا تفعيل جدار الحماية: # ufw enable قم بإدخال الحرف "y" وقم بالضغط على "ENTER" للمتابعة، للتأكد من أن اتصالات SSH ما زالت تعمل نفذ الأمر: # ufw status المخرجات Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) في حال قمت بإعداد خدمات إضافية، قم بتعديل إعدادات جدار الحماية للسماح باتصالات هذه الخدمات؛ كون جدار الحماية يقوم بمنع الاتصالات عدا اتصالات SSH. يمكنك اتباع هذا المقال لتعلم بعض عمليات UFW الشهيرة. خطوة 5 - السماح بالوصول الخارجي للمستخدم الجديد بما أنه أصبح لدينا مستخدم جديد للاستخدام اليومي، سنحتاج للتأكد من أنه يمكننا الدخول إلى هذا المستخدم عبر SSH. ملاحظة: للتأكد من ذلك، يمكنك الدخول إلى المستخدم الجديد باستخدام كلمة المرور واستخدام sudo. يستحسن البقاء متصلا باسم المستخدم المسؤول root. بهذه الطريقة يمكنك تصحيح أي مشاكل وإضافة أي تعديلات تحتاجها. إن تستخدم واجهتك أي مشكلة في الاتصال بالمستخدم المسؤول root باستخدام SSH وكنت تستخدم DigitalOcean Droplet فيمكنك الدخول إلى Droplet باستخدام شاشة أوامر DigitalOcean. عملية إعداد وصول SSH لمستخدم الجديد تعتمد على ما إن كان حساب المستخدم المسؤول root يستخدم كلمة مرور أو مفتاح SSH للمصادقة. في حال كان المستخدم root يستخدم المصادقة بكلمة المرور إن كنت مسجلا دخولك إلى حساب المستخدم المسؤول root باستخدام كلمة مرور، فإن عملية المصادقة باستخدام كلمة المرور مفعلة ل SSH. مما يمكنك من إضافة SSH لحساب المستخدم الجديد عن طريق تنفيذ الأمر التالي مستخدما اسم المستخدم الذي انشأته سابقا: $ ssh sammy@your_server_ip بعد إدخال كلمة المرور الخاصة بالمستخدم الجديد؛ ستكون مسجلًا إلى النظام بالحساب الجديد ويمكنك تنفيذ الأوامر الإدارية من خلاله عن طريق إضافةsudoقبل الأمر: $ sudo command_to_run سيطلب منك النظام إدخال كلمة المرور الخاصة بالمستخدم الحالي لأول مرة من كل جلسة ومن ثم في بعض الأوقات فقط. لتعزيز أمان الخادم الخاص بك، يستحسن أن تقوم بإعداد مفاتيح SSH بدلا من استخدام كلمة المرور للمصادقة. يمكنك اتباع هذا المقال عن كيفية إعداد مفاتيح SSH على أوبنتو 18.04 لتتعرف على طريقة إعداد المصادقة المعتمده على المفاتيح السرية. في حال كان المستخدم المسؤول root يستخدم المصادقة بمفتاح SSH في حال كنت مسجلا الى حساب المسؤول root باستخدام مفاتيح SSH، فإن المصادقة باستخدام كلمة المرور ل SSH معطلة. للدخول إلى حساب المستخدم الجديد بنجاح، تحتاج لإضافة نسخة من المفتاح العام المحلي إلى الملف "~/.ssh/authorized_keys". يمكنك أيضا نسخ الملف "~/.ssh/authorized_keys" - والذي يحتوي على المفتاح العام الخاص بك- من حساب المسؤول root إلى الحساب الجديد باستخدام الجلسة الحالية. لنسخ الملف بطريقة سهلة وبالملكية والصلاحيات الصحيحة؛ نستخدم الأمر "rsync". سيقوم هذا الأمر بنسخ مجلد ".ssh" للمستخدم المسؤول root ،يحافظ على الصلاحيات ويقوم بتعديل ملكية الملفات في مرة واحدة. تأكد من وضع اسم المستخدم الجديد الذي أنشأته مسبقا. ملاحظة يتعامل الأمر "rsync" مع المجلدات التي تنتهي بشرطة مائلة "/" بطريقة مختلفة عن المجلدات التي لا تنتهي بشرطة مائلة. تأكد من أن أسماء المجلدات (~/.ssh) لا تنتهي بشرطة مائلة عند استخدام هذا الأمر"~/.ssh/". في حال أضفت شرطة مائلة في نهاية اسم المجلد عن طريق الخطأ في هذا الأمر، فسيقوم بنسخ محتويات المجلد من حساب المستخدم المسؤول root إلى المجلد الرئيسي لمستخدم "sudo" بدلا من نسخ الهيكل كاملا للمجلد "~/.ssh". وهكذا تكون الملفات في المكان الخاطئ ولن يتمكن SSH من العثور عليها واستخدامها. # rsync --archive --chown=sammy:sammy ~/.ssh /home/sammy الآن يمكنك استخدام SSH مع المستخدم الجديد عن طريق الأمر التالي في شاشة الأوامر: $ ssh sammy@your_server_ip يجب أن تقوم بالدخول إلى المستخدم الجديد بدون استخدام كلمة مرور. تذكر، لتنفيذ أمر باستخدام صلاحيات إدارية استخدم "sudo" قبل الأمر: $ sudo command_to_run ماذا بعد؟ الآن أصبح لديك إعدادات قوية للخادم الخاص بك. يمكنك تثبيت اي برنامج تحتاجه. اطلع على قسم لينكس في الأكاديمية لقراءة دليل آخر أو تعلم تثبيت برامج أخرى. ترجمة -وبتصرف- للمقال Initial Server Setup with Ubuntu 18.04 لصاحبه الكاتب Justin Ellingwood.
-
يُعتبر خادوما الويب Apache و Nginx الأكثر شهرةً من بين الخواديم المفتوحة المصدر في عالم الشبكة العنكبوتيّة، على اعتبار أنّهما مسؤولان عن خدمة وتأمين نصف تدفّق البيانات على الإنترنت، وعلى مَقدرة على تولّي مُختلف حجوم الأحمال، والعمل مع برمجيات أخرى في سبيل توفير حزمة من خدمات الويب الشاملة والكاملة لتلبية مُختلف الاحتياجات. بينما يَتشارك الخادومان Apache و Ngnix العديد من الميّزات والخاصيّات، فلا يُمكن اعتبارهما مُتشابهان، أو التفكير بأن أحدهما هو بديل عن الآخر، فكل منهما يتفّوق عن الآخر بشيءٍ ما، وعلى مُدير النظام فهم وإدراك لماذا يجب اختيار أحدهما دون الآخر، فهذا الدليل يَهدف إلى مُناقشة كيف أنّ كُل خادوم يَتميّز ويَبرز في شيء ويُخفق في آخر. مقدّمة عامّةسيتمّ أخذ نظرة سريعة عن تاريخ وبداية المشروعين وخواصّهم العامّة قبل التعمّق في الاختلاف بينهما. تاريخ خادوم الويب Apacheأَنْشَأَ “روبت ماك كول” (Robert McCool) “خادم الـ HTTP أباتشي” (Apache HTTP Server) في عام 1995، وتمّ مُتابعة تطويره تحت مظلّة “مُنشأةُ برمجيات أباتشي” (Apache Software Foundation) مُنذ العام 1999، وكان هذا الخادم هو المشروع الأساسي للمُنشأة والأكثر شهرةً عن باقي البرمجيات، فأصبح ببساطة يُشار إليه بالاسم “Apache”. يُعتبر خادم الويب أباتشي الخادم الأكثر استخدامًا على الإنترنت منذ العام 1996، وبسبب هذه الشهرة، استفاد أباتشي من توثيق ودعم باقي مشاريع البرمجيات الأُخرى. يَختار مُدراء الأنظمة الخادم أباتشي غالبًا بسبب مرونته، وقُدرته على التحمّل، وتوفّر دعمه العالي والمُنتشر، كما يُحسب له قابليته على التوسّع عبر نظام الوحدات (modules) الديناميكيّة، واستطاعته على مُعالجة عدد كبير من اللغات المُفسّرة (interpreted languages) من دون الحاجة إلى برمجيّة مٌستقلّة وسيطة. تاريخ خادوم الويب Nginxبَدأ “ايجور سيسيوﭫ” في عام 2002 العمل Nginx للإجابة وحلّ المُشكلة المعروفة بالاسم C10K، والّتي كانت تُشكّل تحدّيًا كبيرًا لخوادم الويب لتُصبح قادرة على تولّي عشرة آلاف اتصال مُتزامن (concurrent) وذلك في تلبية حاجة الويب الحديث، وأُنتجت الإصدارة الأوليّة والمُتاحة للعُموم في عام 2004 مُقدمةً حلًا لهذه المُشكلة، وذلك بالاعتماد على معماريّة مدفوعة بالحالة (event-driven) ولا مُتزامنة. انتشر Nginx كالنار في الهشيم مُنذ إصداره، بمُقتضى خفته واستخدامه الخفيف للمَوارد، وقدرته على التوسّع وتحمّل الضغط العالي وبأقل عتاد مُمكن، وتفوّق Nginx بتأمين المُحتوى الثّابت (static content) بسرعة، وبتصميمه لتمرير الطلبات الديناميكيّة (المُتغيّرة) إلى برمجيات أُخرى قادرة على مُعالجة هذا النوع من المُحتوى. يختار مُدراء الأنظمة الخادم Nginx غالبًا بسبب استهلاكه الأمثل للمَوارد، واستجابته العالية مع الضغط المتزايد. معماريّة مُعالجة الاتصال (Connection Handling Architecture)يَكمن الاختلاف الواضح بين أباتشي و Nginx في طريقة كلٍ منهما في مُعالجة الاتصالات وتدفّق البيانات (traffic)، وربّما هذا السبب وراء الاختلاف في طريقة كل من الخادمين في الاستجابة إلى حالة تدفّق البيانات المُختلفة. وحدات أباتشي (Apache Modules)يقدّم أباتشي تشكيلةً من وحدات المُعالجة المُتعدّدة (multi-processing)، والّتي يُطلق عليها بـ MPMs، والغرض منها تحديد آليّة مُعالجة طلبات العميل، ويَسمح ذلك مُدراء الأنظمة عامّةً بالتبديل بين معماريّة مُعالجة الاتصال بسهولة، والوحدات هي: mpm_prefork: تَستنسخ وتُوالد هذه الوحدة الخاصّة بالمُعالجة عمليّات (processes) باستخدام سلسلة وحيدة (single thread)، على أنّ تكون كل عمليّة لمُعالجة طلب، ويستطيع كل ابن مُعالجة اتصال واحد في نفس الوقت، وطالما أنّ عدد الطلبات أقل من عدد العمليّات، فستكون هذه الوحدة سريعةً جدًا، ولكن يَنخفض الأداء بسرعة بعد تخطّي الطلبات عدد العمليّات، ولذلك لا يُعتبر هذا النمط بالخيار الجيّد للعديد من السيناريوهات، فكل عمليّة لها تأثير بليغ على استهلاك الذاكرة (RAM)، ولهذا السبب تُصعّب هذه الوحدة من عمليّة التوسّع بطريقة مُلائمة، ومع هذا تبقى هذه الوحدة خيارًا جيّدًا إن تمّ استخدامها مقترنةً مع مُقوّمات (components) أُخرى لم تُبنى بالأساس آخذةً بعين الاعتبار السلاسل (threads)، فلغة PHP ليست سلسلة آمنة (thread-safe)، ولذلك يُنصح بهذه الوحدة باعتبارها الطريقة الوحيدة الآمنة للعمل مع mod_php والّتي هي وحدة من وحدات أباتشي لمُعالجة هذا النوع من الملفّات. mpm_worker: تستنسخ وتُوالد هذه الوحدة عمليّات (processes) كل منها ذات قُدرة على إدارة سلاسل مُتعدّدة (multiple threads)، تستطيع كل واحدة من هذه السلاسل مُعالجة اتصال وحيد، تُعتبر هذه السلاسل أكثر كفاءة من العمليّات، بسبب أنّ هذه الوحدة تتوسّع (scales)، وتتحمّل المزيد من الضغط أفضل من الوحدة prefork MPM، وباعتبار أنّه يوجد سلاسل أكثر من العمليّات، فهذا يعني أيضًا أنّ الاتصالات الجديدة تستطيع مُباشرةً استهلاك واستخدام سلسلةبدلًا من اضطرارها إلى الانتظار لتوفّر عمليّة مُتاحة. mpm_event: تَعمل هذه الوحدة بشكل مُشابه إلى الوحدة worker، ولكنها مُحسّنة لتتولّى اتصالات keep-alive، فعند استخدام الوحدة worker فإن الاتصال سيَحتفظ بالسلسلة (thread) بصرف النظر فيما إذا كان الطلب نشطًا فيما صُنع من أجله ما دام الاتصال محفوظًا نشطًا، فالوحدة mpm_event تتولّى الاتصالات keep-alive بالاحتفاظ جانبًا بسلاسل مكرّسة لمُعالجتها، وبتمرير الطلبات النشطة إلى سلاسل أُخرى، وهذا من شأنه أنّ يُبعد الوحدة من الغوص بطلبات keep-alive، الأمر الّذي يُجيز بتنفيذ الطلبات (execution) بشكل أسرع، وهذا الأسلوب أصبح يعمل بشكل مُستقر مع الإصدار Apache 2.4. أصبح الأمر أكثر وضوحًا، حيث تقدّم خوادم أباتشي بنية معماريّة مرنة للاختيار بين مُختلف الاتصالات وخوارزمية مُعيّنة في مُعالجة الطلبات، وبُنيت هذه الخيارات في الدرجة الأولى من تطوّر الخادم والحاجة المُتزايدة للاتصالات المُتزامنة لتواكب طبيعة الإنترنت بعد تغيرها وتطوّرها. آليّة مُعالجة الاتصال في خادوم Nginxقَدِم Nginx إلى عالم خوادم الويب بعد قدوم أباتشي، مَبنيًّا ومُعدًّا لمشاكل الاتصالات المُتزامنة (concurrency) الّتي تواجه المواقع عند التوسّع، مُحمّلًا بهذه المعرفة، صُمّمَ Nginx من جذوره ليستخدم خوارزميّة في مُعالجة اتصالات مدفوعة بالحالة (event-driven)، غير مُستوقفة (non-blocking)، ولا مُتزامِنة. يستنسخ ويُوالد Nginx من العمليّات العاملة (worker processes)، ويستطيع كلٍ مِنها مُعالجة آلاف الاتصالات، وتُنجذ العمليّات العاملة ذلك عن طريق تطبيق/تنفيذ آلية حلقيّة سريعة، والّتي تفحص بشكل مُستمر حالات العمليّات (processes events)، وإن فصل المُهمّة الفعليّة عن الاتصالات يسمح لكلعامل بالاهتمام بنفسه باتصال فقط عند بدء حالة جديدة. يتموضع كل اتصال مُعالج من قبل العامل ضمن حلقة الحالة (event loop) في مكان تواجد بقية الاتصالات، وتُعالج الأحداث بشكل لا مُتزامن ضمن الحلقة، ليتمّ إنجاز المُهمّة بطريقة غير مُستوقفة (non-blocking)، وعندما يُغلق الاتصال سيتمّ نزعه من الحلقة. يَسمح هذا الأسلوب من مُعالجة الاتصال Nginx بتحمّل الضغط العالي بشكل لا يُصدّق وبأقل المَوارد المُتاحة، وباعتبار أنّ الخادم ذو سلسلة وحيدة (single-threaded) ولا تتوالد العمليّات لتُعالج كل اتصال جديد، فإن استهلاك المُعالج (CPU)، والذّاكرة يبقى ثابتًا نسبيّا، حتّى في أوقات الذروة. كيف يُعالج أباتشي و Nginx المُحتوى الثّابت والمحتوى الديناميكي (المُتغيّر)إن أبرز ما يتمّ النظر إليه عند المُقارنة بين الخادمين هي طريقة كلٍ منهما في التعامل مع طلبات المُحتوى الثّابت (static)، والمُحتوى المُتغيّر (dynamic). كيف يتعامل أباتشي مع المُحتوى الثّابت والمُتغيّرتستطيع خوادم أباتشي التعامل مع المُحتوى الثّابت باستخدام الطريقة التقليديّة المُعتمدة على الملفّات، ويعود أداء هذه الإجراءات (operations) في الدرجة الأولى على دور ووظيفة أساليب الوحدات (MPM) المشروحة سابقًا. يستطيع أباتشي أيضًا مُعالجة المُحتوى الديناميكي (المُتغيّر) بدمج مُعالج اللغة المُراد مُعالجتها داخل كل من نماذجه العاملة (worker instances)، وهذا يَسمح له بتنفيذ المُحتوى الديناميكي داخل خادم الويب نفسه بدون الحاجة إلى الاعتماد على مُقوّمات خارجيّة، ومن المُمكن تفعيل هذه المُعالجات الديناميكيّة (المُتغيّرة) من خلال استخدام وحدات قابلة للتحميل بشكل ديناميكي. إن قدرة أباتشي على مُعالجة المُحتوى الديناميكي بشكل داخلي تعني أنّ الإعداد يُصبح أسهل لمُعالجة هذا النوع من المُحتوى، فليس من الضروري تنسيق عمليّة الربط مع برمجيات إضافيّة، وتستطيع الوحدات وبسهولة أنّ تقوم بالتبديل عندما تتغيّر مُتطلّبات المُحتوى. كيف يتعامل Nginx مع المُحتوى الثّابت والمُتغيّرلا يَملك Nginx بطبيعته أي قدرة على مُعالجة المُحتوى الديناميكي، ولمُعالجة شيفرة PHP وطلبات المُحتوى الديناميكي، فإن على Nginx تمرير الطلبات إلى مُعالج خارجي من أجل التنفيذ (execution) والانتظار ريثما يتم الانتهاء من مُعالجة هذا المُحتوى ليتمّ إعادة إعادته، ومن ثم عرض النتائج على العميل. يَنبغي على مُدراء الأنظمة الانتباه إلى أنّ الأسلوب الّذي ينتهجه Nginx يستوجب إعدادًا بينه وبين المُعالج وباستخدام واحدًا من البرتوكولات الّتي يفهمها Nginx أمثال: HTTP, FastCGI, SCGI,uWSGI, memcache، وهذا من شأنه أنّ يُعقّد الأمور بعض الشيء، خصوصًا عند مُحاولة توقّع عدد الاتصالات اللازم السماح بها، حيثُ أنّه سيتمّ استخدام اتصالًا إضافيًا لكل مُعالج يتمّ استدعاؤه. من ناحية أخرى، إن هذا الأسلوب يقدّم بعضًا من الأفضليّة، عندما نعلم أنّ مُفسّر المُحتوى الديناميكي غير مُدمج في عمليّة العامل، وتكلفة هذه الطريقة ستُدفع للمُحتوى الديناميكي فقط، وعلى أنّ يُقدّم المُحتوى الثّابت بطريقة مُباشرة، ولا يتمّ الاتصال بالمُفسر إلا عند الحاجة، والجدير بالذكر أنّ أباتشي يستطيع العمل بهذا الأسلوب، ولكن بعمله ذلك سيتخلّى عندها عن بعض ميزاته. الاختلاف بين الإعداد الموزّع (Distributed) والإعداد المركزي (Centralized)يَعتبر مُدراء الأنظمة الاختلاف الأكبر والبارز بين هذين الخادمين هو فيما إذا كان الإعداد والتخصيص على مُستوى المسار مسموحًا أو لا ضمن مسارات (directories)المُحتوى. فلسفة Apache في الإعداديُضمّن أباتشي خيارًا للسماح بالإعداد لكل مسار عن طريق تَفحُّص (inspecting) وتفسير (interpreting) التعليمات أو التوجيهات الموجودة في الملفات المخفيّة داخل مسارات المُحتوى نفسها، وهذه الملفّات معروفة بملفات .htaccess. باعتبار أنّ هذه الملفّات تَقطن داخل مسارات المُحتوى نفسها، فعند مُعالجة طلبٍ ما، فإن أباتشي يَفحص كل جزء من مسار الملفّ المطلوب باحثًا عن ملفّ .htaccess ليُطبّق التوجيهات الّتي بداخله، وهذا من شأنه أنّ يسمح للإعداد اللامركزي لخادم الويب، والذي غالبًا ما يُستخدم لإنجاز: إعادة كتابة عنوان الموقع (URL rewrites)تقييد الوصول (access restrictions)التفويض والمُصادقة (authorization and authentication)سياسات التخبئة (caching policies)بالطبع يُمكن للأمثلة السابقة إعدادها عن طريق ملفّ إعدادات أباتشي الرئيسي، ولكن استخدام ملفات.htaccess يَملك بعض الميزات: أوّلًا، باعتبار أنّها تُفسّر في كل مرّة توجد بها مع المسار المطلوب، فهي تُنفّذ مُباشرةً بدون إعادة تحميل الخادم.ثانيًا، تجعل من المُمكن السماح للمُستخدِمين غير المصرّح لهم بالتحكم بجانب معيّن من المُحتوى الخاصّة بهم بدون إعطائهم تحكم كامل لملفّ الإعدادات.يُقدّم هذا النمط من الإعداد طريقة سهلة ونموذجيّة، وخاصّة لبعض برمجيات الويب، مثل أنظمة إدارة المُحتوى (CMS)، لغرض إعداد بيئتها بدون مَنح إذن وصول إلى ملفّ إعدادات مركزيّ، وكما هو معروف يُستخدم هذا الأسلوب مع مزودات الاستضافة المُشتركة (shared hosting providers) لصون والحفاظ على الإعدادات الرئيسية مع إمكانيّة منح العُملاء أفضليّة التحكّم بمسارات مُعيّنة. فلسفة Nginx في الإعدادلا يُفسّر Nginx ملفّات .htaccess، ولا يُقدّم أي آليّة للتعامل مع كل مسار من دون استخدام ملفّ إعدادات رئيسي، قد يبدو هذا الأسلوب أقل مرونةً من أسلوب أباتشي، ولكن من ناحية أُخرى فلهذا الأسلوب أفضليته. إن عدم الاعتماد على نظام ملفّات .htaccess الخاصّ بالإعداد على مستوى المسارات يُقدّم سرعةً في الأداءً، فخادم أباتشي عليه القيام بتفحّص المسار الجذر لكل طلب يصله، وعند وجود ملفّ أو أكثر خلال عمليّة البحث، يتم قراءة محتوياته وتفسيرها، ولكن Nginx لا يفعل ذلك، فهو يخدم الطلبات بسرعة أكبر بالاعتماد على مكان وحيد للبحث عنه. أفضليّة أُخرى مُتعلّقة بالحماية، فإن توزيع ملفّات الإعدادات على مستوى المسارات يوزّع مسؤوليّة الحماية على كل المُستخدِمين، الّذين قد يكونوا في معظم الأحوال غير موثوقون لتولّي هذه المُهمّة بالشكل الأمثل، فعندما يقوم مُدير النظام بتولّي مُهمة التحكم بالخادم ككل، يمنع ذلك من حدوث أخطاء، والتي قد تحدث في حال منح صلاحيات وصول لأطراف أُخرى. يجدر الذكر أنّه من المُمكن تعطيل تفسير ملفّات .htaccess’ فيأباتشي`، في حال أنها تُشكل نوعًا من القلق لمُدير النّظام. الاختلاف بين تفسير الملفّات وتفسير URIلا يقتصر الاختلاف بين الخادومين على ما سبق فقط، فيظهر الاختلاف الآخر في كيفيّة تفسير كلٍ منهما للطلبات (requests) وربطها مع المَوارد المُتواجدة على النّظام. كيف يُفسر Apache الطلباتيقدّم أباتشي القدرة على تفسير الطلب إما كمَورد فيزيائي (حقيقي) على نظام الملفّات (filesystem) أو عنوان URI الّذي قد يحتاج أسلوب أكثر تجرّد، ويستخدم أباتشي بشكلٍ عام للأسلوب الأول كتل (blocks) وهي إما <Directory> أو <Files>، بينما يستخدم كتل <Location>للمَوارد الأكثر تجرّدًا. صُمّم أباتشي من الأساس كخادم ويب، لذلك في مُعظم الأحيان فإن السلوك الافتراضيّ هو تفسير الطلبات كمَوارد نظام ملفّات (filesystem)، حيثُ يبدأ بتتبّع جذر المُستند وإلحاقه بجزئية الطلب متبوعًا باسم المُضيف (host) ورقم المنفذ في مُحاولة لإيجاد الملفّ المطلوب، بمعنى آخر وببساطة، تتمثّل هرميّة نظام الملفّات على الويب كشجرة مُستند. يُقدّم أباتشي عددًا من البدائل عندما لا يتوافق الطلب مع نظام الملفّات المقصود، فمثلًا من المُمكن استخدام الموجّه Alias لربط عنوان البديل، مع العلم أنّ استخدام الكتل <Location> هو طريقة للتعامل مع URI نفسها بدلًا من نظام الملفّات، كما يُمكن استخدام التعابير النمطيّة (regular expression)، والّتي من المُمكن استخدامها لتطبيق الإعداد بسهولة أكبر في كامل نظام الملفّات. يُعوّل أباتشي على نظام الملفّات بشكل كبير، يظهر ذلك جليًا في اعتماده على ملفّات .htaccessلإعداد كل مسار، حتّى أنّ التوثيق الرسميّ الخاصّ به يحذر من استخدام كتل مُعتمدة على URI في تقييد الوصول عندما يكون الطلب يَعتمد بشكل أو بآخر على نظام الملفّات. كيف يُفسّر Nginx الطلباتأُنشِأ Nginx ليكون خادمًا للويب وخادمًا وكيلًا/وسيطًا (proxy server)، ونظرًا إلى المعماريّة المطلوبة للعمل بهذه الأدوار، فإنه يعمل بشكل رئيسي مع URIs، والتحويل إلى نظام الملفّات عند الضرورة. يُمكن رؤية ذلك في بعض جوانب بناء وتفسير ملفّات إعدادات Nginx، فلا يوفّر Nginx آليّة لتحديد إعدادًا لمسار نظام الملفّات، بل يَستعيض عنها بتحليل URI نفسه. يُمكن توضيح ذلك بالمثال، كتل الإعداد الأوليّ لـ Nginx هي: server و location، الكتلة serverتُفسّر المُضيف الجاري طلبه، بينما الكتل مسؤولة عن مُطابقة أجزاء من URI التي تأتي بعد المُضيف والمنفذ، في هذه المرحلة يتمّ تفسير الطلب كـ URI، وليس كعنوان على نظام الملفّات. يتوجّب في نهاية المطاف على جميع الطلبات أنّ تُربط مع عنوان على نظام الملفّات وذلك للملفّات الثّابتة، فأولًا، سيَختار Nginx كتل server و location الّتي سوف تتولّى الطلب، ومن ثم ضم جزر المُستند مع الـ URI. إن تحليل ومُعالجة الطلب قبل كل شيء على شكل URIs بدلًا من عناوين نظام الملفّات يَسمح لـ Nginxالعمل بسهولة وعلى حدٍّ سواء كخادم وسيط (بروكسي)، وكخادم بريد، وخادم ويب، فقد تمّ إعداده ليُلائم كيف له أنّ يستجيب لأنماط الطلبات المُختلفة، ولا يفحص Nginx نظام الملفّات حتّى يكون جاهزًا ليَخدم الطلب، وهذا يُفسّر لماذا هو لا يُطبّق نمط ملفّات .htaccess. الوحداتيتوسع كلا الخادومان عن طريق نظام الوحدات، ولكن طريقة عملهما تختلف عن الآخر بشكل كبير. كيف يستخدم أباتشي نظام الوحدات (Modules)؟يَسمح نظام وحدات أباتشي بطريقة آليّة وديناميكيّة بتركيب ونزع الوحدات ليتناسب مع مُتطلّبات مُدير النظام خلال عمليّة تشغيل الخادم، وتتواجد نواة أباتشي دائمًا بكل جاهزية، بينما يُمكن تشغيل أو تعطيل الوحدات، أو حتّى حذفها أو إضافة ما يلزم إلى الخادم. يستخدم أباتشي الوحدات في العديد من المهام، ونظرًا للباع الطويل لمنصة أباتشي، فيتوفّر عدد هائل من مكتبات الوحدات، والّتي من المُمكن استخدامها في تعديل بعض الوظائف الداخليّة في بنية خادم أباتشي، فمثلًا الوحدة mod_php تقوم بدمج مُفسّر PHP داخل كل عامل (worker). لا تنحصر الوحدات لمُعالجة المُحتوى الديناميكي (المُتغيّر) فقط، فيُمكن استخدامها في العديد من الوظائف، فيُمكن استخدامها في: rewriting URLs: إعادة كتابة العناوينauthenticating: المُصادقةlogging: التّتبّعcaching: التخبئةcompression: الضغطproxying: الوساطةencrypting: التشفيركيف يتعامل Nginx مع نظام الوحدات (Modules)يُطبّق ويتعامل Nginx مع نظام الوحدات، ولكن يختلف الأمر عما هو في نظام أباتشي، فلا تُحمّل الوحدات بشكل ديناميكي في نظام Nginx، لذلك يجب على هذه الوحدات أنّ تُختار وتُترجم (compiled) إلى النواة. قد يبدو الأمر صعبًا للعديد من المُستخدمين وخاصّة لهؤلاء الذين لا يُحبذون صيانة برمجياتهم المُترجمة (compiled) بدون الاستعانة بنظام حزم تقليدي، وعلى الرغم من أنّ حزم الموزّع تتضمّن الوحدات الأكثر استخدامًا، ولكن عند الحاجة إلى وحدة غير شائعة، سيتوجب على مُدير النظام بناء الخادم من المصدر بنفسه. تَبقى وحدات Nginx مع ذلك ذات فائدة، وتسمح لمُدير النّظام بتحديد ماذا يجب على الخادم أنّ يحتوي من وظائف، أيضًا بعض المُدراء ينظر إلى الأمر من منظور الحماية، حيثُ أنّ المُكوّنات الاعتباطيّة لا يُمكن أن تُدرج داخل الخادم. تُقدّم وحدات Nginx مقدرات مُماثلة للوحدات الّتي المُقدّمة من أباتشي، على سبيل المثال، توفّر وحدات Nginx: proxying support: الوساطةcompression: الضغطlogging: التّتبّعrewriting: إعادة كتابة العنوانauthentication: المُصادقةencryption: التشفيرالدعم والتوافُقيّة والتوثيقيجب دائمًا التأكد من آليّة بناء الخادم ومُتطلباتها، وما الّذي على مُدير النّظام عمله لبناء خادم يعمل بأبسط الإمكانيات، وما هو حجم الدعم والمُساعدة المتوفّر لهذه البرمجية. الدعم في أباتشييُعرف الخادم أباتشي بباعه الطويل في هذا المجال، ولذلك فإن الدعم الخاصّ به متواجد وبقوّة، حيثُ يتوفّر توثيق مُمتاز لمكتباته الخاصّة به ومكتبات الطرف الثالث (الخارجيّة)، وعلى كافّة المُستويات، سواء كان لنواة الخادم أو للجزئيات المُرتبطة ببرمجيات أُخرى. يتوفّر بجانب التوثيق، العديد من الأدوات ومشاريع الويب لتسريع بدء العمل مع بيئة الخادم، وهي موجودة ضمن المشاريع نفسها أو مُتوفّرة ضمن برمجيات الحزم المعروفة. يَملك أباتشي بشكلٍ عام دعمًا قويًا من قِبل مشاريع الطرف الثالث، وذلك بسبب حصته السوقيّة، وقِدَمه، كما يَملك مُعظم مُدراء الأنظمة بشكل أو بآخر معرفة جيّدة بخادم أباتشي، ليس فقط بسبب انتشاره، ولكن أيضًا بسبب أنّ معظمهم بشكل أو بآخر يستخدم الاستضافة المُشتركة (shared-hosting)، والّتي تعتمد على خادم أباتشي بشكل حصري، لمقدرته الإدارية الموزّعة باستخدام ملفّ .htaccess. الدعم في Nginxيكسب Nginx المزيد من الدعم مع ازدياد المُستخدِمين بسبب أدائه العالي، ولكن يبقى عليه التطوير من نفسه في بعض الجزئيات. قد كان من الصعب إيجاد توثيق مفهوم وواضح بالغة الإنكليزية للخادم Nginx في البداية، نظرًا إلى أنّ تطويره وتوثيقه تمّ بالغة الروسية، ومع ازدياد الاهتمام بالمشروع، أصبح هناك وفرة من المصادر على الموقع الرسميّ وغيره من الدعم الخارجي. أصبح الدعم متوفّرًا أكثر من ذي قبل فيما يخص تطبيقات الطرف الثالث، وبدأت بعض الحزم بتقدم خيارات الإعداد التلقائي سواءً لـ أباتشي أو Nginx، وعند عدم توفّر الدعم، فإن إعداد Nginx مع البرمجيات البديلة عادةً ما يكون واضحًا ومُيسرًا طالما أنّ برمجية الطرف الثالث تملك توثيقًا جيّدًا لمُتطلّباتها. استخدام Apache و Nginx معًاتمّ عرض فوائد وقصور كلا الخادومين، ويجب على مُدير النّظام في هذه المرحلة أنّ يُحدّد أيًا منهما يُناسب احتياجاته، ولكن يجد العديد من المُستخدِمين أنّه من المُمكن تقوية خادوم الويب عند استخدام كلٍ من أباتشي و Nginx جنبًا إلى جنب. إن إتمام هذه الشراكة يتمّ عن طريق تَمَوْضُع Nginx أمام أباتشي كوكيل/وسيط عكسي (reverse proxy)، وهذه يسمح لـ Nginx بمُعالجة جميع الطلبات من العُملاء، الأمر الّذي يَسمح بالاستفادة من سرعة Nginx وقدرته على تولّي عدد كبير من الاتصال في وقتٍ واحد. إن خدمة الملفّات الثّابتة بسرعة كبيرة ومباشرةً إلى العُملاء، هو الأمر الّذي يتفوّق به Nginx، ولكن وللمُحتوى الديناميكي، ملفات PHP مثلًا، سيُوكل Nginx الطلبات إلى أباتشي لمُعالجتها والعودة بصفحة بالنتيجة النهائيّة، ليستطيع Nginx عندها تمرير المُحتوى إلى العميل. يعمل هذا الإعداد بشكل جيّد للعديد من مُدراء الأنظمة، وذلك بسبب أنّه يسمح لـ Nginx ليعمل كآلة فرز وتصنيف، بمعنى أنّه سيتولّى مُعالجة جميع الطلبات طالما أنّه يستطيع ذلك، وتمرير ما لا يستطيع التعامل معه، وبتخفيض الطلبات المطلوب من خادم أباتشي تولّيها، سيُخفف بعضًا من الاستيقاف (blocking) الّذي قد يحدث عندما يستهلك أباتشي المزيد من المُعالج. يَسمح هذا الإعداد أيضًا لمُدراء الأنظمة بالتوسّع عن طريق إضافة خادم خلفي (backend) على حسب الحاجة والضرورة، ومن المُمكن إعداد Nginx لتمرير الطلبات إلى تجمّع (pool) من الخوادم بسهولة، الأمر الّذي يزيد من الأداء والفعاليّة. الختاميُقدّم كلًا من أباتشي و Nginx مُرونة في الاستخدام، وقوّةً في الأداء، والتفضيل بينهما هو لأمرٌ يَعتمد على تقدير مُتطلبات ووظائف الخادم، وعلى مُدير النّظام أنّ لا يسأل: هو أفضل خادم ويب؟، بل السؤال الّذي يجب سؤاله هو، ما هو أفضل خادم ويب لمشروعي الّذي يتطلّب كذا وكذا؟ يوجد بالفعل اختلافات بين المشروعين، هذه الاختلافات من شأنها أن تأثر على الأداء، والقدرات، والوقت المُستغرق في إتمام أي منهما للعمل بالجاهزيّة الكاملة، ولكي يتمّ اختيار الأفضل يُنصح بعمل تسوية أو مقايضة بين المحاسن والمساوئ، ففي نهاية المطاف لا يوجد خادم يُلبي كافة الاحتياجات، ويَكمن الحلّ في ترتيب الأولويات. ترجمة –وبتصرّف– للمقال Apache vs Nginx: Practical Considerations لصاحبه Justin Ellingwood.