CentOS7にflaskの環境構築

サーバー

はじめに

前回、CentOSにpythonを導入したので、今回はFlaskの導入。
webサーバーはNginxを使ってアプリケーションサーバーはuWsgiを使った。

この辺の理解がなかなか難しい。
いままではWebサーバーのみですぐに環境構築ができていたが、pythonのWebアプリとなるとそれを仲介するアプリケーションサーバーが必要らしい。今回使用したuWsgiだけではなくほかにもたくさんあり、Gunicornは比較的シンプルで使いやすいとのこと。

今回は初めてなので情報がたくさんあったuWsgiを使って構築。

ライブラリをインストール

何はともあれFlaskのインストール。前回pip3のコマンドをpipに割り当てたので、pip install flask と入力してメインのFlaskのライブラリをインストール。flaskのバージョンは2.0.2。

次にこれもメインとなるuWsgiのインストール。pip install uwsgi と入力してライブラリをインストールする。uwsgiのバージョンは2.0.20。

Nginxの導入

以前のブログ記事を参考にしてnginxをインストール。
CentOS 7 ~nginx

uWsgiの設定

まずはuWsgiの設定。Apacheを使っているとフォルダ構成が /var/www/ の時が多いので、今回はそのまま採用。
Apacheをインストールしていないので /varの下に www のディレクトリがを作成。さらにその下層にuwsgi ディレクトリを作成。この中にpythonのファイルやuwsgiの設定ファイルを作っていく。

まずはflaskのファイルを作成。最低限の記述でテスト。
先ほどの /var/www/uwsgi/app.py に下記の内容を記述。決まり文句の 『Hello World!』 を出力するのみ。

同じく /var/www/uwsgi/内にuwsgi.iniファイルを作成して設定を記載。
いろいろと設定があるらしいがよくわからないのでネットの情報のままにしておいた。

今度は uwsgi と Nginxを繋げる設定。最初にも書いたがイメージ的には以下の流れ。
Client <-> Nginx <-> uwsgi <-> app

nginxの設定ファイルにuwsgi.confを一緒に読み込ませる。もともとnginxの設定ファイルには
include /etc/nginx/conf.d/*.conf
との記載があるので、uwsgi.confファイルを作成すれば勝手に読み込んでくれる。

cd /etc/nginx/conf.dで目的のディレクトリに移動。ここに新たにuwsgi.confファイルを作成。

中身は以下の通り。ポートが50000でアクセスがあったときにuwsgiに接続してねという設定。

接続テスト

ひとまずちゃんと接続できているかテスト。
SELinuxとファイアウォールを一時的に切っておく。setenforce 0systemctl stop firewalld
nginxの設定をいじったので、いったんnginxの再起動。 systemctl restart nginx

ではさっそく、uwsgi –ini uwsgi.ini と入力してuWsgiを起動させる。起動させるとコマンドが打てない状態(リクエスト待機状態かな)になるので、適当なブラウザで確認。

今回作成したCentOSのIPアドレスが192.168.11.13。さらにポートは50000で作成したので、http://192.168.11.13:50000にアクセス。
無事、開通して『Hello World!』の出力に成功。

uWsgiの自動起動

このままで良いが、uWsgiを起動させるのに毎回コマンドを打たなくてはいけないので、systemdにファイルを作って自動起動できるように設定。
まずはuwsgiの場所を which uwsgi で確認。私の環境では /usr/local/bin/uwsgi だった。

次に /etc/systemd/system ディレクトリ内に uwsgi.service のファイルを作成。

ファイル内の記述は以下の通り。先ほど確認したuwsgiの場所をExecStartに記載。

そして恒例のごとく systemctl status uwsgi で確認。systemctl enable uwsgi で自動起動を有効化して systemctl start uwsgi で起動。

終わり

まだSELinuxとファイアウォールの部分は設定できていない。でも薬局内のローカルサーバーだけで運用を考えているので、単に切るだけでもいいかな。
何はともあれ、pythonのWebアプリのインフラを作成することができたので良かった。
すべて独学なのでここまで来るのに結構時間がかかってしまった。。。

コメント

タイトルとURLをコピーしました