PythonアプリをテストしてXserver上で実行する手順について

application Python
Python

この記事では、ローカル環境で作った簡単なPythonアプリをローカルホストでテストし、Xserverへアップロードして動作を確認する一連の手順について説明します。

私の環境については下記のとおりです。

  • クライアント:MacbookPro Catalina 10.15
  • IDE:VSCode
  • 言語:Python 3.7(Xserverでは3.6系)
  • サーバ:Xserver X10プラン

実行するPythonアプリを作成する

まずは実行させるPythonファイルを作成します。ここでは動作を確認することが目的なので、単純に”Hello World”と表示させるだけのアプリです。

#!/usr/bin/env python3.7

print("Content-Type: text/html\n\n")
print("Hello, World!!")

ローカルホストでテストする

アプリをサーバへアップロードする前に、まずはローカルで動作を見てみます。Pythonにはデフォルトでテスト用のローカルサーバ機能が入っていますので簡単に起動できます。

※1 一つ私がハマった点としては、.pyファイルをブラウザで実行する際、必ず403エラーが出てしまうことでした。ファイルに対し権限を付与し忘れていたことが原因でしたので、忘れずにchmodしましょう。

chmod -x cgitest.py

詳細な手順についてはこちらのQiita記事をご覧いただくといいかと思います。

Pythonで作成したWebアプリをエックスサーバー上で稼働させる - Qiita
概要 Pythonで簡単なWebアプリを作成しました。手順としては、まずパソコン上のローカルホスト (localhost)でテストし、最後にエックスサーバーにアップロードしました。画面表示が英数字だけであれば簡単ですが、漢字を表...

忘れずにChmodをしたらローカルホストを立ち上げます。

python -m http.server --cgi 8080

ローカルホストのポート(8080の部分)は省略することも可能です。その場合、デフォルト8000番で立ち上がります。

アプリをテストしてみましょう。ブラウザのURLバーに下記のアドレスを指定します。無事にHello Worldが表示されたらOKです。

localhost:8080/cgi-bin/cgitest.py

Xserverへsshでログインし、アプリを実行する

上で動作を確認したアプリをXserverへアップロードし、実行させます。

Xserverへsshする

基本的には下記ブログを参考にしました。

初心者でもわかる!XserverでPython実行環境を構築する方法
レンタルサーバーのXserver上で、Pythonで作成したWebアプリを動かす環境を構築しました。PythonでWebアプリを作成するフレームワークは、軽量な「Flask」を用いました。 「Python+Flask+X ...

※2 どういうわけかブログで紹介されていたConfigファイルが上手く動いてくれなかったため、sshコマンドについては下記を参考にしています。

$ ssh -l サーバーID -i 秘密鍵ファイル名(今回はid_xserver_rsa.key) サーバーID.xsrv.jp -p 10022
エックスサーバーにssh接続する方法(ターミナル利用) - Qiita
最近ターミナルにも慣れてきたのでssh接続を実行してみた。そのメモ。 0.環境 エックスサーバー Mac OS Sierra 1.エックスサーバーでsshの設定 こちらを参考に公開鍵認証用の鍵ペアを作成。秘密鍵(サーバ...

これでXserverに対しsshでログインができました。

LinuxbrewとPythonをインストールする

サーバにはデフォルトでPythonの実行環境が無いため、自分でインストールする必要があります。

Linuxbrewというサービスがあると、brew install XXXの簡単なコマンドで今後パッケージがインストールできますので、まずこちらを導入していきます。下のコマンドでインストールができます。

Homebrew on Linux
Documentation for the missing package manager for macOS.
sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)"

しばらく時間をおいてインストールが完了すると、下記のメッセージが出ます。

==> Next steps:
- Install the Linuxbrew dependencies if you have sudo access:
 Debian, Ubuntu, etc.
   sudo apt-get install build-essential
 Fedora, Red Hat, CentOS, etc.
   sudo yum groupinstall 'Development Tools'
 See http://linuxbrew.sh/#dependencies for more information.
- Configure Linuxbrew in your ~/.profile by running
   echo 'eval $(/home/サーバID/.linuxbrew/bin/brew shellenv)' >>~/.profile
