Flaskアプリをサブドメインにデプロイする方法を初心者向けに解説!
生徒
「Flaskアプリを自分のドメインのサブドメイン(例:app.example.com)で公開したいです。どうすればいいですか?」
先生
「いい視点ですね。サブドメインで公開すると本番環境らしく見えて、アクセスしやすくなります。DNS設定からサーバー設定まで順を追って説明します。」
生徒
「DNSやnginxがよくわからないんですが…」
先生
「大丈夫です。DNSもnginxもインターネットの住所や案内板のようなものですので、身近な例に置きかえてわかりやすく解説していきます!」
1. サブドメインとは?
「サブドメイン」とは、あなたのドメイン名(例:example.com)の前に別の名前を足したものです。app.example.comのように、アプリ専用の住所を作るイメージです。
それによって、メインサイトとアプリを別々に管理できて便利です。
2. DNS設定でサブドメインの住所を作成
DNSとは「ドメインネームシステム」の略で、インターネットの住所録のような仕組みです。
ドメイン会社の「DNS管理画面」に入り、次のようにレコードを追加します。
Type: A
Host: app
Value: 123.45.67.89
これでapp.example.comという住所が、あなたのサーバー(IPアドレス)につながるようになります。
3. VPSまたはVPS環境を準備しよう
サブドメインを使うには、インターネット上のサーバー(VPSなど)が必要です。これは「自分専用のパソコン」を借りるようなものです。
OSは多くの場合Linux(例:Ubuntu)が使われます。
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で起動
Flask本体ではなく、gunicorn(ガンコーン)という本番用の実行環境を使います。
pip install gunicorn
gunicorn -w 4 -b 127.0.0.1:8000 app:app
これでFlaskアプリがローカルのポート8000で動きます。
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)
インターネットでは、通信を暗号化するためにHTTPSを使います。Let’s Encrypt(レッツ・エンクリプト)は無料で証明書をもらえるサービスです。
sudo certbot --nginx -d app.example.com
これでSSL証明書が自動的に設定され、訪問者の通信が安全になります。
8. 動作確認はブラウザで
設定がすべて終わったら、ブラウザでhttps://app.example.comにアクセスして確認してみましょう。
安全な鍵マーク(��)が表示されればHTTPSの設定も成功です。
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. トラブルシューティングのポイント
もしアクセスできない場合は、まずDNS設定が正しいか確認してください。反映には数分~数時間かかることがあります。
次にnginxの設定エラーやgunicornが起動しているかもsudo systemctl status appやsudo 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やロードバランシングなども学んでみるとさらに理解が深まりますよ。」
生徒
「はい!これからもサブドメイン運用の仕組みをしっかり練習して、もっと使いこなせるようになりたいです!」