본문 바로가기

개발/연구

[nginx, uwsgi, flask] flask를 이용해서 배포해보자.

여러 삽질을 했다.. 그냥 그대로 따라오면 할 수 있도록 써놓겠음.

nginx로 배포하고, uwsgi와 소켓으로 통신하게 될 것이다.


Flask


 

~$ pip install flask

 

파이프로 플라스크 다운로드.

만약 파이프가 없다면 없으면 apt-get install pip를 하도록하자. 

 

마땅한 작업 디렉토리로 가자. (예를 들면 ~/flask/)

그리고 app.py 생성.

 

#app.py
from flask import Flask
application = Flask(__name__)
  
@application.route("/")
def hello():
	return "Hello! Miracle!"
  
if __name__ == "__main__":
	application.run(host='0.0.0.0')

자 이제 한번 테스트 해보자.

잘 되었을까?

~$ python app.py

 

그러면 default port인 5000이 열렸을 거다. 포트 확인해보고 localhost 혹은 public ip가 있다면 브라우저에 public ip:5000을 쳐보자. (또는 curl)15.122.199.55라면 http://15.122.199.55:5000으로 쳐보면 된다.

 

Hello가 잘 뜬다면 다음을 진행하자.

 


uWsgi


~$ pip install uwsgi

uWsgi 설치. 혹시 몰라 말해주느데, apt-get으로 말고 pip로 설치해주어야 이 강의를 그대로 따라오는데 원활할 것이다.

 

#wsgi.py
from app import application

if __name__ == "__main__":
    application.run()

그리고 wsgi.py에 위와 같이 적어준다.

 

그리고 이 쯤 되면 다시 테스트해보자.

~$ uwsgi --socket 0.0.0.0:5000 --protocol=http -w wsgi

이번에도 브라우저나 curl을 통해서 테스트해보고 Hello!가 뜬다면 성공!

 

uWsgi에 ini 설정이 필요하다.

위의 --socket / --protocol / -w 등 옵션들이 많이 보이지? 쉽게 말하면 ini에 초기값을 넣어두고 앞으로 저런 긴 커맨드 없이 편하게 불러오는거라고 보면 된다.

 

아래와 같이  uwsgi.py를 작성해주자.

[uwsgi]

module = wsgi

socket = /tmp/uwsgi.sock <- 소켓 경로(추후 nginx가 이 소켓과 소통을 할 것이다.)
chmod-socket = 666
vacuum = true

daemonize = /home/ubuntu/flask/uwsgi.log <- 에러 로그를 남길 부분

die-on-term = true
혹시 모르는 복붙러분들을 위해서 "<- " 부분은 지워주자.

그리고 다음과 같이 ini를 적용시켜주자.

~$ uwsgi --ini uwsgi.ini

 ~$ ls -l /tmp | grep uwsgi.sock 을 쳐봐서 .sock파일이 잘 생성 되었다면 잘 된거다.


Nginx


 

~$ sudo apt-get install nginx

nginx 설치.

 

설치가 완료되면 바로 실행될 것이다.

잘 설치 되었는지 확인해보자.

~$ sudo service nginx start

브라우저 혹은 curl로 접속함으로써 테스팅이 가능하다.

~$ cd /etc/nginx;ls;

 

위와 같은 화면이 나올 것이다.

여기서 sites-availablesites-enabled이 없다면 ~$sudo mkdir sites-available;sudo mkdir sites-enabled;로 생성해주자.

 

~$ vi /etc/nginx/sites-available/[파일명]

[파일명]에는 마음대로 적어도 된다.

server {
    listen 5000; <- 하고싶은 포트로 정해주자. http 기본 포트는 80이다.
    server_name localhost;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/tmp/uwsgi.sock;
    }
}

요대로 적어주자.

~$ sudo ln -s /etc/nginx/sites-available/[파일명] /etc/nginx/sites-enabled

링크 하나 만들어주면 된다.

 

아, 그리고 혹시 sites-availablesites-enabled가 없어서 mkdir로 새로 생성한 사람은 다음과 같이 따라하자.

~$ vi /etc/nginx/nginx.conf

http 제일 하단에 include /etc/nginx/sites-enabled/*;를 추가해주도록 하자.

다음과 같은 화면이 될 것이다.

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

밑에서 2번째 부분이 내가 말한 부분이다.

 

자 이제 테스트를 해보자.

~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

이렇게 나온다면 잘 따라온 것이다.



~$ sudo service nginx restart

nginx를 다시 시작해주면 된다.

 

음하하