سایت خبرکاو

جستجوگر هوشمند اخبار و مطالب فناوری

نحوه استقرار پروژه جنگو بر روی ماشین EC2 با استفاده از GitHub Actions

استقرار یک برنامه جنگو را می توان با استفاده از GitHub Actions ساده و خودکار کرد. این مقاله راهنمای جامعی در مورد چگونگی راه اندازی خط لوله استقرار پیوسته برای پروژه جنگو که بر روی نمونه AWS EC2 میزبانی می شود، ارائه می دهد. با استفاده از GitHub Actions، توسعه‌دهندگان می‌توانند فرآیند استقرار خود را خودکار کرده و کارآمدتر و بدون خطا را افزایش دهند. پیش نیازها یک پروژه جنگو که در یک مخزن GitHub میزبانی شده ...

استقرار یک برنامه جنگو را می توان با استفاده از GitHub Actions ساده و خودکار کرد.

این مقاله راهنمای جامعی در مورد چگونگی راه اندازی خط لوله استقرار پیوسته برای پروژه جنگو که بر روی نمونه AWS EC2 میزبانی می شود، ارائه می دهد.

با استفاده از GitHub Actions، توسعه‌دهندگان می‌توانند فرآیند استقرار خود را خودکار کرده و کارآمدتر و بدون خطا را افزایش دهند.

پیش نیازها

یک پروژه جنگو که در یک مخزن GitHub میزبانی شده است.

یک نمونه AWS EC2 برای میزبانی برنامه جنگو راه اندازی شده است.

آشنایی اولیه با گردش کار YAML و GitHub.

نحوه تنظیم نمونه EC2

قبل از غواصی در GitHub Actions، مطمئن شوید که نمونه EC2 شما برای میزبانی برنامه جنگو شما آماده است.

از دستور زیر برای اتصال به نمونه EC2 خود استفاده کنید:

 ssh -i /path/to/your-key.pem ec2-user@your-ec2-instance-public-dns

با استفاده از این موارد می توانید بسته های سیستم خود را به روز کنید:

 sudo apt-get update sudo apt-get upgrade

بعد، اگر قبلاً این کار را نکرده‌اید، پایتون و پیپ را نصب کنید:

 sudo apt-get install python3 sudo apt-get install python3-pip

سپس جنگو را با استفاده از این دستور نصب کنید:

 pip3 install django

نحوه پیکربندی وب سرور

در این بخش نحوه پیکربندی وب سرور خود را خواهید دید.

ابتدا Nginx را نصب کنید:

 sudo apt-get install nginx

سپس Nginx را برای جنگو پیکربندی کنید. با ایجاد یک فایل پیکربندی جدید برای پروژه جنگو شروع کنید.

 sudo nano /etc/nginx/sites-available/mydjangoapp

