Как установить Flask с Gunicorn и Nginx на Ubuntu 18.04

12 set 2022 5 min di lettura
Как установить Flask с Gunicorn и Nginx на Ubuntu 18.04
Indice dei contenuti

Введение

В этом уроке мы увидим, как создать приложение, написанное на Python, с использованием микрофреймворка Flask. Как использовать сервер Gunicorn и запустить приложение, настроив Nginx в качестве обратного прокси-сервера в Ubuntu 18.04 LTS.

Если вы хотите установить Flask с Gunicorn на удаленный сервер, читайте дальше, в противном случае, если вы хотите установить Flask с Gunicorn на локальный компьютер, пропустите первый абзац «Подключение к серверу» и прочитайте следующий.

Подключение к серверу

Чтобы получить доступ к серверу, вам нужно знать IP-адрес. Вам также потребуется пароль для аутентификации.

Чтобы подключиться к серверу как root, введите эту команду:

ssh root@IP_DEL_SERVER

Далее вам будет предложено ввести пароль пользователя root.

Если вы не используете пользователя root, вы можете войти под другим именем пользователя с помощью той же команды, а затем изменить первый параметр:

ssh VOSTRO_UTENTE@IP_DEL_SERVER

Затем вам будет предложено ввести пароль пользователя.

Теперь вы подключены к своему серверу и готовы начать установку Flask с помощью Gunicorn.

Предпосылки

Прежде чем приступить к работе с этим руководством, на вашем сервере должен быть установлен пользователь без полномочий root с привилегиями sudo. Следуйте этому руководству: Первоначальная настройка в Ubuntu 18.04 LTS.

Мы будем использовать Nginx в качестве обратного прокси-сервера, поэтому, если у вас не установлен Nginx, следуйте этому руководству: Как установить LEMP на Ubuntu 18.04 LTS. Просто выполните первый шаг.

Также вам нужно активное доменное имя, указывающее на ваш сервер.

Установите необходимые зависимости

Обновите список пакетов Ubuntu из терминала:

sudo apt update

Установите необходимые пакеты:

sudo apt install python3-pip python3-dev build-essential libssl-dev libffi-dev python3-setuptools

Создайте виртуальную среду

Настройте виртуальную среду, чтобы изолировать наше приложение Flask от других файлов Python в системе.

Установите python3-venv:

sudo apt install python3-venv

Создайте папку для вашего приложения:

mkdir ~/myapp

Войдите в папку:

cd ~/myapp

Создайте виртуальную среду Python для нашего проекта:

python3.6 -m venv myappenv

В нашем проекте будет установлена локальная копия Python и pip.

Активируйте нашу виртуальную среду:

source myappenv/bin/activate

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


Esempio:
 (myappenv) user@host:~/myapp$.

Создайте колбу приложения

Установите пакет колеса:

pip install wheel

Когда виртуальная среда активирована, используйте pip вместо pip3, даже если вы используете Python 3.

Установите Flask и Gunicorn:

pip install gunicorn flask

Создайте файл python для нашего приложения:

nano ~/myapp/myapp.py

Вставьте следующие строки кода:


from flask import Flask
 app = Flask(__name__)

 @app.route("/")
 def hello():
 return "<h1 style='color:red'>Hello World!</h1>"

 if __name__ == "__main__":
 app.run(host='0.0.0.0')

По умолчанию будет использоваться порт 5000, если у вас возникнут проблемы, или у вас этот порт уже используется другим приложением, вы можете изменить его, отредактировав последнюю строку кода, например:

...
 app.run(host='0.0.0.0',port='5040')...

Сохраните и закройте файл

Если у вас активен брандмауэр Ubuntu (ufw), вам нужно будет открыть необходимые порты:

sudo ufw allow 5000

Или же:

sudo ufw allow 5040

Протестируйте приложение:

python myapp.py

Вы должны получить выходное сообщение, подобное следующему:


* Serving Flask app "myapp" (lazy loading)
 * Environment: production
 WARNING: Do not use the development server in a production environment.
 Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://0.0.0.0:5000/(Press CTRL+C to quit)

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


http://tuo_indirizzo_ip:5000

Вы должны увидеть сообщение: Hello World!

В терминале нажмите CTRL-C, чтобы закрыть приложение.

Создайте файл WSGI

Файл WSGI будет служить точкой входа для нашего приложения. Это сообщит нашему серверу Gunicorn, как взаимодействовать с приложением.

Создайте файл wsgi.py:

nano ~/myapp/wsgi.py

В этом файле мы импортируем и запускаем экземпляр Flask из нашего приложения.

Вставьте следующие строки кода:


from myapp import app

 if __name__ == "__main__":
 app.run()

Сохраните и закройте файл.

Настроить Гуникорна

Сначала проверьте установленную точку входа с помощью файла wsgi.py.

Убедитесь, что вы находитесь в правильном каталоге:

cd ~/myapp

Убедитесь, что Gunicorn может правильно обслуживать наше приложение с помощью следующей команды:

gunicorn --bind 0.0.0.0:5000 wsgi:app

Вы должны получить выходное сообщение, подобное следующему:


[2018-08-04 15:36:40 +0200] [19809] [INFO] Starting gunicorn 19.9.0
 [2018-08-04 15:36:40 +0200] [19809] [INFO] Listening at: http://0.0.0.0:5000 (19809)
 [2018-08-04 15:36:40 +0200] [19809] [INFO] Using worker: sync
 [2018-08-04 15:36:40 +0200] [19812] [INFO] Booting worker with pid: 19812

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


http://tuo_indirizzo_ip:5000

Вы должны увидеть сообщение: Hello World!

В терминале нажмите CTRL-C, чтобы закрыть приложение.

Деактивируйте виртуальную среду:

deactivate

Любая команда Python теперь снова будет использовать системную среду Python.

Создайте файловую службу systemd. Создание этого файла позволит системе инициализации Ubuntu автоматически запускать Gunicorn и обслуживать приложение Flask при запуске сервера.

Создайте юнит-файл с расширением.service внутри каталога /etc/systemd/system:

sudo nano /etc/systemd/system/myapp.service

Вставьте следующие строки кода, позаботившись об изменении выбранных вами имен пользователя и папки:


[Unit]
 Description=Gunicorn instance to serve myapp
 After=network.target

 [Service]
 User=noviello
 Group=www-data
 WorkingDirectory=/home/noviello/myapp
 Environment="PATH=/home/noviello/myapp/myappenv/bin"
 ExecStart=/home/noviello/myapp/myappenv/bin/gunicorn --workers 3 --bind unix:/tmp/myapp.sock -m 007 wsgi:app

 [Install]
 WantedBy=multi-user.target

Сохраните и закройте файл.

Запустите проект:

sudo systemctl start myapp

Включить проект при запуске:

sudo systemctl enable myapp

Проверить статус заявки:

sudo systemctl status myapp

Вы должны получить выходное сообщение, подобное следующему:


● myapp.service - Gunicorn instance to serve myapp
 Loaded: loaded (/etc/systemd/system/myapp.service; enabled; vendor preset: enabled)
 Active: active (running) since Sat 2018-08-04 14:16:03 CEST; 1h 32min ago
 Main PID: 22388 (gunicorn)
 Tasks: 4 (limit: 2304)
 CGroup: /system.slice/myapp.service
 ├─22388 /home/noviello/myapp/myappenv/bin/python3.6 /home/noviello/myapp/myappenv/bin/gunicorn --workers
 ├─22408 /home/noviello/myapp/myappenv/bin/python3.6 /home/noviello/myapp/myappenv/bin/gunicorn --workers
 ├─22409 /home/noviello/myapp/myappenv/bin/python3.6 /home/noviello/myapp/myappenv/bin/gunicorn --workers
 └─22410 /home/noviello/myapp/myappenv/bin/python3.6 /home/noviello/myapp/myappenv/bin/gunicorn --workers

Настроить Nginx

Создайте новый файл конфигурации Nginx:

sudo nano /etc/nginx/sites-available/myapp

Вставьте следующие строки кода, заменив запись server_name на ваше доменное имя и изменив имя вашего сокета:


server {
 listen 80;
 server_name tuo_dominio www.tuo_dominio;

 location /{
 include proxy_params;
 proxy_pass http://unix:/tmp/myapp.sock;
 }
 }

Сохраните и закройте файл.

Включите новый файл конфигурации Nginx:

sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled

Проверьте правильную конфигурацию Nginx:

sudo nginx -t

Перезапустите Nginx:

sudo systemctl restart nginx

Если у вас активен брандмауэр Ubuntu (ufw), вам нужно будет открыть необходимые порты:

sudo ufw allow 'Nginx Full'

Откройте браузер и подключитесь к своему адресу:


http://nome_dominio

Вы должны увидеть сообщение: Hello World!

Установить SSL-сертификаты

Мы бесплатно установим действующий SSL-сертификат с помощью Let's Encrypt.

Добавьте репозиторий Ubuntu Certbot:

sudo add-apt-repository ppa:certbot/certbot

Нажмите ENTER при появлении запроса.

Установите Сертбот:

sudo apt install python-certbot-nginx

Запустите Certbot, указав домен, к которому нужно привязать SSL-сертификат:

sudo certbot --nginx -d tuo_dominio -d www.tuo_dominio

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

Откройте браузер и подключитесь к своему адресу:


http://nome_dominio

Установка и настройка Flask с Gunicorn и Nginx на Ubuntu 18.04 LTS завершена.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.