Python – отличный, простой в освоении и всемогущий язык программирования, и с такими фреймворками, как Django и Flask, мы можем использовать его для создания полноценных веб-приложений. После того, как мы создадим веб-приложение с использованием библиотек и фреймворков, таких как Flask, нам нужно разместить его на сервере и предоставить публике.
В этой статье обсуждается, как разместить ваше веб-приложение на сервере под управлением Nginx с помощью Gunicorn.
Прежде чем мы начнем с Flask и Gunicorn, убедитесь, что вы соответствуете следующим требованиям:
- Сервер с доступом по SSH
- Веб-сервер Nginx, работающий на сервере (установка описана)
- Python
- Вы пользователь sudo.
Настройка сервера
Давайте теперь приступим к настройке серверной среды, которую мы будем использовать для размещения нашего сервера. В этой статье используется сервер Ubuntu.
Начните с обновления репозиториев и установки Python3 и Pip.
sudo apt-get update sudo apt-get upgrade -y sudo apt-get install python3 python3-pip -y
Далее нам нужно создать каталог для хранения проекта.
sudo mkdir /var/www/application cd /var/www/application
Измените владельца каталога и разрешения:
sudo chown -R www-data:www-data /var/www/application/
Затем установите пакеты с помощью apt (flask и Gunicorn)
sudo apt-get install python3-flask python3-gunicorn
Теперь приступим к инициализации приложения фляги. Начните с создания main.py – содержит приложение – и wsgi.py, который запустит приложение.
sudo touch main.py wsgi.py
Отредактируйте файл main.py и настройте приложение Flask и все маршруты. Поскольку эта статья не является руководством по Flask, мы настроим базовый маршрут и сообщение hello world.
from flask import Flask app = Flask(__name__) @app.route("/") def home(): return "<h1>Nginx & Gunicorn</h1>"
Отредактируйте файл wsgi.py и добавьте код для импорта приложения и запустите его как:
from main import app if __name__ == "__main__": app.run(debug=True)
Наконец, проверьте, работает ли он, вызвав flask как:
$ flask run * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
Попробуйте получить доступ к приложению по адресу http: // localhost: 5000.
Настройка Gunicorn
Как только наше приложение будет успешно запущено, мы можем использовать Gunicorn для тестирования приложения с помощью команд:
$ sudo gunicorn --workers 5 wsgi:app [2021-03-19 09:19:34 +0000] [14047] [INFO] Starting gunicorn 20.0.4 [2021-03-19 09:19:34 +0000] [14047] [INFO] Listening at: http://127.0.0.1:8000 (14047) [2021-03-19 09:19:34 +0000] [14047] [INFO] Using worker: sync [2021-03-19 09:19:34 +0000] [14049] [INFO] Booting worker with pid: 14049 [2021-03-19 09:19:34 +0000] [14050] [INFO] Booting worker with pid: 14050 [2021-03-19 09:19:34 +0000] [14051] [INFO] Booting worker with pid: 14051 [2021-03-19 09:19:34 +0000] [14052] [INFO] Booting worker with pid: 14052 [2021-03-19 09:19:35 +0000] [14053] [INFO] Booting worker with pid: 14053
Приведенные выше команды запускают приложение flask с использованием Gunicorn с указанным количеством рабочих. Затем мы вызываем файл wsgi: app, который является файлом и экземпляром приложения для запуска.
После запуска приложения с использованием Gunicorn нажмите CTRL + C, чтобы остановить сервер и настроить Nginx.
Используйте приведенные ниже команды для установки и запуска Nginx.
sudo apt-get install nginx -y sudo systemctl start nginx sudo systemctl enable nginx
Следующим шагом является редактирование конфигурации Nginx в каталоге с поддержкой сайтов и добавление блока сервера. Рассмотрим следующую конфигурацию. Измените приложение на название вашего проекта.
sudo nano /etc/nginx/sites-available/application.conf server { listen 80; server_name application; access_log /var/log/nginx/application.access.log; error_log /var/log/nginx/appliation.error.log; location / { include proxy_params; proxy_pass http://unix:/var/www/application/application.sock; } }
Приступите к созданию ссылки на каталог с включенным сайтом, чтобы включить его.
sudo ln -s /etc/nginx/sites-available/application.conf /etc/nginx/sites-enabled/
Теперь перезапустите службу Nginx как:
sudo systemctl restart nginx
Затем нам нужно создать файл модуля systemd для обслуживания приложения.
sudo nano /etc/systemd/system/application.service [Unit] Description=application.service - A Flask application run with Gunicorn. After=network.target [Service] User=www-data Group=www-data WorkingDirectory=/var/www/application/ ExecStart=/usr/bin/gunicorn --workers 3 --bind unix:/var/www/application.sock wsgi:app [Install] WantedBy=multi-user.target
Наконец, сохраните файл модуля, затем включите и перезагрузите демон.
sudo systemctl restart application.service sudo systemctl daemon-reload
Теперь вы можете получить доступ к приложению, используя IP-адрес или адрес, указанный в файле конфигурации nginx. Возможно, вам потребуется добавить его в файл хоста.
curl http://application HTTP/1.1 200 OK Server: Werkzeug/0.16.1 Python/3.8.5) Date: Fri, 19 Mar 2021 10:00:39 GMT Content-Type: text/html Content-Length: 25 Last-Modified: Fri, 19 Mar 2021 09:22:47 GMT
Заключение
В этой статье рассказывается, как настроить приложение Python Flask и обслуживать его через Nginx с помощью Gunicorn. Изучите отдельную документацию, чтобы узнать больше об услугах, обсуждаемых в этой статье.