18
16

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.

【さくらレンタルサーバー】flaskを使ってみる。

Last updated at Posted at 2019-11-02

はじめに

レンタルしたさくらレンタルサーバー(スタンダードプラン)に、APIサーバーを立てようと思ってflaskを使ってみる。(さくらレンタルサーバでは常駐デーモンプロセスは許可されていないため、注意が必要
詰まった点もあったので、その対処法も合わせて記録する。

  • 環境設定は、以下のページに従った。

Try #019 – さくらのレンタルサーバでFlaskを利用した住所検索APIを構築してみた

  • 作るアプリケーションは、以下のページに従った。

【サクラレンタルサーバー】 (初心者向け) PythonとpyenvとFlaskの環境構築方法。| cshの場合

手順

  • /home/(UserName)/www/hello以下に、.htaccess,app.py,index.cgiの三つのファイルを作成
  • chromeからhttps://(UserName).sakura.ne.jp/hello/にアクセス

.htaccess : Apacheの制御設定ファイルの一つ。通常Apacheの制御を行うhttpd.confはWEBサーバー全体の制御を行っているため、サーバー管理者しか変更することができない。さくらレンタルサーバー上で自分専用に設定を変えたい場合は、.htaccessを変更する。

cman.jp: htaccessとは?

.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /hello/index.cgi/$1 [QSA,L]
<Files ~ "\.py$">
  deny from all
</Files>
app.py
#!/home/miyablo/.pyenv/versions/flask_peewee_3.6.4/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
#!/home/miyablo/.pyenv/versions/flask_peewee_3.6.4/bin/python

import cgitb
cgitb.enable()

from wsgiref.handlers import CGIHandler
from app import app
CGIHandler().run(app)

発生したエラーとその対応

chromeからのアクセス時

chromeからhttps://(UserName).sakura.ne.jp/hello/にアクセス時に、以下の表示が。
スクリーンショット 2019-11-02 17.07.59.png

ファイルの直接実行時

ssh接続したさくらサーバーのコマンドライン上で、$python index.cgiコマンドにて直接index.cgiを実行してみると、以下のようなエラーが。
スクリーンショット 2019-11-02 17.09.49.png

index.cgiの書き換え

このエラーが以下のページと同じエラーだったので、以下のページに書かれているようにindex.cgiファイルを編集。

さくらのレンタルサーバーでFlaskを使おうとして困ったことを残しておく.

index.cgi
#!/home/miyablo/.pyenv/versions/flask_peewee_3.6.4/bin/python

import cgitb
cgitb.enable()

from wsgiref.handlers import CGIHandler
from app import app
#-------------------以下、書き換え部分------------------------
from sys import path

path.insert(0, '/miyablo/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'] = "miyablo.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)

index.cgiの直接実行

今度はエラーなく実行することができた。
スクリーンショット 2019-11-02 17.22.19.png

しかしながら、いまだにchromeからのアクセスではinternal server errorが発生している。

ファイルアクセス権限の書き換え

$ ls -laを実行すると、現状では以下。
スクリーンショット 2019-11-02 17.27.06.png

ここで、chmod 744 index.cgiとして、実行権限を付与する。
スクリーンショット 2019-11-02 17.28.48.png

こうすることで、chromeからでもhello worldが確認できた!

スクリーンショット 2019-11-02 17.29.39.png

結びに

ちなみに、権限はどの程度あればいいのかと思って色々試した結果、最低限

  • .htaccessに所有者の読み取り権限
  • index.cgiに所有者の読み取り・実行権限

があれば、正常に反応を返すことがわかった。
スクリーンショット 2019-11-02 17.36.30.png

app.pyになんの権限も付与されていないでも動くってのは不思議だなぁ。

参考文献

Try #019 – さくらのレンタルサーバでFlaskを利用した住所検索APIを構築してみた
さくらのレンタルサーバーでFlaskを使おうとして困ったことを残しておく.
chmod? chown? よくわからんって人のための、ファイル権限系まとめ

18
16
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
18
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?