読者です 読者をやめる 読者になる 読者になる

UbuntuのApacheでFlaskを用いてPython3でWebアプリケーションを作る

今PHPで作ってるCHUNITHM Rate CalculatorをPython3で作ってみようとしたときの備忘録

環境

  • Ubuntu-Server:16.04(64bit)
  • Python:3.5.2

前準備

$ sudo apt update
$ sudo apt upgrade

Flaskのインストール

$ sudo apt install python3-dev python3-pip
$ sudo pip3 install Flask

Flaskのインストール中に

locale.Error: unsupported locale setting

こんなエラーが出たら、

$ export LC_ALL=C

を打ってもう一度実行してみる

Apache2とApacheでPython3を使えるようにするmodのインストール

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

ファイル構成

root@Ubuntu:/var/www$ tree -l 
.                               
└── flask                    
    ├── flask_script.py    
    └── flask_app.wsgi           
                             
1 directories, 2 files          

アプリケーションの作成

#flask_script.py
from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

.wsgiファイルの作成

flask-mod_wsgi

#flask_app.wsgi
import os,sys

sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))

from flask_script import app as application

Apacheの設定

$ sudo vim /etc/apache2/sites-available/flask.conf

Flaskの設定ファイルつくる

#flask.conf
<VirtualHost *:80>
    ServerName localhost

    WSGIDaemonProcess flask_app user=www-data group=www-data threads=5
    WSGIScriptAlias / /var/www/flask/flask_app.wsgi

    <Directory /var/www/flask>
        WSGIProcessGroup flask_app
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>

このように設定する。 この時アプリケーションのディレクトリ以下が、www-dataがオーナーになるように所有者を変えておく。

$ sudo chown -R www-data:www-data /var/www/flask/
$ sudo ln -s /etc/apache2/sites-available/flask.conf /etc/apache2/sites-enabled/flask.conf   # Apacheに読み込んでもらうために、シンボリックリンクを作成する。
$ sudo rm /etc/apache2/sites-enabled/000-default.conf   # デフォルトの設定ファイルを読み込まれないようにする

Apacheを再起動

$ sudo apachectl restart

もし、再起動の時に

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using localhost Set the 'ServerName' directive globally to suppress this message

というエラーが発生したら、

$ sudo echo ServerName $HOSTNAME > /etc/apache2/conf-available/fqdn.conf
$ sudo a2enconf fqdn

と打ち込んで、もう一度再起動する

$ sudo apachectl restart

エラーが出なかったら、http://localhostにアクセスしてみてHello World!

と表示されれば成功

ファイルを変更した際はApacheを再起動しないといけないよう?