見出し画像

さくらレンタルサーバで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 をインストール

  1.  wget https://bootstrap.pypa.io/get-pip.py

  2. python get-pip.py

  3.  vim ~/.profile

    1. PATH 環境変数に $HOME/.local/bin を追加

    2. export PYTHONPATH=$HOME/.local/lib/python3.8/site-packages を追加

  4. ログインし直す

  5. 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>

app.py

#!/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()

index.cgi

#!/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の中身も作っていこうかな、、

この記事が気に入ったらサポートをしてみませんか?