ロリポップ!でpythonのpipを導入し、Flaskの環境を構築する

pythonでWebアプリケーションの勉強をしたいけど、いきなりVPSサーバーを借りるほどじゃない。出来るだけ費用を抑えるために、まずは共有レンタルサーバーでやりたいと思い、ロリポップ!でFlaskを導入できるか試してみました。

SSHを使えるのは、スタンダードプラン、ハイスピードプラン、エンタープライズプランですが、スタンダードプランなら、1か月600円(税抜)ですし、ハイスピードプランでも1か月1,000円(税抜)です。12か月契約ならスタンダードプランで500円(税抜)、ハイスピードプランで750円(税抜)となり、かなり魅力的な価格です。以前は、ロリポップ!は遅いと言われていましたが、10日間の無料体験をしたところ、今契約しているエックスサーバーと体感的な速さは変わらず、どちらも速くストレスなくページが表示されました。しかも、無料体験中にプラン変更もできるので、すべてのプランを試せます。

また、ライトプラン以上のプランを12か月以上契約すると、45種類の中からドメインも1つ無料で使えるので、サーバーを移行するか迷っています。エックスサーバーには全く不満はないのですが、私のような個人ブログではオーバースペックな感じもするので、ロリポップ!の方がいいのかなと心が揺れ動いています。

エックスサーバーで簡単にpythonのpipとFlaskの環境を構築する

SSHでサーバーにログインする

事前に【サーバーの管理・設定】からSSHを有効にして、【サーバー】【アカウント】【接続ポート】【SSHパスワード】を確認したら、TeraTermなどのターミナルソフトやPowerShellから、サーバーにログインします。

PowerShellからだと、以下のように入力し、その後、パスワードを入力するとログイン出来ますが、パスワードがすごく長いので面倒です。

ssh -p 接続ポート アカウント@サーバー

詳しい説明はこちら
SSHは、スタンダードプラン、ハイスピードプラン、エンタープライズプランで利用できます。

pipを使えるようにする

python3系のバージョンを確認

python3 --version

Python 3.7.3でした。

pipの導入

最初は、pipを使えないので、まずはpipを使えるようにする必要があります。

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3 get-pip.py --user

PATHを通す

これで、pipが使えるようになりますが、まだPATHが通っていません。PATHを通すのにカレントディレクトリを確認しておきます。

pwd

これで、/home/users/番号/ユーザー名と出力されるはずです。

次に、PATHを通すのに、.bash_profileを作成します。

vi .bash_profile
.bash_profile
PATH=$PATH:/home/users/番号/ユーザー名/.local/bin
export PATH

pwdで確認した番号とユーザー名を入力してください。

source .bash_profile

確認

pip3 list
Package                Version
---------------------- -----------
mysql-connector-python 8.0.17
mysqlclient            1.4.2.post1
pip                    20.2.4
protobuf               3.9.0
PyMySQL                0.9.3
setuptools             40.8.0
six                    1.12.0
wheel                  0.35.1
appdirs==1.4.4
asgiref==3.2.10
beautifulsoup4==4.9.3
boto==2.49.0
bottle==0.12.18
branca==0.4.1
certifi==2020.6.20
chardet==3.0.4
click==7.1.2
cycler==0.10.0
distlib==0.3.1
Django==3.1.2
docutils==0.16
dominate==2.6.0
filelock==3.0.12
Flask==1.1.2
Flask-Bootstrap4==4.0.2
folium==0.11.0
idna==2.10
importlib-metadata==2.0.0
itsdangerous==1.1.0
japanmap==0.0.22
Jinja2==2.11.2
joblib==0.17.0
kiwisolver==1.2.0
lxml==4.6.1
MarkupSafe==1.1.1
matplotlib==3.3.2
mysql-connector-python==8.0.17
mysqlclient==1.4.2.post1
nose==1.3.7
numpy==1.19.2
oauthlib==3.1.0
opencv-python==4.4.0.44
packaging==20.4
pandas==1.1.3
pbr==5.5.1
Pillow==7.2.0
pip-review==1.1.0
plotly==4.11.0
protobuf==3.9.0
pyasn1==0.4.8
PyMySQL==0.9.3
pyparsing==2.4.7
PySocks==1.7.1
python-dateutil==2.8.1
pytz==2020.1
PyYAML==5.3.1
requests==2.24.0
requests-oauthlib==1.3.0
retrying==1.3.3
scikit-learn==0.23.2
scipy==1.5.3
simplejson==3.17.2
six==1.12.0
sklearn==0.0
soupsieve==2.0.1
sqlparse==0.4.1
threadpoolctl==2.1.0
tweepy==3.9.0
urllib3==1.25.11
virtualenv==20.0.35
visitor==0.1.3
Werkzeug==1.0.1
xlrd==1.2.0
zipp==3.3.1

Flaskの環境構築

Flaskをインストール

pip3 install flask

ソースコードを配置

ルートフォルダにソースコードをおいて、きちんと動くかテストしていきます。階層はこんな感じです。

/
└─flask-test
  │ .htaccess
  │ helloFlask.py
  │ index.cgi
  │
  └─templates
     render.html

flask-testフォルダの中

.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /flask-test/index.cgi/$1 [QSA,L]

パーミッションは、604。フォルダ名がflask-testでない場合は、/flask-test/index.cgiの部分を変更してください。

helloFlask.py
from flask import Flask , render_template


app = Flask(__name__)


@app.route('/')
def hello():
    return '<h1>Hello World</h1>'


@app.route('/render')
def index():
    return render_template('render.html')


if __name__ == '__main__':
    app.run(debug=True)

パーミッションは、600

index.cgi
#!/usr/local/bin/python3
from wsgiref.handlers import CGIHandler
from helloFlask import app
CGIHandler().run(app)

パーミッションは、700。.pyファイル名をhelloFlask.pyから変えている場合は、helloFlaskの部分を変更してください。

templatesフォルダの中

render.html
<!DOCTYPE html>
<html>
    <head>
    </head>
    <body>
    <h1>render template</h1>
    </body>
</html>

パーミッションは、604

ファイルのパーミッション

出典:ロリポップ!

CGI設置についての注意事項

万が一、CGIを暴走させるなどしてサーバーをダウン及び負荷をかけるような場合は、以降、一切CGIを利用できなくなります。利用前にローカル環境で十分にテストしましょう。

詳しくは、こちら

動作テスト

/flask-test

/flask-test/render

問題なく動作しています。

これなら、ロリポップ!に移行しても大丈夫そうですね。ここまでかなり試行錯誤しながらだったので、ものすごく時間がかかりましたが、10日間も無料体験できたので、スタンダードプラン、ハイスピードプランの2つとも試せました。