さくらレンタルサーバでFlask起動
前提
さくらのレンタルサーバ スタンダードプラン
ライト(月121円)とスタンダード(月500円)の比較
ライトの欠点
SSH接続不可能
最短契約期間が12ヶ月から(月165円単価)
スタンダードの欠点
月単位契約だと660円で少し割だが(月500円は3年プラン)
(なので正直、AWSに慣れている人はAWS Lightsailで立てた方が良い気はする、、、)
環境構築
サーバアクセス
ssh ユーザーアカウント@ユーザーアカウント.sakura.ne.jp
(パスワードはさくらからのメールに記載。サーバ設定画面右上のドメインをクリックしたところからパスワード変更可能)
サーバ環境設定
シェルを csh ⇨ bash に変更
chsh -s /usr/local/bin/bash
参考:https://www.memo.dayjournal.dev/memo/try-019/
pip をインストール
python get-pip.py
vim ~/.profile
PATH 環境変数に $HOME/.local/bin を追加
export PYTHONPATH=$HOME/.local/lib/python3.8/site-packages を追加
ログインし直す
pip install numpy
参考:http://kajits.sblo.jp/article/189693599.html
ライブラリのインストール
pip install Flask
Webサイト用のファイルを準備
参考:https://qiita.com/ninoko1995/items/8b01fd02bada3a2fa794
/home/(UserName)/www/hello 配下に、 .htaccess, app.py, index.cgi の3つのファイルを作成
.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /hello/index.cgi/$1 [QSA,L]
<Files ~ "\.py$">
deny from all
</Files>
#!/usr/local/bin/python
# -*- coding: utf-8 -*-
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "Hello World!\n"
if __name__ == '__main__':
app.run()
#!/usr/local/bin/python
import cgitb
cgitb.enable()
from wsgiref.handlers import CGIHandler
from app import app
from sys import path
path.insert(0, '/(UserName)/www/hello/')
from app import app
class ProxyFix(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
environ['SERVER_NAME'] = "(UserName).sakura.ne.jp"
environ['SERVER_PORT'] = "80"
environ['REQUEST_METHOD'] = "GET"
environ['SCRIPT_NAME'] = ""
environ['PATH_INFO'] = "/"
environ['QUERY_STRING'] = ""
environ['SERVER_PROTOCOL'] = "HTTP/1.1"
return self.app(environ, start_response)
if __name__ == '__main__':
app.wsgi_app = ProxyFix(app.wsgi_app)
CGIHandler().run(app)
https://(UserName).sakura.ne.jp/hello/ にアクセスして、Hello World が表示されればOK
Internal Server Error
Internal Server Error の場合
ファイルアクセス権限
chmod 744 index.cgi
文字コード
ASCII or UTF-8 ならOK
UTF-8 BOM とかだとダメらしい
#!/usr/local/bin/python
pythonの場所を書かないとダメなんすね。
pyenvで環境設定した場合は、その環境のpythonを参照してね。
which python とかで要確認
次回は、Flaskの中身も作っていこうかな、、
この記事が気に入ったらサポートをしてみませんか?