カテゴリ: Flask 更新日: 2025/11/24

Flaskアプリをサブドメインにデプロイする方法を初心者向けに解説!

Flaskアプリをサブドメインにデプロイする方法をわかりやすく解説
Flaskアプリをサブドメインにデプロイする方法をわかりやすく解説

先生と生徒の会話形式で理解しよう

生徒

「Flaskアプリを自分のドメインのサブドメイン(例:app.example.com)で公開したいです。どうすればいいですか?」

先生

「いい視点ですね。サブドメインで公開すると本番環境らしく見えて、アクセスしやすくなります。DNS設定からサーバー設定まで順を追って説明します。」

生徒

「DNSやnginxがよくわからないんですが…」

先生

「大丈夫です。DNSもnginxもインターネットの住所や案内板のようなものですので、身近な例に置きかえてわかりやすく解説していきます!」

1. サブドメインとは?

1. サブドメインとは?
1. サブドメインとは?

「サブドメイン」とは、あなたのドメイン名(例:example.com)の前に別の名前を足したものです。app.example.comのように、アプリ専用の住所を作るイメージです。

それによって、メインサイトとアプリを別々に管理できて便利です。

2. DNS設定でサブドメインの住所を作成

2. DNS設定でサブドメインの住所を作成
2. DNS設定でサブドメインの住所を作成

DNSとは「ドメインネームシステム」の略で、インターネットの住所録のような仕組みです。

ドメイン会社の「DNS管理画面」に入り、次のようにレコードを追加します。


Type: A
Host: app
Value: 123.45.67.89

これでapp.example.comという住所が、あなたのサーバー(IPアドレス)につながるようになります。

3. VPSまたはVPS環境を準備しよう

3. VPSまたはVPS環境を準備しよう
3. VPSまたはVPS環境を準備しよう

サブドメインを使うには、インターネット上のサーバー(VPSなど)が必要です。これは「自分専用のパソコン」を借りるようなものです。

OSは多くの場合Linux(例:Ubuntu)が使われます。

4. nginxでサブドメインに対応する設定をする

4. nginxでサブドメインに対応する設定をする
4. nginxでサブドメインに対応する設定をする

nginx(エンジンエックス)は、インターネットの「案内係」の役割をするソフトです。サブドメイン向けの設定は、案内表示の内容を変えるイメージです。


