...

Flask – установка web framework-а на Ubuntu 22.04 с nginx и Gunicorn

Flask – установка веб framework-а на Ubuntu 22.04 с nginx и Gunicorn. Прикрепление домена и установка SSL Let’s Encrypt

Flask frameworkhttps://palletsprojects.com/p/flask/

Установка дополнительного ПО (в том числе nginx и ssl let’s encrypt генератор python3-certbot-nginx):

# apt update
# apt install python3-pip python3-dev build-essential libssl-dev libffi-dev python3-setuptools net-tools htop nginx python3-certbot-nginx -y

Дать права sudo пользователю Ubuntu user1.

# sudo adduser $user1 admin,
где $user1 - имя пользователя.

Создаем Виртуальное Окружение Python – myenv1:

# apt install python3-venv
# adduser user1
# chmod 755 /home/user1/
# su user1
$ mkdir ~/myproject
$ cd ~/myproject
$ python3 -m venv myenv1
$ source myenv1/bin/activate

Создаем простой проект – импортируем Flask и экземпляр обьекта Flask:

# vi ~/myproject/myapp.py
from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
   return "<h1 style='color:blue'>Hello IPHOSTER!</h1>"
if __name__ == "__main__":
   app.run(host='0.0.0.0')

Запускаем и проверяем через 5000 порт:

$ python ~/myproject/myapp.py

заходим на

http://Server_IP:5000/ 

Создаем WSGI Entry Point чтобы – сообщит Gunicorn как взаимодействовать с приложением:

$ vi ~/myproject/wsgi.py
from myapp import app

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

Конфигурация Gunicorn:

$ cd ~/myproject
$ gunicorn --bind 0.0.0.0:5000 wsgi:app

Проверяем вход через 5000 порт:

http://Server_IP:5000/ 

Выходим CTRL+C и CTRL+D

Создаем systemd service unit file для нашего приложения чтобы автоматически запускать его

# vi /etc/systemd/system/myproject.service
[Unit]
Description=Gunicorn instance
After=network.target

[Service]
User=user1
Group=www-data

WorkingDirectory=/home/user1/myproject
Environment="PATH=/home/user1/myproject/myenv1/bin"
ExecStart=/home/user1/myproject/myenv1/bin/gunicorn --workers 3 --bind unix:myapp.sock -m 007 wsgi:app

[Install]
WantedBy=multi-user.target

Запускаем юнит, добавляем в автозагрузку и проверяем статус:

# systemctl start myproject
# systemctl enable myproject
# systemctl status myproject

Настраиваем проксирование для нашего домена через nginx на наш unix:myapp.sock:

# vi /etc/nginx/sites-available/myapp
server {
   listen 80;
   server_name site.ru www.site.ru;
   location / {
       include proxy_params;
       proxy_pass http://unix:/home/user1/myproject/myapp.sock;
   }
}
# ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/

Ставим SSL Let’s Encrypt и делаем редирект http –> https:

# certbot --nginx -d site.ru -d www.site.ru

Конфиг меняется автоматом в

/etc/nginx/sites-enabled/myapp

Строки, которые отвечаю за редирект http –> https:

   if ($host =site.ru) {
       return 301 https://$host$request_uri;
   } # managed by Certbot

В конце рестарнуть nginx:

# sudo systemctl restart nginx
# sudo systemctl restart myproject

Крон задача по обновлению сертификатов через certbot прописана в файле /etc/cron.d/certbot

/etc/cron.d/certbot
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew

Домен по “A” записи можно направить через ДНС сервера Cloudflare.

5 1 голос
Рейтинг статьи
Подписаться
Уведомить о
guest
1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Корзина для покупок
Главная
Магазин
Блог
Поиск
Профиль
1
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x