- Add Linuxbrew to your PATH
   eval $(/home/サーバID/.linuxbrew/bin/brew shellenv)
- We recommend that you install GCC by running:
   brew install gcc
- Run `brew help` to get started
- Further documentation: 
   https://docs.brew.sh
Warning: /home/サーバID/.linuxbrew/bin is not in your PATH.

ただし、この指示通りやっても何故か上手く行かないため、下記のコマンドを実行する必要があります。

$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)"
$ 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
$ echo "eval $($(brew --prefix)/bin/brew shellenv)" >>~/.profile

※3 私はここでパス設定をミスってLinuxコマンドが使えなくなる状態に陥りました。対処方法としては下記を参照し、その後Linuxbrewのアンインストール->再インストール->再設定を行いました。

これでLinuxbrewのセットアップは完了です。brewコマンドが使えるようになっているので、これを使ってpythonをインストールしていきます。

brew install python

これでOKです。少し時間がかかります。終わったら一応Pythonのバージョンを確かめておきましょう。本稿執筆時は3.8.xでした。

python3 --version

同時に、今回のサンプル用のディレクトリも作って起きましょう。このディレクトリにcgiファイルを配置することになります。

$ mkdir [サーバーID].xsrv.jp/public_html/test
$ cd [サーバーID].xsrv.jp/public_html/test

以上の作業で環境構築は完了です。

アプリケーションを動かす

さて、実際にアプリケーションを動かしてみましょう。冒頭で作ったcgitest.pyをベースにします。

XserverにはファイルマネージャというWebFTPの仕組みがありますので簡単に作ったファイルをアップロードできます。

ファイルマネージャ利用方法 | レンタルサーバーならエックスサーバー
レンタルサーバー「エックスサーバー」のご利用マニュアル|ブラウザからファイル操作が行える「ファイルマネージャ」で提供する機能の一覧と利用方法に関するご案内です。

ファイルマネージャを開き、/[サーバID].xsrv.jp/public_html/test/ に移動し、下記2つのファイルをアップロードします。

#!/usr/bin/env python3.6

print("Content-Type: text/html\n\n")
print("Hello, World!!")
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /test/cgitest.cgi/$1 [QSA,L]

ここで、cgitest.cgiとリネームしていることに注意してください。.pyのままだとうまくいきません。

.htaccessとはフォルダ単位でWeb表示される際の振る舞いをコントロールするものです。

また、.cgiファイルはアップロード後、パーミッションを変更する必要があります。下記コマンドを/test で実行するか、ファイルマネージャ上でパーミッション:755としてください。

chmod 755 cgitest.cgi

これで準備OKです。ブラウザで https://[サーバーID].xsrv.jp/test を開いてみましょう。

このように表示されれば成功です。

トラブルシューティング

この一連の作業をするにあたり、私も躓いた箇所が多くありましたので、備忘録的にありがち?なポイントを記載します。

  • ディレクトリとファイルのパーミッション:cgiファイルおよびcgiファイルが置かれているディレクトリは755、.htaccessは644に設定してください
  • シェバン:!/usr/bin/env python3.6 に設定推奨。linuxbrewでインストールしたディレクトリを指定するとなぜか500 Internal errorに。
  • 500 Internal errorが消えないとき:一度コマンドライン上で “Python3 cgitest.cgi”と直接起動してみてください。結果が出たらcgiファイルの文法自体のミスではないです。
  • 原因がわからない場合、Xserverサーバーパネルへログインし、エラーログをダウンロードしてみてください。私の場合は”End of script output before headers: cgitest.cgi”が連続して出ており、.htaccessの書き方には問題が無いことがわかりました。結果的に、2つ目のシェバンの書き換えでクリアできました。

これ以外にもハマりポイントがあると思います。エラーログは見落としがちな機能なので是非活用しましょう。ググる際にも精度が上がると思います。

今回は以上です。お読みいただきありがとうございました。

この記事が気に入ったら
いいね ! しよう

Twitter で

IT企業で働いています。このブログではIT、キャリア、資格などについて発信しています。My opinion is my own.

Huliをフォローする
the Biztech blog

コメント

タイトルとURLをコピーしました