それなりに適当にやってます

なんとなくそれっぽいメモとか備忘録とか適当に。 2018年5月にブログ移転しました。 古い記事は未整理です。

CentOS7.x + Flask + uWSGI (+systemd)

備忘メモ

Pyenv / Virtualenv のインストール

OSとは別に独立したPython環境を作りたいので pyenv + virtualenv の環境を作る。

$ sudo yum install gcc gcc-c++ make git openssl-devel bzip2-devel zlib-devel readline-devel sqlite-devel$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv$ git clone git://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv$ vi ~/.bashrc

.bashrc に pyenv + virtualenv の設定を追記する。

...## Pyenvif [ -d ${HOME}/.pyenv ]; then    export PYENV_ROOT="$HOME/.pyenv"  export PATH="$PYENV_ROOT/bin:$PATH"  eval "$(pyenv init -)"  eval "$(pyenv virtualenv-init -)"fi  

.bashrc を読み直し、設定を有効化する。

$ source ~/.bashrc

Flask + uWSGI 環境の構築

Python 環境の構築

pyenv を使い最新の Python をインストールし、virtualenv で "myproject" という環境を作る。

$ sudo mkdir -p /www/myproject$ sudo chown <USER>:<GROUP> /www/myproject ; cd $_$ pyenv install --list                    #=>最新版は 3.6.1 だった$ pyenv install 3.6.1                     #=>"pyenv" にて 3.6.1 をインストール $ pyenv virtualenv 3.6.1 myproject        #=>virtualenv にて環境を作成$ pyenv local myproject                   #=>/www/myproject 下で作成した環境を宣言

Flask / uWSGI のインストール

作成した "pyproject" の環境下で flask と uwsgi のインストールを行う。

$ pwd/www/myproject$ python -VPython 3.6.1  $ pip install flask uwsgi

Flask サンプルファイルの設置と確認

flask を動作させるため、基本の HelloWorld なスクリプトを作成し、動作を確認する。

$ vi app.py
from flask import Flask  app = Flask(__name__)@app.route('/')def hello_world():      return 'Hello, World!'if __name__ == "__main__":      app.run()

アプリとして動作する事を確認

$ python app.py  #=>:5000 ポートで起動するので、別のターミナルなどで見える事を確認(curl localhost:5000)

uWSGI の設定

uWSGI の設定ファイルを作成し、手動で uWSGI が動く事を確認する。

$ sudo mkdir /etc/uwsgi$ sudo vi /etc/uwsgi/myproject.ini
[uwsgi]chdir         = /www/myproject  module        = app  callable      = app  home          = /home/<USERHOME>/.pyenv/versions/3.6.1/envs/myprojectmaster        = true  processes     = 10socket        = /www/myproject/myproject.sock  chmod-socket  = 666## テスト用にHTTPでLISTENhttp          = 0.0.0.0:8080  

動作確認

$ uwsgi --ini /etc/uwsgi/myproject.ini  #=>:8080 ポートで起動するので、別のターミナルなどで見える事を確認(curl localhost:8080)

systemd の設定

OS起動時に自動的に起動するよう systemd のサービスとして設定ファイルを作成する。

$ sudo vi /etc/systemd/system/myproject.service
[Unit]Description=uWSGI Emperor  After=syslog.target[Service]ExecStart=/home/<USERHOME>/.pyenv/versions/3.6.1/envs/myproject/bin/uwsgi --ini /etc/uwsgi/myproject.ini  RuntimeDirectory=uwsgi  Restart=always  KillSignal=SIGQUIT  Type=notify  StandardError=syslog  NotifyAccess=all[Install]WantedBy=multi-user.target  
$ sudo systemctl daemon-reload$ sudo systemctl start myproject$ sudo systemctl status myproject  #=>これまでの確認と同じく :8080 でアクセスできる事を確認

あとは uWSGI の設定をもっと詰めて、フロントに Nginx を置くなりなんなりする感じで。

以上