かきかけです。
CoreServerでのサブドメイン作成
サブドメインの作成方法は2種(WebUIからの操作)
- ドメイン>ドメイン管理>新しく追加
- ウェブ>サブドメイン管理>サブドメインを追加
今回は1つ目の方法を採用。CGIの有効化範囲を狭めるため。
sshでCoreServerに接続できるようにする。
sshできるようにするにはCoreServerの公式ドキュメントを読むと良い。
鍵の「承認」を行わないと、鍵は有効化されない。
その上で、CoreServer内のファイルをいじっていく。viで編集するのも良いが流石に不便。VSCodeのMicrosoft製リモート接続できる拡張機能を利用するのが便利。(使い方は触れない)
ssh <CoreServerアカウント名>@<CoreServer割当サーバドメイン> -i <自マシンの秘密鍵へのパス>
ファイル作成
今回作成するのは
- index.cgi
- .htaccess
- test.py
の3つです。
すべてのファイル作成を以下のディレクトリで行います。
~/domain/<作成したサブドメイン>/public_html
cgi-binディレクトリは今回は利用しません。
.htaccess
- "AddHandler cgi-script .cgi .pl"でcgiファイルの実行を許可しています。
- ”DirectoryIndex index.cgi”で ディレクトリのインデックスをindex.cgiにしました。これを記述しないと、ファイル名を指定しないディレクトリへのアクセスがindex.htmlへと飛びます。
Options -Indexes +ExecCGI
AddHandler cgi-script .cgi
DirectoryIndex index.cgi
index.cgi
#!/usr/bin/python3
import cgitb
cgitb.enable()
from wsgiref.handlers import CGIHandler
from test import app
CGIHandler().run(app)
1行目 シェバン(メチャ大事)
- 1行目、"#"で始まるからと言ってコメントではない。
- Pythonのインタプリタの絶対パスを指定する。(ホームディレクトリを示す~は利用できない)
適宜、pipでモジュールを追加するなり、pyenvでPython仮想環境を変更するなどして、お好みでどうぞ。 - 筆者は/home/<ユーザ名>/.pyenv/versions/anaconda3-2023.03/bin/python3.10を利用しています。
- pythonコマンドを叩いて使用しているインタプリタを利用したいなら”which python”とコマンドを叩いて、コマンドのパスを確認してください。
- サービスが用意しているPythonのパスはCoreServerの場合"/usr/bin/python3"ですが、他のサービスの場合、異なるかも。whichコマンド叩きましょう(pyenv使うのがおすすめ)
test.py(Flask利用 本体)
今回はアクセス元IPアドレスを返すようにしてみました。
from flask import Flask
from flask import request
app = Flask(__name__)
@app.route('/')
def index():
# IPアドレスを取得する
ip = request.remote_addr
path = request.path
return "Your IP address is " + ip + "."
if __name__ == '__main__':
app.run()
はじめに
「はじめに」なーんて書いてる記事、わんさかありますが、筆者の事情、背景なんてどうでも良いよ。とっとと本題入れという方が多いと思い、最後に「はじめに」を書いてみました。
レンタルサーバ(not VPS)仕様で多くのサービスがPython使えるって書いてるけど、使い勝手の良いものではありません。
でも、VPS借りたり、Herokuみたいなの契約したりとするとなると お金が、、、、という方は多いのではないでしょうか
(「はじめに」あるある:とりあえず共感を求めてみる)
今回は、そんな私がレンタルサーバでPythonを動かし、Flaskを動かすぞぉという話です。
さいごに
いかがでしたか?
今回はアクセスパスによる関数の振り分けはできませんでしたが、また追記したいと思います