- Streamlitで作ったWebアプリを公開したい!
- Herokuが無料で使えなくなって困ってる…
- VPSでの一般公開方法が知りたい!
Python初心者でも簡単にWebアプリが作れるStreamlit。
でも、作ったアプリをインターネット上に公開しようとすると、一気に難しく感じる方は多いのではないでしょうか。
インターネット上に公開するためには、サーバーにアプリを配置して常時起動しておく必要があります。
方法としては、例えば次のようなものがあります。
- Streamlit Cloud
- Vercel / Render
- Heroku
- 🔥 VPS(本記事で解説する方法)
本記事ではこのうち自由度が高く、学習にもおすすめなVPSを使った方法をご紹介します。
VPSでの公開手順
最初にざっくりとした手順を列挙すると、次の通りです。
- Streamlitアプリを作成
- VPSを契約
- VPSサーバーにSSHでログインする
- 必要なパッケージのインストール
- 家計簿アプリをVPSサーバーにアップロードする
- Streamlitアプリを起動する
ぱっと見だとやること多めに見えますが、一番重いのはVPS契約の部分だけだと思います。
それでは、順番に解説してきます。
1. Streamlitアプリを作成
まだ何を作ろうか迷っている方は、いったん以下のページの家計簿アプリを使ってみましょう。
ローカルマシンで動作確認するところまでを解説しているので、動いたらこのページに戻ってきてください。

もちろんご自身で作成したStreamlitアプリを利用いただいても構いません。
2. VPSを契約
作ったアプリを24時間インターネットに公開するには、VPSというレンタルサーバーが必要です。
VPSの有名どころは、例えば以下のようなものがあります。
値段はどれも月額1,000以下です。
今回は個人的に管理画面がわかりやすいと感じている「XServer VPS」を例に説明します。
今回はごく簡単なアプリなので、一番安い構成で契約しました。
なお、参考までに他のVPSを使う場合のスペック目安もお伝えします。
項目 | XServer VPS |
---|---|
プラン名 | 標準サーバー(Linux系サーバー) |
メモリ | 2GB |
CPU | 3Core |
SSD | 50GB |
イメージ | Ubuntu 22.04 |
3. VPSサーバーにSSHでログインする
契約が完了したら、早速VPSサーバーにログインしましょう。
セキュリティを保ったまま接続できる、SSH接続でログインします。
ポートの解放
まずはXServer VPSで、SSH接続とStreamlit公開用のポートを解放しましょう。
管理画面で、以下の設定を行います。

SSH接続でログイン
ターミナルを起動して、以下のような感じで入力します。
ssh root@グローバルIPアドレス
すると、以下のような画面が返ってきます。
➜ ~ ssh root@グローバルIPアドレス
The authenticity of host 'xxx.xxx.xxx.xx (xxx.xxx.xxx.xx)' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'xxx.xxx.xxx.xx' (ED25519) to the list of known hosts.
root@xxx.xxx.xxx.xx's password:
Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-76-generic x86_64)
# (中略)
Last login: Tue Jul 18 14:16:38 2023 from 125.4.250.93
ハイライトした部分が、コマンドの入力を求められる部分です。
5行目の部分は初回ログイン時だけ聞かれるものなので、yes
を入力してEnterキーを押せば大丈夫です。
また、7行目ではVPSサーバー契約時に設定したrootパスワードを入れましょう。
4. 必要なパッケージをインストールする
VPSを契約した直後に入っているのはUbuntuのOSだけなので、Pythonの実行に必要なパッケージをインストールします。
以下のコマンドを実行しましょう。
# Ubuntuのパッケージ更新
sudo apt update
sudo apt upgrade -y
# Pythonの実行に必要なパッケージのインストール
sudo apt install -y python3 python3-pip python3-venv git ufw
5. 家計簿アプリをVPSサーバーにアップロードする
今回はscp
コマンドを使って、ローカルマシンからVPSサーバーにアップロードします。
まずはターミナルをもう一つ起動してから、家計簿アプリが置いてあるフォルダに移動します。
# 家計簿アプリのある一つ上のフォルダに移動
cd Project
# 配下のフォルダとファイルを表示
Project ls
# lsの結果として"kakeibo-app"が表示されればOK
さらに次のコマンドを実行します。
rsync -av --exclude 'venv/' ./kakeibo-app/ root@グローバルIPアドレス:/root/kakeibo-app/
これでVPSサーバーに家計簿アプリがアップロードできます。
6. Streamlitアプリを起動する
Streamlitは8501番ポートで公開されるので、VPSサーバーのポートを解放しておきましょう。
# Streamlitのポート番号を指定
ufw allow 8501
# SSHポートも開けておく
ufw allow 22
# 初回のみ(確認が入るので「y」)
ufw enable
これでポートが解放されて、Streamlitが外部公開されます。
VPSサーバー上で次のコマンドを実行します。
# 家計簿アプリフォルダに移動
cd ~/kakeibo-app
# 仮想環境の作成 & 仮想環境に入る
python3 -m venv venv
source venv/bin/activate
# pipのインストール & パッケージのインストール
pip install --upgrade pip
pip install streamlit pandas matplotlib
# Streamlitの起動
streamlit run app.py
ブラウザから次のURLを開くと、アプリにアクセスできるようになります。
http://グローバルIPアドレス:8501
次のような画面が表示されていれば、今回のゴールとしては完璧です!

お疲れさまでした!
今後の課題
今回は、本当に最低限の実装でインターネット上に公開することだけを考えての実装でした。
なので、正直なところ実際の実装としてはいろいろな穴があります。
今後このアプリをブラッシュアップしたり、学習を進めるためには、以下のようなことを意識すると良いかもです。
1. HTTPS化
今の状態では、HTTPとなっており暗号化がされていない平文での通信になっています。
最近のトレンドでは暗号化されているHTTPS化は必須であり、Let’s Encryptなどを使ったHTTPS化を行った方が望ましいです。(というか必須)
2. データの保存方法
練習用のアプリだったのでCSVとしてデータを保存していますが、実際にはデータベースを立てた方が良いです。
今回のような簡単なアプリではあまり関係ないですが、CSVだとパフォーマンスが劣ったり、多人数アクセスに耐えられないなどの問題があります。
また、セキュリティ面でもデータベースを組んだ方が安全性は高まるので、実運用ではデータベースを立てるべきと思います。
3. 認証まわりの設定
今回は誰でも見ることができるアプリにしましたが、実際にはログインして自分だけのページを見ることができる仕組みを作ることが多いです。
Streamlitにもログイン機能の実装もできるので、余力がある方はその実装もしてみると良いかもしれません。
4. バックグラウンド実行
今の状態ではサーバーを起動しているターミナルを落とすと、Webアプリも落ちます。
なので、ターミナルを落としても実行し続けるようにDockerやその他の方法を使ってバックグラウンド実行し続ける仕組みを実装するのも実践的です。
まとめ
Streamlitアプリを外部公開する方法を解説しました。
ざっくりとした流れを再掲します。
- Streamlitアプリを作成
- VPSを契約
- VPSサーバーにSSHでログインする
- 必要なパッケージのインストール
- 家計簿アプリをVPSサーバーにアップロードする
- Streamlitアプリを起動する
ほとんどの手順は簡単に完了しますし、VPSも月額で1,000円もしません。
Pythonは、Webアプリ開発に進むと稼げる単価が上がる傾向にあります。
まずは本記事にあるような簡単なアプリ実装から慣れていって、収入アップを目指していきましょう!
コメント