スターレンタルサーバーでPython(Flask)アプリをデプロイしてみた【手順を解説】

スターレンタルサーバーでPython(Flask)アプリをデプロイしてみた【手順を解説】

2024年12月19日にリリースされた新しい「スターレンタルサーバー」を実際に触ってみました。
個人的に特に注目したのはSSH接続です。今回はこのSSH機能を利用して、Pythonアプリケーション(Flask)をデプロイしてみました。この記事では、その使用感とデプロイの手順を解説します。

この記事では、スターレンタルサーバーを紹介するアフィリエイト広告を利用しています。


目次

  1. はじめに:Pythonの利用
  2. スターレンタルサーバーとは?
  3. スターレンタルサーバーのPython環境
  4. スターレンタルサーバーでPythonを使うためのセットアップ手順
  5. Flaskで「Hello, World」を表示
  6. スターレンタルサーバーでFlaskを公開(CGIを利用)
  7. スターレンタルサーバーにデプロイしたアプリの速度を計測
  8. まとめ

1. はじめに:Pythonの利用

PythonはWebアプリの開発、タスクの自動化、データ分析など、幅広い分野で活用されている人気のプログラミング言語です。たとえば、FlaskやDjangoを使ってWebアプリを構築したり、スクリプトで作業を効率化したりできます。

今回、新しくリリースされた スターレンタルサーバー でPythonがどのように使えるのかを試しました。実際に「Hello, World!」を表示するWebアプリを構築した経験をもとに、初心者でも理解しやすい手順やポイントをわかりやすくご紹介します。

2. スターレンタルサーバーとは?

2024年12月、ネットオウルからリリースされた スターレンタルサーバー は、 高性能でコスパが高いレンタルサーバーサービスです。

これまでもスターサーバーとしてサービスが提供されていましたが、今回大幅に更新されリニューアルされました。
主な特徴は次のとおりです:

  • 高速性能: NVMe SSDと第4世代AMD EPYC™プロセッサを採用しており、データ処理がスムーズ。
  • セキュリティ対応: HTTP/2や無料独自SSLに対応し、安心して使えます。
  • 選べるプラン: 無料のフリープランからビジネスプランまで、幅広いニーズに応えられます。

以下にプランの概要をまとめました:

プラン容量月額料金(税込)マルチドメインデータベース数独自ドメイン永久無料特典
フリー3GB0円55なし
ライト350GB253円~20050なし
スタンダード700GB550円~無制限無制限1個
ビジネス1200GB2,090円~無制限無制限2個

初心者からビジネス用途まで、幅広いユーザーに対応しているのが特徴です。


また、開発したアプリケーションを独自ドメインで公開したい場合は、同じくネットオウル社が提供している スタードメインを利用するのがお勧めです。

筆者も利用しているのですが、不足機能もなく安定していますし、価格が安定していて安価に利用できます!

公式HPはこちら↓ スターレンタルサーバーのロゴ
広告無しの高性能無料サーバー!
スタードメインのロゴ 無料レンタルサーバー付き格安ドメインサービス!


3. スターレンタルサーバーのPython環境

スターレンタルサーバーでは、あらかじめPythonがデフォルトでインストールされています。そのため、特別な設定をしなくてもPythonを使った開発を始められます。

Pythonのバージョンとパス

  • バージョン: Python 3.6.8
  • パス: /usr/bin/python3.6

以下のコマンドで確認できます:

$ python3.6 --version
Python 3.6.8

パッケージ管理ツールの利用

pipも標準で利用可能ですが、--userオプションでユーザーディレクトリにインストールする必要があります。
例:

$ python3.6 -m pip install --user requests

このとき、インストール先のディレクトリ ~/.local/bin はPATHに含まれていないため、手動で追加しておくとよいでしょう。

$ export PATH=$HOME/.local/bin:$PATH

仮想環境の作成

仮想環境を作成するために、venvvirtualenvを利用できます。

venvの利用

venvで仮想環境を作成しようとすると、下記のようにpipのインストールでエラーが起きる場合があります。

[aa000111@sv00001 python-test]$ python3.6 -m venv venv
Error: Command '['/home/aa000111/python-test/venv/bin/python3.6', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 2.

