LinuxでFlaskアプリを動かす入門|PythonウェブアプリをWSL2やVPSにデプロイする方法

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)【Linux入門】初心者のための基礎知識・講座 > LinuxでFlaskアプリを動かす入門|PythonウェブアプリをWSL2やVPSにデプロイする方法
「PythonでWebアプリを作ってLinuxで動かしてみたい」
そう思っていても、いざターミナルに向かうと何から始めればいいのか迷う人は多いです。

この記事では、PythonのWebフレームワーク「Flask」をWSL2(Ubuntu)またはVPSにインストールして、実際にブラウザから確認できる状態にするまでの手順を解説します。gunicornとNginxを組み合わせた本番公開の方法まで、コマンドの実行結果つきで説明します。

この記事のポイント

・venvで仮想環境を作りFlaskをインストールして最初のアプリを動かせる
・flask runで開発サーバーを起動してブラウザからアクセスする方法がわかる
・gunicorn + Nginxで本番公開する基本的な構成が理解できる
・「Address already in use」などよくあるエラーの対処法も解説する


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

なぜLinuxでWebアプリを動かす練習が役に立つのか

PythonでWebアプリを書くだけなら、ローカルのWindowsでも動きます。でも、実際の現場でWebサービスを公開するのはLinuxのサーバー上がほとんどです。

WSL2やVPSでFlaskを動かす練習をしておくと、次のことが自然に身につきます。

・Linuxのファイル操作やパーミッションの感覚
・仮想環境(venv)とパッケージ管理の考え方
・プロセスの起動・停止とポートの使われ方
・gunicornやNginxというサーバーソフトの役割

「Flaskが動いた」という達成感が、Linuxを使い続けるモチベーションになります。コマンドを打ちながら体で覚えるのが一番の近道です。

WSL2(Ubuntu)にFlaskをインストールする

ここではWSL2のUbuntu 24.04 LTSを前提に説明します。VPS(ConoHa・さくら等のUbuntu 22.04/24.04)でも同じ手順で動きます。

1. Pythonのバージョンを確認する

Ubuntu 24.04にはPython 3が標準で入っています。まずバージョンを確認しましょう。

$ python3 --version Python 3.12.3

「command not found」が出た場合は sudo apt install python3 でインストールできます。

2. venvで仮想環境を作る

Flaskは仮想環境(venv)内にインストールするのが鉄則です。システム全体のPythonに直接インストールすると、別のプロジェクトと依存パッケージが衝突する原因になります。

# アプリ用のディレクトリを作成 $ mkdir myapp && cd myapp # 仮想環境を作成(venvという名前のディレクトリに作られる) $ python3 -m venv venv # 仮想環境を有効化(有効化するとプロンプトの先頭に(venv)が付く) $ source venv/bin/activate (venv) $

(venv) とプロンプトに表示されれば有効化成功です。以降のコマンドは、この仮想環境内で実行されます。

3. Flaskをインストールする

(venv) $ pip install flask Collecting flask Downloading flask-3.1.0-py3-none-any.whl.metadata (2.9 kB) Collecting Werkzeug>=3.1 (from flask) ...(中略)... Successfully installed Jinja2-3.1.4 MarkupSafe-2.1.5 Werkzeug-3.1.3 blinker-1.8.2 click-8.1.7 flask-3.1.0 itsdangerous-2.2.0

「Successfully installed flask-3.x.x」という行が表示されれば成功です。

最初のFlaskアプリを作って動かす

1. app.pyを作成する

テキストエディタ(nanoやvim)で app.py を作ります。

(venv) $ nano app.py

以下の内容を貼り付けて、Ctrl+Oで保存、Ctrl+Xで終了します。

from flask import Flask app = Flask(__name__) @app.route("/") def index(): return "Hello, Linux!" if __name__ == "__main__": app.run(debug=True)

2. Flask開発サーバーを起動する

(venv) $ flask run * Debug mode: off WARNING: This is a development server. Do not use it in a production deployment. * Running on http://127.0.0.1:5000 Press CTRL+C to quit

http://127.0.0.1:5000 でリッスンしているのが確認できます。

3. ブラウザで確認する(WSL2の場合)

WSL2ではWindowsのブラウザから http://localhost:5000 にアクセスできます。「Hello, Linux!」と表示されれば成功です。

ターミナルには次のようなアクセスログが流れます。

127.0.0.1 - - [23/Aug/2026 09:14:32] "GET / HTTP/1.1" 200 -

停止するにはCtrl+Cを押します。

VPSでFlaskアプリを本番公開する

開発サーバー(flask run)は本番環境に向いていません。本番では「gunicorn(ガニコーン)」というWSGIサーバーを使い、Nginxをリバースプロキシとして前段に置くのが定番の構成です。

1. gunicornをインストールして起動する

