【사쿠라 렌탈 서버】flask를 사용해 본다.

6444 단어 server파이썬Flask

소개



렌탈한 사쿠라 렌탈 서버(스탠다드 플랜)에 API 서버를 세우려고 flask를 사용해 본다. (사쿠라 렌탈 서버에서는 상주 데몬 프로세스가 허용되지 않으므로 주의가 필요)
막힌 점도 있었으므로, 그 대처법도 함께 기록한다.

  • 환경 설정은 다음 페이지를 따랐다.

    Try #019 – 사쿠라 렌탈 서버에서 Flask를 이용한 주소 검색 API를 구축해 보았다


  • 만드는 응용 프로그램은 다음 페이지를 따랐다.

    【사쿠라 렌탈 서버】 (초보자용) Python과 pyenv와 Flask의 환경 구축 방법. |csh의 경우


  • 절차


  • /home/(UserName)/www/hello 아래에 .htaccess , app.py , index.cgi
  • 크롬에서 https://(UserName).sakura.ne.jp/hello/로 이동
  • .htaccess : Apache 제어 설정 파일 중 하나. 통상 Apache의 제어를 실시한다. 사쿠라 렌탈 서버상에서 자신 전용으로 설정을 바꾸고 싶은 경우는 httpd.conf 를 변경한다.

    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에서 .htaccess 에 액세스할 때 다음 표시가.


    파일 직접 런타임



    ssh 연결된 사쿠라 서버의 명령줄에서 https://(UserName).sakura.ne.jp/hello/ 명령으로 직접 $python index.cgi 를 실행해 보면 다음과 같은 오류가 발생합니다.


    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 직접 실행



    이번에는 오류없이 실행할 수있었습니다.


    그러나 여전히 크롬에서 액세스하면 internal server error가 발생합니다.

    파일 액세스 권한 재작성


    index.cgi 를 실행하면, 현재 상태에서는 이하.


    여기서 $ ls -la로 실행 권한을 부여합니다.


    이렇게하면 Chrome에서도 hello world를 확인할 수있었습니다!



    결국



    덧붙여서, 권한은 어느 정도 있으면 좋을까라고 생각해 여러가지 시험한 결과, 최소한
  • .htaccess의 소유자 읽기 권한
  • index.cgi에 소유자의 읽기 및 실행 권한

  • 있다면 정상적으로 반응을 반환하는 것으로 나타났습니다.


    app.py에 무슨 권한도 부여되어 있지 않아도 움직이는 것은 이상하다.

    참고문헌



    Try #019 – 사쿠라 렌탈 서버에서 Flask를 이용한 주소 검색 API를 구축해 보았다
    사쿠라의 렌탈 서버에서 Flask를 사용하려고 곤란한 것을 남겨 둡니다.
    chmod? chown? 잘 모르는 사람을 위한 파일 권한계 정리

    좋은 웹페이지 즐겨찾기