ApacheでpythonとflaskとSSLな環境を構築する

Ubuntu上のApacheで、Python・Flask・SSLの実行環境を構築した記録。

Markdownで開く

過去の記事(Qiitaから移行)

この記事は公開当時の知識・環境に基づいて書いたものです。現在の仕様に合わせた更新・動作確認は行っておらず、内容の正確性や動作を保証するものではありません。

初出:2021-12-20・Qiita

前提環境

Apache 2.4.41 Python 3.8.10 Ubuntu 20.04.3

参考

https://tech-blog.s-yoshiki.com/entry/9

https://gb-j.com/column/ubuntu-flask/

環境構築

 $ sudo apt-get update
 $ sudo apt -y install python3-pip libapache2-mod-wsgi-py3
 $ sudo a2enmod wsgi
 $ sudo pip3 install flask

補足

Web Server Gateway Interface (WSGI; ウィスキー) は、プログラミング言語Pythonにおいて、WebサーバとWebアプリケーション(あるいはWebアプリケーションフレームワーク)を接続するための、標準化されたインタフェース定義である。また、WSGIから着想を得て、他の言語でも同様のインタフェースが作られた。 引用:Wikipedia「Web Server Gateway Interface」2021年3月20日 (土) 12:13版

Apache上の準備

ディレクトリの作成

今回は /var/www/app/ に作業ファイルを配置することとします。 権限の設定についてはこちらを参照(www-dataに自身を追加しているのであれば対策不要)

https://miyayu.jp/blog/qiita-77976d7ece0ecfb35157/

 $ sudo mkdir /var/www/app
 $ sudo chown -R www-data:www-data /var/www/app
 $ sudo chmod 775 -R /var/www/app

VirtualHostの設定

CloudflareのSSLを登録する方法についてはこちらの記事にて詳しく解説しています。(無料)

https://miyayu.jp/blog/qiita-2ab2b86f9fa4e24a0a8b/#cloudflare%E3%81%AEssl%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B

 $ sudo vim /etc/apache2/sites-available/ドメイン名.conf

次の内容でファイルを作成します

ドメイン名.conf

<VirtualHost *:80>
    ServerAdmin 管理者メールアドレス
    ServerName ドメイン
    ServerAlias www.ドメイン
    DocumentRoot /var/www/app/
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    RewriteEngine on
    RewriteCond %{SERVER_NAME} =ドメイン [OR]
    RewriteCond %{SERVER_NAME} =www.ドメイン
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

</VirtualHost>

<VirtualHost *:443>

    ServerAdmin 管理者メールアドレス
    ServerName ドメイン
    ServerAlias www.ドメイン
    DocumentRoot /var/www/app/
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    SSLEngine on
    SSLCertificateFile pemの場所
    SSLCertificateKeyFile keyの場所

    WSGIDaemonProcess app2 user=www-data group=www-data threads=5
    WSGIScriptAlias / /var/www/app/project/index.wsgi
</VirtualHost>

ファイルを保存したら次のコマンドを実行します

 $ sudo a2ensite ドメイン名.conf
 $ sudo systemctl restart apache2

その後、自分のドメインにアクセスして404が表示されたら成功です。

ファイルの設置

そうしましたら、こちらを参考にファイルを置いていきます。

 $ cd /var/www/app/
 $ mkdir ./{project,project/app,project/app/controller}

index.wsgi

 $ vim project/index.wsgi

index.wsgi

import sys, os
sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))
from app.controller.index import app as application

index.py

 $ vim project/app/controller/index.py

index.py

from flask import Flask

app = Flask(__name__)

@app.route("/", methods=['GET'])
def index():
    return "Hello World!"

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

完成系

project
|-- app
|   `-- controller
|       `-- index.py
`-- index.wsgi

その後、自分のサイトにアクセスしてHello world!と表示されれば成功です。 ちなみに、エラーログはsudo cat /var/log/apache2/error.logにて確認できます。

← 記録一覧へ戻る