VPSにFlaskアプリをデプロイする方法を解説していく

スポンサーリンク

今回は、Apache Webserver Software と mod_wsgi WSGI を使用して、Flask Application を Virtual Private Server (VPS) にデプロイします。

スポンサーリンク

VPSとは?

VPSとは、Virtual Private Server の略で、様々なホスティング会社がサービスとして販売している仮想マシンのことです。

ノートパソコンのCPUハードウェアに似ていますが、生の状態、つまりScreenやキーボードなどがない状態と考えていただければよいでしょう。

GoogleやAmazonなど、さまざまな企業がクラウドサーバーサービス(GCP、AWSなど)を提供しています。

このサービスの一環として、世界のさまざまな場所にあるサーバーを借りることができます。

使用時間やCPU使用率など、様々な基準に基づいて課金されます。

クラウドサーバーを利用することで、以下のような利点がある。

  • クラウドサーバーを使うと、次のような利点がある。ローカルホスト(ラップトップ)の場合、24時間稼働させ続ける必要があり、現実的ではありません。
  • スケーラビリティ – ストレージが一杯になった場合でも、クラウド上ではサービス(ストレージ、RAMなど)を迅速にスケールアウトすることができます。
  • 安全性 – すべてのハードウェアがクラウドセンター内にあるため、より安全です。
  • アクセス性 – どのラップトップやコンピューターからでもクラウドサーバーにアクセスすることができます。

この記事では、デプロイメントの目的でAWS – Amazon Web Servicesを使用する予定です。

あなたは、VPSプロバイダのいずれかを使用することができます

インターネット上でアプリケーションを実行するために必要なソフトウェア

さて、VPSにデプロイされたFlaskアプリケーションは、以下のことを実行する必要があります。

  • HTML/ CSS/ JS のような静的ファイルをホストします。
  • Httpリクエストの処理
  • クラッシュからのリカバリ
  • 必要なときにスケールアップ

これらのタスクを実行するために、以下のソフトウェアが必要です。

  1. ウェブサーバーソフトウェア(Apache、Nginxなど) 2.
  2. Web Server Gateway Interface (WSGI) アプリケーションサーバー – Mod_WSGI, Gunicorn, etc.
  3. 実際のWebアプリケーション – Flask、Djangoなどを使って書かれたもの

ここでは、ApacheのようなWebサーバーソフトウェアが、ドメインロジックを処理し、HTTPリクエストを受け付けるために必要です。

適切なリクエストは、WSGIアプリケーションサーバ(mod_wsgi、Gunicornなど)を介して、メインのWebアプリケーション(Flask)に送信されます。

WSGIアプリケーションサーバーは、ApacheソフトウェアとFlaskアプリケーションの間のゲートウェイインターフェースを提供します。

WSGIの主な用途は、リクエストをpythonで読める形式に変換してアプリケーションコード(Flask-pythonで書かれています)に送り、そのアプリケーションが必要な機能を実行し、応答Webページを返します。

したがって、WSGIはApacheとFlaskアプリケーションの間のゲートウェイとして動作します。

それらを個別に見てみましょう

ウェブサーバーソフトウェアとは?

ウェブサーバーソフトウェアの主な役割は、インターネット上でウェブサイトをホストすることです。

それは、サーバーとクライアントマシンの間の仲介役として機能します。

これらのソフトウェアアプリケーションは、クライアントの要求を処理し、その後、サーバー上に存在する物理ファイル(テンプレート/データ)を返し、クライアントにそれらを表示します。

ウェブサーバーソフトウェアの例としては、Apache、NGINXなどがあります。

この記事では、インターネット上のWebアプリケーションの約47%をホストしている、古き良きApacheサーバーを使用することにします。

mod_wsgi WSGI Application Server とは何ですか?

mod_wsgi は Apache HTTP Server のモジュールで、Python ベースのウェブアプリケーションを Apache でホストするための WSGI 準拠のインターフェイスを提供します。

Python バージョン 2 と 3 をサポートしており、Apache ソフトウェアとクラウドサーバ上の Flask アプリケーションの間のインターフェイスとして動作します。

VPSにFlaskプロジェクトをデプロイする

最初のステップは、VPSプロバイダからサーバを選択することです。

VPS を提供している会社では、以下のように異なる OS で動作するサーバを複数台持っています。

ssh username@<server_IP>


必要なサーバーを選択したら、いくつかのステップを経て、サーバーをセットアップして起動する必要があります。

クラウドサーバーのHTTPポート(80)が有効になっていることを確認してください。

80番ポートとは、Webサーバーソフト(Apacheなど)がWebクライアントからのリクエストを「リッスン」するためのポートです。

sudo apt update
sudo apt upgrade

サーバーのセットアップが完了すると、サーバーのIPアドレスまたはパブリックDNSが取得され、後にクラウドサーバーに接続するために必要となります。

sudo apt install apache2
sudo apt install libapache2-mod-wsgi

1. ローカルコンピューターからクラウドサーバーに接続する

サーバーへの接続には、ssh コマンドを使用します。

