текст перекладу
Як розробники, ми часто зосереджуємося на тонкощах створення додатків, але їх розгортання в реальному виробничому середовищі є не менш важливим. Нещодавно я працював над розгортанням Django-додатку в рамках особистого проєкту, розміщеного на AWS EC2 інстансі, інтегрованого з власним доменом і захищеного HTTPS за допомогою Let's Encrypt.
Цей процес надав цінні враження щодо викликів, з якими стикаються під час розгортання, і підкреслив важливість розуміння як розробницької, так і операційної сторін доставки програмного забезпечення.
Ключові етапи процесу розгортання
1.
текст перекладу
Налаштування AWS EC2 інстансу
Першим кроком було налаштування середовища хостингу на AWS EC2 інстансі:
• Запустив EC2 інстанс на базі Ubuntu.
• Налаштував AWS Security Groups для дозволу вхідного трафіку:
• SSH (Порт 22): Для керування сервером.
• HTTP (Порт 80): Для обслуговування веб-трафіку.
• Custom TCP (Порт 8000): Для тестування серверу розробки Django.
- Підключився до сервера через SSH:
ssh -i .pem ubuntu@
Оновив та оновив систему:
sudo apt update && sudo apt upgrade
2.
текст перекладу
Розгортання Django-додатку
Коли сервер був готовий, я перейшов до налаштування проєкту Django:
- Встановив необхідні залежності:
sudo apt install python3 python3-pip python3-venv nginx
- Клонував проєкт в директорію /opt/portfolio_website:
git clone /opt/example_website
cd /opt/example_website
- Створив віртуальне середовище Python та встановив залежності:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
- Запустив сервер розробки Django для тестування:
python manage.py runserver 0.0.0.0:8000
Перевірив додаток, отримавши доступ до http://:8000
Щоб отримати доступ, переконайтеся, що ви додали ваш IP в allowed_host у файлі setting.py
3. Налаштування Nginx
Щоб зробити додаток доступним через порт 80, я налаштував Nginx як зворотний проксі:
1.
текст перекладу
Створення нової конфігурації Nginx:
sudo nano /etc/nginx/sites-available/your_domain
Зміст:
server {
listen 80;
server_name your_domain.in www.your_domain.in;
location / {
proxy_pass http://127.0.0.1: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;
}
location /.well-known/acme-challenge/ {
root /var/www/html;
}
}
- Увімкнув конфігурацію та перезавантажив Nginx:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
4. Прив'язка власного домену:
Наступним кроком було вказати домен на EC2 інстанс:
- Додав A Records в налаштуваннях DNS на Hostinger:
- @ → serverpublicip
- www → serverpublicip
- Перевірив розповсюдження DNS:
nslookup your_domain.in 8.8.8.8
5.
текст перекладу
Увімкнення HTTPS за допомогою Let's Encrypt
Для забезпечення безпеки додатку, я налаштував HTTPS за допомогою Let's Encrypt:
- Встановив Certbot:
sudo apt install certbot python3-certbot-nginx
- Згенерував SSL сертифікати:
sudo certbot --nginx -d your_domain.in -d www.your_domain.in
- Перевірив автоматичне поновлення:
sudo certbot renew — dry-run
Ключові висновки та отримані уроки
1️⃣ Інфраструктура так само важлива, як і код
Налаштування сервера, управління DNS і конфігурація Nginx підкреслили важливість наявності надійної інфраструктури для підтримки продуктивності та безпеки додатку.
2️⃣ Розуміння процесів розгортання покращує співпрацю
В умовах виробничого середовища з автоматизованими пайплайнами, розуміння ручних кроків розгортання зміцнює співпрацю між командами розробки та DevOps.
3️⃣ Кожна деталь має значення
Від записів DNS до правил файрволу та налаштувань SSL — увага до деталей гарантує плавний та безпечний процес розгортання.
Висновок
Розгортання цього Django додатку ще раз підтвердило важливість знання всього циклу розробки програмного забезпечення від початку до кінця.
текст перекладу
Хоча автоматизація є ключовим компонентом у професійному середовищі, практичний досвід розгортання, як цей, створює міцнішу основу для налагодження (debugging) та масштабування додатків.
Якщо ви працюєте над подібними проєктами або вивчаєте стратегії розгортання, буду радий почути ваші думки! Продовжуймо вчитися та розвиватися разом.
Перекладено з: Deploying a Django Application: A Step-by-Step Guide to AWS, Custom Domains, and HTTPS