エックスサーバー(XServer)でPython(flask)を動かしてみた件

Python

エックスサーバーのサーバー情報を確認してみたらPythonが使えるみたいなのでサブドメインを取得してWeb アプリ サイトを試験的に作成してみました!

以下、そのとき(2021-09-25)の備忘録となります。

構築環境

参考にされる方がいるかもしれないので、自分が構築したときの環境を以下に簡単にまとめます。

クライアント(作業マシン)OSWindows10 Home (Ver.21H1)
IDEVisual Studio Code
言語AnacondaのPython 3.8 (Xserverでは3.6系)
レンタルサーバープランX server X10 プラン
その他ツールTeraTerm,WinSCP

動機

Webアプリを公開して小遣い稼ぎでもしたいなと考えていたところ、エックスサーバーのサーバー情報を確認してみるとPythonが使えそうだということが判明したので、業務でも趣味の画像処理でも使っているPythonで公開Webアプリを作成したいなというところからの始まりです。

先人たちの多くの情報に助けられて半日程度で「Hello World」まで行きつくことができたので、それまでの道のりを記録していきます。

初めに、今回使用するツール群の紹介

上の構築環境にも記載していますが、以下のツールを使用しました。

  • Visual Studio Code(コードの編集)
  • TeraTerm(X Server へのSSH接続)
  • WinSCP(X Server へのFTP接続)

エックスサーバー(XServer)にインストールされているPythonではライブラリがpipインストールできないらしい

いろんなサイトをみてみると、エックスサーバーでPythonのWebフレームワークのflaskを動かそうとして悪戦苦闘されている記事が多くありました。

エックスサーバーのアカウントはルート権限がないため、ライブラリのインストールができないとのこと。

最初はちょいと落胆しましたが、調査を続けて行くと、Anaconda(Miniconda)を使用することで動かすことができました!

Linuxbrewやpyenvなど、色々インストールして道を作ってくれた先人たちには感謝しかありません。

今回、自分の方法はAnacondaを使用して環境を構築していきます。

Anacondaのインストール

インストーラーのダウンロード

公式サイトからインストーラーをダウンロードします。

エックスサーバー(XServer)にインストーラーをアップロード

WinSCPを使ってインストーラーをアップロードします。

アップロード場所は、public_htmlディレクトリ以下であればどこでもよいそうですが、

アップロード用ファイルを格納するディレクトリを作成しておいた方が今後も煩雑にならずにいいかもしれません。

WinSCPのダウンロードはこちらのリンク

エックスサーバーへのWinSCP設定手順はこちらのリンクが参考になります。

shコマンドによるインストール

TeraTermでエックスサーバーへ接続します。

TeraTermのダウンロードはこちらのリンク

エックスサーバーへのTeraTermからのSSH接続はこちらのリンクが参考になります。

接続後、インストーラーを格納しているディレクトリまでcdコマンドで移動し、以下のコマンドでインストールを行います。

sh Anaconda3-2021.05-Linux-x86_64.sh

「Please,press ENTER to continue」というメッセージが表示されます。

「ENTER」を実行するとインストールが始まります。

次に「Do you accept the license terms?[yes | no]」とメッセージが表示されます。

「yes」を実行します。

最後に、「Do you wish the installer to initialize Anaconda3 by running conda init?」とメッセージが表示されます。

「yes」を実行します。

PATHを通す

インストールが完了したら次のコマンドでPATHを通します。

source .bashrc

万が一、PATHが通っていない場合は.bashrcファイルの一番下に次の文字列を追記します。

export PATH=/home/*****/miniconda3/bin:$PATH

※*****の部分は、自分のサーバーIDに変更してください。

保存したら、source .bashrcを実行してください。

仮想環境の作成

ここまででAnacondaを使ってflaskで作成したプログラムを動かす準備はできましたが、baseがごちゃごちゃになると面倒なので、仮想環境を作ります。(ローカルじゃないのでクリーンにするのはかなり面倒になりそう。。。)

次のコマンドでapp001-flaskという仮想環境を作成。

conda create -n app001-flask python=3.8

次のコマンドで仮想環境をアクティベート。

conda activate app001-flask

次のコマンドで仮想環境のリストを表示し、アクティベートされている環境が確認できる。

conda info -e

flaskのインストール

次のコマンドでflaskをインストール。

conda install flask

ファイルの配置

配置例

public_html
└─test001.pchanz.com(サブドメイン)
│ .htaccess
│ helloFlask.py
│ index.cgi

.htaccess(常時SSL化)

RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteBase /
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.cgi [QSA,L]

 

helloFlask.py

#! /home/*****/miniconda3/envs/app001-flask/bin/python
from wsgiref.handlers import CGIHandler
from helloFlask import app
CGIHandler().run(app)

※*****の部分は自分のサーバーIDに変更してください。

 

index.cgi(仮想環境用)

#! /home/*****/anaconda3/envs/app001-flask/bin/python3.8
from wsgiref.handlers import CGIHandler
from helloFlask import app
CGIHandler().run(app)

動作確認

test001.pchanz.com(サンプルURLなので存在しません。悪しからず!)へアクセスすると

Hello, World!と表示されます!

所感

エックスサーバーでPythonのWebアプリが作成できる状態までもっていくことができました!

エックスサーバーなので割とコスパよくPythonのWebアプリが構築できるんじゃないかなと思いますが、アクセス量やライブラリを使った実行がどの程度まで実用性があるかは今後試して行こうと思います。

 

躓いたところ

.htacsess

サブドメイン以下のフォルダだったため、参考サイトとは少し異なる書き方になりました。

.htacsessの書き方を十分に理解したわけではないですが、次のサイトを参考に作成しました。

http://log.miraoto.com/2012/08/645/

 

cgiの文字コード

UTF-8のファイルをアップロードすると文字コードがSJISに変換されてしまって、改行コードが問題で500エラーになってしまいました。

WinSCPの内臓エディタで文字コードを変更して更新することで問題が解決しました。

文字コードが問題なのかは下記サイトで知見を得ました。

Pythonで書いたCGIをサーバー上で動かす【500エラーの対処法】
Pythonで書いたCGIファイルをレンタルサーバー上で動かすための方法を解説します。私がレンタルサーバー上でWebアプリを作成する際の備忘録です。誰かのお役に立てれば幸いです。CGIとは?CGIとは、Common Gateway Inte

 

参考サイト

エックスサーバーでPythonが動く環境を構築 | tabalog
エックスサーバーでPythonの環境構築でお悩みの方はいないでしょうか? エックスサーバーでは、そのままの状態でPythonを実行するとプログラムが動きませんでした。 こちらでは、エックスサーバーにA
エックスサーバーで簡単にpythonのpipとFlaskの環境を構築する - dattesar
エックスサーバーでは、最初からpipは入ってはいますが、root権限がないためデフォルトではpipを使えません。Flask環境を構築するために、何とかしてpipを使えるようにしたいのですが、調べてみるとLinuxbrew...

コメント

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