株式会社エスロジカル
株式会社エスロジカル
SSL証明書(DV、OV、EV)、セキュリティ、Web開発、Linux開発、Go言語

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 でリバースプロキシする手順を解説します。


python3 --version
# Python 3.12.x(Ubuntu 24.04 は標準搭載)

# pip が入っていない場合
sudo apt install -y python3-pip python3-venv

Python のパッケージはプロジェクトごとに仮想環境(venv)を分離して管理します。 システムの Python に直接インストールすることは推奨されません。

# プロジェクトディレクトリを作成
mkdir ~/myapp && cd ~/myapp

# 仮想環境を作成
python3 -m venv venv

# 仮想環境を有効化
source venv/bin/activate
# プロンプトが (venv) になる

# 仮想環境を無効化
deactivate

source venv/bin/activate
pip install flask gunicorn

# インストール済みパッケージを requirements.txt に保存
pip freeze > requirements.txt

# 別環境で再現するとき
pip install -r requirements.txt

# 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)

<!-- 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'])

@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')

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

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

# /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

# /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) — サービス管理の詳細


Nginx がリバースプロキシとして HTTPS を終端する構成では、Nginx に SSL証明書を設定することで Flask アプリ全体が HTTPS 化されます。Flask アプリ自体は HTTP のままで動作します。
エスロジカルではデジサート・サイバートラストの正規取扱代理店として、 2009年から16年以上、RapidSSL 3,960円/1年(税込)〜でSSL証明書を販売しています。審査サポート・インストール代行も対応しています。

SSL証明書の購入はこちら / SSL証明書とは? / インストール代行サービス


← 技術ドキュメント一覧へ戻る