AWS EC2에 Flask 앱 배포

5982 단어 awsubuntupythonflask
Flask는 웹 요청에 대한 응답을 동적으로 생성하기 위한 간단한 인터페이스를 제공하는 Python용 웹 프레임워크입니다. Amazon Web Services EC2 인스턴스에서 Flask 서버를 시작하는 것으로 시작하겠습니다.

1. EC2 인스턴스 시작



1. EC2 인스턴스를 시작합니다.
  • AWS 콘솔에 로그인here
  • AWS 서비스에서 EC2를 선택합니다.
  • 인스턴스 시작을 클릭합니다.
  • Amazon Linux 대신 Ubuntu Server 16.04 LTS(HVM), SSD 볼륨 유형 — ami-43a15f3e를 선택합니다. 정확한 버전은 시간에 따라 변경될 수 있습니다.
  • 검토 및 실행을 클릭합니다.
  • 아래와 같이 보안 그룹을 구성합니다. 이 설정은 어디서나 포트 80(HTTP)에 대한 액세스를 허용하고 모든 IP 주소에서만 ssh 액세스를 허용합니다.


  • 2. 인스턴스 설정



    이제 인스턴스에 연결했으므로 필요한 일부 프로그램을 설치할 차례입니다.

    1. 터미널에서 ssh를 사용하여 인스턴스에 연결합니다.$ ssh -i "yourapp.pem" [email protected]
    2. Apache 웹 서버와 mod_wsgi를 설치합니다.

    $ sudo apt-get update
    $ sudo apt-get install apache2
    $ sudo apt-get install libapache2-mod-wsgi
    


    브라우저에서 인스턴스의 퍼블릭 DNS 이름을 가리키면 Apache 서버의 "It works!"가 표시되어야 합니다. 페이지.



    3. pip 도구(또한 설치해야 함)를 사용하여 Flask를 설치합니다.

    $ sudo apt-get install python-pip
    $ sudo pip install flask
    


    4. Flask 앱용 디렉터리를 만듭니다.

    작업할 홈 ​​디렉터리에 디렉터리를 만들고 기본적으로 Apache 구성/var/www/html에 정의된 사이트 루트에서 해당 디렉터리에 연결합니다. 현재 값은 /etc/apache2/sites-enabled/000-default.conf를 참조하세요.

    $ mkdir ~/flaskapp
    $ sudo ln -sT ~/flaskapp /var/www/html/flaskapp
    


    작업이 작동하는지 확인하려면 간단한 index.html 파일을 만드십시오.

    $ cd ~/flaskapp
    $ echo "Hello World" > index.html
    


    이제 브라우저에서 (인스턴스 퍼블릭 DNS)/flaskapp으로 이동하면 "Hello World"가 표시되어야 합니다.



    3. 간단한 Flask 앱 실행



    1. 앱을 만듭니다.
    Flask 문서에서 간단한 "Hello world"example를 사용합니다. flaskapp.py라는 파일에 다음 내용을 넣습니다.

    from flask import Flask
    app = Flask(__name__)
    @app.route('/')
    def hello_world():
      return 'Hello from Flask!'
    if __name__ == '__main__':
      app.run()
    


    2. .wsgi 파일을 생성하여 앱을 로드합니다.flaskapp.wsgi라는 파일에 다음 내용을 넣습니다.

    #flaskapp.wsgi
    import sys
    sys.path.insert(0, '/var/www/html/flaskapp')
    
    from flaskapp import app as application
    


    3. mod_wsgi를 활성화합니다.

    Apache 서버는 기본적으로 HTML 페이지를 표시하지만 Flask 앱에서 동적 콘텐츠를 제공하려면 몇 가지를 변경해야 합니다./etc/apache2/sites-enabled/000-default.conf에 있는 apache 구성 파일에서 DocumentRoot/var/www/html 줄 바로 뒤에 다음 블록을 추가합니다.



    WSGIDaemonProcess flaskapp threads=5
    WSGIScriptAlias / /var/www/html/flaskapp/flaskapp.wsgi
    
    <Directory flaskapp>
        WSGIProcessGroup flaskapp
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
    </Directory>
    


    4. 웹서버를 다시 시작합니다.

    이 명령을 사용하여 새 구성으로 서버를 다시 시작하십시오.
    $ sudo service apache2 restart
    5. 테스트 구성.

    브라우저에서 EC2 인스턴스의 퍼블릭 DNS로 다시 이동하면 앱의 hello_world 함수에서 반환하는 텍스트 "Hello from Flask!"가 표시되어야 합니다.



    이제 서버가 실행 중이며 일부 데이터를 처리할 준비가 되었습니다(작동하지 않는 경우 /var/log/apache2/error.log에서 로그 파일을 확인하십시오.

    4. Flask 앱이 작동하도록 합니다.



    이제 작업을 수행할 서버가 준비되었으므로 입력 문자열에서 문자 수를 제공하는 간단한 서비스를 설정합니다.
    1. URL에서 정보를 수집합니다.
    Flask를 사용하면 요청된 URL을 기반으로 요청을 함수로 라우팅할 수 있습니다. URL에서 입력을 받아 함수에 전달할 수도 있습니다. flaskapp.py에 다음을 추가합니다.

    # flaskapp.py
    @app.route('/countme/<input_str>')
    def count_me(input_str):
        return input_str
    


    이 count_me() 함수는 url의 countme/부분 뒤에 있는 모든 것을 반환합니다. 웹 서버를 다시 시작하여 작동 상태를 확인하십시오.
    $ sudo service apache2 restart
    2. 공정정보count_me() 함수를 좀 더 흥미롭게 만들어 봅시다. 다음과 같이 수정합니다flaskapp.py.

    # flaskapp.py
    from collections import Counter
    ...
    @app.route('/countme/<input_str>')
    def count_me(input_str):
        input_counter = Counter(input_str)
        response = []
        for letter, count in input_counter.most_common():
            response.append('"{}": {}'.format(letter, count))
        return '<br>'.join(response)
    


    서버를 다시 시작하고 결과를 봅니다.
    $ sudo service apache2 restart
    이러한 함수 내에서 HTML 응답의 형식을 지정하는 것은 좋지 않으며 일반적으로 템플릿을 대신 사용해야 합니다.
    전체count_me() 함수는 하나의 논리 행에 작성할 수 있습니다.

    return '<br>'.join('"{}": {}'.format(let, cnt)
                       for let, cnt in Counter(in_str).most_common())
    


    응용 프로그램에서 오류가 발생하면 오류 로그가 디버깅에 도움이 될 수 있습니다.
    $ sudo tail -f /var/log/apache2/error.log
    이 튜토리얼이 마음에 드셨다면 좋아요를 눌러주세요. 즐거운 코딩하세요!

    좋은 웹페이지 즐겨찾기