0
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?

FlaskアプリをApacheで動かす

Last updated at Posted at 2025-04-29

1. 概要

仮想マシンでWebサーバを作り、flaskで作ったアプリを動かす。

2. 前提

  • VMwareにAlmaLinuxがインストールされていること

※インストールされていない場合は以下のリンクの手順でインストールしてください。

3. 事前準備

  • VMwareで作成したLAMP_SVの起動
  • TeraTermでLAMP_SVにSSH接続する(見やすい環境で操作したい人向け)
  • rootユーザにログインする

4. 環境構築

4-1. Pythonのインストール

yum update
dnf install python39

python3.9ではなくpython39が正しい。

4-2. pipのインストール

dnf install python3-pip

4-3. 開発ツールのインストール

dnf groupinstall "Development Tools"
dnf install python3-devel
dnf install httpd-devel

4-3. venvの設定

仮想環境を作成

python3 -m venv venv

仮想環境をアクティブにする

source venv/bin/activate

4-4. 各種ライブラリインストール

インストールするライブラリ

  • flask
  • Jinja2
  • SQLAlchemy(使用する方のみ)
pip3 install flask Jinja2 flask-sqlalchemy mod_wsgi

ライブラリがインストールできたか確認する。

pip3 list

仮想環境から抜ける。

deactivate

4-4. Apacheのインストール

dnf install httpd

4-5. wgetのインストール

dnf install wget

4-6. mod_wsgiのインストール

mod_wsgiをソースからダウンロードする。

wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.9.0.tar.gz
tar xzf 4.9.0.tar.gz
cd mod_wsgi-4.9.0
./configure --with-python=/usr/bin/python3
make
make install

pip3でもインストールする。

pip3 install mod_wsgi

4-7. 設定ファイル

ディレクトリを作成する。

mkdir /var/www/practice

Apacheの設定

vi /etc/httpd/conf.d/practice.conf

practice.confの内容
ServerAliasはご自分のLAMP_SVのIPアドレスに

<VirtualHost *:80>
    ServerName localhost
    ServerAlias 192.168.0.23

    WSGIDaemonProcess practice user=apache group=apache threads=5
    WSGIScriptAlias / /var/www/practice/app.wsgi

    <Directory /var/www/practice/flaskr>
        WSGIProcessGroup practice
        WSGIApplicationGroup %{GLOBAL}
        Require all granted
    </Directory>

    ErrorLog /var/log/httpd/practice_error.log
    CustomLog /var/log/httpd/practice_access.log combined
</VirtualHost>

app.wsgiファイルの作成

vi /var/www/practice/app.wsgi

app.wsgiの内容

import sys
import logging
import os
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0, "/var/www/practice/")

from flaskr import app as application

mod_wsgi-expressを使用して、Apacheの設定ファイルを自動生成する。

mod_wsgi-express install-module > /etc/httpd/conf.modules.d/02-wsgi.conf

Apacheを起動する。

systemctl start httpd

ファイアウォールを停止させる。

systemctl stop firewalld

SELinuxを無効化する。
/etc/selinux/configファイルを開く

vi /etc/selinux/config

SELINUXの行を以下のように変更し上書き保存する。

SELINUX=disabled

システムを再起動する。

reboot

再起動後、SELinuxの状態を確認する。

getenforce

Disabledと表示されれば成功。

5. Visual Stdio CodeからSSH接続する

これからPythonやhtmlなどのコーディングになる。
コーディングはVisual Stdio Codeで行うことを推奨する。
接続方法は以下のリンクから。

6. コーディング

コーディングの前にflaskをインストールする。

pip3 install flask

/var/www/practiceに以下のディレクトリ構造でディレクトリやファイルを作成する。

└── flaskr/
    ├── templates/
    │   └── index.html
    ├── __init__.py
    ├── main.py
    └── db.py

各ファイルの内容は以下の通り。

__init__.py
from flask import Flask
app = Flask(__name__)
import flaskr.main
main.py
from flaskr import app
from flask import render_template

@app.route('/')
def index():
    return render_template(
        'index.html'
    )
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>テスト</title>
</head>
<body>
    <p>テストだよ!</p>
</body>
</html>

db.pyには何も記述しなくて良い。いずれ使用することになる。

apacheを再起動する

systemctl restart httpd

ブラウザにサーバのIPアドレスを入力し、以下の様に表示されたら成功。
index_html.png

7. セッションを使用する場合

localhostでは__init__.pyに以下の様に記述していたかと思う。

__init__.py
from flask import Flask
app = Flask(__name__)

import flaskr.main

import os
app.secret_key = os.urandom(24)

from datetime import timedelta
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hours=1)

しかし、Apacheの場合はsecret_keyを固定値にしないとすぐにセッションが切れてしまう為、app.wsgi__init__.pyを以下の様にする必要がある。

app.wsgi
import sys
import logging
import os
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0, "/var/www/travel_plan/")

# 以下を追記
os.environ['SECRET_KEY'] = "任意の値を設定"

from flaskr import app as application
__init__.py
from flask import Flask
app = Flask(__name__)

import flaskr.main

import os
# app.secret_key = os.urandom(24)を以下に変更
app.secret_key = os.getenv('SECRET_KEY')

from datetime import timedelta
# 以下を追記
app.config['SESSION_COOKIE_HTTPONLY'] = True
app.config['SESSION_COOKIE_SAMESITE'] = 'Lax'
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hours=1)

8. おまけ

プログラムをGitで管理したい方は以下のリンクから設定してください。

また次回以降、起動手順やエラーログの確認方法、データベースの使用方法については以下のリンクをご覧ください。

参考記事

VMwareにAlma Linuxをインストールし、Flaskアプリをデプロイ(後編)

Flask + mod_wsgi + Apache でWEBアプリを作る(HelloWorld編)

0
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
0
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?