2024年12月19日にリリースされた新しい「スターレンタルサーバー」を実際に触ってみました。
個人的に特に注目したのはSSH接続です。今回はこのSSH機能を利用して、Pythonアプリケーション(Flask)をデプロイしてみました。この記事では、その使用感とデプロイの手順を解説します。
この記事では、スターレンタルサーバーを紹介するアフィリエイト広告を利用しています。
目次
- はじめに:Pythonの利用
- スターレンタルサーバーとは?
- スターレンタルサーバーのPython環境
- スターレンタルサーバーでPythonを使うためのセットアップ手順
- Flaskで「Hello, World」を表示
- スターレンタルサーバーでFlaskを公開(CGIを利用)
- スターレンタルサーバーにデプロイしたアプリの速度を計測
- まとめ
1. はじめに:Pythonの利用
PythonはWebアプリの開発、タスクの自動化、データ分析など、幅広い分野で活用されている人気のプログラミング言語です。たとえば、FlaskやDjangoを使ってWebアプリを構築したり、スクリプトで作業を効率化したりできます。
今回、新しくリリースされた スターレンタルサーバー でPythonがどのように使えるのかを試しました。実際に「Hello, World!」を表示するWebアプリを構築した経験をもとに、初心者でも理解しやすい手順やポイントをわかりやすくご紹介します。
2. スターレンタルサーバーとは?
2024年12月、ネットオウルからリリースされた スターレンタルサーバー は、 高性能でコスパが高いレンタルサーバーサービスです。
これまでもスターサーバーとしてサービスが提供されていましたが、今回大幅に更新されリニューアルされました。
主な特徴は次のとおりです:
- 高速性能: NVMe SSDと第4世代AMD EPYC™プロセッサを採用しており、データ処理がスムーズ。
- セキュリティ対応: HTTP/2や無料独自SSLに対応し、安心して使えます。
- 選べるプラン: 無料のフリープランからビジネスプランまで、幅広いニーズに応えられます。
以下にプランの概要をまとめました:
プラン | 容量 | 月額料金(税込) | マルチドメイン | データベース数 | 独自ドメイン永久無料特典 |
---|---|---|---|---|---|
フリー | 3GB | 0円 | 5 | 5 | なし |
ライト | 350GB | 253円~ | 200 | 50 | なし |
スタンダード | 700GB | 550円~ | 無制限 | 無制限 | 1個 |
ビジネス | 1200GB | 2,090円~ | 無制限 | 無制限 | 2個 |
初心者からビジネス用途まで、幅広いユーザーに対応しているのが特徴です。
また、開発したアプリケーションを独自ドメインで公開したい場合は、同じくネットオウル社が提供している スタードメインを利用するのがお勧めです。
筆者も利用しているのですが、不足機能もなく安定していますし、価格が安定していて安価に利用できます!
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
仮想環境の作成
仮想環境を作成するために、venv
やvirtualenv
を利用できます。
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
を使うとエラーなく仮想環境を構築できました。具体的には次のステップです。
-
virtualenv
をインストールします(--user
オプションを利用)。$ python3.6 -m pip install --user virtualenv
-
仮想環境を作成します。
$ python3.6 -m virtualenv venv
-
仮想環境を有効化します。
$ source venv/bin/activate
-
仮想環境内のPythonパスを確認します。
(venv) $ which python (venv) > ~/python-test/venv/bin/python
このようにして仮想環境を使えば、プロジェクトごとに独立したパッケージ管理ができます。
4. スターレンタルサーバーでPythonを使うためのセットアップ手順
ここからは、アプリケーションをセットアップする手順をご紹介します。まずはサーバーに接続するところから始めましょう。
SSH設定
まずはサーバーのコントロールパネルへアクセスし、SSH鍵を設定します。
-
コントロールパネルにログイン
ログイン画面にアクセスし、コントロールパネルに入ります。
-
サーバー管理(サーバーパネル)
契約しているサーバー一覧から、今回使うサーバーを選択し、サーバーパネルに移動します。 -
SSH設定画面へ移動
「サーバー」 > 「SSH設定」のメニューから、SSH鍵の設定画面を開きます。
-
SSH鍵を登録
「自動生成による登録・更新」を選択してキーを登録します。すると公開鍵と秘密鍵が自動生成され、公開鍵はサーバー側に登録されます。同時に秘密鍵のダウンロードが始まるので、ローカルに保存しておきましょう。
-
接続情報を確認
画面上部の「SSHソフト設定」タブで、ユーザー名やポート番号などの接続情報を確認します。
-
接続設定を利用
コントロールパネルの「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
を実行するだけで接続が可能になります。 - HostName: サーバーのホスト名(例:
-
サーバーへの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
エディタがインストールされているので、これを使ってコードを作成します。
-
新しいファイルを開きます。
(venv) $ vi app.py
-
以下のコードを入力します。
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)
-
入力を終えたら、
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ターミナルを開いてコマンドラインから確認します。
- 別のターミナルで再度サーバーへSSH接続します。
$ ssh starserver
- 以下のコマンドを実行し、アプリケーションが正しく起動しているか確認します。
[aa000111@sv00001 ~]$ curl localhost:8000
- 正常に動作していれば、以下のような文字列が返ってきます。
Hello World
この時点ではサーバー内部でのみ動作しているため、外部からのアクセスはできません。
6. スターレンタルサーバーでFlaskを公開(CGIを利用)
ここからは、FlaskアプリケーションをCGI経由で外部に公開する方法を紹介します。.htaccess
の設定やrun.cgi
の作成などのポイントを解説します。
1. CGIスクリプトの作成
通常はgunicornなどのWSGIサーバーを使いますが、レンタルサーバーではApacheの設定を直接編集できない場合が多いため、CGIを経由してPythonを動かす方法をとります。
詳しくは Flask公式ドキュメント をご参照ください。
-
run.cgi
ファイルを作成$ vi run.cgi
-
以下の内容を記述
#!/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
をインポート
-
スクリプトに実行権限を付与
$ chmod +x run.cgi
2. 動作確認
-
run.cgi
の直接実行
public_html
ディレクトリ内で以下のコマンドを実行し、スクリプトの動作を確認します。$ ./run.cgi
実行結果:
Status: 200 OK Content-Type: text/html; charset=utf-8 Content-Length: 11 Hello World
-
ブラウザからのアクセス
ブラウザでhttp://<サーバーの名前>/run.cgi
にアクセスします。
実行結果:
Hello World
が表示されれば成功です。 -
ルートURLへのアクセス
http://<サーバーの名前>/
にアクセスしても、まだ.htaccess
を設定していないためエラーになります。
3. .htaccess
の設定
.htaccess
を編集して、ルートURLアクセス(http://<サーバーの名前>/
)でもFlaskアプリが動作するようにします。
サーバーパネルの ホームページ > .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の速度テストではほぼ理論値が出ているような状況です。
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を利用される方以外でも、curl
やgit
など多くの機能が利用可能でした。
$ 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件)だと思います。 パッケージを組み込んでいくと実際にファイル数の上限に引っかかりましたので、そのような使い方をするのならば 上位プランを申し込むべきでしょう(それでもかなり安いです)。
最後に、このサービスを提供しているスターレンタルサーバーと、ドメイン取得のスタードメインの公式サイトを紹介して終わります。興味があれば、ぜひ利用してみてください。