سپس بلوک سرور زیر را اضافه کنید:

 server { listen 80; server_name your-domain.com; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /path/to/your/django/project; } location / { include proxy_params; proxy_pass http://unix:/path/to/your/gunicorn.sock; } }

در نهایت، پیکربندی Nginx را فعال کنید:

 sudo ln -s /etc/nginx/sites-available/mydjangoapp /etc/nginx/sites-enabled sudo nginx -t sudo systemctl restart nginx

نحوه راه اندازی پایگاه داده

با استفاده از این می توانید PostgreSQL را نصب کنید:

 sudo apt-get install postgresql postgresql-contrib

پس از نصب، با استفاده از این دستور یک پایگاه داده و کاربر ایجاد کنید:

 sudo -u postgres psql

برای ایجاد یک پایگاه داده جدید و اضافه کردن یک کاربر جدید، این کوئری SQL را اجرا کنید:

 CREATE DATABASE mydjangodb; CREATE USER mydjangouser WITH PASSWORD 'password'; ALTER ROLE mydjangouser SET client_encoding TO 'utf8'; ALTER ROLE mydjangouser SET default_transaction_isolation TO 'read committed'; ALTER ROLE mydjangouser SET timezone TO 'UTC'; GRANT ALL PRIVILEGES ON DATABASE mydjangodb TO mydjangouser; \q

سپس جنگو را برای استفاده از PostgreSQL پیکربندی کنید. در فایل settings.py جنگو، تنظیمات DATABASES را به‌روزرسانی کنید:

 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'mydjangodb', 'USER': 'mydjangouser', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': '', } }

گردش کار GitHub Actions برای استقرار یک پروژه جنگو شامل چندین مرحله کلیدی است:

مرحله شماره 1 - تسویه حساب و آماده سازی

اولین گام در گردش کار شما این است که آخرین کد را از مخزن GitHub خود تحلیل کنید و محیطی را برای استقرار تنظیم کنید.

 name: Deploy Django to EC2 on: push: branches: - main jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v2

مرحله 2 - اسکریپت استقرار

اسکریپت استقرار شامل کشیدن آخرین کد، نصب وابستگی ها، اجرای مهاجرت و راه اندازی مجدد وب و سرورهای WSGI است.

یک فایل جدید deploy_script.sh در دستگاه EC2 خود ایجاد کنید و کد زیر را اضافه کنید:

 #!/bin/bash DRY_RUN=$1 echo "Pulling latest code from repository..." # Skip actual git pull in dry run [ "$DRY_RUN" != "true" ] && git pull origin main echo "Installing dependencies..." # Skip actual installation in dry run [ "$DRY_RUN" != "true" ] && pip install -r requirements.txt echo "Running migrations..." # Skip actual migrations in dry run [ "$DRY_RUN" != "true" ] && python manage.py migrate echo "Restarting the server..." # Skip actual restart in dry run [ "$DRY_RUN" != "true" ] && sudo systemctl restart myapp echo "Deployment complete."

مرحله 3 - یک مرحله برای اجرای اسکریپت استقرار ایجاد کنید

از GitHub Actions برای SSH در نمونه EC2 خود استفاده کنید. شما باید کلید SSH نمونه EC2 خود را به عنوان یک راز GitHub ذخیره کنید.

 - name: Run Deployment run: | ssh -i ${{ secrets.EC2_SSH_KEY }} ec2-user@your-ec2-instance 'bash -s' < deploy_script.sh env: ACTIONS_RUNNER_DEBUG: false

ملاحظات امنیتی

در اینجا برخی از ملاحظات امنیتی وجود دارد که باید در نظر داشته باشید:

کلیدهای SSH : کلیدهای خصوصی SSH خود را به صورت ایمن در GitHub Secrets ذخیره کنید.

حداقل مجوزها : مطمئن شوید که نقش IAM نمونه EC2 دارای حداقل مجوزهای لازم برای استقرار است.

تست و اعتبارسنجی

قبل از اجرای کامل این گردش کار، آن را با یک محیط توسعه یا مرحله بندی آزمایش کنید تا مطمئن شوید که فرآیند استقرار همانطور که پیش بینی می شود کار می کند.

اجرای Dry Run Deployment : مرحله ای را در گردش کار GitHub Actions خود پیاده کنید که یک «اجرای خشک» از فرآیند استقرار را انجام می دهد. این می‌تواند به اعتبارسنجی اسکریپت‌های استقرار بدون تأثیرگذاری بر نمونه زنده EC2 کمک کند. مرحله زیر را اضافه کنید تا dry_run = true در اسکریپت استقرار بگذرد.

 - name: Dry Run Deployment run: | ssh -i ${{ secrets.EC2_SSH_KEY }} ec2-user@your-ec2-instance 'bash -s' < deploy_script.sh true env: ACTIONS_RUNNER_DEBUG: true

ثبت و نظارت : می‌توانید گزارش‌های ثبت عملیات فعلی فرآیند استقرار را از deploy_script.sh مشاهده کنید، که در صورت بروز هر گونه مشکلی قابل تحلیل است.

نتیجه

خودکارسازی استقرار جنگو با استفاده از GitHub Actions یک راه کارآمد و قابل اعتماد برای مدیریت تحویل برنامه ارائه می دهد.

با دنبال کردن مراحل ذکر شده در بالا، توسعه‌دهندگان می‌توانند یک خط لوله استقرار قوی راه‌اندازی کنند که با هر بار فشار دادن به شاخه اصلی، آخرین کد جنگو خود را به یک نمونه EC2 منتقل می‌کند.

خبرکاو