エックスサーバーのサーバー情報を確認してみたらPythonが使えるみたいなのでサブドメインを取得してWeb アプリ サイトを試験的に作成してみました!
以下、そのとき(2021-09-25)の備忘録となります。
構築環境
参考にされる方がいるかもしれないので、自分が構築したときの環境を以下に簡単にまとめます。
クライアント(作業マシン)OS | Windows10 Home (Ver.21H1) |
IDE | Visual 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の書き方を十分に理解したわけではないですが、次のサイトを参考に作成しました。
cgiの文字コード
UTF-8のファイルをアップロードすると文字コードがSJISに変換されてしまって、改行コードが問題で500エラーになってしまいました。
WinSCPの内臓エディタで文字コードを変更して更新することで問題が解決しました。
文字コードが問題なのかは下記サイトで知見を得ました。
コメント