Server/Flask

Flask + gunicorn (uwsgi) + nginx 설치 시 자주 겪는 문제


flask , gunicron + nginx 설치 및 연동 시 자주 겪는 문제!!

https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uswgi-and-nginx-on-ubuntu-18-04

https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-gunicorn-and-nginx-on-ubuntu-18-04

 

아마도 flask 서버 애플리케이션의 출시를 위해 wsgi를 이용하다보면 위의 문서들을 가장 쉽게 접할 수 있을것이고, 따라하거나 비슷한 문서를 많이 볼 수 있을 것이다. 하지만? 역시 한방에 안되는 건 당연하다. 나는 바로는 안되서 2일정도 더 투자해야했다 아래는 내가 겪은 시행착오를 단순 답안만 공유하고자 한다

 

 

 

  1. 환경설정의 FLASK_APP 에 기존 코어파일이 아니라 wsgi.py을 두어야한다 (매우중요..) 문서의 경우 flask도 설치하고 시작하기 때문에 이미 flask를 잘쓰던 사람한테는 설명이 없는 부분이다. 근데 잘 생각해보면 당연한거다.. ㅠ 삽질하다 띠용해서 바꿧더니 되더라
  2. mysql과 연동 시 database 설정 중 host에 127.0.0.1 등 로컬 ip 주소가 아닌 wsgi를 통해 접속하는 것이므로 원격 ip를 작성해야한다. 또한! 기존에 만들어 두었던 mysql 접속 계정들이 localhost 접속만 가능한 경우가 많다. 이를 위해 원격 ip 접속도 가능한 계정을 추가해주어야한다!! + 변경 후 mysqld restart
  3. 저 참조글에는 작성되어있지 않지만 nginx.conf 의 http { } 블록 내에 include /nginx경로/sites-enabled; 도 포함해두어야한다.

또한 sites-available 내 파일의 모습도 조금 다르다

upstream 아무이름 {
    server unix:프로젝트sock경로/sock파일이름.sock;
}

server {
    listen 80;
    server_name 서버 원격 ip; #로컬 주소 혹은 _ 적는거 아님!!

    location / {
        include uwsgi_params;
        uwsgi_pass 아무이름;
    }
}

 

무슨 일인지는 모르겠으나 nginx 설치 후에 conf 폴더 내에 proxy_params가 없더라 또한 위 문서 말대로 해도 invalid upstream host 등의 오류가 존재하였음

 

4. wsgi 가동 시 생성되는 소켓 파일의 권한을 따로 주어야할수도있다. 나는 007로 주었을 때 가장 잘 작동했다.

5. aws 사용 시 보안 그룹에 3306 포트에 원격 ip 주소도 열어주어야한다

6. aws ami2 사용 시 yum install -y nginx 등으로 ! 설치되지 않는다.. amazon-linux-extras 를 이용하라는데 python2.7에서 python3.6 등으로 정상적으로 migrate 했다면 amazon-linux-extras도 먹히지 않는 굉장히 귀찮은 상황에 직면하게된다.

잠시 멍하고 수작부리다가 그냥 nginx 컴파일 설치했다

 

이거말고도 더 있었던거 같은데 위에 비하면 뭐..