[Python] Bottleで使用するポートを変更・確認する方法
BottleはPythonの軽量なWebフレームワークで、デフォルトではポート8080で動作します。
ポートを変更するには、run()メソッド
の引数port
を指定します。
例えば、app.run(host='localhost', port=8081)
のように記述することで、ポート8081でサーバーを起動できます。
現在使用しているポートを確認するには、run()メソッド
で指定したポート番号を確認するか、サーバー起動時のログメッセージを確認します。
Bottleフレームワークの基本概要
Bottleは、Pythonで書かれたシンプルで軽量なWebアプリケーションフレームワークです。
特に小規模なアプリケーションやプロトタイプの開発に適しており、単一のファイルで完結するため、導入が非常に簡単です。
Bottleは、RESTfulなルーティング、テンプレートエンジン、リクエストとレスポンスの処理など、Webアプリケーションに必要な基本機能を提供します。
Bottleの最大の特徴は、そのシンプルさと柔軟性です。
必要な機能を必要なときに追加できるため、開発者は自分のニーズに合わせてカスタマイズしやすいです。
また、BottleはPythonの標準ライブラリに依存しているため、特別なインストールが不要で、すぐに使い始めることができます。
これにより、学習コストが低く、初心者から上級者まで幅広いユーザーに支持されています。
Bottleで使用するポートの変更方法
run()メソッドの基本構文
Bottleアプリケーションを実行するためには、run()メソッド
を使用します。
このメソッドは、アプリケーションのホストやポートを指定するための引数を受け取ります。
基本的な構文は以下の通りです。
from bottle import Bottle, run
app = Bottle()
# ルートエンドポイントの定義
@app.route('/')
def index():
return "Hello, Bottle!"
# アプリケーションの実行
run(app)
ポート番号を指定する方法
run()メソッド
の引数にport
を指定することで、使用するポート番号を変更できます。
以下の例では、ポート番号を8080に設定しています。
run(app, port=8080)
この設定により、アプリケーションはhttp://localhost:8080
でアクセス可能になります。
ホストとポートを同時に指定する方法
ホストとポートを同時に指定することも可能です。
以下の例では、ホストを0.0.0.0
、ポートを8080に設定しています。
run(app, host='0.0.0.0', port=8080)
この設定により、外部からのアクセスも受け付けるようになります。
ポート番号の選び方の注意点
ポート番号を選ぶ際には、以下の点に注意が必要です。
注意点 | 説明 |
---|---|
使用中のポートを避ける | 他のアプリケーションが使用しているポートは避けること。 |
標準ポートを考慮する | HTTPは80、HTTPSは443が標準ポートであるため、これらを避ける。 |
セキュリティを考慮する | 公開するポートは必要最低限にすること。 |
ポート番号を環境変数から取得する方法
環境変数を使用してポート番号を取得することもできます。
これにより、デプロイ環境に応じてポート番号を柔軟に変更できます。
以下の例では、PORT
という環境変数からポート番号を取得しています。
import os
from bottle import Bottle, run
app = Bottle()
@app.route('/')
def index():
return "Hello, Bottle!"
# 環境変数からポート番号を取得
port = int(os.environ.get('PORT', 8080))
run(app, port=port)
この設定により、PORT
環境変数が設定されていればその値が使用され、設定されていなければデフォルトで8080が使用されます。
ポートの確認方法
サーバー起動時のログメッセージを確認する
Bottleアプリケーションを起動すると、サーバーの起動時に使用しているホストとポートの情報がログメッセージとして表示されます。
例えば、以下のようなメッセージが出力されます。
Bottle v0.12.19 server starting up (using WSGIRefServer)...
Listening on http://localhost:8080/
Hit Ctrl-C to quit.
このメッセージから、どのポートでアプリケーションが実行されているかを確認できます。
run()メソッドで指定したポートを確認する
run()メソッド
で指定したポートは、アプリケーションのコード内で明示的に確認することができます。
以下のように、ポート番号を変数に格納しておくことで、後から確認することが可能です。
port = 8080
run(app, port=port)
print(f"アプリケーションはポート {port} で実行中です。")
このようにすることで、実行中のポート番号をプログラム内で確認できます。
netstatコマンドでポートを確認する
netstat
コマンドを使用すると、現在使用中のポートを確認できます。
以下のコマンドをターミナルで実行することで、特定のポートが使用中かどうかを確認できます。
netstat -tuln | grep LISTEN
このコマンドは、リッスン状態のポートを表示します。
出力結果には、使用中のポート番号が含まれています。
lsofコマンドでポートを確認する
lsof
コマンドも、特定のポートを使用しているプロセスを確認するのに役立ちます。
以下のコマンドを使用して、特定のポート(例:8080)を確認できます。
lsof -i :8080
このコマンドを実行すると、ポート8080を使用しているプロセスの情報が表示されます。
これにより、どのアプリケーションがそのポートを使用しているかを確認できます。
Bottleのポート変更に関する応用例
複数のBottleアプリケーションを異なるポートで動作させる
複数のBottleアプリケーションを同時に実行する場合、それぞれ異なるポートを指定する必要があります。
以下の例では、2つのアプリケーションを8080と8081のポートで実行しています。
from bottle import Bottle, run
import threading
app1 = Bottle()
app2 = Bottle()
@app1.route('/')
def index1():
return "アプリケーション1"
@app2.route('/')
def index2():
return "アプリケーション2"
def run_app1():
# アプリケーション1をポート8080で実行
run(app1, host='localhost', port=8080)
def run_app2():
# アプリケーション2をポート8081で実行
run(app2, host='localhost', port=8081)
# スレッドを作成してそれぞれのアプリケーションを実行
thread1 = threading.Thread(target=run_app1)
thread2 = threading.Thread(target=run_app2)
# スレッドを開始
thread1.start()
thread2.start()
# メインスレッドが終了しないように待機
thread1.join()
thread2.join()

