本記事を最後まで読むとChromebookで10分で「Nginx + uWSGI + Flask」を実行出来るようになります。なお、Nginx と uWSGI との間をUNIXドメインソケットで通信するサンプルコードを紹介します。
目次
① Chromebookへのnginxのセットアップ方法
インストール方法
Chromebook のLinux開発環境のターミナルから下記コマンドを実行することでnginxをインストールすることができます。
sudo apt update
sudo apt install nginx
/etc/nginx/nginx.confの修正
uWSGIとの連携についての記述をするために、「include /etc/nginx/sites-enabled/*」をコメントアウトして「include /etc/nginx/conf.d/*.conf」を追記します。後述しますが、/etc/nginx/conf.d/uwsgi.confを作成してuWSGIとの連携を記述します。
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
# include /etc/nginx/sites-enabled/*;
}
#mail {
# # See sample authentication script at:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
#}
/etc/nginx/conf.d/uwsgi.confの作成
uWSGIとの連携についてを記述します。
server{
listen 8080;
server_name 127.0.0.1;
location / {
include uwsgi_params;
uwsgi_pass unix:///tmp/uwsgi.sock;
}
}
「include uwsgi_params」を記述することで uwsgi が使用出来るようになります。
「uwsgi_pass unix:///tmp/uwsgi.sock」では、”/tmp/uwsgi.sock”を使って uwsgi と niginx との間をunixドメインソケット通信すること意味しています。
② uWSGI + Flask
まずはChromebookにPythonの開発環境を構築します。
必要ライブラリのインストール
requirements.txtに以下を記入します。動作確認ように jupyter notebook もインストールします。
Flask
Flask-Cors
notebook>=5.3
requests
uwsgi
下記を実行して必要なライブラリをインストールします。
source {Python仮想環境}/bin/activate
pip install -r {requirements.txtへのパス}
app.iniファイルの作成
uwsgiを実行するためのapp.iniを作成します。
[uwsgi]
module = app
callable = app
master = true
processes = 2
socket = /tmp/uwsgi.sock
chmod-socket = 666
vacuum = true
die-on-term = true
# 実行するpythonファイルへのパス。本サンプルでは下記を指定
wsgi-file = ./server_nginx.py
# ログファイルのパス(拡張子 .log)。本サンプルでは下記を指定
logto = ./app.log
socketに”/etc/nginx/conf.d/uwsgi.conf”のuwsgi_pass指定した”/tmp/uwsgi.sock”を指定します。
server_nginx.py の作成
from flask import Flask
from flask import request, make_response, jsonify
from flask_cors import CORS
import random
app = Flask(__name__, static_folder="./build/static", template_folder="./build")
CORS(app) #Cross Origin Resource Sharing
@app.route("/", methods=['GET'])
def index():
return "hello world" + "_" + str(random.randint(0, 100))
@app.route("/test", methods=['GET'])
def test():
return "test" + "_" + str(random.randint(0, 100))
if __name__ == "__main__":
print("aaaaaaaaa")
app.run()
uwsgiの実行
uwsgiを実行してNginxとFlaskをつなぎます。
app.iniとserver_nginx.pyを同一のディレクトリに格納し、app.iniが格納されているディレクトリにて下記コマンドを実行します。
uwsgi --ini app.ini
同一のディレクトリにapp.logが作成されれば成功です。
動作確認方法
jupyter notebookを起動して下記コードを実行します。レスポンスが正しく出力されれば成功です。
import requests
def restapiGet(_url):
print(_url)
html_doc = requests.get(_url).content
print(html_doc)
return html_doc
restapiGet("http://127.0.0.1:8080") # hello world_{二桁の整数}
restapiGet("http://127.0.0.1:8080/test") # test_{二桁の整数}
まとめ
本記事では、Chromebookで「Nginx + uWSGI + Flask」で実行する方法を紹介しました。
ご参考になりましたら twitter をフォローして SNS でシェアして頂ければ幸いです。
IT・プログラミングに関する相談・依頼はこちら