Как установить Flask с Nginx и Gunicorn на Rocky Linux
На этой странице
- Предпосылки
- Установка зависимостей
- Настройка пользователя
- Настройка виртуальной среды Python
- Установка Flask и Gunicorn
- Создание первого приложения Flask
- Настройка Gunicorn и Supervisord
- Настройка обратного прокси-сервера Nginx
- Заключение
Flask — это написанный на Python микрофреймворк для разработки современных веб-приложений и API (интерфейс прикладного программирования). Он основан на наборе инструментов Werkzeug и шаблоне Jinja2. Вместо сложной архитектуры Flask представляет собой небольшой веб-фреймворк, ядро которого легко расширяется, и его легко освоить, потому что Flask имеет меньше кода. Flask не включает ORM, но по-прежнему имеет интересные функции, такие как маршрутизация URL-адресов и механизм шаблонов.
Gunicorn или «Зеленый единорог» — это HTTP-сервер WSGI с рабочим режимом pre-fork. Он портирован из проекта Rubys Unicorn. Gunicorn может работать в паре с несколькими веб-фреймворками, он легкий на серверных ресурсах и быстрый. Gunicorn находится между вашим приложением и веб-сервером, поэтому вы можете связать Gunicorn с веб-сервером, таким как Nginx и Apache2.
В этом руководстве мы покажем, как установить и настроить веб-фреймворк Flask Python с помощью Gunicorn и Nginx на сервере Rocky Linux. Вы также узнаете, как настроить Supervisord в качестве диспетчера процессов для управления приложением Python Flask.
Предпосылки
Для выполнения этого руководства вам потребуются некоторые из следующих требований:
- Сервер Rocky Linux. Вы можете использовать как Rocky Linux v8, так и v9 — рабочий стол или сервер.
- Пользователь без полномочий root с правами администратора sudo root.
- Фиктивное доменное имя для локальной разработки.
Установка зависимостей
На первом этапе вы установите некоторые зависимости пакетов, которые будут использоваться для установки и развертывания Flask Web Framework. Сюда входят, например, Python Pip, Nginx и Supervisord.
Все эти зависимости пакетов доступны в репозитории Rocky Linux, вы можете легко установить их с помощью команды DNF.
Во-первых, убедитесь, что репозиторий EPEL установлен в вашей системе. или вы можете просто установить и включить его с помощью команды dnf ниже.
sudo dnf install epel-release
Теперь установите несколько пакетов Python python3-pip и python3-devel, а также компилятор GCC с помощью приведенной ниже команды dnf. Эти пакеты будут использоваться для установки пакетов Python.
sudo dnf install python3-pip python3-devel gcc
Когда будет предложено подтвердить установку, введите y и нажмите ENTER, чтобы продолжить.
Затем запустите еще одну команду dnf ниже, чтобы установить веб-сервер Nginx и пакеты supervisord. Здесь Nginx будет использоваться в качестве обратного прокси-сервера для вашего проекта Flask, а supervisord будет использоваться для управления процессом вашего приложения Flask.
sudo dnf install nginx supervisor
Введите y и нажмите ENTER, чтобы подтвердить установку.
Теперь запустите и включите службу Nginx с помощью команды systemctl ниже. Затем проверьте службу Nginx, чтобы убедиться, что она работает.
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx
Вы увидите вывод, подобный следующему: Служба Nginx включена и будет запускаться автоматически при загрузке системы. И статус службы Nginx работает.
А для службы supervisord выполните следующую команду, чтобы запустить и включить ее. Затем проверьте состояние службы Supervisord, чтобы убедиться, что она работает.
sudo systemctl start supervisord
sudo systemctl enable supervisord
sudo systemctl status supervisord
Вы увидите, что служба супервизора включена и будет запускаться автоматически при запуске. И статус супервизорной службы работает.
Настройка пользователя
После установки зависимостей пакета вы настроите нового пользователя, который будет использоваться для запуска проекта Flask.
Выполните следующую команду, чтобы создать нового пользователя и установить пароль. В этом примере вы создадите нового пользователя alice.
Когда будет предложено создать новый пароль, введите свой пароль и повторите.
sudo useradd -m -s /bin/bash alice
sudo passwd alice
Теперь выполните следующую команду, чтобы добавить пользователя alice в группу wheel, чтобы пользователь мог выполнить команду sudo.
sudo usermod -aG wheel alice
Наконец, войдите в систему под новым пользователем и запустите команду sudo, чтобы проверить привилегии root. Введите свой пароль, когда будет предложено.
su - alice
sudo su
Вы должны увидеть корневую оболочку вашей машины Rocky Linux.
Настройка виртуальной среды Python
На этом этапе вы будете настраивать виртуальную среду Python для веб-фреймворка Flask.
Войдите в систему как ваш пользователь, используя следующую команду.
su - alice
Создайте новый каталог установки Flask /var/www/myflask, используя следующую команду mkdir.
sudo mkdir -p /var/www/myflask
Измените владельца и права доступа к каталогу установки Flask, используя приведенную ниже команду. Право собственности должно принадлежать пользователю alice с разрешением 755.
sudo chown -R alice:alice /var/www/myflask
sudo chmod 755 /var/www/myflask
Теперь переместите свой рабочий каталог в каталог установки Flask /var/www/myflask и создайте новую виртуальную среду Python с помощью приведенной ниже команды python.
cd /var/www/myflask
python3 -m venv myenv
Вы увидите, что новый каталог myenv создан.
Затем активируйте виртуальную среду Python с помощью следующей команды. Если эта функция активирована, вы увидите, что формат приглашения изменился, например, на (myenv [email .
source myenv/bin/activate
Чтобы деактивировать из виртуальной среды, вы должны выполнить следующую команду.
deactivate
Установка Flask и Gunicorn
Перед установкой Flask убедитесь, что вы находитесь в виртуальной среде. или вы можете просто запустить следующую команду для входа в систему.
su - alice
cd /var/www/myflask
source myenv/bin/activate
Теперь установите Flask и Gunicorn с помощью команды pip ниже. Это установит Flask и Gunicorn в виртуальной среде, а не в системе.
pip3 install flask gunicorn
После установки Flask и Gunciron вы готовы создать первое приложение с помощью Flask Web Framework.
Создание первого приложения Flask
Прежде чем приступить к созданию приложения Flask, убедитесь, что вы находитесь в виртуальной среде Python.
Создайте новый файл Python myflask.py с помощью предпочитаемого вами редактора. В этом примере мы будем использовать редактор nano.
nano myflask.py
Теперь добавьте следующий скрипт в файл.
# myflask.py
from flask import Flask, render_template # importing the render_template function
app = Flask(__name__)
# route to index page
@app.route("/")
def hello():
return render_template('index.html')
if __name__ == "__main__":
app.run(host='0.0.0.0')
Сохраните файл и выйдите из редактора, когда закончите.
Затем создайте новый каталог templates для своих статических файлов и создайте поверх него новый файл index.html.
mkdir -p templates
nano templates/index.html
Добавьте в файл следующий HTML-скрипт.
<html>
<body>
<h1><center>Hello Flask - Rocky Linux!</center></h1>
</body>
</html>
Сохраните файл и выйдите из редактора, когда закончите.
Теперь выполните скрипт Python Flask myflask.py, используя приведенную ниже команду. Это запустит ваше приложение Flask в режиме разработки, используя IP-адрес сервера с портом по умолчанию 5000.
python3 myflask.py
Ниже приведен аналогичный вывод, который вы получите.
Затем откройте другой терминал и запустите приведенную ниже команду curl, чтобы получить доступ к приложению Flask. Вы увидите сценарий файла index.html, который вы создали.
curl localhost:5000
Теперь нажмите Ctrl+c, чтобы закрыть приложение Flask.
Настройка Gunicorn и Supervisord
На этом этапе вы будете настраивать приложение Flask с помощью Gunicorn и Supervisord. Это позволяет вам запускать и управлять вашим приложением Python, управляемым и контролируемым с помощью процесса Supervisord.
Создайте новый файл Python uwsgi.py в том же каталоге вашего приложения Flask. В этом примере каталог должен быть /var/www/myflask.
nano wsgi.py
Добавьте в файл следующий скрипт Python.
# import myflask Flask application
from myflask import app
if __name__ == "__main__":
app.run(debug=True)
Сохраните файл и выйдите из редактора, когда закончите.
Теперь запустите следующую команду gunicorn, чтобы запустить приложение Flask и проверить настройки Gunicorn. Теперь приложение должно работать под Gunicron с портом 8000.
gunicorn -w 4 --bind 0.0.0.0:8000 wsgi:app
Ниже приведен вывод команды gunicorn.
Затем откройте веб-браузер и посетите IP-адрес сервера, за которым следует порт 8000 (например, http://192.168.5.100:8000/). Вы должны увидеть страницу index.html вашего приложения Flask.
На данный момент ваше приложение Flask работает с Gunicorn без каких-либо ошибок. Теперь вы можете вернуться к своему терминалу и нажать Ctrl+c, чтобы завершить процесс пушки и начать настройку диспетчера процессов Supervisord.
Создайте новую конфигурацию INI-файла Supervisord для приложения Flask /etc/supervisord.d/flaskapp.ini с помощью следующей команды nano. Конфигурация должна храниться в каталоге /etc/supervisord.d.
sudo nano /etc/supervisord.d/flaskapp.ini
Добавьте следующую конфигурацию в файл. И обязательно измените путь к сведениям о ваших приложениях, пользователя и группу, а также путь к журналу.
С этой конфигурацией ваше приложение Flask будет работать под сокетом UNIX, который будет создан Gunicorn. Этот сокет unix также будет использоваться для взаимодействия с обратным прокси-сервером Nginx.
[program:myflask]
command=/bin/bash -c 'source /var/www/myflask/myenv/bin/activate; gunicorn -w 3 --bind unix:/var/www/myflask/ipc.sock wsgi:app'
directory=/var/www/myflask
user=alice
group=www-data
autostart=true
autorestart=true
stdout_logfile=/var/www/myflask/myflask.log
stderr_logfile=/var/www/myflask/error.log
Сохраните файл и выйдите из редактора, когда закончите.
Теперь выполните приведенную ниже команду systemctl, чтобы перезапустить службу Supervisord и применить новые изменения. Затем проверьте статус супервизора и убедитесь, что служба запущена.
sudo systemctl restart supervisord
sudo systemctl status supervisord
На приведенном ниже снимке экрана видно, что Supervisord работает с новой дополнительной конфигурацией для приложения Flask.
Наконец, теперь вы можете проверить процесс своего приложения Flask с помощью приведенной ниже команды supervisorctl. Вы должны увидеть, что есть один процесс с именем myflask со статусом OK.
sudo supervisorctl status
Настройка обратного прокси Nginx
На этом шаге вы узнаете, как настроить Nginx в качестве обратного прокси-сервера для приложения Flask, работающего под управлением диспетчера процессов Supervisord. Вы создадите новый серверный блок Nginx для обратного прокси-сервера и используете локальное доменное имя для приложения Flask.
Создайте новую конфигурацию блока сервера Nginx /etc/nginx/conf.d/flaskapp.conf, используя следующий редактор nano.
sudo nano /etc/nginx/conf.d/flaskapp.conf
Добавьте следующую конфигурацию в файл. И обязательно измените доменное имя www.myflask.local на свой локальный домен разработки.
server {
listen 80;
server_name www.myflask.local;
location / {
include uwsgi_params;
proxy_pass http://unix:/var/www/myflask/ipc.sock;
}
}
Сохраните файл и выйдите из редактора, когда закончите.
Затем проверьте конфигурацию Nginx, чтобы убедиться, что у вас правильная конфигурация. Затем перезапустите службу Nginx, чтобы применить новые изменения.
sudo nginx -t
sudo systemctl restart nginx
На данный момент ваше приложение Flask теперь доступно через обратный прокси-сервер Nginx, который работает на порту HTTP по умолчанию.
Теперь на локальном компьютере отредактируйте файл /etc/hosts с помощью редактора nano.
sudo nano /etc/hosts
Определите IP-адрес машины Ubuntu с доменным именем \www.myflask.local\, как показано ниже.
192.168.5.28 www.myflask.local
Сохраните и закройте файл.
Теперь откройте веб-браузер и введите доменное имя проекта Flask (например, http://www.myflask.local) в адресной строке. И вы должны получить индексную страницу вашего проекта Python Flask.
Заключение
Поздравляем! Вы успешно установили веб-фреймворк Python Flask с Gunicorn и Nginx на сервер Rocky Linux. Вы также узнали, как создать первый проект Python Flask, настроить виртуальную среду Python и настроить управление процессами Supervisord для проекта Flask.