Chromebookで「Nginx + uWSGI + Flask」を実行する方法【サンプル有り】

5 min

本記事を最後まで読むと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・プログラミングに関する相談・依頼はこちら
広告_零号機-エリア2
kewton

kewton

大学院卒業後、某大手SIerで10年以上SEとして従事。
社会人3年目までに基本情報・応用情報技術者、データベーススペシャリスト、簿記3級・2級を取得。
基幹系システム・IoTシステム開発のプロジェクト経験多数。AI活用システムの企画・プロト開発経験あり。
強みは、プロマネだけでなく自身で開発も実施してきたこと。
【扱える言語】
C#、java、python、javascript、Excel VBA
【扱えるDB】
oracle、sql server、postgreSQL、mongoDB

FOLLOW

関連記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA