1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Posted at

#前提環境
Apache 2.4.41
Python 3.8.10
Ubuntu 20.04.3
#参考

#環境構築

 $ 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に自身を追加しているのであれば対策不要)

 $ 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を登録する方法についてはこちらの記事にて詳しく解説しています。(無料)

 $ 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にて確認できます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?