server {
    listen 80;
    server_name app.example.com;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

この設定で、nginxがapp.example.comへのアクセスをFlaskアプリに渡してくれます。

5. Flaskアプリをgunicornで起動

5. Flaskアプリをgunicornで起動
5. Flaskアプリをgunicornで起動

Flask本体ではなく、gunicorn(ガンコーン)という本番用の実行環境を使います。


pip install gunicorn
gunicorn -w 4 -b 127.0.0.1:8000 app:app

これでFlaskアプリがローカルのポート8000で動きます。

6. nginxの設定を反映して再起動

6. nginxの設定を反映して再起動
6. nginxの設定を反映して再起動

nginxの設定を有効にしたうえで、サーバーを再起動します。


sudo ln -s /etc/nginx/sites-available/app /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

nginx -tは設定ミスがないか確認するチェックです。

7. HTTPS化して安全に通信(Let’s Encrypt)

7. HTTPS化して安全に通信(Let’s Encrypt)
7. HTTPS化して安全に通信(Let’s Encrypt)

インターネットでは、通信を暗号化するためにHTTPSを使います。Let’s Encrypt(レッツ・エンクリプト)は無料で証明書をもらえるサービスです。


sudo certbot --nginx -d app.example.com

これでSSL証明書が自動的に設定され、訪問者の通信が安全になります。

8. 動作確認はブラウザで

8. 動作確認はブラウザで
8. 動作確認はブラウザで

設定がすべて終わったら、ブラウザでhttps://app.example.comにアクセスして確認してみましょう。

安全な鍵マーク(��)が表示されればHTTPSの設定も成功です。

9. 常時稼働のためにsystemdでサービス化

9. 常時稼働のためにsystemdでサービス化
9. 常時稼働のためにsystemdでサービス化

サーバーを再起動しても自動起動させるには、systemdという「常に動かしておく仕組み」を使います。


sudo tee /etc/systemd/system/app.service <<EOF
[Unit]
Description=My Flask App

[Service]
User=www-data
ExecStart=/usr/local/bin/gunicorn -w 4 -b 127.0.0.1:8000 app:app

[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable app
sudo systemctl start app

これでサーバーを再起動してもFlaskアプリが自動的に立ち上がります。

10. トラブルシューティングのポイント

10. トラブルシューティングのポイント
10. トラブルシューティングのポイント

もしアクセスできない場合は、まずDNS設定が正しいか確認してください。反映には数分~数時間かかることがあります。

次にnginxの設定エラーやgunicornが起動しているかもsudo systemctl status appsudo tail -f /var/log/nginx/error.logでチェックしましょう。

まとめ

まとめ
まとめ

Flaskアプリをサブドメインにデプロイする流れを振り返ると、サブドメインを使った公開は「Webサービスを本格的に運用するうえで欠かせない重要な仕組み」であることが自然と理解できます。サブドメインを使うことで、メインのWebサイトとアプリを分けて管理でき、ユーザーにとっても利用しやすいURL構造になります。特に「app.example.com」のように目的別のアドレスを切り分ける方法は、規模が大きくなるほど効果が大きく、企業サイトや個人開発でも広く採用される構成です。 まず、DNS設定では「ドメイン名をサーバーのIPアドレスに結びつける」という基本的な仕組みを学ぶことができました。DNSはインターネットの住所録のような役割を持ち、Aレコードを設定することでサブドメインとVPSがつながります。この設定が反映されるには少し時間がかかることもあり、これを理解しておくと余計な不安を抱えずに作業が進められます。 次に、VPS環境でのnginx設定では、サブドメインへのアクセスを正しくFlaskアプリに案内するための「案内板」の役割が重要になりました。Flaskアプリは直接外部に公開するのではなく、nginxがリクエストを受け取り、gunicornへ受け渡す形が一般的です。この構成を理解することで、Webアプリ開発の仕組み全体がより具体的に見えてきます。本番用のアプリケーションサーバーであるgunicornを使う理由や、Flask標準サーバーが本番向きではない理由も自然に理解できるようになります。 そのうえで、nginxの設定ファイルを適切な場所へ配置し、設定内容が正しいかどうかをnginx -tでチェックしてから反映することで、安全かつ確実にWebサーバーを動作させられるようになります。さらに、Let’s Encryptを使ったSSL設定では、無料で安全なHTTPS通信を実現でき、ユーザーの情報を保護する大切な仕組みを習得できます。ブラウザの鍵マークが表示されたときの安心感は、多くの開発者が達成感を得る瞬間でもあります。 また、systemdを使った常時稼働の設定は、サーバー運用では欠かせない項目です。サーバーが再起動しても自動でアプリが立ち上がることで、より安定的で実用的なサービス提供が可能になります。特に本番運用では「アプリが止まらない仕組み」を整えることが非常に重要であり、systemdの仕組みを理解することは大きなステップです。 以下には、今回のポイントを再確認できるサンプル構成を掲載しています。実際の設定作業を行う際の参考にして、サブドメインで公開されるFlaskアプリの仕組みをしっかりと身につけてください。

サブドメイン対応nginx設定(まとめ用サンプル)


server {
    listen 80;
    server_name app.example.com;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

gunicorn起動例


gunicorn -w 4 -b 127.0.0.1:8000 app:app

systemdサービスファイル例


[Unit]
Description=Flask Subdomain App

[Service]
User=www-data
ExecStart=/usr/local/bin/gunicorn -w 4 -b 127.0.0.1:8000 app:app
Restart=always

[Install]
WantedBy=multi-user.target

サブドメインにFlaskアプリをデプロイするという作業は、一見複雑に感じられますが、一つずつ整理しながら進めれば確実に成功できます。DNSの設定、nginxの案内役としての働き、gunicornの本番アプリケーションサーバーとしての重要性、さらにHTTPS化による安全性向上など、実践的で役立つ知識が一通り身につきました。この内容を理解しておけば、今後サブドメインを増やしたり、複数のサービスを運用したりするときにも応用が利きます。 自分のアプリが https://app.example.com のようなきれいなURLで公開されることは、開発者として大きな達成感につながりますし、ユーザーにとっても分かりやすい導線となります。今回学んだ内容を活かして、より高度なWebアプリ運用にも挑戦してみてください。

先生と生徒の振り返り会話

生徒

「サブドメインで公開する方法がよく分かりました!DNSやnginxの役割も、例え話で聞いたらすごく理解しやすかったです。」

先生

「それは良かったです。インターネットの仕組みは抽象的に見えがちですが、実際に手を動かすと理解が深まりますよ。サブドメインを使った公開は本番運用の基本ですから、ぜひ活かしてくださいね。」

生徒

「gunicornやsystemdの必要性も納得できました。本番環境は手軽に動かせるだけじゃなく、安定して動く仕組みが大切なんですね!」

先生

「まさにその通りです。本番環境の安定運用ができるようになれば、Flaskに限らず他のWebアプリでも応用できる知識になります。今後はSSLやロードバランシングなども学んでみるとさらに理解が深まりますよ。」

生徒

「はい!これからもサブドメイン運用の仕組みをしっかり練習して、もっと使いこなせるようになりたいです!」

カテゴリの一覧へ
新着記事
New1
Flask
Flaskでデータベースエラーを処理する方法!初心者にもわかる例外の使い方
New2
Flask
FlaskでリダイレクトやURL生成を行う方法!便利な関数の使い方を解説
New3
Flask
FlaskでPOSTリクエストを受け取る方法!初心者でもわかるJSONデータの受け取り方
New4
Flask
Flask‑Mailの使い方!アプリからメールを送信する基本方法を解説
人気記事
No.1
Java&Spring記事人気No1
Django
Django環境構築の全手順を完全解説!初心者でも迷わないPython・Djangoセットアップガイド
No.2
Java&Spring記事人気No2
Django
DjangoとFlaskの違いを完全比較!初心者でもわかるPythonフレームワーク入門
No.3
Java&Spring記事人気No3
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.4
Java&Spring記事人気No4
Python
Pythonでリストをコピーする方法!copy()・スライス・list()の使い方を比較
No.5
Java&Spring記事人気No5
Flask
FlaskアプリをNginx + Gunicornで本番運用する方法!初心者でもわかるデプロイ構成の基本
No.6
Java&Spring記事人気No6
Python
PythonでHello Worldを表示するには?初心者向けに最初の1行を実行してみよう
No.7
Java&Spring記事人気No7
Flask
Flaskとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.8
Java&Spring記事人気No8
Python
Pythonで空白や不要な文字を削除する方法!strip(), rstrip(), lstrip() の使い方を初心者向けに解説