エックスサーバーにはPythonが入っていますが、デフォルト設定ではroot権限がないため、直接pipコマンドを使えません。
本記事では、エックスサーバー上でPython製のWebアプリをデプロイする手順について説明します。
まずMinicondaをインストールし、そのあとにPythonのフレームワークであるFlaskをいれて、エックスサーバー上でpipコマンドが使えるようにします。そのあと、”Hello World”と表示されるシンプルなWebアプリのデプロイ手順を説明しています。
Condaによる仮想環境の構築から、Pythonを動かすためのFastCGIの設定まで、エックスサーバー上でPythonアプリケーションを実行するための基本的な手順をひととおりお伝えました。
エックスサーバー上にPython のWebアプリをデプロイする際に、参考にしてください。
エックスサーバー上でpipコマンドを実行したい方
エックスサーバーにSSH接続して、コマンドで処理する方法が分かる方
Minicondaとは?
まず最初に、Minicondaについてお伝えしますね。
Minicondaは、Anacondaと同様、Pythonのディストリビューションです。つまり、Pythonを使うための様々なツールが入っています。
Anacondaはわりと有名かと思います。便利なものがそろっていて良いのですが、重すぎるのが欠点です。
MinicondaはAnacondaよりも最初から入っているパッケージが少ない分、軽いのが特徴です。
限られたリソースを持つ環境や、必要最小限のパッケージのみをインストールしたい場合には、Minicondaのほうが良い選択肢といえるでしょう。
今回はエックスサーバーに入れるので、軽めのほうが良いかと思い、Minicondaを選択しました。必要なものは都度インストールできます。
ただもちろん、Anacondaを使いたい場合には、Anacondaをいれる方法を解説した記事が色々とあるので、そちらを検索して参考されることをおすすめします。
基本的には、手順はほとんど同じです。
エックスサーバーでPythonのpipコマンドを使えるようにする手順① Minicondaとflaskのインストール
それではここから、実際の手順の説明にはいっていきます。まずはエックスサーバーのアカウントを用意します。
Webアプリをデプロイする際、既存のプロジェクトや設定に影響を与えることを避けたい場合は、テスト用に新しいアカウントを作成すると良いでしょう。エックスサーバーでは通常、新規アカウント作成時に10日間の無料お試し期間があります。
【エックスサーバーアカウント作成はこちらから】
(エックスサーバーのページが表示されます)
↓↓↓
わたしも、最初にテストアカウントで試してから、本番用アカウントにWebアプリをデプロイしました。
エックスサーバーの準備
アカウント作成後、エックスサーバー上にドメイン、サブドメイン等を準備し、下記のような最初のページが表示できるようにしてください。
また、SSH通信を可能にしておきます。
このあたりは割愛しますが、エックスサーバーでエックスサーバーにSSH通信を行う方法については、下記の記事を参考にしてください。
https://biz.addisteria.com/laravel_project_deploy4/
Minicondaのインストール
エックスサーバーにSSHでログインし、下記コマンドでMinicondaをダウンロードします。
1 |
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh |
これにより、ホームディレクトリにMinicondaのインストーラをダウンロードできます。続いて、下記コマンドでMinicondaをインストールします。
1 |
bash Miniconda3-latest-Linux-x86_64.sh |
インストールスタート。最初に利用規約が表示されます。Enterキーを押し続けます。
これは結構長いです。ひたすらEnterキーを押し続けます。
最後までいったら【yes】を入力。
そのあと >>> の部分でインストール場所を聞かれます。特に提示された場所で問題なければ、そのままEnterキーを押すと、インストールがスタートします。
インストールが終わると、次のように
“Do you wish to update your shell profile to automatically initialize conda?”
と表示されます。yesかnoを聞かれるので、今回は【no】にします。Enterキーを押すと、【no】を選択したことになります。
上記の画面では、conda initについて書かれています。noを押すと、conda initを使用しないということになります。その場合は、ユーザーは手動で conda activate
コマンドを実行する必要があります。
conda仮想環境の使用開始
Minicondaをいれると、conda
というコマンドラインツールを使用して仮想環境を管理できるようになります。
他のプロジェクトへの影響を避け、依存関係を整理するために、仮想環境で作業を進めることをお勧めします。
まず、以下のコマンドを実行して、condaの初期化を行います。このステップは、condaコマンドを新しいシェルセッションで利用可能にします。
1 |
eval "$(/home/ユーザー名/miniconda3/bin/conda shell.bash hook)" |
各コマンドには、最初に[〇〇〇@sv11111]$ と表示されますが、ユーザー名は、〇〇〇にあたる部分ですね。
つづいて、下記コマンドを実行。
1 |
conda --version |
無事バージョンが表示されていれば、インストールは成功しています。
仮想環境の作成とアクティベーション
続いて仮想環境を作ります。
仮想環境の名前と、pythonのバージョンを指定してコマンドを実行します。今回はflaskpredictという名前にしておきます。名前はお好みで変えてください。
1 |
conda create --name flaskpredict python=3.11 |
途中 Procees ([y]/n)? とでます。そのままEnterキーを押すと、[y]を選択したという意味になり、その先に進んでいきます。
次に、作成した仮想環境をアクティベートします。
1 |
conda activate flaskpredict |
なお、仮想環境を終えたい時は、下記を実行します。
1 |
conda deactivate |
※ログアウト後、再度仮想環境に入るには、サーバーにログインした後、Minicondaの環境をアクティベートするために以下のコマンドを実行します。
1 |
source ~/miniconda3/bin/activate |
1 |
conda activate flaskpredict |
flaskインストール
仮想環境をアクティベートした状態で、次にflaskをインストールします。
1 |
conda install flask |
途中、”The following NEW packages will be INSTALLED:” と聞かれるので、Enterキーを押します。
インストール後、which pythonコマンドを行って、Pythonのパス(赤線)を確認しておきます。
このパスは後で使用します。
1 |
which python |
【パスの確認(赤線)】
エックスサーバーでPythonのpipコマンドを使えるようにする手順② fastCGIのインストールとファイルの作成
ここまででpipコマンドを使えるようになりました。ここからは、実際にFlaskアプリケーションを公開する準備を進めていきましょう。
通常、Webアプリケーションはエックスサーバーの public_html
ディレクトリ内またはサブドメインに関連付けられたディレクトリ内に配置されます。
public_html
ディレクトリにアクセスすると、通常は index.html
がデフォルトで表示されます。これは、Webサーバーが最初に読み込むファイルです。
ここからは、この場所に3つのファイルを準備していきます。
FastCGIのインストール
まずは下記コマンドを実行し、FastCGIをインストールします。
ちなみに今回はFastCGIを使いましたが、CGIを使っても動かせます。ただ、セキュリティやパフォーマンス上の理由からFastCGIを選びました。
1 |
python -m pip install flup |
3つのファイルの作成
3つのファイルを作成し、上記の場所に設置します。
- hello.py
- .htaccess
- index.fcgi
【hello.py】
1 2 3 4 5 6 7 8 9 |
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!' if __name__ == '__main__': app.run(debug=True) |
【.htaccess】
こちらは隠しファイルとなるので、最初に .をいれます。
すべてのリクエストを index.fcgi
スクリプトに転送し、FastCGIを介してPythonアプリケーションが処理されるようにします。
1 2 3 4 5 6 7 8 |
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} !on RewriteBase / RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] ReWriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.fcgi/$1 [L] </IfModule> |
【index.fcgi】
一番上は、先ほど確認したPythonのパス(先ほど赤線で表示したパス)をいれます。
which pythonコマンドを行って確認してくださいね。
1 2 3 4 5 6 7 |
#! /home/ユーザー名/miniconda3/envs/flaskpredict/bin/python from flup.server.fcgi import WSGIServer from hello import app if __name__ == '__main__': WSGIServer(app).run() |
権限をかえる
index.fcgiファイルの権限を755変えます。このコマンドは、ファイルの所有者に読み書き実行の権限を与え、グループと他のユーザーには読み取りと実行の権限のみを与えます。
1 |
chmod 755 index.fcgi |
.htaccessは644にします。この設定により、ファイルの所有者はファイルを読み書きでき、グループメンバーと他のユーザーはファイルを読み取ることのみができます。
1 |
chmod 644 .htaccess |
表示してみる
ブラウザを確認してみます。下記のように【Hello, World!】が表示されていれば、成功です。
作成したconda環境の削除
現在利用可能なconda環境は下記コマンドで確認できます。
1 |
conda env list |
削除コマンドはこちら。
1 |
conda remove --name 削除する環境名 --all |
うまくいかないとき
権限の変更を行っているか、確認してみてください。
また、記事内で赤線で表示したPythonのパスが間違えていると、エラーになったりします。パスを確認してください。
コピーした時に余計なものがはりつけられていないか、また、ユーザー名など、チェックしてくださいね。
おまけ:git cloneでflaskのWebアプリを本番環境にあげたとき
1 |
pip install -r requirements.txt |
さいごに
さらっと書くつもりが、なかなか長い手順になってしまいました^^;
本記事ではhello worldを表示するだけの簡単な方法をご紹介しました。
本格的なWebアプリをデプロイする際には、requirements.txtのライブラリをインストールする手順が必要となります。途中でエラーになることがあるかもしれません。
わたしはなりました。
エラーの際には、エラーの原因をつきとめて、修正していきましょう。
エックスサーバーのコントロールパネルを通じてログを確認するのも有効です。
【エックスサーバー】
また python app.py といったコマンドを実行すると、エラーをコマンドライン上で確認することができます。
本記事が参考になれば嬉しいです。
ちなみに、わたしが作成したサンプルのPythonアプリはこちら。機械学習モデルを搭載しており、入力したデータに基づいて平均月収を算出するアプリです。
Webアプリの名前は「ひつじの給料予測」です。よかったら、試してみてくださいね^^