Простой пример main.py
:
from flask import Flask
app = Flask(__name__)
@app.route("/api")
def get_something():
return # jsonify...
@app.route("/api/v1")
def get_something_else():
return # jsonify...
if __name__ == "__main__":
app.run(host="0.0.0.0")
Затем создаем файл main.ini
в корневом каталоге проекта. В моем случае /home/denismitr/myapp/main.ini
И добавляем следующее содержимое:
[uwsgi]
module = wsgi:app
master = true
processes = 5
socket = main.sock
chmod-socket = 660
vacuum = true
die-on-time = true
Создаем сервис systemd:
sudo vim /etc/systemd/system/myapp.service
и пишем в него следующий код:
[Unit]
Description=uWSGI instance to serve myapp
After=network.target
[Service]
User=denismitr
Group=www-data
WorkingDirectory=/home/denismitr/myapp
Environment="PATH=/home/denismitr/myapp/env/bin"
ExecStart=/home/denismitr/myapp/env/bin/uwsgi --ini main.ini
[Install]
WantedBy=multi-user.target
Наконец переходим к настройкам NGINX:
Создаем файл /etc/nginx/sites-available/myapp.com
:
Для начала подойтет такой простой код
server {
listen 80;
server_name myapp.com
location / {
root /home/denismitr/myapp;
autoindex off;
}
location /api {
try_files $uri @main;
}
location @main {
include uwsgi_params;
uwsgi_pass unix:/home/denismitr/flask-project/main.sock;
}
}
При таких настройках NGINX сможет и отдавать index.html с какинибудь React или Angular или VueJS и статичные файлы и посылать запросы к Flask.