(venv) $ pip install gunicorn # app.pyのappオブジェクトをgunicornで起動(4プロセス) (venv) $ gunicorn -w 4 -b 127.0.0.1:8000 app:app [2026-08-23 09:20:10 +0900] [12345] [INFO] Starting gunicorn 23.0.0 [2026-08-23 09:20:10 +0900] [12345] [INFO] Listening at: http://127.0.0.1:8000 (12345) [2026-08-23 09:20:10 +0900] [12345] [INFO] Worker booting (pid: 12346) [2026-08-23 09:20:10 +0900] [12345] [INFO] Worker booting (pid: 12347)

-w 4 はワーカープロセス数です。CPUコア数 × 2 + 1 が目安とされています。

2. Nginxをリバースプロキシとして設定する

Nginxのインストールは sudo apt install nginx で行います。設定ファイル(/etc/nginx/sites-available/myapp)に以下を記述します。

server { listen 80; server_name example.com; # 自分のドメインまたはIPアドレスに変更 location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }

設定を有効化してNginxを再起動します。

# シンボリックリンクを作成して設定を有効化 $ sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/ # 設定ファイルの文法チェック $ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful # Nginxを再起動 $ sudo systemctl restart nginx

ブラウザでサーバーのIPアドレス(または設定したドメイン)にアクセスすると、gunicornを経由してFlaskアプリが応答します。

よくあるエラーと対処法

「Address already in use」が出た場合

ポート5000や8000がすでに使われているときに出るエラーです。

# ポート5000を使っているプロセスを調べる $ ss -tlnp | grep 5000 LISTEN 0 128 127.0.0.1:5000 0.0.0.0:* users:(("python3",pid=99999,fd=5)) # プロセスを終了する $ kill 99999

「ModuleNotFoundError: No module named 'flask'」が出た場合

仮想環境が有効化されていない状態でflaskを実行しようとしたときに起こります。

# myappディレクトリに移動してから仮想環境を有効化 $ cd myapp $ source venv/bin/activate (venv) $ flask run

プロンプトの先頭に (venv) が付いていることを確認してからコマンドを実行してください。

VPSでflask runにWSL2の外からアクセスできない場合

デフォルトでは 127.0.0.1(ローカルループバック)でしかリッスンしていません。VPSで外部から確認したい場合は起動時に --host 0.0.0.0 を付けます(開発・テスト目的のみ)。

# 開発・テスト用のみ。本番ではgunicorn + Nginxを使うこと (venv) $ flask run --host 0.0.0.0 * Running on all addresses (0.0.0.0) * Running on http://127.0.0.1:5000 * Running on http://203.0.113.10:5000

本記事のまとめ

やること コマンド
仮想環境を作成する python3 -m venv venv
仮想環境を有効化する source venv/bin/activate
Flaskをインストールする pip install flask
開発サーバーを起動する flask run
gunicornで本番起動する gunicorn -w 4 -b 127.0.0.1:8000 app:app
使用中のポートを調べる ss -tlnp | grep 5000
Nginxの設定テストをする sudo nginx -t
Flaskが動くようになると、次はデータベース連携や認証、Let's EncryptでのHTTPS化など、Webサービスに必要な要素を一つずつ追加していけます。まずはWSL2でHello Worldを表示させることから始めてみてください。

関連記事 ~ ここから実践的なスキルを身につける

FlaskをLinuxで動かすには、周辺のLinuxスキルが必ず役に立ちます。以下の記事でそれぞれのテーマを深掘りしてみてください。

シェルスクリプト:set -xコマンドでシェルスクリプトをデバッグする方法 ~ gunicorn起動スクリプトの問題を追いやすくなる
セキュリティ:firewall-cmdコマンドでポートを開放・管理する方法 ~ VPSでFlaskを公開する前にポートを正しく制御する
サーバー構築:nmcliコマンドでネットワーク接続を設定する方法 ~ VPSのネットワーク設定を確実に理解する
トラブルシューティング:straceコマンドでプロセスのシステムコールを追跡する方法 ~ gunicornが起動しない原因をシステムコールレベルで調べる
ネットワーク:ssコマンドでソケット情報を確認する方法 ~ Flaskが正しいポートでリッスンしているか確認する
ディスク操作:duコマンドでディレクトリの使用量を調べる方法 ~ アプリのログやデータが増えたときのディスク管理
Linux Tips:loggerコマンドでシステムログに記録する方法 ~ Flaskアプリのエラーをsyslogに残して追跡する
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、
無料の「Linuxサーバー構築入門マニュアル(図解60ページ)」をプレゼントしています。
FlaskやNginxを使いこなしながら、実務で通用するサーバー管理のスキルを体系的に身につけたい方は、ぜひ受け取ってみてください。
無料マニュアルを受け取る >>

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。