Введение
После того, как мы закончили разработку веб-приложения, оно должно быть размещено на хосте, чтобы общественность могла получить доступ к нему из любого места. Мы посмотрим, как развернуть и разместить приложение на экземпляре AWS EC2, используя Nginx в качестве веб-сервера и Gunicorn в качестве WSGI.
AWS EC2
Amazon Elastic Compute Cloud (Amazon EC2) - это веб-сервис, обеспечивающий масштабируемость вычислительных мощностей в облаке. Мы устанавливаем и размещаем наши веб-приложения на экземпляре EC2 после выбора AMI (OS) по нашему усмотрению. Подробнее об этом мы поговорим в следующих разделах.
NGINX
Nginx - это веб-сервер с открытым исходным кодом. Мы будем использовать Nginx для сервера наших веб-страниц по мере необходимости.
GUNICORN
Gunicorn - это серверная реализация интерфейса шлюза Web Server Gateway Interface (WSGI), который обычно используется для запуска веб-приложений Python.
WSGI - используется для переадресации запроса с веб-сервера на Python бэкэнд.
Мы не будем использовать сервер, который поставляется с django по умолчанию в производстве.
Развертывание приложения
Мы запустим EC2 экземпляр на AWS, для этого войдите в консоль aws.
Выберите EC2 из всех сервисов
Выберите запуск New instance и выберите Ubuntu из списка.
Выберите любой из экземпляров, каждый из них имеет различные конфигурации, мы выберем тот, который имеет свободный уровень.
Теперь настройте группы безопасности и откройте порты 8000 и 9000, так как мы будем использовать эти порты . Просмотрите и запустите ваш экземпляр, может потребоваться некоторое время, чтобы он запустился.
Подключение к Экземпляру
Мы можем подключиться к экземпляру, используя опцию 'connect' в консоли (или с помощью putty или любого другого подобного инструмента ). После подключения запустите следующие команды
sudo apt-get update
Установите python , pip и django
sudo apt install python
sudo apt install python3-pip
pip3 install django
Теперь, когда мы установили наши зависимости, мы можем создать папку, в которую мы скопируем наше приложение django.
cd /home/ubuntu/
mkdir Project
cd Project
mkdir ProjectName
cd ProjectName
Теперь мы поместим наш код по следующему пути.
/home/ubuntu/Project/ProjectName
GitHub
Убедитесь, что ваш код находится в репозитории, чтобы мы могли легко втянуть его в наш экземпляр ec2.
Перейдите в только что созданную папку ( /home/ubuntu/Project/ProjectName/ )
git clone <repository-url>
Это клонирует репозиторий в папку, и в следующий раз мы сможем просто вытащить изменения с помощью git pull
.
Settings.py Файл.
Мы должны внести некоторые изменения в settings.py в нашем проекте.
Вставьте свои секретные ключи и пароли в переменные окружения
Установить
Debug = False
Добавте Ваш домейн в
ALLOWED_HOSTS
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_ROOT = os.path.join(BASE_DIR, “static”)
Выполните следующие действия, чтобы миграция модели произошла и все статические файлы были собраны в общую папку (путь указан в STATIC_ROOT).
manage.py makemigrations
manage.py migrate
manage.py collectstatic
Установка Nginx
Для установки Nginx выполните команду
sudo apt install nginx
Есть конфигурационный файл с именем по умолчанию в /etc/nginx/sites-enabled/
, который имеет базовую настройку для NGINX, мы отредактируем этот файл.
sudo vi default
Файл будет выглядеть так после добавления необходимой конфигурации, а остальная часть файла останется такой же.
мы добавим proxy_pass http://0.0.0.0:9000 и укажем путь к нашей статической папке, добавив путь внутри каталога /static/, как указано выше. Убедитесь, что вы собрали все статические файлы в общую папку, запустив команду
manage.py collectstatic
Теперь запустите сервер nginx
sudo service nginx start #to start nginx
sudo service nginx stop #to stop nginx
sudo service nginx restart #to restart nginx
Установка Gunicorn
pip install gunicorn
Убедитесь, что Вы находитесь в папке проекта, например: /home/ubuntu/Project
, и запустите следующую команду, чтобы запустить gunicorn
gunicorn ProjectName.wsgi:application- -bind 0.0.0.0:9000
Теперь, когда мы установили и настроили nginx и gunicorn, к нашему приложению можно получить доступ через DNS экземпляра ec2.
iredun
Опять какие-то вредные советы…
Что даст эта команда? Она просто в текущем соединении shh запустит этот процесс, как только вы закроете консоль gunicorn упадет и толка в этом всем 0.Если у вас файлик settings.py не в .gitignore, то после изменения на сервере Debug = False, вы уже не сможете сделать git pull, как сказано у вас в статье. Поэтому, лучше выносить это все (настройки) в отдельный файл по типу .env и оттуда считывать параметры.
Если нужно, что бы оно постоянно работало (а я так подозреваю именно это вы и хотели получить), то можно воспользоваться systemd (как самым простым вариантом) или docker (для продвинутых).
А еще, если на сервере несколько приложений планируется хостить, то лучше что бы у проекта был свой venv. Хотя даже если не планируется, все же лучше venv делать.
razielvamp
Жаль, что сейчас таких "продвинутых" слишком много. Без докера уже hello word не поднять.
Да да, а самое идеальное запихнуть по venv'у в каждый hello word контейнер. Сейчас так модно.
Самые упоротые умудряются запихнуть в контейнер pyenv и забацать там внутри еще venv. Иначе ж hello world с помощью ansible не автоматизировать.
iredun
Ну docker для hello word — это выстрел в ноги будет, особенно новичку (хотя на чем то же тренироваться нужно). Но для чего-то маленького он реально не нужен, конечно, все зависит от того, что нужно получить, иногда все же docker очень удобно (если умеешь с ним работать:) ).
Соболезную, что такое приходилось видеть :)