#author("2019-01-11T06:28:39+00:00","","")
#author("2019-01-11T08:01:22+00:00","","")
* Nginx+uwsgiでFlaskアプリケーション [#jfbc4dba]
#setlinebreak(on)

#contents
-- 関連
--- [[Nginx]]
--- [[Flaskの基礎]]
-- 参考
--- https://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html

#TODO

** 概要 [#gdd7ab34]
#html(<div style="padding-left:10px">)
#TODO
#html(</div>)

** Flask、uWSGI インストール [#occabcae]
#html(<div style="padding-left:10px">)

#myterm2(){{
mkdir test_flask && cd test_flask
python3 -m venv .venv
source .venv/bin/activate
pip install flask
pip install uwsgi
}}

#html(</div>)

** サンプルアプリケーション [#q7453491]
#html(<div style="padding-left:10px">)

app.py
app/app.py
#mycode2(){{
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'
}}

#html(</div>)

** まずは uwsgiのみで動かしてみる [#v450df85]
#html(<div style="padding-left:10px">)

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

uwsgi起動
#myterm2(){{
uwsgi --http :3031 --wsgi-file app.py --callable app
uwsgi --http :3031 --wsgi-file app/app.py --callable app
}}

確認
#myterm2(){{
curl http://localhost:3031/
top page!(13:35:03.767707)
}}

#html(</div>)

** nginxインストール [#r1784e69]
#html(<div style="padding-left:10px">)
[[Nginx]] を参照
#html(</div>)

** nginxの設定 [#zb01b5b3]
#html(<div style="padding-left:10px">)
#TODO
#html(</div>)

** 全部入りのDockerイメージを作る [#lee978eb]
#html(<div style="padding-left:10px">)
#myterm2(){{
apt-get -y install software-properties-common
add-apt-repository -y ppa:deadsnakes/ppa
apt-get update
apt-get -y install python3.6
default.conf
#mycode2(){{
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;
    }   
}
}}

#html(</div>)

** 全部入りのDockerイメージを作る [#lee978eb]
#html(<div style="padding-left:10px">)

Dockerfile
#mycode2(){{
FROM ubuntu
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 python3.6
apt-get -y install nginx
USER root

ln -s /usr/bin/python3.6 /usr/bin/python
rm -rf /usr/bin/python3
ln -s /usr/bin/python3.6 /usr/bin/python3
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
#mycode2(){{
#!/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;"
}}

#html(</div>)


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