ابزار مدیریت خودکار گواهی SSL برای Nginx با استفاده از Let's Encrypt. این ابزار روند راهاندازی و مدیریت گواهیهای SSL برای برنامههای وب شما را ساده میکند.
- 🔐 تولید خودکار گواهی SSL: استفاده از Let's Encrypt برای تولید گواهیهای رایگان
- 🌐 مدیریت پیکربندی Nginx: ایجاد و مدیریت خودکار فایلهای پیکربندی Nginx
- 🔄 هدایت خودکار HTTP به HTTPS: امکان فعال یا غیرفعال کردن هدایت خودکار
- 🧪 آزمون پورتها: تست اتصال پورت قبل از راهاندازی SSL
- 🛡️ مدیریت خطا و بازگردانی: بازگردانی خودکار در صورت بروز خطا
- ⚙️ قابل تنظیم: پیکربندی از طریق متغیرهای محیطی
- 🔧 شناسایی ابزارها: شناسایی و نصب خودکار ابزارهای مورد نیاز (Nginx، Certbot)
- 🖥️ رابط خط فرمان: استفاده آسان از طریق CLI
- 🚀 اسکریپت ساده راهانداز: استفاده سریع از طریق
run.py - 🔍 نظارت بر گواهی SSL: بررسی وضعیت انقضای گواهی
- سیستم عامل لینوکس مبتنی بر Ubuntu/Debian
- Python 3.8 یا بالاتر
- دسترسی Sudo
- نام دامنه اشارهکننده به سرور شما
- برنامه وب در حال اجرا روی پورت مشخص
git clone https://github.com/dibbed/nginx-ssl-auto.git
cd nginx-ssl-auto
pip install -e .- تنظیم متغیرهای محیطی:
cp .env.example .env
# ویرایش فایل .env با تنظیمات خود- نصب پیشنیازهای سیستم (اگر قبلاً نصب نشده):
sudo apt-get update
sudo apt-get install nginx certbot python3-certbot-nginx| متغیر | مقدار پیشفرض | توضیح |
|---|---|---|
NGINX_SITES_AVAILABLE |
/etc/nginx/sites-available |
مسیر دایرکتوری سایتهای Nginx |
NGINX_SITES_ENABLED |
/etc/nginx/sites-enabled |
مسیر فعالسازی سایتهای Nginx |
LETSENCRYPT_EMAIL_DOMAIN |
admin |
ایمیل برای اعلانهای Let's Encrypt |
LETSENCRYPT_WEBROOT |
/var/www/html |
مسیر وب روت برای چالشهای ACME |
SSL_PROTOCOLS |
TLSv1.2 TLSv1.3 |
پروتکلهای SSL |
SSL_CIPHERS |
HIGH:!aNULL:!MD5 |
رمزنگاری SSL |
DEFAULT_HTTP_PORT |
80 |
پورت HTTP پیشفرض |
DEFAULT_HTTPS_PORT |
443 |
پورت HTTPS پیشفرض |
SUDO_COMMAND |
sudo |
مسیر دستور Sudo |
APT_GET_COMMAND |
apt-get |
دستور مدیریت پکیج |
SYSTEMCTL_COMMAND |
systemctl |
دستور کنترل سرویس |
PORT_TEST_TIMEOUT |
10 |
زمان انتظار برای تست پورت (ثانیه) |
# نصب گواهی SSL
python run.py example.com 3000 setup
# حذف گواهی SSL
python run.py example.com 3000 remove
# بررسی تاریخ انقضای گواهی
python run.py example.com 3000 check
# تبدیل خودکار دامنه به حروف کوچک
python run.py EXAMPLE.COM 3000 setup # به example.com تبدیل میشود# نصب گواهی SSL
nginx-ssl-auto setup example.com 3000
# نصب با گزینهها
nginx-ssl-auto setup example.com 3000 --no-redirect --test-port
# حذف گواهی SSL
nginx-ssl-auto remove example.com
# بررسی تاریخ انقضای گواهی
nginx-ssl-auto check example.com
# نمایش پیکربندی فعلی
nginx-ssl-auto configfrom nginx_ssl_auto import setup_ssl_certificate, remove_ssl_certificate, check_ssl_expiry
# نصب گواهی SSL برای یک دامنه
result = setup_ssl_certificate(
domain_name="example.com",
forward_port=3000,
ssl_redirect=True,
test_port=True
)
if result["mode"]:
print("گواهی SSL با موفقیت نصب شد!")
else:
print(f"خطا: {result['error']}")
# حذف گواهی SSL
result = remove_ssl_certificate("example.com")
if result["mode"]:
print(result["message"])
# بررسی تاریخ انقضای گواهی
result = check_ssl_expiry("example.com")
if result["success"]:
if result["is_active"]:
print("گواهی SSL فعال و معتبر است")
else:
print("گواهی SSL منقضی شده است")
else:
print(f"خطا: {result['error']}")from nginx_ssl_auto import SSLCertificateManager
# استفاده مستقیم از کلاس مدیریت
manager = SSLCertificateManager("example.com", 3000)
result = manager.setup_ssl_certificate(ssl_redirect=False, test_port=True)
# پیکربندی دلخواه با متغیرهای محیطی
import os
os.environ['LETSENCRYPT_EMAIL_DOMAIN'] = 'webmaster'
os.environ['SSL_PROTOCOLS'] = 'TLSv1.3'
os.environ['PORT_TEST_TIMEOUT'] = '15'
result = setup_ssl_certificate(
domain_name="myapp.com",
forward_port=8080,
ssl_redirect=False,
test_port=True
)
# بررسی تاریخ انقضای گواهی
result = check_ssl_expiry("myapp.com")
if result["success"]:
if result["is_active"]:
print("✅ گواهی SSL فعال و معتبر است")
else:
print("⚠️ گواهی SSL منقضی شده است")
else:
print(f"❌ خطا: {result['error']}")nginx-ssl-auto/
├── nginx_ssl_auto/ # پکیج اصلی
│ ├── **init**.py # مقداردهی اولیه پکیج
│ ├── core.py # عملکرد اصلی
│ └── cli.py # رابط خط فرمان
├── tests/ # تستها
│ ├── **init**.py
│ ├── test_core.py # تست عملکرد اصلی
│ └── test_cli.py # تست CLI
├── .env.example # قالب متغیرهای محیطی
├── .gitignore # فایلهای نادیده گرفته شده گیت
├── LICENSE # مجوز MIT
├── README.md # این فایل
├── pyproject.toml # پیکربندی پروژه
├── requirements.txt # وابستگیها
└── run.py # اسکریپت ساده راهانداز
# .env برای توسعه
LETSENCRYPT_EMAIL_DOMAIN=dev
LETSENCRYPT_WEBROOT=/var/www/dev
PORT_TEST_TIMEOUT=5# .env برای تولید
LETSENCRYPT_EMAIL_DOMAIN=admin
SSL_PROTOCOLS=TLSv1.3
SSL_CIPHERS=HIGH:!aNULL:!MD5:!RC4:!MD5:!aNULL
PORT_TEST_TIMEOUT=30# نصب وابستگیهای توسعه
pip install -e ".[dev]"
# اجرای تستها
pytest
# اجرای تستها با پوششدهی کد
pytest --cov=nginx_ssl_auto
# اجرای تست خاص
pytest tests/test_core.py::TestSSLCertificateManager::test_validate_domain_name_valid-
عدم دسترسی: مطمئن شوید دسترسی Sudo دارید
sudo -l
-
Nginx یافت نشد: نصب Nginx در صورت نبود
sudo apt-get install nginx
-
Certbot یافت نشد: نصب Certbot
sudo apt-get install certbot python3-certbot-nginx
-
پورت قابل دسترسی نیست: بررسی اجرای برنامه شما
netstat -tlnp | grep :3000 -
OpenSSL یافت نشد: نصب OpenSSL برای بررسی گواهی
sudo apt-get install openssl
فعال کردن لاگینگ دیباگ:
export PYTHONPATH=.
python3 -c "
import logging
logging.basicConfig(level=logging.DEBUG)
from nginx_ssl_auto import setup_ssl_certificate, check_ssl_expiry
setup_ssl_certificate('example.com', 3000)
check_ssl_expiry('example.com')
"- Fork کردن مخزن
- ایجاد شاخه ویژگی (
git checkout -b feature/amazing-feature) - ثبت تغییرات (
git commit -m 'افزودن ویژگی جدید') - Push به شاخه (
git push origin feature/amazing-feature) - باز کردن Pull Request
# کلون و راهاندازی محیط توسعه
git clone https://github.com/dibbed/nginx-ssl-auto.git
cd nginx-ssl-auto
python -m venv venv
source venv/bin/activate # ویندوز: venv\Scripts\activate
pip install -e ".[dev]"این پروژه تحت مجوز MIT است - جزئیات در LICENSE
- نویسنده: dibbed
- GitHub: @dibbed
- لینک پروژه: https://github.com/dibbed/nginx-ssl-auto
- Let's Encrypt برای ارائه گواهیهای رایگان
- Certbot برای ابزار اتوماسیون گواهی
- Nginx برای وب سرور
📄 For English version click here
⭐ اگر این پروژه به شما کمک کرد، لطفاً یک ستاره بدهید!