そのため、venvを使用する場合は、仮想環境作成後にpipを別途インストールする手順が必要です。

virtualenvの使用

一方で、virtualenvを使うとエラーなく仮想環境を構築できました。具体的には次のステップです。

  1. virtualenvをインストールします(--userオプションを利用)。

    $ python3.6 -m pip install --user virtualenv
  2. 仮想環境を作成します。

    $ python3.6 -m virtualenv venv
  3. 仮想環境を有効化します。

    $ source venv/bin/activate
  4. 仮想環境内のPythonパスを確認します。

    (venv) $ which python
    (venv) > ~/python-test/venv/bin/python

このようにして仮想環境を使えば、プロジェクトごとに独立したパッケージ管理ができます。


4. スターレンタルサーバーでPythonを使うためのセットアップ手順

ここからは、アプリケーションをセットアップする手順をご紹介します。まずはサーバーに接続するところから始めましょう。

SSH設定

まずはサーバーのコントロールパネルへアクセスし、SSH鍵を設定します。

  1. コントロールパネルにログイン
    ログイン画面にアクセスし、コントロールパネルに入ります。
    ログイン画面

  2. サーバー管理(サーバーパネル)
    契約しているサーバー一覧から、今回使うサーバーを選択し、サーバーパネルに移動します。

  3. SSH設定画面へ移動
    「サーバー」 > 「SSH設定」のメニューから、SSH鍵の設定画面を開きます。
    SSH設定

  4. SSH鍵を登録
    「自動生成による登録・更新」を選択してキーを登録します。すると公開鍵と秘密鍵が自動生成され、公開鍵はサーバー側に登録されます。同時に秘密鍵のダウンロードが始まるので、ローカルに保存しておきましょう。
    公開鍵・秘密鍵の生成

  5. 接続情報を確認
    画面上部の「SSHソフト設定」タブで、ユーザー名やポート番号などの接続情報を確認します。
    SSHソフト設定

  6. 接続設定を利用
    コントロールパネルの「SSH設定」画面で取得した以下の情報をもとに、ローカル環境の ~/.ssh/config ファイルに設定を追加します。

    • HostName: サーバーのホスト名(例: aa000111.stars.ne.jp
    • User: ユーザー名(例: aa000111
    • Port: 接続ポート(例: 10022
    • IdentityFile: ダウンロードした秘密鍵ファイルのパス

    例 (Unix系):

    Host starserver
        HostName aa000111.stars.ne.jp
        Port 10022
        User aa000111
        IdentityFile ~/.ssh/aa000111.key

    例 (Windows):

    C:\Users\(your-user-name)\.ssh\ 以下に config と秘密鍵ファイルを保存します。

    Host starserver
        HostName aa000111.stars.ne.jp
        Port 10022
        User aa000111
        IdentityFile C:\Users\(your-user-name)\.ssh\aa000111.key

    この設定を行うと、ターミナルで ssh starserver を実行するだけで接続が可能になります。

  7. サーバーへのSSH接続
    ターミナルから以下のコマンドを実行してサーバーに接続します。

    $ ssh starserver

    初回接続時にはサーバーのフィンガープリント確認が求められます。次のようなメッセージが出た場合はyesを入力して接続を続行します。

    The authenticity of host '[aa000111.stars.ne.jp]:10022 ([203.0.113.1]:10022)' can't be established.
    ED25519 key fingerprint is SHA256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
    Warning: Permanently added '[aa000111.stars.ne.jp]:10022' (ED25519) to the list of known hosts.

    これでサーバーにログインできます。

Python環境の確認

SSH接続できたら、Pythonが動作しているか確認します。

$ ssh starserver
$ python3.6 --version
Python 3.6.8

仮想環境の構築

作業用ディレクトリを作成し、仮想環境を用意します。

$ mkdir ~/python-test
$ cd ~/python-test
$ python3.6 -m virtualenv venv
$ source venv/bin/activate

5. Flaskで「Hello, World」を表示

Python環境が整ったところで、Flaskを使って簡単なWebアプリケーションを動かしてみます。

1. Flaskのインストール

仮想環境を有効化した状態で次のコマンドを実行します。

(venv) $ pip install flask

2. アプリケーションの作成

Flaskを利用した単純なWebアプリケーションを作ってみましょう。
このサーバーにはviエディタがインストールされているので、これを使ってコードを作成します。

  1. 新しいファイルを開きます。

    (venv) $ vi app.py
  2. 以下のコードを入力します。viで編集を開始する際は i キーを押して挿入モードに切り替えてください。

    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route('/')
    def index():
        return 'Hello World'
    
    if __name__ == '__main__':
        app.debug = True
        app.run(host='0.0.0.0', port=8000)
  3. 入力を終えたら、Escキー → :wq と入力し、ファイルを保存して終了します。

3. アプリケーションの実行

(venv) $ python app.py
 * Running on http://0.0.0.0:8000/ (Press CTRL+C to quit)

4. サーバー上での動作確認

本来であれば、手元のPCからブラウザを使って http://<サーバーの名前>:8000 にアクセスして動作を確認したいところですが、今回のサーバーでは8000番ポートが外部からアクセスできないようです(おそらくセキュリティ上、使われるポートが制限されているのだと思われます)。

そこで今回は、サーバー内で通信を完結させるために、別のSSHターミナルを開いてコマンドラインから確認します。

  1. 別のターミナルで再度サーバーへSSH接続します。
    $ ssh starserver
  2. 以下のコマンドを実行し、アプリケーションが正しく起動しているか確認します。
    [aa000111@sv00001 ~]$ curl localhost:8000
  3. 正常に動作していれば、以下のような文字列が返ってきます。
    Hello World

この時点ではサーバー内部でのみ動作しているため、外部からのアクセスはできません。


6. スターレンタルサーバーでFlaskを公開(CGIを利用)

ここからは、FlaskアプリケーションをCGI経由で外部に公開する方法を紹介します。.htaccessの設定やrun.cgiの作成などのポイントを解説します。

1. CGIスクリプトの作成

通常はgunicornなどのWSGIサーバーを使いますが、レンタルサーバーではApacheの設定を直接編集できない場合が多いため、CGIを経由してPythonを動かす方法をとります。

詳しくは Flask公式ドキュメント をご参照ください。

  1. run.cgiファイルを作成

    $ vi run.cgi
  2. 以下の内容を記述

    #!/home/aa000111/python-test/venv/bin/python
    import os
    import sys
    
    # Flaskアプリケーションのパスを追加
    sys.path.append("/home/aa000111/python-test/")
    
    from wsgiref.handlers import CGIHandler
    from app import app
    
    # 必要な環境変数を設定
    os.environ['REQUEST_METHOD'] = 'GET'
    os.environ['SERVER_NAME'] = 'aa000111.stars.ne.jp'
    os.environ['PORT'] = '80'
    
    CGIHandler().run(app)

    ポイント:

    • sys.path.append でFlaskアプリが置かれている /home/aa000111/python-test/ を追加
    • from app import app の部分で app.py 内の app をインポート
  3. スクリプトに実行権限を付与

    $ chmod +x run.cgi

2. 動作確認

  1. run.cgiの直接実行
    public_html ディレクトリ内で以下のコマンドを実行し、スクリプトの動作を確認します。

    $ ./run.cgi

    実行結果:

    Status: 200 OK
    Content-Type: text/html; charset=utf-8
    Content-Length: 11
    
    Hello World
  2. ブラウザからのアクセス
    ブラウザで http://<サーバーの名前>/run.cgi にアクセスします。
    実行結果:
    Hello World が表示されれば成功です。

  3. ルートURLへのアクセス
    http://<サーバーの名前>/ にアクセスしても、まだ .htaccess を設定していないためエラーになります。

3. .htaccessの設定

.htaccessを編集して、ルートURLアクセス(http://<サーバーの名前>/)でもFlaskアプリが動作するようにします。

サーバーパネルの ホームページ > .htaccess編集 へ移動し、.htaccess に以下の設定を追加してください。
htaccess編集画面

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /run.cgi [L]

設定内容の意味:

  • RewriteEngine On : URLリライト機能を有効化
  • RewriteCond %{REQUEST_FILENAME} !-f : 物理ファイルが存在する場合は除外
  • RewriteRule ^(.*)$ /run.cgi [L] : 上記以外のアクセスをすべて run.cgi に転送

4. ルートURLへのアクセス

ブラウザで http://<サーバーの名前>/ にアクセスします。
きちんと設定できていれば、Hello World が表示されるはずです。

一連の流れを図示すると、以下のようになります。

ブラウザから http://<サーバーの名前>/ へアクセス

.htaccess で /run.cgi へリダイレクト

run.cgi で Flaskアプリ (app.py) を呼び出し

Flaskが 'Hello World' を返す

7. スターレンタルサーバーにデプロイしたPythonアプリの速度を計測

今回設定したサーバーのレスポンス時間を計測しました。 結果は…およそ250ms程度でした!

速度計測

やはりServer Responseに時間がかかっている様子がわかります。

ちなみに環境は光回線を1GbpsのLANケーブルで接続した自宅のPCで、 Fast.comの速度テストではほぼ理論値が出ているような状況です。 Fast.comの測定結果

PythonをCGIで読んでいる割には結構早いと思います。1000msくらいかかると予想していたので。

とはいえ、Gunicornや他のwsgiを利用する通常のデプロイ方法でしたら数十msでレスポンスは返ってきますので、 それと比べると5~10倍くらいは遅いということになります。

あまり速度マターではないケースでしたら、利用することも可能ではないと思います。 (この方法ですとアクセス数が伸びたときに処理が追いつかなくなると思いますが。)


8. まとめ

この記事では、スターレンタルサーバーでPython(Flask)を使ったWebアプリをデプロイする方法を紹介しました。ポイントを振り返ると、以下のとおりです。

Python環境の整備

スターレンタルサーバーには、Python 3.6が標準インストールされており、pipも利用できます。virtualenvを使った仮想環境の構築により、プロジェクトごとに依存関係をわかりやすく管理できました。

Flaskアプリケーションの実行

仮想環境内でFlaskをインストールし、簡単な「Hello, World」アプリケーションを起動。ローカル(サーバー内部)での動作チェックを行い、環境が問題なく使えることを確認しました。

CGIを利用したデプロイ

Apacheの設定を直接変更できない場合でも、CGIを利用してFlaskアプリケーションを公開できます。run.cgi を作成し、.htaccess でURLをリライトすることで、ブラウザからアクセスできるように設定できました。

速度は良好

FlaskをCGIで動かすという方法で、250ms程度のレスポンス時間が得られました。CGIで動かしている割には早く感じます。 静的ファイルでしたら20ms未満でロードできましたので、小規模なWEBシステムには利用可能ではないかと思います。

拡張可能なサーバー環境

スターレンタルサーバーでは、無料SSL、Cronジョブ、MySQLデータベースなども利用可能です。これらを組み合わせれば、より大規模なWebアプリケーションや定期的なタスク実行など、多彩な活用ができそうです。

個人的な感想ですが、SSH接続が利用可能になったことで格段に利用の幅が広がったと感じます。 Pythonを利用される方以外でも、curlgitなど多くの機能が利用可能でした。

$ git --version
> git version 2.43.5

$ curl --version
curl 7.61.1 (x86_64-redhat-linux-gnu) libcurl/7.61.1 OpenSSL/1.1.1k zlib/1.2.11 brotli/1.0.6 libidn2/2.2.0 libpsl/0.20.2 (+libidn2/2.2.0) libssh/0.9.6/openssl/zlib nghttp2/1.33.0

$ make --version
GNU Make 4.2.1

この辺りのコマンドを駆使すれば、かなり自由度の高いサーバー構築が可能になるという印象です。

おそらく、無料プランでネックになってくるのはファイル容量ではなくファイル総数(30000件)だと思います。 パッケージを組み込んでいくと実際にファイル数の上限に引っかかりましたので、そのような使い方をするのならば 上位プランを申し込むべきでしょう(それでもかなり安いです)。


最後に、このサービスを提供しているスターレンタルサーバーと、ドメイン取得のスタードメインの公式サイトを紹介して終わります。興味があれば、ぜひ利用してみてください。

公式HPはこちら↓ スターレンタルサーバーのロゴ
広告無しの高性能無料サーバー!
スタードメインのロゴ 無料レンタルサーバー付き格安ドメインサービス!