- 追加された行はこの色です。
- 削除された行はこの色です。
#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>)