Ubuntu + Apache + Python + Flask でサーバ構築

Ubuntu + Apache + Python + Flask でサーバ構築

普段 Python で Web サービスを制作するときは、 Google Cloud Functions や Google App Engine 上で Flask を利用しサーバ構築していましたが、久しぶりに Ubuntu 20.04 + Apache + Python3 でサーバを立てたので、今後のためにもメモとして残しておきたいと思います。
ただし今回の構築方法は 1 サーバ 1 システムを想定した簡易的な手法です。もし複数のシステムを載せたいのであれば、今回紹介する方法は適さないので注意してください。

システム構成

次のシステム構成を想定しています。あらかじめサーバの HTTP ポートは開放しておいてください。

  • Amazon EC2
  • Ubuntu 20.04
  • Apache 2
  • Python 3.8.10
  • Flask 2.0.2

初期設定

ここでは AWS に Ubuntu 20.04 のサーバを立ち上げた直後からの手順を紹介します。 まずは初期設定を行いましょう。パッケージ情報の取得と更新を行います。

$ sudo apt update
$ sudo apt upgrade

Apache インストール

今回は Web サーバとして Apache を利用します。Apache のインストールは非常に簡単です。Apache の設定は flask インストール後に行います。

sudo apt -y install apache2

これでデフォルトの html が表示できるようになりました。念のため確認しておくといいでしょう。

pip インストール

Ubuntu 20.04 には Python 3 がインストールされているのでこれを利用します。

$ python3 --version
Python 3.8.10

あとは Python に関連した pip と wsgi をインストールします。

$ sudo apt -y install python3-pip libapache2-mod-wsgi-py3

Flask インストール

先ほど pip をインストールしたので、 pip を利用して flask をインストールします。

$ sudo pip3 install flask

確認用プロジェクト作成

それではプロジェクトを作成しましょう。次の例ではホームディレクトリに「 app 」ディレクトリを作成しそこに Flask のプロジェクトを用意します。今回確認用に用意するファイルも app.py のみです。また Apache との連携のため、wsgi.py を用意します。

$ cd
$ mkdir app
$ cd app
$ vi app.py
from flask import Flask

app = Flask(__name__)


@app.route('/') 
def hello_world():
    return 'Hello my project!' 


if __name__ == '__main__':
    app.run()
$ vi wsgi.py
import sys 
sys.path.insert(0, '/var/www/html/app')
from app import app as application

Apache の設定

プロジェクトはホームディレクトリに作成したので、デフォルトの公開ディレクトリにリンクしましょう。

$ sudo ln -sT ~/app /var/www/html/app

通常、 Apache の設定ファイルを個別に用意しますが、前提が 1 サーバ 1 システムですので、手っ取り早く既存の設定ファイルに追記します。具体的には「 DocumentRoot /var/www/html 」の下に次の設定を追記します。

sudo vi /etc/apache2/sites-enabled/000-default.conf
        WSGIDaemonProcess app threads=5
        WSGIScriptAlias / /var/www/html/app/wsgi.py
        WSGIApplicationGroup %{GLOBAL}
        <Directory app>
             WSGIProcessGroup app
             WSGIApplicationGroup %{GLOBAL}
             Order deny,allow
             Allow from all 
        </Directory>

追記すると、次のようになっているはずです。

それでは Apache を再起動しましょう。

$ sudo service apache2 restart

正常に進めることができれば「 Hello my project! 」と表示されます。

まとめ

これまで PHP で Web サーバを立てることはよくあったのですが、いざ Python で Web サーバを構築しようと思うと、あれ?と思う点が多かったので、一連の流れをまとめてみました。 Python はよく利用するのに不覚です。今回は Virtual Env を利用していないので、利用すると設定方法が変わります。これをベースにチャレンジしてみてください。

» エンジニア登録はこちら