🏠 | 💻 IT | Flask |

Запуск проекта на Flask

Для кого написана эта статья

Эта статья для тех, кто хочет запустить сайт или API на Flask на своём сервере и сделать его доступным из интернета. Если Вы просто делаете заглушку для теста, или локальный веб сайт эти шаги, возможно, избыточны.

Если Вас интересует запуск на виртуальном хостинге, советую прочитать стаью «Настройка Flask на хостинге»

Введение

Первый деплой проекта на реальном сервере это всегда вызов.

Может появиться огромное количество трудностей, о которых обучающийся программированию даже не догадывался.

Часто нужно навыки очень далёкие от того чему можно было научиться на уроках по синтаксису языка или какому-то фреймворку.

Нужно запастить терпением и быть готовым много читать, искать, спрашивать и проверять.

Мы будем запускать проект в следующем окружении:

Debian Linux

Nginx

Gunicorn

Подготовка

Про установку и настройку Linux читайте в статье Самоучитель Debian

Про установку Nginx в Debian читайте статью Nginx на Debian

Залогинимся на сервере и выполним

sudo apt update

Pip

Проверим установлен ли pip3 командой

pip3 --version

Если получили что-то вроде

pip 18.1 from /usr/lib/python3/dist-packages/pip (python 3.7)

Тот Pip уже установлен, если нет - нужно выполнить

sudo apt install python3-pip

Установка пакетов

Скопируем папку с нашим проектом на сервер, перейдём в директорию, в которой лежит файл requirements.txt и выполним

pip3 install -r requirements.txt

Если Вы получили предупреждение

The script flask is installed in '/home/andrei/.local/bin' which is not on PATH. Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.

Значит нужно добавить '/home/andrei/.local/bin' в PATH

Как это сделать можете прочитать в статье Linux PATH

Gunicorn

После успешной установки pip3 и пакетов-зависимостей нужно установить Gunicorn.

Есть и другие средства деплоить Flask, Вы можете изучить их здесь

sudo apt install gunicorn3

Команда для запуска приложения

gunicorn3 aredel_com:app

[2020-06-19 12:49:13 +0300] [10692] [INFO] Starting gunicorn 19.9.0 [2020-06-19 12:49:13 +0300] [10692] [INFO] Listening at: http://127.0.0.1:8000 (10692) [2020-06-19 12:49:13 +0300] [10692] [INFO] Using worker: sync [2020-06-19 12:49:13 +0300] [10695] [INFO] Booting worker with pid: 10695

Как Вы могли заметить Gunicorn слушает на порту 8000.

HTTP запросу нужно слушать на порту 80, но этим будет заниматься Nginx и потом перенаправлять на 8000.

Мы прячем Gunicorn за Nginx, так как у Nginx много возможностей по работе с нагрузкой и безопастностью, которых нет у Gunicorn.

Выключим Gunicorn нажав CTRL + C и запустим его как демон

gunicorn3 -D aredel_com:app

 

В командной строке ничего не должно появиться, в отличие от обычного запуска.

Чтобы убедиться в том, что gunicorn3 работает выполните

ps -A | grep gunicorn

10704 ? 00:00:00 gunicorn3 10707 ? 00:00:00 gunicorn3

Чтобы проверить работает ли Nginx можно зайти на сервер с помощью браузера.

IP моего сервера 192.0.2.131

Про то как настраивать подключения по сети в Linux читайте статью Linux Network

Nginx default www.andreyolegovich.ru
Nginx default

Дефолтный сайт нам не нужен, поэтому можно его просто удалить

sudo rm default

Настройка Nginx

Чтобы запустить свой сайт на Nginx будем следовать инструкции с gunicorn.org

Копируем кофигурацию для nginx. Советую делать это не отсюда а с сайта gunicorn

server { listen 80; server_name example.org; access_log /var/log/nginx/example.log; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }

Выполняем

sudo vi default

И вставляем настройки.

Если у Вас сложности с использованием vi прочитайте статью «Текстовый редактор vi»

Редактируем настройки, чтобы они больше соответствовали названию проекта

server { listen 80; server_name aredel.com; access_log /var/log/nginx/aredel_com.log; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }

Перезапустим nginx

sudo service nginx restart

Более подробную информацию о настройке связки Nginx - Gunicorn Вы можете найти здесь

Про то как настроить запуск Gunicorn при перезагрузке системы читайте здесь

Итоги

Теперь если Вы зайдёте через браузер на Ваш сервер - там появится Ваше приложение.

Как это произошло: gunicorn3 запустил приложение Flask и слушал на порту 8000

Мы запустили Nginx, который слушает порт 80 и пробрасывает соединение на порт 8000 - обратите внимание на строку

proxy_pass http://127.0.0.1:8000;

Статьи о Python
Python
Flask
Запуск Flask на хостинге
Первый проект на Flask
Шаблоны Jinja
Flask FAQ

Если остались вопросы - смело задавайте их в комментариях.

Поиск по сайту
Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: