XSERVER(エックスサーバー)にPythonとflaskを設定したい。
エックスサーバーでWordPressが動いているので、使えるプログラミング言語はPHPのみと思っている人もいるかもしれないが、実はPythonも使うことができる。
ではflaskのようなPythonのWEBフレームワークも動くのかというと、実際動かせる。
しかしコードを設置すれば動くという状態ではなく、動かす為にはライブラリのインストールが必要。
そしてここで結構エラーになってハマる。
そこで今回はXSERVERにPythonとflaskを設定する方法について解説する。
この記事を書いている人
記事を読むメリット
XSERVERにPythonとflaskを設定する方法がわかる
XSERVERにPython3を設定
まずXSERVERにPython3を設定を設定する必要がある。
python3
なのよpython
って打つとpython2が動いてしまうやつね2021年2月だが、未だにデフォルトのpythonの設定が Python2.x
系となっている。
基本的にPythonでコードを書くならもうPython3を前提にしているので、Python2が動く設定では都合が悪い。
よって python
で Python3.x
系が動く設定にしたい。
方法としては検索したところ以下の候補が出てきた。
XSERVERにPythonを設定する方法の候補
pyenv経由でpythonをインストール
Pythonのバージョン管理ライブラリであるpyenv経由でpythonをインストールする方法が考えられる。
しかしこの方法はXSERVERではダメだと書かれている。
XSERVERで用意されているユーザーにはroot権限が付いていないようで、pyenvをインストールした後で任意のバージョンのPythonをインストールしようとすると失敗する。
pyenv install 3.9.1 Downloading Python-3.9.1.tar.xz... -> https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tar.xz Installing Python-3.9.1... python-build: use readline from homebrew WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib? WARNING: The Python readline extension was not compiled. Missing the GNU readline lib? ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib? Please consult to the Wiki page to fix the problem. https://github.com/pyenv/pyenv/wiki/Common-build-problems BUILD FAILED (CentOS Linux 7 using python-build 20180424)
linuxbrew経由でpythonをインストール
pyenvでインストールができなかったが、先人がlinuxbrewでインストールする方法を用意してくれていた。
この通りに実行すれば linuxbrew
をインストールしたら Python3.9.1
がインストールされる。
ただし筆者が実行した際は以下の設定を ~/.bash_profile
に書き込んだ段階でPATHの設定が壊れてコマンドが実行できなくなった。
test -d ~/.linuxbrew && eval $(~/.linuxbrew/bin/brew shellenv) test -d /home/linuxbrew/.linuxbrew && eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv) test -r ~/.bash_profile && echo "eval \$($(brew --prefix)/bin/brew shellenv)" >>~/.bash_profile source ~/.bash_profile
発生したエラーと直し方については以前の記事を見て欲しい。
あわせて読みたい
venvで仮想環境を作成
pyenvもlinuxbrewでも失敗して途方に暮れていたが、別の記事を発見。
Pythonは3.9がインストールできている。
python3 -V Python 3.9.1
あとは python
コマンドの参照先をPython2からPython3に切り替えるだけだ。
そこで以下のコマンドを 実行。
cd ~/ python3 -m venv venv
すると ~/venv/
以下に仮想環境が作成されそこにPython3.9も用意される。
さらに以下のコマンドを実行する。
source venv/bin/activate
するとユーザーが仮想環境 venv
に切り替わり、 python
の実体が3.9になる。
この状態で pip install flask
や pip install pandas
などpipインストールを実行できる。
ただしこのままだとsshログインする度に source venv/bin/activate
を実行しなくてはいけないので、ログイン時に自動で実行されるようにする。
cd ~/ vi .bash_profile
と実行してbash_profileの編集モードで開き、末尾に source venv/bin/activate
を追加する。
するとSSHログインする度に .bash_profile
の中身が実行されるので手動でコマンドを実行する必要がなくなる。
XSERVERでflaskの動作確認
flaskのインストールはpipで実行した。
ではあとは動作確認となる。
step
1サーバーアカウントにログインする
以下のログインページからサーバーアカウントにログインする。
間違えやすいのが法人用のXSERVER BUSINESS。
ログアウト後のページがXSERVER BUSINESSになっていることがあり、BUSINESSの方では個人用アカウントではログインできないので注意。
step
2ファイル管理画面を開く
ログインすると上のような画面になるので「ファイル管理」を選んでファイルマネージャを開く。
step
3WEBアプリを作成したいフォルダまで移動する
事前にXSERVERのサーバーパネル上でサブドメインを設定していればフォルダが存在するので、フォルダまで移動する。
場所は (ドメイン名)/public_html/(サブドメイン名)/
となる。
step
4ファイルを作成
サブドメインのフォルダまで来たらファイルを作成する。
作成するのは以下の3つのファイル。
- .htaccess
- index.cgi
- test.py
.htaccess
中身が空でも index
は動作するが、他のrouteが動作しなくなるので、以下の記述を設定しておく。
SetEnvIf Request_URI “." Ngx_Cache_NoCacheMode=off SetEnvIf Request_URI “." Ngx_Cache_StaticMode RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /index.cgi/$1 [QSA,L]
index.cgi
#!/home/(ユーザー名)/venv/bin/python3.9 from wsgiref.handlers import CGIHandler from test import app CGIHandler().run(app)
(ユーザー名)の部分は自分の環境のユーザー名を設定する。
このCGIファイルを経由してPythonが実行される。
1行目でPythonの場所を設定しているので、ここの設定を間違えるとブラウザでアクセスした際に 500エラー
になる。
3行目で test.py
を実行している。
test.py
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!'
test.py
はただのflaskの実行確認用のファイルなので Hello, World!
と表示するだけのファイルだ。
step
5動作確認
最後にWEBブラウザで動作確認をする。
https://(サブドメイン名).(ドメイン名)
にWEBブラウザでアクセスするとflaskの実行結果が確認できる。
500エラーが発生する場合は、index.cgiの1行目Pythonの場所が間違っている、flaskがインストールできていない、Pythonがインストールできていない等の原因が考えられる。
まとめ
今回はXSERVERにPythonとflaskを設定する方法について解説した。
2021年2月現在に設定してみたところvenvでPython3用の仮想環境を作るのが良さそうである。
時間が経つとXSERVER側の設定も変わる可能性があるので、都度最新のインストール方法を見つけるのが良いだろう。
他にもXSERVER(エックスサーバー)周りの設定について記事があるので、もし気になったっものがあれば見てみてほしい。