WEBサービス

XSERVERにPythonとflaskを設定する方法

2021-02-21

XSERVERにPythonとflaskを設定する方法


XSERVER(エックスサーバー)にPythonとflaskを設定したい


エックスサーバーでWordPressが動いているので、使えるプログラミング言語はPHPのみと思っている人もいるかもしれないが、実はPythonも使うことができる。

ではflaskのようなPythonのWEBフレームワークも動くのかというと、実際動かせる

しかしコードを設置すれば動くという状態ではなく、動かす為にはライブラリのインストールが必要

そしてここで結構エラーになってハマる。

そこで今回はXSERVERにPythonとflaskを設定する方法について解説する。

この記事を書いている人


システムエンジニア、AIエンジニアと、IT業界で10年以上働いている中堅。PythonとSQLが得意。SEとして浅く広い感じで経験を積んでいるためサーバー周りについてもそこそこ知識がある。

記事を読むメリット

XSERVERにPythonとflaskを設定する方法がわかる


XSERVERにPython3を設定


まずXSERVERにPython3を設定を設定する必要がある。


Python3?デフォルトでインストールされてないの?
されてはいるんだけど、実行コマンドが python3 なのよ
あー、例によって python って打つとpython2が動いてしまうやつね


2021年2月だが、未だにデフォルトのpythonの設定が Python2.x 系となっている。

基本的にPythonでコードを書くならもうPython3を前提にしているので、Python2が動く設定では都合が悪い。

よって pythonPython3.x 系が動く設定にしたい。


方法としては検索したところ以下の候補が出てきた。

XSERVERにPythonを設定する方法の候補

  • pyenv経由でpythonをインストール
  • linuxbrew経由で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 flaskpip 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アカウント - ログイン


    間違えやすいのが法人用のXSERVER BUSINESS

    ログアウト後のページがXSERVER BUSINESSになっていることがあり、BUSINESSの方では個人用アカウントではログインできないので注意。


    step
    2
    ファイル管理画面を開く

    XSERVER ファイル管理画面を開く

    ログインすると上のような画面になるので「ファイル管理」を選んでファイルマネージャを開く


    step
    3
    WEBアプリを作成したいフォルダまで移動する

    事前に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(エックスサーバー)周りの設定について記事があるので、もし気になったっものがあれば見てみてほしい。

    ITipsと同じようなブログを作る方法

    ブログに興味がありますか?

    もしブログに興味がある場合は↓このページ↓を参考にすれば、ITipsと同じ構成でブログを作ることができます

    サーバー、ドメイン、ASPと【ブログに必要なものは全て】このページに書きました。
    同じ構成でブログ作るのはいいけど、記事はマネしないでネ (TДT;)

    ランキング参加中

    にほんブログ村 IT技術ブログへ

    他にもブログやSNSで紹介してくれると励みになります。

    はてブのコメントで酷評されると泣きます(´;ω;`)

    -WEBサービス
    -,

    © 2024 ITips