0
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

Mitama + nginx + uWSGIで社内システムを立てる

Mitama Advent Calendar 2020の1日目です。

木瓜丸です。
今年は自分と仲間とで作ったPython製のWebフレームワーク『Mitama』ネタでカレンダーを書きます。よかったらみなさんも書いてください(^^)

今回は、そもそもこのフレームワークは何に使うのか、どんなふうに動かすのかを具体例を出しながら解説したいと思います。

Mitamaとは

mitama.png
Github: https://github.com/mitama-org/mitama

Mitamaは、社内システムのような、組織で内部向けに運用するWebシステムを構築するためのフレームワークです。

フレームワークを用いてアプリをPythonパッケージとして作成し、それを配信する様に設定することで、簡単に社内で利用するアプリを内製することができます。また、PyPIにパッケージを公開することでOSSとしてそのアプリをほかの人に使えるようにすることもできます。

(アプリの作り方はまた今度カレンダーに書きたいと思います)

サーバーで動かしてみよう

環境

OS: CentOS
Python: 3.6.8

インストール

$ sudo yum install -y nginx uwsgi
$ sudo pip3 install mitama

Mitamaプロジェクトの作成

Mitamaを動かす単位を「プロジェクト」といいます。適当なディレクトリで次のコマンドを実行することで、プロジェクトを作成できます。

$ mitama new someproject
$ ls someproject
mitama.json

初期状態では、プロジェクトディレクトリ下にはmitama.jsonが設置されています。
mitama.jsonには起動するアプリの設定などを書きます。

{
    "apps": {
        "mitama.portal": {
            "path": "/"
        }
    }
}

apps下のキーにPythonパッケージ名、その辞書のpathプロパティに配信先のパスを設定します。

uWSGIの設定

まず、uWSGIからMitamaを起動する場合は起動スクリプトを作成する必要があります。プロジェクトディレクトリ(↑の例ではsomeproject/)の中で以下のコマンドを叩いてください。

$ mitama uwsgi

これによって、uwsgi.pyが生成されているかと思います。wsgi-fileにこれを指定してuWSGIを起動することで、uWSGIからMitamaのプロジェクト下のアプリが配信されます。

今回はiniファイルを用いた設定を行いたいと思います。プロジェクトディレクトリ下にuwsgi.iniを設置し、以下の様に書きます。

[uwsgi]
module=uwsgi
callable=application
master=true
socket=/var/run/uwsgi.sock
chmod-socket=666
wsgi-file=uwsgi.py
chdir=/path/to/someproject/
logto=/path/to/someproject/uwsgi.log

パスは適宜変えてください。
今回はlogtoを設定することでエラーやアクセスのログも出力したいと思います。

nginxの設定

/etc/nginx/conf.d/mitama.jsonを作成し、次の様に書き込みましょう。

server{
        listen 80;

        location / {
                include uwsgi_params;
                uwsgi_pass unix:/var/run/uwsgi.sock;
        }
}

ここらへんの書き方は好き嫌いがあるかと思うので、uwsgi_passの指定だけ忘れないようにしてください。

Systemdから起動

uWSGIを起動するコマンドをサービスとして登録してしまいましょう。
/etc/systemd/system/uwsgi.serviceを作成し、以下の様に書き込んでください。

[Unit]
Description=uWSGI
After=syslog.target

[Service]
ExecStart=/usr/local/bin/uwsgi --ini /var/www/mitama/uwsgi.ini
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all

できたらSystemdをリロードし、nginxと一緒に起動しましょう。

$ sudo systemctl daemon-reload
$ sudo systemctl start nginx
$ sudo systemctl start uwsgi

2020-12-01-040538_1920x1080_scrot.png

サーバーのアドレスにアクセスしてこのような画面が出たら成功です。

終わりに

uWSGIをnginxで使うのって難しいですよね(^^;

iniの生成まで勝手にコマンドで作れたら楽になるんでしょうか。提案とかあったらコメントやプルリクいただけると飛んで喜びます。

よかったらリポジトリにスター付けてください!
マジで。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?