🏠 | 💻 IT | Flask |

Запуск Flask приложения на Linux сервере

Содержание статьи
Для кого написана эта статья
Введение
Подготовка
Pip
Установка пакетов
Gunicorn
Итоги

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

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

Похожие статьи:

Введение

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

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

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

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

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

Debian

Nginx

Gunicorn

Подготовка

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

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

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

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

Подробности про 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

gunicorn можно установить через pip особенно полезным будет вариант устанвоки gunicorn в виртуальном окружении.

В этом примере для простоты работы установка была сделана через apt

Допустим главный файл вашего приложения называется aredel_com.py и вы находитесь с ним в одной директории.

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

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 читайте статьи Debian Network и Ubuntu Network

Доступные сайты Nginx хранит в /etc/nginx/sites-available/

cd /etc/nginx/sites-available/
ls

drwxr-xr-x 2 root root 4096 syys 17 16:38 . drwxr-xr-x 8 root root 4096 syys 17 16:38 .. -rw-r--r-- 1 root root 2416 maalis 26 2020 default

Дефолтный сайт, который вы можете увидеть введя в адресную строку браузера IP вашего сервера (у меня 192.0.2.131) выглядит примерно так:

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;

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

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

Поиск по сайту

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