ローカルコンピューターからクラウドサーバーに接続するには、以下のコマンドを実行します。

  • Mac または Linux を使用する場合。

Mac または Linux の場合: シェルで、次のコードを実行します。

sudo apt install python-pip

Ubuntuサーバーの場合、ユーザー名はubuntuです。

  • Windowsの場合

Windowsの場合、PuTTYというインターネットから直接ダウンロードできるソフトを使用します。

ダウンロードしたら、そこにcloud_IPを入力し、openを押してください。

sudo pip install flask
sudo pip install flask_sqlalchemy
....
....

私のサーバーにアクセスするために使用するcloud_IP/Public DNSは以下の通りです。

mkdir flask_project
cd flask_project

AWSの場合は、さらに秘密鍵を使用する必要があります。

そのため、VPSプロバイダによっては、security_keyを追加する必要があります。

これで、クラウドサーバーOSにログインできるようになります。

scp -i <path/to/secret_key> -r <path/to/file> ubuntu@<public_DNS>:<path/to/destination>

2. 必要なパッケージのインストール

サーバーに接続すると、新しいubuntuのコンピュータと同じような状態になります。

まず、重要なパッケージをすべてインストールする必要があります。

そこで、以下のコマンドを実行します。

アップグレードのインストール

sudo ln -sT ~/flask_project /var/www/html/flask_project

サーバーを起動したら、必ずシステムをアップデートしてください。

サーバーにapache2とmod_wsgiをインストールする

まず、Apache2とmod_wsgiパッケージをシステムにインストールします。

sudo nano app.py

Apache2が動作しているかどうかを確認するために、クラウドサーバーのPublic DNS/IPアドレスにアクセスします。

Apache Default Pageが表示されます。

python3-pipのインストール

python3とpipをインストールします。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from flask import Flask
 
app = Flask(__name__)
 
@app.route('/blogs')
def blogs():
  return 'Welcome to The Blog App'
 
@app.route('/blog/<int:id>')
def blog(id):
  return "The Blog id is {}".format(id)
 
if __name__ == '__main__':
  app.run()

Flaskとその拡張機能のインストール

Flask Frameworkと、Flask_SQLAlchemy, Flask_login, Flask_wtf, etcのようなFlask Extensionsのインストールを行います。

1
2
3
4
5
#flaskapp.wsgi
import sys
sys.path.insert(0, '/var/www/html/flask_project')
 
from app import app as application


Flask Project に必要な Flask Extensions をインストールします。

3. Flask プロジェクトをローカルマシンからクラウドサーバに転送する

新しいディレクトリを作成し、そこに Flask アプリを nano テキストエディタでコーディングします。

cd /etc/apache2/sites-enabled/

より良いオプションは、ローカルマシンでプロジェクトをコーディングして、flask_projectフォルダをクラウドサーバに転送することです。

ファイルを転送するには、次のコードを使用します。

WSGIDaemonProcess flask_project threads=5
WSGIScriptAlias / /var/www/html/flask_project/app.wsgi
 
<Directory flask_project>
    WSGIProcessGroup flask_project
    WSGIApplicationGroup %{GLOBAL}
    Order deny,allow
    Allow from all
</Directory>
sudo service apache2 restart

AWSの場合、セキュリティキーを入れる必要もあります。

VPSプロバイダでセキュリティキーがない場合は、コマンドからkey_pathを削除してください。

ホームディレクトリにある Flask Application Project ディレクトリ flask_project と Apache の Configurations (/var/www/html ディレクトリにある) をリンクします。

コードで行います。

AWS Servers
AWS Servers

4. Flask アプリケーションのコーディング

Flask_project フォルダの中に、app.py, models.py, Templates など、全ての Flask ファイルがあるはずです。

単純な Flask Application をコーディングしてみましょう。

AWS HTTP Port
Aws HTTP Post

を作成し、コードを追加します。

Aws
Aws

その後、WSGI ファイルを作成する必要があります。

そのために、メインの Flask Application File と同じ名前の .wsgi ファイルを作成します。

私の場合、app.wsgi です。

nano app.wsgi を使って、以下のコードを追加します。

PuTTY
PuTTY

素晴らしい! 次に、Apache が Flask アプリケーションとやり取りするために、mod_wsgi を有効にする必要があります。

そのためには、/etc/apache2/sites-enabled/ に行ってください。

Public DNS
Public DNS

nano Text editor で 000-default.conf を開き、DocumentRoot /var/www/html の行の下に、以下のコードを追加します。

Ubuntu
Ubuntu
Transfer Files
Transfer Files

Flaskアプリケーションの実行

以上で、apache サーバの再起動は完了です。

Conf File
Conf File

そして公開DNSにアクセスすると、ウェブサイトが稼働します!

Blogss
Blogss

同様に、他のURLにも

Blogs1
Blogs1

完璧です。

まとめ

これであなたの Flask アプリケーションはクラウドサーバ上で動作するようになりました。

ぜひ、クラウドサーバ上で自分の Flask アプリケーションを動かしてみてください。

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