programing

어떻게 하면 플라스크를 포트 80에서 작동시킬 수 있나요?

nicescript 2022. 10. 30. 15:40
반응형

어떻게 하면 플라스크를 포트 80에서 작동시킬 수 있나요?

5000번 포트를 통해 플라스크 서버를 가동하고 있는데 괜찮습니다.http://example.com:5000 에서 액세스 할 수 있습니다.

하지만 http://example.com에서 간단하게 접속할 수 있을까요?포트를 5000에서 80으로 변경해야 할 것 같습니다.하지만 플라스크에서 시도하면 실행할 때 이 오류 메시지가 나타납니다.

Traceback (most recent call last):
  File "xxxxxx.py", line 31, in <module>
app.run(host="0.0.0.0", port=int("80"), debug=True)
   File "/usr/local/lib/python2.6/dist-packages/flask/app.py", line 772, in run
run_simple(host, port, self, **options)
  File "/usr/local/lib/python2.6/dist-packages/werkzeug/serving.py", line 706, in run_simple
    test_socket.bind((hostname, port))
  File "<string>", line 1, in bind
socket.error: [Errno 98] Address already in use

.lsof -i :80

COMMAND   PID     USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
apache2   467     root    3u  IPv4 92108840      0t0  TCP *:www (LISTEN)
apache2  4413 www-data    3u  IPv4 92108840      0t0  TCP *:www (LISTEN)
apache2 14346 www-data    3u  IPv4 92108840      0t0  TCP *:www (LISTEN)
apache2 14570 www-data    3u  IPv4 92108840      0t0  TCP *:www (LISTEN)
apache2 14571 www-data    3u  IPv4 92108840      0t0  TCP *:www (LISTEN)
apache2 14573 www-data    3u  IPv4 92108840      0t0  TCP *:www (LISTEN)

먼저 이 프로세스를 종료해야 합니까?그거 안전한 거야?또는 포트 5000에서 Flask를 계속 실행하면서 메인 웹 사이트 도메인을 리다이렉트할 수 있는 다른 방법이 있습니까?

1- 포트 80을 사용하는 다른 응용 프로그램을 중지합니다. 포트 80을 사용하여 응용 프로그램을 2회 실행합니다.

if __name__ == '__main__':
      app.run(host='0.0.0.0', port=80)

Apache 또는 기타 웹 서버를 사용하지 않는 외부에서 볼 수 있는 서버의 경우 입력만 하면 됩니다.

flask run --host=0.0.0.0 --port=80

되는 것은, 「 」 「 」 「 so 、 「 」apache2팔십 냥

개발용이라면 포트 5000에 그대로 두겠습니다.

어느쪽인가를 실가동하는 경우:

권장하지 않음

  • (Stop)apache2 번째; 첫번,,

매뉴얼에 기재되어 있는 바와 같이 권장하지 않습니다.

개발 중에는 빌트인 서버를 사용할 수 있지만 프로덕션 애플리케이션에는 완전한 배포 옵션을 사용해야 합니다(실가동 시에는 빌트인 개발 서버를 사용하지 마십시오).

권장된

  • " "HTTP를 통과하는 apache2플라스크로 이동합니다.

하면요.apache2는 모든 정적 파일(플라스크에 내장된 디버깅서버보다 훨씬 뛰어난 기능)을 처리할 수 있으며, 이러한 요청을 플라스크에 전달하여 동적 콘텐츠의 역방향 프록시 역할을 합니다.

Apache + mod_wsgi에서 Flask를 설정하는 방법에 대한 공식 문서 링크입니다.

편집 1 - @Djack 설명

apache2를 통해 Flask에 대한 HTTP 트래픽 프록시

80상의 ( 「 「 80 」 ) 。HTTP 443Port 443).HTTPSApache 또는 Nginx와 같은 웹 서버는 요청 연결을 처리하고 이 연결을 사용하여 무엇을 할지 결정합니다.이 경우 수신된 요청은 WSGI 프로토콜의 Flask로 전달되고 Python 코드로 처리되도록 구성해야 합니다.이것은 "동적인" 부분입니다.

동적 콘텐츠용 리버스 프록시

위와 같이 웹 서버를 설정하는 것에는 몇 가지 이점이 있습니다.

  • SSL 종단 - 웹 서버는 약간의 구성만으로 HTTPS 요청을 처리하도록 최적화됩니다.Python에서는, 「자신의 것을 롤」하지 말아 주세요.이것은 아마 매우 안전하지 않을 것입니다.
  • 보안 - 인터넷에 대한 포트를 열려면 보안에 대한 세심한 고려가 필요합니다.Flask의 개발 서버는 이를 위해 설계되지 않았으며 이를 위해 설계된 웹 서버와 비교하여 해결되지 않은 버그나 보안 문제가 있을 수 있습니다.설정이 잘못된 웹 서버도 안전하지 않을 수 있습니다.
  • 정적 파일 처리 - 내장된 Flask 웹 서버가 정적 파일을 처리하는 것은 가능하지만 이는 권장되지 않습니다. Nginx/Apache는 이미지, CSS, Javascript 파일 등의 정적 파일을 처리하는 데 훨씬 효율적이며 동적 요청(데이터베이스에서 내용을 읽거나 내용을 변경하는 경우)만 전달합니다.Python 코드에 의해 dled 됩니다.
  • +더. 이 질문의 범위에 가깝습니다.더 많은 정보를 원하시면 이 분야에 대해 조사를 해보시기 바랍니다.

