想ひ出のへっぽこBlogⅡ from35

~ 自身の備忘録および学習促進のためにブログります。~

想ひ出17: GCP/Flask1.0/Nginx/GCEにデプロイする

f:id:moqrin3:20181201161727p:plain
GCP GCE

おはようございます、moqrinです。

前回、FlaskのチュートリアルCRUDシステムを構築しました。
そいつをGCPのGCE(CentOS7)にデプロイしてみよう、
その際、uWSGIとNginxを利用してみよう、というお話になります。
なお、かなり原始的な対応をしておりますのでご了承下さいませ。。

WSGIとは何ぞ?

ちなみに、CloudSQLへの接続は次回になっております。

やること

1. Python3の環境を設定する
2. プロジェクトをGitクローンしてvirtualenv環境にする
3. FlaskとuWSGIをインストールしてセットアップする

1. Python3の環境を設定する

とりあえず、まずSELinuxを停止しましょう! わたくしはこれで結構ヤラれました。。 参考URL

# vi /etc/selinux/config
SELINUX=disabled

そんでもって先に必要そうなものをインストールしておきます。

yum install -y nginx gcc git wget

Python3をCentOS7にインストールするためにIUS Community Projectのリポジトリを追加します。

yum install -y https://centos7.iuscommunity.org/ius-release.rpm

Python 3.6 をインストールします(3.6じゃなくてもいいけどw)

yum install -y python36u python36u-libs python36u-devel python36u-pip

エイリアスを設定します

ln -s /bin/python3.6 /bin/python3

pipをインストールします

wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py

virtualenvをインストールします

pip install --upgrade virtualenv

2. プロジェクトをGitクローンしてvirtualenv環境にする

Gitクローンしてきます。 プロジェクトディレクトリをflaskrをします。 場所は下記とします。

cd /var/www/html/flaskr

virtualenvで切り替えます。

virtualenv --python python3 env
source env/bin/activate

3. FlaskとuWSGIをインストールしてセットアップする

pip install uwsgi flask flask-sqlalchemy flask-login flask-migrate
Create the WSGI Entry Point
# vi /flaskr/wsgi.py

from run import app

if __name__ == "__main__":
    app.run()

表示を確認します。このとき、nginxは起動させてちゃダメです。

uwsgi --socket 0.0.0.0:8000 --protocol=http -w wsgi:app
Creating a uWSGI Configuration File
# vi /flaskr/flaskr.ini

[uwsgi]
module = wsgi:app

master = true
processes = 5

socket = flaskr.sock
chmod-socket = 660
vacuum = true

die-on-term = true
Create a Systemd Unit File
# vi /etc/systemd/system/flaskr.service

[Unit]
Description=uWSGI instance to serve myproject
After=network.target

[Service]
User=moqrin3   // プロジェクトディレクトリのユーザーに合わせましょう
Group=nginx
WorkingDirectory=/var/www/html/flaskr
Environment="PATH=/var/www/html/flaskr/env/bin"
ExecStart=/var/www/html/flaskr/env/bin/uwsgi --ini flaskr.ini

[Install]
WantedBy=multi-user.target

起動させます

systemctl start flaskr
systemctl enable flaskr
Configuring Nginx to Proxy Requests
# vi /etc/nginx/conf.d/vhost.conf

    server {
        listen       80;
        server_name  moqrin3.flask.com;

        location / {
          include uwsgi_params;
          uwsgi_pass unix:/var/www/html/flaskr/flaskr.sock;
        }
        
        ...略

確認して起動します

nginx -t
systemctl start nginx
systemctl enable nginx

ホスト設定してブラウザで表示確認しましょう!

# vi /etc/hosts

InstanceIP moqrin3.flask.com

参考:

Python 開発環境のセットアップ
Python3をCentOS 7 に yum でインストールする手順
How To Serve Flask Applications with uWSGI and Nginx on Ubuntu 16.04
How To Serve Flask Applications with uWSGI and Nginx on CentOS 7