Header Image

Развертывание SPA на NGINX и Flask как backend

Загружено/обновлено 26 Августа 2017

Простой пример 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.