다음을 사용하여 포트 또는 호스트를 변경하는 경우:

if __name__ == '__main__':
  app.run(host='0.0.0.0', port=80)

다음 코드를 사용하여 서버를 시작합니다(플라스크의 주요 입구는 app.py입니다).

python app.py

다음을 사용하는 대신:

flask run

편리한 방법은 패키지를 사용하는 것입니다.python-dotenv: 읽어냅니다..flaskenv플라스크의 환경변수를 저장할 수 있는 파일입니다.

  • pip install python-dotenv
  • 파일을 작성하다.flaskenv앱의 루트 디렉터리에서

지정한 파일 내부:

FLASK_APP=application.py
FLASK_RUN_HOST=localhost
FLASK_RUN_PORT=80

그 후 앱을 실행하기만 하면 됩니다.flask run해당 포트에서 앱에 액세스할 수 있습니다.

주의하시기 바랍니다.FLASK_RUN_HOST디폴트로 하다127.0.0.1그리고.FLASK_RUN_PORT디폴트로 하다5000.

Ubuntu-18에서는 이 솔루션밖에 사용할 수 없었습니다.

파일 내부app.py, 사용방법:

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80)

위의 코드는 다음 경우를 제외하고 동일한 권한 오류를 발생시킵니다.sudo를 사용하여 실행합니다.

sudo python3 app.py

포트 80에서 실행 중인 프로세스를 쉽게 비활성화하고 이 명령을 실행할 수 있습니다.

flask run --host 0.0.0.0 --port 80

또는 .py 파일 내에서 실행하는 것이 좋습니다.

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80)

애플리케이션을 동일한 포트(예: 포트=)에 배치하려면 터미널에서 다음 명령을 실행합니다.

fuser -k 5000/tcp

다음 명령을 실행합니다.

python app.py

지정된 포트(예: 포트=80)에서 실행하려는 경우 기본 파일에서 다음을 언급하십시오.

if __name__ == '__main__':  
    app.run(host='0.0.0.0', port=80)

나는 설정해야 했다.FLASK_RUN_PORT지정된 포트 번호로 이동합니다.다음에 앱을 시작할 때 Flask는 선택한 포트 번호로 환경 변수를 로드합니다.

제 시나리오에서는 다음과 같은 절차가 매우 효과적이었습니다.

  • 패키지 설치:

    pip install --upgrade pip
    pip install python-dotenv
    
  • 앱 디렉토리 "flaskr/.flaskenv"에 숨김 파일 만들기

  • 다음 콘텐츠 추가:

    FLASK_APP=flaskr
    FLASK_RUN_HOST=localhost
    FLASK_RUN_PORT=8000
    
  • 마지막으로 플라스크 명령을 한 번 더 실행합니다.

    flask run
    
  • 현재 작업 중인 버전은 다음과 같습니다.

    pip freeze |grep -i flask
    Flask==1.1.1
    

문제는 포트 80을 이미 사용하고 있는 Apache 웹 서버가 이미 실행 중이라는 것입니다.따라서 다음 중 하나를 수행할 수 있습니다.

  1. 이것은 아마 이이를 것이 좋을 것 같습니다./etc/init.d/apache2 stop그냥 죽이는 게 아니라요

  2. apache의 플라스크가 설명한 바와 같이 apache 프로세스에 플라스크 앱을 도입합니다.

응용 프로그램의 포트 번호를 변경할 필요는 없습니다.www 서버(nginx 또는 apache)를 flask 포트에 대한 프록시 쿼리로 설정하기만 하면 됩니다. 를 기울이다uWSGI.

app.run(port=80,debug=True)는 debug .

가장 쉽고 최적의 솔루션

.py 파일을 폴더에 저장합니다.이 경우 내 폴더 이름은 test입니다.명령 프롬프트에서 다음을 실행합니다.

c:\test> set FLASK_APP=application.py
c:\test> set FLASK_RUN_PORT=8000
c:\test> flask run

---------------------------------------------------------------------------------

 * Serving Flask app "application.py"
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:8000/ (Press CTRL+C to quit)
127.0.0.1 - - [23/Aug/2019 09:40:04] "[37mGET / HTTP/1.1[0m" 200 -
127.0.0.1 - - [23/Aug/2019 09:40:04] "[33mGET /favicon.ico HTTP/1.1[0m" 404 -

브라우저에 http://127.0.0.1:8000 이라고 입력합니다.감사해요.

다음 단계로 해결했습니다.

1개의 열린 cmd

실행 2회 실행ipconfig

3 cmd에서 IPv4 주소 복사

4 다음에 IPv4 를 로컬호스트로서 사용합니다.

app.run(debug=True, port=5000, host='localhost')

localhost 를 IPv4 주소로 바꿉니다.

프런트 엔드의 경우는, 순서 4 를 다음과 같이 실시합니다.

'http://localhost:5000/auth'에서 'localhost'를 IPv4 주소로 바꿉니다.

참고: {프런트 엔드 및 백엔드}에 동일한 포트를 사용합니다.

6 양쪽 프로젝트를 동시에 실행(백엔드와 프런트 엔드)

언급URL : https://stackoverflow.com/questions/20212894/how-do-i-get-flask-to-run-on-port-80

반응형