HOME > 技術ドキュメント > Python + Flask Web アプリ入門(Ubuntu 24.04 LTS)
Python + Flask Web アプリ入門(Ubuntu 24.04 LTS)
Flask は Python の軽量 Web フレームワークです。シンプルな構造で小〜中規模の Web アプリや REST API の開発に適しています。
本記事では Ubuntu 24.04 LTS(Python 3.12 標準搭載)で Flask アプリを開発し、
Gunicorn で本番起動、systemd でデーモン化、Nginx でリバースプロキシする手順を解説します。
1. Python の確認
python3 --version # Python 3.12.x(Ubuntu 24.04 は標準搭載) # pip が入っていない場合 sudo apt install -y python3-pip python3-venv
2. venv による仮想環境
Python のパッケージはプロジェクトごとに仮想環境(venv)を分離して管理します。 システムの Python に直接インストールすることは推奨されません。
# プロジェクトディレクトリを作成 mkdir ~/myapp && cd ~/myapp # 仮想環境を作成 python3 -m venv venv # 仮想環境を有効化 source venv/bin/activate # プロンプトが (venv) になる # 仮想環境を無効化 deactivate
3. Flask と Gunicorn のインストール
source venv/bin/activate pip install flask gunicorn # インストール済みパッケージを requirements.txt に保存 pip freeze > requirements.txt # 別環境で再現するとき pip install -r requirements.txt
4. Flask アプリの最小構成
# app.py
from flask import Flask, render_template, request, jsonify
import os
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/api/hello')
def hello():
name = request.args.get('name', 'World')
return jsonify({'message': f'Hello, {name}!'})
if __name__ == '__main__':
app.run(debug=True)
5. Jinja2 テンプレート
<!-- templates/index.html -->
<!DOCTYPE html>
<html>
<head><title>My Flask App</title></head>
<body>
<h1>{{ title }}</h1>
{% for item in items %}
<p>{{ item }}</p>
{% endfor %}
</body>
</html>
# ルートでテンプレート変数を渡す
@app.route('/list')
def list_view():
return render_template('index.html', title='一覧', items=['A', 'B', 'C'])
6. フォーム処理
@app.route('/contact', methods=['GET', 'POST'])
def contact():
if request.method == 'POST':
name = request.form.get('name', '')
message = request.form.get('message', '')
# バリデーションや DB 保存処理
return jsonify({'status': 'ok', 'name': name})
return render_template('contact.html')
7. 環境変数の活用
import os
DATABASE_URL = os.environ.get('DATABASE_URL', 'sqlite:///default.db')
SECRET_KEY = os.environ.get('SECRET_KEY', 'dev-secret-change-in-production')
DEBUG = os.environ.get('FLASK_DEBUG', 'false').lower() == 'true'
app.config['SECRET_KEY'] = SECRET_KEY
8. Gunicorn で本番起動
Flask の開発サーバー(flask run)は本番環境での使用は非推奨です。Gunicorn を使います。
# -w ワーカー数(CPU コア数 × 2 + 1 が目安) # -b バインドアドレス:ポート gunicorn -w 4 -b 127.0.0.1:8000 app:app # アクセスログを出力 gunicorn -w 4 -b 127.0.0.1:8000 --access-logfile - app:app
9. systemd サービス化
# /etc/systemd/system/myapp.service [Unit] Description=Flask App (Gunicorn) After=network.target [Service] User=ubuntu WorkingDirectory=/home/ubuntu/myapp Environment="PATH=/home/ubuntu/myapp/venv/bin" ExecStart=/home/ubuntu/myapp/venv/bin/gunicorn -w 4 -b 127.0.0.1:8000 app:app Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target
sudo systemctl daemon-reload sudo systemctl enable --now myapp sudo systemctl status myapp
10. Nginx リバースプロキシ設定
# /etc/nginx/conf.d/myapp.conf
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
sudo nginx -t && sudo systemctl reload nginx
関連ドキュメント
Nginx SSL/TLS 設定(Ubuntu 24.04 LTS) — HTTPS 設定とリバースプロキシ
Node.js + Express Web アプリ入門(Ubuntu 24.04 LTS) — Node.js での同様の構成
systemd サービス・タイマー設定入門(Ubuntu 24.04 LTS) — サービス管理の詳細
Flask アプリを HTTPS で公開するには
Nginx がリバースプロキシとして HTTPS を終端する構成では、Nginx に SSL証明書を設定することで
Flask アプリ全体が HTTPS 化されます。Flask アプリ自体は HTTP のままで動作します。
エスロジカルではデジサート・サイバートラストの正規取扱代理店として、
2009年から16年以上、RapidSSL 3,960円/1年(税込)〜でSSL証明書を販売しています。審査サポート・インストール代行も対応しています。
SSL証明書の購入はこちら / SSL証明書とは? / インストール代行サービス
