Nginx+uwsgiでFlaskアプリケーション

TODO:

概要

TODO:

Flask、uWSGI インストール

mkdir test_flask && cd test_flask
python3 -m venv .venv
source .venv/bin/activate
pip install flask
pip install uwsgi

サンプルアプリケーション

app/app.py

from flask import Flask
import datetime

app = Flask(__name__)

@app.route('/')
def index():
    now = datetime.datetime.now().strftime('%H:%M:%S.%f')
    return f'<h1>top page!({now})</h1>\n'

@app.route('/sample')
def sample():
    now = datetime.datetime.now().strftime('%H:%M:%S.%f')
    return f'<h1>sample page!({now})</h1>\n'

まずは uwsgiのみで動かしてみる

参考
https://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html

uwsgi起動

uwsgi --http :3031 --wsgi-file app/app.py --callable app

確認

curl http://localhost:3031/
top page!(13:35:03.767707)

nginxインストール

Nginx を参照

nginxの設定

default.conf

server {
    listen 80; 
    server_name localhost;
    root /var/app;
    index  index.html index.htm;
    location / { 
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:3031;
    }   
}

全部入りのDockerイメージを作る

Dockerfile

FROM ubuntu
USER root

RUN apt-get update && \
    apt-get -y install software-properties-common && \
    add-apt-repository -y ppa:jonathonf/python-3.6 && \
    apt-get update && \
    apt-get -y install nginx && \
    apt-get -y install python3.6-dev && \
    apt-get -y install python3-pip

RUN ln -s /usr/bin/python3.6 /usr/bin/python
RUN rm -rf /usr/bin/python3 && ln -s /usr/bin/python3.6 /usr/bin/python3

RUN pip3 install --upgrade pip && pip install flask && pip install uwsgi

COPY app /var/app

COPY default.conf /etc/nginx/conf.d/default.conf

CMD ["/bin/bash", "/var/app/startup.sh"]

app/startup.sh

#!/bin/bash

echo "## startup.sh ##"

# アプリケーションディレクトリに移動
cd /var/app

ls -l /var/app

# uwsgi起動
echo "## start uwgsi ##"
uwsgi --socket 127.0.0.1:3031 --chdir /var/app/ --wsgi-file app.py --callable app --master --processes 4 --threads 2 & 

# nginx起動
echo "## start nginx ##"
nginx -g "daemon off;"

トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS