備忘録:PythonのFlaskと.venv

Python Flask環境の構築とサーバーへのデプロイ(Windows版)

ここでは、Windows環境でPython Flaskアプリをローカル開発し、その後GitHub経由でサーバーへデプロイする流れを整理します。


1. ローカル開発環境を作成する

作業フォルダを作成する

PowerShellを開き、任意の場所にプロジェクト用フォルダを作成します。

mkdir my-flask-app
cd my-flask-app

Python仮想環境を作成する

Pythonがインストールされているか確認しよう

FlaskはPythonで動作するWebフレームワークです。
そのため、まずはWindowsにPythonがインストールされているか確認します。

PowerShellを開き、以下のコマンドを実行します。

python --version

または、環境によっては次のコマンドで確認できます。

py --version

以下のようにバージョンが表示されれば、Pythonはインストール済みです。

Python 3.12.0

もしバージョンが表示されず、エラーになる場合は、Pythonがインストールされていないか、環境変数PATHが設定されていない可能性があります。

その場合は、Python公式サイトからWindows版Pythonをインストールします。
インストール時には、必ず以下の項目にチェックを入れます。

Add python.exe to PATH

インストール後、PowerShellを開き直して、もう一度確認します。

python --version

Pythonのバージョンが表示されれば準備完了です。

FlaskなどのPythonライブラリをプロジェクト単位で管理するため、.venv を作成します。

python -m venv .venv

仮想環境を有効化します。

.venv\Scripts\activate

有効化されると、ターミナルの先頭に以下のように表示されます。

(.venv) PS C:\path\to\my-flask-app>

Flaskをインストールする

pip install flask

インストール確認:

pip list

2. Flaskアプリを作成する

app.py を作成します。

notepad app.py

以下の内容を記述します。

from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "Hello Flask!"

if __name__ == "__main__":
    app.run(debug=True)

3. ローカルで起動確認する

python app.py

ブラウザで以下へアクセスします。

http://127.0.0.1:5000

Hello Flask! と表示されれば成功です。

終了する場合は、PowerShellで以下を押します。

Ctrl + C

4. requirements.txt を作成する

現在のPythonライブラリ構成を保存します。

pip freeze > requirements.txt

内容を確認します。

type requirements.txt

5. GitHubへプッシュする

Gitを初期化します。

git init

.venv はGitHubへアップロードしないため、.gitignore を作成します。

notepad .gitignore

以下を記述します。

.venv/
__pycache__/
*.pyc
.env

ファイルを追加してコミットします。

git add .
git commit -m "Initial Flask app"

GitHubリポジトリを登録します。

git branch -M main
git remote add origin <GitHubリポジトリURL>
git push -u origin main

6. サーバーへSSH接続する

SSH設定をしている場合:

ssh myserver

通常の接続例:

ssh -i ~/.ssh/my-key-pair.pem ubuntu@<サーバーIPアドレス>

7. サーバー側でソースコードを取得する

初回:

git clone <GitHubリポジトリURL>
cd my-flask-app

更新時:

cd my-flask-app
git pull origin main

8. サーバー側でDockerfileを用意する

サーバーでもDockerでFlaskアプリを動かす場合、プロジェクト直下に Dockerfile を作成します。

nano Dockerfile

以下を記述します。

FROM python:3.12-slim

WORKDIR /app

COPY requirements.txt .

RUN pip install --no-cache-dir -r requirements.txt

COPY . .

EXPOSE 5000

CMD ["python", "app.py"]

9. compose.yml を作成する

nano compose.yml

以下を記述します。

services:
  flask-app:
    build: .
    container_name: flask-app
    ports:
      - "5000:5000"
    restart: always

10. Flaskの起動設定を修正する

Dockerコンテナ内で外部からアクセスできるように、app.py の起動部分を修正します。

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

修正後、GitHubへ反映します。

ローカル側:

git add .
git commit -m "Update Flask host setting"
git push

サーバー側:

git pull origin main

11. Docker Composeで起動する

サーバー側で実行します。

docker compose up -d --build

起動確認:

docker ps

ログ確認:

docker compose logs -f

12. ブラウザで確認する

サーバーIPアドレスを指定してアクセスします。

http://<サーバーIPアドレス>:5000

Flaskアプリの画面が表示されれば、サーバー上での起動は成功です。


13. Nginxでリバースプロキシを設定する

本番運用では、直接 :5000 へアクセスするのではなく、Nginxを使って通常のWebアクセスとして公開します。

sudo apt update
sudo apt install nginx -y

設定ファイルを作成します。

sudo nano /etc/nginx/sites-available/flask-app

以下を記述します。

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://localhost:5000;
        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 ln -s /etc/nginx/sites-available/flask-app /etc/nginx/sites-enabled/

設定確認:

sudo nginx -t

Nginxを再読み込みします。

sudo systemctl reload nginx

14. HTTPS化する

Certbotを使ってSSL証明書を取得します。

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.com

設定後、以下でアクセスできることを確認します。

https://example.com

15. 更新時の流れ

ローカルで修正後:

git add .
git commit -m "Update Flask app"
git push

サーバーで反映:

ssh myserver
cd my-flask-app
git pull origin main
docker compose up -d --build

ログ確認:

docker compose logs -f

まとめ

WindowsでFlaskアプリを開発する場合、ローカルでは .venv を使ってPython環境を分離し、Flaskをインストールして動作確認します。

サーバーへデプロイする際は、GitHub経由でソースコードを取得し、DockerfileとDocker Composeを使ってコンテナとして起動します。

この構成により、ローカル開発環境とサーバー実行環境を分けつつ、必要なライブラリは requirements.txt で管理できるため、再現性の高いデプロイが可能になります。

コメント