4.6 KiB
سؤالك ممتاز—وده بالضبط الفرق بين حل “يشتغل وخلاص” وحل Production حقيقي.
خليني أشرح لك الأول ليه الطريقة الأولى (certbot --nginx) مش مناسبة عندك، وبعدين أديك الحل الصحيح الجاهز (Nginx داخل Docker + SSL + Auto renew) copy/paste.
لماذا certbot --nginx مش مناسب عندك؟
أنت عندك:
Nginx شغال داخل Docker (saas-pdf-nginx-1)
لكن الأمر:
certbot --nginx
بيفترض إن:
Nginx مثبت على السيرفر (host)
📌 النتيجة:
- Certbot حاول يتحكم في Nginx الخارجي
- لكن البورت 80 مستخدم بالفعل بواسطة Docker
- حصل الخطأ:
Address already in use
هل الحل اللي عملناه “مؤقت”؟
لا 👇
عندنا 3 مستويات حلول:
🥉 حل بدائي
تشغل Certbot خارج Docker → كل مرة توقف Nginx ❌ غير عملي
🥈 حل متوسط
Certbot standalone + manual config ✔ شغال ❌ لكن renewal مش أوتوماتيك بسهولة
🥇 الحل الاحترافي (اللي هنطبقه الآن)
Nginx + Certbot داخل Docker
✔ Auto renew ✔ scalable ✔ نفس طريقة الشركات الكبيرة
المشاكل لو ما عملتش الحل الصحيح
لو كملت بالحل القديم:
- ❌ SSL هينتهي كل 90 يوم
- ❌ الموقع هيقع فجأة
- ❌ Google هيقلل ترتيبك
- ❌ AdSense ممكن يرفضك
- ❌ صعب التوسعة لاحقًا
الآن الحل الاحترافي (جاهز للتطبيق)
هنعمل 3 حاجات:
1. nginx config احترافي
2. docker-compose فيه SSL
3. auto renew
1️⃣ تعديل nginx config
ادخل:
cd ~/SaaS-PDF/nginx
nano default.conf
واستبدل كله بهذا:
server {
listen 80;
server_name dociva.io www.dociva.io;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name dociva.io www.dociva.io;
ssl_certificate /etc/letsencrypt/live/dociva.io/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/dociva.io/privkey.pem;
location / {
proxy_pass http://frontend:5173;
}
}
2️⃣ تعديل docker-compose.yml
افتح:
nano docker-compose.yml
وابحث عن nginx وعدله:
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx:/etc/nginx/conf.d
- ./certbot/www:/var/www/certbot
- ./certbot/conf:/etc/letsencrypt
depends_on:
- frontend
3️⃣ إضافة certbot container
في نفس الملف أضف:
certbot:
image: certbot/certbot
volumes:
- ./certbot/www:/var/www/certbot
- ./certbot/conf:/etc/letsencrypt
4️⃣ تشغيل المشروع
docker compose down
docker compose up -d
5️⃣ إصدار الشهادة (مرة واحدة)
docker compose run --rm certbot certonly \
--webroot \
--webroot-path=/var/www/certbot \
-d dociva.io -d www.dociva.io \
--email your@email.com \
--agree-tos --no-eff-email
6️⃣ إعادة تشغيل Nginx
docker compose restart nginx
7️⃣ اختبار
https://dociva.io
🔥 المفروض يشتغل
8️⃣ auto renew (مهم جداً)
أضف cron job:
crontab -e
وأضف:
0 3 * * * docker compose run --rm certbot renew && docker compose restart nginx
النتيجة النهائية
✔ HTTPS شغال ✔ Auto renew ✔ Production ready ✔ مناسب لـ SEO + AdSense
خلاصة بسيطة
| الطريقة | هل مناسبة؟ |
|---|---|
| certbot --nginx | ❌ لا |
| standalone | ⚠️ مؤقت |
| Docker SSL setup | ✅ الأفضل |
رأيي كمستشار
أنت حالياً وصلت لمستوى:
Junior → Mid-level DevOps 🚀
ولو كملت بالشكل ده مشروعك فعلاً ممكن يتحول لمنتج حقيقي.
الخطوة التالية بعد SSL
بعد ما نخلص:
- Google Search Console
- Sitemap
- SEO pages
- Analytics
لو حابب، الخطوة الجاية أعملك:
👉 إعداد SEO كامل يجلب أول 10,000 زيارة بطريقة عملية مش كلام نظري.