このようにすることで、異なるポートで複数のアプリケーションを同時に動作させることができます。
Docker環境でのポート指定
Dockerを使用してBottleアプリケーションを実行する場合、Dockerfileやdocker-compose.ymlでポートを指定することができます。
以下は、docker-compose.ymlの例です。
version: '3'
services:
bottle-app:
image: python:3.9
volumes:
- .:/app
working_dir: /app
command: python app.py
ports:
- "8080:8080" # ホストの8080ポートをコンテナの8080ポートにマッピング
この設定により、ホストの8080ポートにアクセスすると、コンテナ内のBottleアプリケーションにリクエストが転送されます。
リバースプロキシを使用したポート管理
リバースプロキシを使用することで、複数のBottleアプリケーションを単一のポートで管理することができます。
例えば、Nginxをリバースプロキシとして設定し、異なるパスで異なるアプリケーションにリクエストを振り分けることができます。
server {
listen 80;
location /app1 {
proxy_pass http://localhost:8080;
}
location /app2 {
proxy_pass http://localhost:8081;
}
}
この設定により、http://yourdomain.com/app1
にアクセスすると、ポート8080のアプリケーションにリクエストが転送され、http://yourdomain.com/app2
にはポート8081のアプリケーションが応答します。
ポートフォワーディングを利用した外部アクセスの制御
ポートフォワーディングを使用することで、特定のポートへの外部アクセスを制御できます。
例えば、ルーターの設定で、外部からの特定のポート(例:80)をBottleアプリケーションが実行されているポート(例:8080)に転送することができます。
これにより、外部からはポート80でアクセスできる一方、内部ではポート8080でアプリケーションが実行されるため、セキュリティを高めつつ、ユーザーにはシンプルなアクセスを提供できます。
ポートフォワーディングの設定は、使用しているルーターの管理画面から行います。
まとめ
この記事では、Bottleフレームワークにおけるポートの変更や確認方法について詳しく解説しました。
具体的には、run()メソッド
の使い方や、ポート番号を環境変数から取得する方法、さらには複数のアプリケーションを異なるポートで動作させる方法やDocker環境でのポート指定についても触れました。
これらの知識を活用して、Bottleアプリケーションの開発や運用をよりスムーズに行えるようにしてみてください。