.
Цель: Развернуть среду, обеспечивающую возможность принятия запросов по стандартному HTTP протоколу и выполнение по этим запросам скриптов на сервере, написанных на языке Python.
Для выполнения данной задачи соберем сборку: NGINX + Gunicorn + Flask
Устанавливаем и запускаем NGINX
# dnf install nginx
# systemctl enable --now nginx
Устанавливаем Python
# dnf install python3 python3-pip
Устанавливаем Gunicorn
# pip3 install gunicorn
Проверка:
# /usr/local/bin/gunicorn --version
# pip3 install gunicorn
Проверка:
# /usr/local/bin/gunicorn --version
Установка приложения Flask
# pip3 install flask
Создаем приложение Flask
# mkdir /var/www/appfs
# nano /var/www/appfs/app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, World from Gunicorn and NGINX!"
if __name__ == '__main__':
app.run()
Выполняем первый запуск:
# cd /var/www/appfs
# /usr/local/bin/gunicorn --bind 127.0.0.1:8000 app:app
Приложение запуститься на порту 8000
В другом терминале можно проверить ответ приложения так:
# curl http://127.0.0.1:8000
# pip3 install flask
Создаем приложение Flask
# mkdir /var/www/appfs
# nano /var/www/appfs/app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, World from Gunicorn and NGINX!"
if __name__ == '__main__':
app.run()
Выполняем первый запуск:
# cd /var/www/appfs
# /usr/local/bin/gunicorn --bind 127.0.0.1:8000 app:app
Приложение запуститься на порту 8000
В другом терминале можно проверить ответ приложения так:
# curl http://127.0.0.1:8000
Теперь запустим Gunicorn как сервис systemd:
# nano /etc/systemd/system/gunicorn.service
[Unit]
Description=Gunicorn app
After=network.target
[Service]
User=root
Group=nginx
WorkingDirectory=/var/www/appfs
ExecStart=/usr/local/bin/gunicorn --workers 3 --bind 127.0.0.1:8000 app:app
[Install]
WantedBy=multi-user.target
Запускаем службу:
# systemctl daemon-reload
# systemctl start gunicorn
# systemctl enable gunicorn
Выполняем настройку NGINX, чтобы сервер все запросы отправлял на Gunicorn:
# nano /etc/nginx/conf.d/appfs.conf
server {
listen 80;
server_name 172.31.0.3;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Перезапускаем NGINX
# systemctl restart nginx
Для проверки делаем тест-запрос:
# curl http://172.31.0.3:80
Должны увидеть:
Hello, World from Gunicorn and NGINX!
# nano /etc/systemd/system/gunicorn.service
[Unit]
Description=Gunicorn app
After=network.target
[Service]
User=root
Group=nginx
WorkingDirectory=/var/www/appfs
ExecStart=/usr/local/bin/gunicorn --workers 3 --bind 127.0.0.1:8000 app:app
[Install]
WantedBy=multi-user.target
Запускаем службу:
# systemctl daemon-reload
# systemctl start gunicorn
# systemctl enable gunicorn
Выполняем настройку NGINX, чтобы сервер все запросы отправлял на Gunicorn:
# nano /etc/nginx/conf.d/appfs.conf
server {
listen 80;
server_name 172.31.0.3;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Перезапускаем NGINX
# systemctl restart nginx
Для проверки делаем тест-запрос:
# curl http://172.31.0.3:80
Должны увидеть:
Hello, World from Gunicorn and NGINX!