2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CoreServerでPython Flaskを利用する

Posted at

かきかけです。

CoreServerでのサブドメイン作成

サブドメインの作成方法は2種(WebUIからの操作)

  • ドメイン>ドメイン管理>新しく追加
  • ウェブ>サブドメイン管理>サブドメインを追加
    今回は1つ目の方法を採用。CGIの有効化範囲を狭めるため。
  1. ドメインページのドメイン管理タブから新しくドメインを追加をクリック
  2. 適当なドメイン名を入力し、作成する。
    このとき、CGIを有効化にチェック。
    image.png

sshでCoreServerに接続できるようにする。

sshできるようにするにはCoreServerの公式ドキュメントを読むと良い。
鍵の「承認」を行わないと、鍵は有効化されない。

https://help.coreserver.jp/manual/v2/ssh-use/?_gl=1*vtlwv9*_ga*MTk0MzcyNTkzMy4xNjc1MDgxNjU3*_ga_J8YE7Q8ZQD*MTY4NzYyMDM1NS45LjEuMTY4NzYyMTUzNC4wLjAuMA..

その上で、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へと飛びます。
.htaccess
Options -Indexes +ExecCGI
AddHandler cgi-script .cgi

DirectoryIndex index.cgi

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アドレスを返すようにしてみました。

test.py
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を動かすぞぉという話です。

さいごに

いかがでしたか?
今回はアクセスパスによる関数の振り分けはできませんでしたが、また追記したいと思います

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?