本記事を最後まで読むと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.logsocketに”/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・プログラミングに関する相談・依頼はこちら 
													 
															 
															 
															 
															