モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

工作HardwareHub ロゴ画像 (Laptop端末利用時)
工作HardwareHub ロゴ画像 (Mobile端末利用時)
目次目次を開く/閉じる

WSGI アプリケーション + nginx

モーダルを閉じる

ステッカーを選択してください

モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2015/09/02
最終更新最終更新
2018/01/07
記事区分記事区分
一般公開

目次

    アカウント プロフィール画像 (サイドバー)

    Web3関連の開発を行っています。分散型アプリケーションが研究テーマの学生です。

    0
    ステッカーを贈るとは?

    WSGI (Web Server Gateway Interface) は PSGI に影響を与えた python の標準化された Web インターフェースです。

    WSGI の実装としては上記二つの選択肢があります。前者は Apache に依存しており更新も活発ではないため、後者の uwsgi を利用します。

    参考ドキュメント

    事前準備

    必須ではありませんが、今回は pyenv/virtualenv を用いて 2.7.10 をシステムインストールした状況を想定します。

    インストール

    $ pyenv shell 2.7.10
    $ pyenv exec pip install uwsgi
    $ pyenv exec pip install uwsgitop
    

    サンプルアプリケーション

    wsgi.py

    #!/bin/env python
    # -*- coding: utf-8 -*-
    import sys
    
    def application(env, start_response):
        start_response('200 OK', [('Content-Type','text/html')])
        return ["Hello World, python version: \n%s\n" % (sys.version)]
    

    wsgi.ini

    [uwsgi]
    http = :8080
    stats = 127.0.0.1:8181
    wsgi-file = wsgi.py
    master = true
    processes = 4
    threads = 2
    

    実行

    $ pyenv exec uwsgi wsgi.ini
    

    動作検証

    $ ps auxw | grep wsgi
    $ pyenv exec uwsgitop localhost:8181
    $ curl http://localhost:8080/
    

    複数アプリケーションの管理

    /etc/uwsgi/vassals/wsgi-001.ini

    [uwsgi]
    http = :8080
    stats = 127.0.0.1:8181
    chdir = /usr/local/uwsgi/apps
    wsgi-file = wsgi-001.py
    master = true
    processes = 4
    threads = 2
    logto = /var/log/uwsgi/wsgi-001.log
    

    /usr/local/uwsgi/apps/wsgi-001.py

    #!/bin/env python
    # -*- coding: utf-8 -*-
    import sys
    
    def application(env, start_response):
        start_response('200 OK', [('Content-Type','text/html')])
        return ["Hello World, python version: \n%s\n" % (sys.version)]
    

    /etc/uwsgi/emperor.ini

    [uwsgi]
    emperor = /etc/uwsgi/vassals
    uid = nobody
    gid = nobody
    

    起動手順

    $ sudo su -l
    $ chown nobody: /var/log/uwsgi
    $ cd /etc/uwsgi/
    $ pyenv shell 2.7.10
    $ pyenv exec uwsgi emperor.ini
    

    nginx リバースプロキシ

    /etc/nginx/nginx.confuwsgi_pass するためには /etc/uwsgi/vassals/wsgi-001.ini において http ではなく socket を使用します。

    /etc/nginx/nginx.conf

    user nginx;
    worker_processes 1;
    
    error_log /var/log/nginx/error.log;
    pid /var/run/nginx.pid;
    
    events {
        worker_connections  1024;
    }
    
    http {
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
        sendfile on;
        keepalive_timeout 65;
        access_log /var/log/nginx/access.log combined;
        server {
            listen 80 default_server;
            include uwsgi_params;
    
            location / {
                uwsgi_pass 127.0.0.1:8080;
            }
            location /001 {
                uwsgi_pass 127.0.0.1:8080;
            }
            location /002 {
                uwsgi_pass 127.0.0.1:9090;
            }
        }
    }
    

    /etc/uwsgi/vassals/wsgi-001.ini

    [uwsgi]
    socket = 127.0.0.1:8080
    stats = 127.0.0.1:8181
    chdir = /usr/local/uwsgi/apps
    wsgi-file = wsgi-001.py
    master = true
    processes = 4
    threads = 2
    logto = /var/log/uwsgi/wsgi-001.log
    

    /usr/local/uwsgi/apps/wsgi-001.py

    #!/bin/env python
    # -*- coding: utf-8 -*-
    import sys
    
    def application(env, start_response):
        start_response('200 OK', [('Content-Type','text/html')])
        return ["Hello World, python version: \n%s\n" % (sys.version)]
    

    /etc/uwsgi/emperor.ini

    [uwsgi]
    emperor = /etc/uwsgi/vassals
    uid = nobody
    gid = nobody
    

    起動手順

    $ sudo su -l
    $ chown nobody: /var/log/uwsgi
    $ cd /etc/uwsgi/
    $ pyenv shell 2.7.10
    $ pyenv exec uwsgi emperor.ini
    

    動作検証

    $ ps auxw | grep wsgi
    $ sudo less /var/log/uwsgi/wsgi-001.log
    $ pyenv exec uwsgitop localhost:8181
    $ curl http://localhost/
    
    0
    詳細設定を開く/閉じる
    アカウント プロフィール画像 (本文下)

    Web3関連の開発を行っています。分散型アプリケーションが研究テーマの学生です。

    記事の執筆者にステッカーを贈る

    有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

    さらに詳しく →
    ステッカーを贈る コンセプト画像

    Feedbacks

    Feedbacks コンセプト画像

      ログインするとコメントを投稿できます。

      関連記事