Введение
В этом уроке мы увидим, как создать приложение, написанное на Python, с использованием микрофреймворка Flask. Как использовать сервер Gunicorn и запустить приложение, настроив Nginx в качестве обратного прокси-сервера в Ubuntu 18.10.
Если вы хотите установить 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.10.
Мы будем использовать Nginx в качестве обратного прокси-сервера, поэтому, если у вас не установлен Nginx, следуйте этому руководству: Как установить LEMP на Ubuntu 18.10. Просто выполните первый шаг.
Также вам нужно активное доменное имя, указывающее на ваш сервер.
Установите необходимые зависимости
Обновите список пакетов 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.10 завершена.