[Разработка веб-сайтов, Python, Django, Nginx] Запуск Django сайта на nginx + Gunicorn + SSL
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
ПредисловиеДля написания этой статьи ушло очень много сил и времени. Я натыкался на множество инструкций, как на английском, так и на русском языках, но как я понял, - они все были клонами оригинальной статьи на Digital Ocean. Спросите вы, почему я так считаю, а все потому, что все ошибки и неточности передаются с одного ресурса на другой без всяких изменений. ПодготовкаУ нас есть обычный VPS c ОС Ubuntu, и мы уже написали в PyCharm или в блокноте свой сайт на Django и его осталось всего лишь опубликовать, привязать домен, установить сертификат и в путь.Первым делом необходимо обновить список репозиториев и установить сразу же пакет nginx:
apt get update
apt get-install nginx
Я решил хранить файлы сайта в каталоге: /var/www/. В данном случае перемещаемся в каталог cd /var/www/ и создаем новый каталог mkdir geekhero и получаем такой путь: /var/www/geekhero/Переходим в новый каталог geekhero: cd geekhero и создаем виртуальное окружение: python3 -m venv geekhero_envАктивируем виртуальное окружение: source geekhero_env/bin/activate и устанавливаем в него Django: pip install Django и сразу же ставим pip install gunicornСоздаем проект: django-admin startproject ghprojДалее нужно произвести все первичные миграции; для этого прописываем: python manage.py makemigrations , затем python manage.py migrate .После этого создаем административную учетную запись: python manage.py createsuperuser и следуем инструкции.Далее уже создаем applications, но так как вы читаете данную статью, то вы уже умеете все это делать.Заходим в Settings.py и прописываем, если отсутствует:
import os – в заголовке, остальное в самом низу текстового файла:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
Настройка GunicornИдем в каталог /etc/systemd/system/ и создаем два файла: gunicorn.service и gunicon.socket: Содержимое файла gunicorn.service:
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=root
WorkingDirectory=/var/www/geekhero #путь до каталога с файлом manage.py
ExecStart=/var/www/geekhero/geekhero_env/bin/gunicorn --workers 5 --bind unix:/run/gunicorn.sock ghproj.wsgi:application
#путь до файла gunicorn в виртуальном окружении
[Install]
WantedBy=multi-user.target
Содержимое файла gunicorn.socket:
[Unit]
Description=gunicorn socket
[Socket]
ListenStream=/run/gunicorn.sock
[Install]
WantedBy=sockets.target
Для проверки файла gunicorn.service на наличие ошибок:
systemd-analyze verify gunicorn.service
Настройка NGINXДалее идем в каталог: /etc/nginx/sites-available/ и создаем файл geekhero (название вашего сайта) без расширения:
server {
listen 80;
server_name example.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /var/www/geekhero; #путь до static каталога
}
location /media/ {
root /var/www/geekhero; #путь до media каталога
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
}
Для того, чтобы создать символическую ссылку на файл в каталоге /etc/nginx/site-enabled/ необходимо ввести следующую команду:
sudo ln -s /etc/nginx/sites-available/geekhero /etc/nginx/sites-enabled/
При любых изменениях оригинального файла, ярлык из sites-enabled нужно удалять и пересоздавать заново командой выше или выполнять команду: sudo systemctl restart nginxФинальный этапДля проверки конфигурации nginx нужно ввести команду:
sudo nginx -t
sudo nginx -tДалее запускаем службу gunicorn и создаем socket:
sudo systemctl enable gunicorn
sudo systemctl start gunicorn
Для отключения выполняем команды:sudo systemctl disable gunicorn
sudo systemctl stop gunicornТакже, эти обе команды пригодятся, если вы будете вносить какие-либо изменения в HTML или python файлы, чтобы обновить свой сайт, но помните, что, если вносите изменения в модели, то обязательно нужно сделать python manage.py makemigrations <app> и migrate <app> из каталога с проектом.Для первичного запуска / полной остановки сервиса Gunicorn:
service gunicorn start / service gunicorn stopЧтобы посмотреть статус запущенного сервиса нужно ввести:
sudo systemctl status gunicorn
или
sudo journalctl -u gunicorn.socket
(с последней командой правильный вывод такой: мар 05 16:40:19 byfe systemd[1]: Listening on gunicorn socket. )
Для проверки создания сокета, необходимо ввести команду:
file /run/gunicorn.sock
Такой вывод считается правильным: /run/gunicorn.sock: socketЕсли внес какие-либо изменения в файл gunicorn.service или .socket, необходимо выполнить команду:
systemctl daemon-reload
Если все нормально сработало, то можем запустить nginx:
sudo service nginx start
Получаем сертификат SSL для доменаУстановим certbot от Let's Encrypt: sudo apt-get install certbot python-certbot-nginxПроизведем первичную настройку certbot: sudo certbot certonly --nginxИ наконец-то автоматически поправим конфигурацию nginx: sudo certbot install --nginxОсталось только перезапустить сервис nginx: sudo systemctl restart nginxИтогВ рамках этой статьи мы разобрали как вывести наш сайт в production, установив Django, Gunicorn, nginx и даже certbot от Let's Encrypt.
===========
Источник:
habr.com
===========
Похожие новости:
- [Веб-дизайн, Разработка веб-сайтов, Чулан, История IT] Как ощутить «интернет 2000 года»
- [Python, Работа с 3D-графикой, Разработка мобильных приложений] Кроссплатформенные OpenGL + Python при помощи Kivy
- [Python, Разработка под MacOS, Разработка под Linux, Разработка под Windows] Трепещущий Kivy. Обзор возможностей фреймворка Kivy и библиотеки KivyMD
- [Разработка веб-сайтов, JavaScript, Программирование, ReactJS] React: основные подходы к управлению состоянием
- [Python, JavaScript, C#, Логические игры] 10 лучших игр по программированию, которые улучшат ваши навыки (перевод)
- [Информационная безопасность, Разработка веб-сайтов, IT-инфраструктура, Резервное копирование] Простой план сохранения онлайн-бизнеса при пожаре в дата-центре
- [Программирование микроконтроллеров, DIY или Сделай сам] FDCAN на STM32
- [Информационная безопасность, Python, Тестирование веб-сервисов] Пишем расширение для Burp Suite с помощью Python
- [Python, PostgreSQL] Обрезаем большую таблицу PostgreSQL в production
- [Python, Программирование, Машинное обучение] Взлом reCAPTCHA v2
Теги для поиска: #_razrabotka_vebsajtov (Разработка веб-сайтов), #_python, #_django, #_nginx, #_gunicorn, #_django, #_razrabotka_vebsajtov (разработка веб-сайтов), #_razrabotka_vebprilozhenij (разработка веб-приложений), #_python, #_cms, #_nginx, #_ssl, #_lets, #_razrabotka_vebsajtov (
Разработка веб-сайтов
), #_python, #_django, #_nginx
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 25-Ноя 02:05
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
ПредисловиеДля написания этой статьи ушло очень много сил и времени. Я натыкался на множество инструкций, как на английском, так и на русском языках, но как я понял, - они все были клонами оригинальной статьи на Digital Ocean. Спросите вы, почему я так считаю, а все потому, что все ошибки и неточности передаются с одного ресурса на другой без всяких изменений. ПодготовкаУ нас есть обычный VPS c ОС Ubuntu, и мы уже написали в PyCharm или в блокноте свой сайт на Django и его осталось всего лишь опубликовать, привязать домен, установить сертификат и в путь.Первым делом необходимо обновить список репозиториев и установить сразу же пакет nginx: apt get update
apt get-install nginx import os – в заголовке, остальное в самом низу текстового файла: STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static/') [Unit]
Description=gunicorn daemon Requires=gunicorn.socket After=network.target [Service] User=root WorkingDirectory=/var/www/geekhero #путь до каталога с файлом manage.py ExecStart=/var/www/geekhero/geekhero_env/bin/gunicorn --workers 5 --bind unix:/run/gunicorn.sock ghproj.wsgi:application #путь до файла gunicorn в виртуальном окружении [Install] WantedBy=multi-user.target [Unit]
Description=gunicorn socket [Socket] ListenStream=/run/gunicorn.sock [Install] WantedBy=sockets.target systemd-analyze verify gunicorn.service
server {
listen 80; server_name example.com; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /var/www/geekhero; #путь до static каталога } location /media/ { root /var/www/geekhero; #путь до media каталога } location / { include proxy_params; proxy_pass http://unix:/run/gunicorn.sock; } } sudo ln -s /etc/nginx/sites-available/geekhero /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl enable gunicorn
sudo systemctl start gunicorn sudo systemctl stop gunicornТакже, эти обе команды пригодятся, если вы будете вносить какие-либо изменения в HTML или python файлы, чтобы обновить свой сайт, но помните, что, если вносите изменения в модели, то обязательно нужно сделать python manage.py makemigrations <app> и migrate <app> из каталога с проектом.Для первичного запуска / полной остановки сервиса Gunicorn: service gunicorn start / service gunicorn stopЧтобы посмотреть статус запущенного сервиса нужно ввести: sudo systemctl status gunicorn
или sudo journalctl -u gunicorn.socket (с последней командой правильный вывод такой: мар 05 16:40:19 byfe systemd[1]: Listening on gunicorn socket. ) file /run/gunicorn.sock
systemctl daemon-reload
sudo service nginx start
=========== Источник: habr.com =========== Похожие новости:
Разработка веб-сайтов ), #_python, #_django, #_nginx |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 25-Ноя 02:05
Часовой пояс: UTC + 5