توسيع تطبيق جانغو وتأمينه عبر حاوية دوكر وخادم Nginx وخدمة Let’s Encrypt
المقدمة
في العصر الرقمي الحالي، يعتبر تطوير التطبيقات وصيانتها جزءًا أساسيًا من الأعمال التجارية الحديثة. تطبيقات الويب، التي تعتمد على تقنيات مثل Django، أصبحت المعيار الأساسي لبناء وتطوير التطبيقات المتكاملة. من أجل ضمان استمرارية العمل وحمايته من الهجمات الخارجية، ينبغي توسيع وتأمين هذه التطبيقات باستخدام أدوات حديثة مثل حاويات Docker، وخوادم Nginx، وخدمات مثل Let’s Encrypt لضمان تأمين الاتصال عبر بروتوكول HTTPS.
في هذا المقال، سنتناول كيفية توسيع تطبيق Django باستخدام حاويات Docker، وتأمينه عبر Nginx، وكيفية استخدام خدمة Let’s Encrypt للحصول على شهادة SSL مجانية لضمان الاتصالات المشفرة. سنتعرف كذلك على مزايا هذه الأدوات وكيفية تنفيذها بشكل عملي لضمان تطبيق آمن ومستقر.
1. ما هو Django؟
Django هو إطار عمل مفتوح المصدر لبناء تطبيقات الويب باستخدام لغة البرمجة بايثون. يُعرف بسهولة استخدامه، مرونته، والأدوات المتكاملة التي يقدمها مثل نظام إدارة قواعد البيانات، نظام التوثيق (Authentication)، وواجهات الإدارة التلقائية.
على الرغم من قوة Django في بناء التطبيقات، إلا أنه من الضروري استخدام بعض الأدوات والتقنيات لتوسيع نطاق التطبيق وضمان أمانه. هنا يأتي دور Docker وNginx وLet’s Encrypt.
2. ما هو Docker؟
Docker هو منصة مفتوحة المصدر تُستخدم لبناء وتوزيع وتشغيل التطبيقات داخل حاويات (Containers). يوفر Docker بيئة موحدة لتشغيل التطبيقات بغض النظر عن البيئة التي يعمل فيها. باستخدام Docker، يمكن للمطورين عزل تطبيقاتهم عن النظام الأساسي الذي تعمل عليه، مما يعزز من الأمان ويجعل التطبيق أسهل في النشر والتطوير.
تتمثل الفكرة الأساسية وراء Docker في إمكانية تغليف تطبيقاتك بجميع مكتباتها ومتطلباتها البرمجية، مما يجعل من السهل نقل وتشغيل هذه التطبيقات على أي جهاز أو خادم دون القلق بشأن التوافق.
3. إعداد Docker لتشغيل تطبيق Django
3.1 تثبيت Docker
أول خطوة في إعداد Docker هي تثبيته على الخادم أو الجهاز المحلي. يمكن تثبيت Docker باستخدام الأوامر التالية (حسب نظام التشغيل):
-
على نظام Linux (Ubuntu):
bashsudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io
-
على نظام Windows:
يمكن تنزيل وتثبيت Docker Desktop من الموقع الرسمي.
3.2 إنشاء Dockerfile
الخطوة التالية هي إنشاء ملف يسمى Dockerfile داخل مجلد المشروع. يحتوي هذا الملف على التعليمات التي تُخبر Docker كيفية بناء الحاوية الخاصة بتطبيق Django. المثال التالي يوضح كيفية كتابة Dockerfile لتطبيق Django:
Dockerfile# استخدام صورة Python الأساسية FROM python:3.9-slim # تحديد دليل العمل داخل الحاوية WORKDIR /app # نسخ ملفات التطبيق إلى الحاوية COPY . /app/ # تثبيت المتطلبات RUN pip install --no-cache-dir -r requirements.txt # تحديد المنفذ الذي سيستمع عليه التطبيق EXPOSE 8000 # تشغيل تطبيق Django CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
3.3 بناء وتشغيل الحاوية
بعد كتابة Dockerfile، يمكننا بناء وتشغيل الحاوية باستخدام الأوامر التالية:
-
لبناء الصورة:
bashdocker build -t my_django_app .
-
لتشغيل الحاوية:
bashdocker run -p 8000:8000 my_django_app
الآن، يجب أن يكون تطبيق Django قيد التشغيل داخل الحاوية ويمكن الوصول إليه عبر المنفذ 8000.
4. إعداد Nginx كخادم عكسي (Reverse Proxy)
Nginx هو خادم ويب شهير يمكن استخدامه كـ “خادم عكسي” (Reverse Proxy) لتوجيه طلبات الويب إلى تطبيق Django الذي يعمل داخل حاوية Docker. بالإضافة إلى ذلك، يمكن لـ Nginx التعامل مع إدارة الارتباطات المشفرة عبر بروتوكول HTTPS.
4.1 تثبيت Nginx
لتثبيت Nginx على الخادم، يمكنك استخدام الأمر التالي (على نظام Ubuntu):
bashsudo apt-get update sudo apt-get install nginx
4.2 تكوين Nginx
بعد تثبيت Nginx، يجب إعداد ملف تكوينه لتمكينه من العمل كخادم عكسي لتطبيق Django. يتم ذلك بتعديل الملف /etc/nginx/sites-available/default ليبدو كما يلي:
nginxserver {
listen 80;
server_name your_domain_or_ip;
location / {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
4.3 إعادة تحميل Nginx
بعد تعديل ملف التكوين، يجب إعادة تحميل Nginx لتطبيق التغييرات:
bashsudo systemctl reload nginx
5. استخدام خدمة Let’s Encrypt لتأمين الاتصال عبر HTTPS
تعد خدمة Let’s Encrypt واحدة من أكثر الحلول المجانية شهرة للحصول على شهادات SSL، والتي تتيح تشفير الاتصالات بين الخادم والمتصفح باستخدام HTTPS. هذا أمر بالغ الأهمية لحماية البيانات المتبادلة بين المستخدمين والخادم.
5.1 تثبيت Certbot
Certbot هو أداة مجانية من EFF (مؤسسة Electronic Frontier Foundation) تستخدم للحصول على شهادات SSL من Let’s Encrypt. لتثبيته على الخادم، استخدم الأوامر التالية:
-
على Ubuntu:
bashsudo apt-get update sudo apt-get install certbot python3-certbot-nginx
5.2 الحصول على شهادة SSL
بعد تثبيت Certbot، يمكن استخدامه للحصول على شهادة SSL بشكل مباشر. من خلال هذه الأداة، يمكن لـ Nginx التفاعل مع Let’s Encrypt وتثبيت شهادة SSL بشكل تلقائي.
bashsudo certbot --nginx -d your_domain_or_ip
يتطلب الأمر أن يكون لديك اسم نطاق (domain) مُسجل لكي تتمكن من الحصول على شهادة SSL. Certbot سيقوم بإجراء عملية التحقق من ملكية النطاق، ثم يقوم بتثبيت الشهادة وتحديث تكوين Nginx لاستخدام HTTPS.
5.3 تجديد الشهادة
تُصدر شهادات SSL من Let’s Encrypt لمدة 90 يومًا فقط. لذلك، من الضروري تجديد الشهادة قبل انتهاء صلاحيتها. يمكن إعداد تجديد الشهادات تلقائيًا باستخدام cron job:
bashsudo crontab -e
ثم إضافة السطر التالي لتجديد الشهادة بشكل دوري:
bash0 0 * * * certbot renew --quiet
6. إعداد قواعد البيانات في Docker
عند استخدام Docker لتشغيل تطبيق Django، يمكن أيضًا تشغيل قواعد البيانات مثل PostgreSQL أو MySQL داخل حاويات منفصلة. يمكن استخدام Docker Compose لتنظيم هذه الحاويات معًا وتسهيل إدارة الاتصال بينها.
6.1 إنشاء ملف docker-compose.yml
يتم إنشاء ملف docker-compose.yml لتعريف جميع الخدمات (مثل التطبيق وقاعدة البيانات) التي سيتم تشغيلها معًا:
yamlversion: '3'
services:
db:
image: postgres:13
environment:
POSTGRES_DB: django_db
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes:
- postgres_data:/var/lib/postgresql/data
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/app
ports:
- "8000:8000"
depends_on:
- db
volumes:
postgres_data:
6.2 تشغيل التطبيق باستخدام Docker Compose
بمجرد أن يصبح ملف docker-compose.yml جاهزًا، يمكنك تشغيل التطبيق باستخدام الأمر التالي:
bashdocker-compose up --build
7. خاتمة
يعتبر توسيع تطبيق Django وتأمينه باستخدام Docker، Nginx، وLet’s Encrypt أحد الحلول الأمثل لتطوير تطبيقات ويب آمنة ومستقرة. باستخدام هذه الأدوات، يمكن للمطورين ضمان أن تطبيقاتهم ستكون محمية ضد الهجمات، وتعمل بشكل موثوق في بيئات مختلفة.
إن استخدام Docker يجعل من السهل نقل تطبيق Django بين الأنظمة المختلفة، بينما يقوم Nginx بتوزيع الحمل وتأمين الاتصال عبر HTTPS باستخدام Let’s Encrypt. وبالتالي، يعد هذا الأسلوب الأفضل لبناء تطبيقات الويب الحديثة التي تتمتع بالأمان والكفاءة.

