요즘은 AWS를 많이 이용하기 때문에 AWS EC2 Ubuntu 18.04 에 uWSGI + Nginx 를 이용해 bbgo를 배포하는 가이드를 작성했습니다. (참고문서)
- Setting up Django and your web server with uWSGI and nginx
- How To Serve Django Applications with uWSGI and Nginx on Ubuntu 16.04
bbgo 시작하기 문서를 참고해 bbgo 가 돌아갈 수 있는 기본 환경을 생성합니다. ./runlocalserver.sh 로 꼭 브라우저에서 정상동작하는 걸 확인하고 uWSGI + Nginx 설정을 시작하는 게 좋습니다.
환경설정시 python2.7 과 python3.6 또 그에 맞는 pip 와 pip3 를 혼용할 경우 uwsgi 실행 시 ImportError: No module named site 와 같은 에러가 발생할 수 있습니다. 한 가지만 쭉 사용하시기 바랍니다. bbgo는 두 버전을 모두 지원하고 아래 예에서는 python3.6 과 pip3를 사용하는 걸 전제합니다.
AWS 의 경우 80 및 8000 포트가 막혀 있기 때문에 아래처럼 네트워크 및 보안 - 보안 그룹에서 해당 포트를 열어둬야 접속이 가능합니다.
1. Nginx 설치
$ sudo apt-get install nginx $ sudo systemctl start nginx
브라우저로 접속해 Welcome to nginx! 페이지가 나오는지 확인
2. Nginx 설정
- https://github.com/nginx/nginx/blob/master/conf/uwsgi_params 다운로드 및 적절한 위치에 저장 (여기선 ~/bbgo/bbgo/uwsgi_params 로 저장함)
- /etc/nginx/sites-available/default 가 80포트를 사용중이므로 default에 작성하던가 default를 없애거나 혹은 다른 포트를 사용해도 무방합니다.
- Nginx 용 bbgo 설정 파일 생성
$ sudo vi /etc/nginx/sites-available/bbgo
- 내용 작성
server { listen 80; server_name <IP 주소 혹은 도메인>; location /static { alias /home/ubuntu/bbgo/static; } location / { include /home/ubuntu/bbgo/bbgo/uwsgi_params; uwsgi_pass unix:/run/uwsgi/bbgo.sock; } }
- 심볼릭 링크 생성
$ sudo ln -s /etc/sites-availabe/bbgo /etc/sites-enabled/
- 문법 체크
$ sudo nginx -t
- 설정 파일 반영되도록 Nginx 재시작
$ sudo systemctl restart nginx
- 참고: Nginx 상태 보기
$ sudo systemctl status nginx
- 참고: Nginx 에러 로그 보기
$ sudo tail -F /var/log/nginx/error.log
시스템 와이드로 설정하기 전에 개발환경에서 한 스텝 씩 진행하는 것이 뭔가 안될 때 설정을 고쳐가며 테스트하기 좋습니다. 숙련자는 이 단계를 건너 뛰고 바로 시스템 와이드로 설정해도 무방합니다.
1. uWSGI 설치
(bbgo) ~/bbgo$ pip3 install uwsgi
2. uWSGI 로 bbgo 실행
- home 은 현재 사용중인 virtualenv package가 깔린 위치
- chdir 은 bbgo가 설치된 경로 (현재 이 경로에 있으면 안 써도 됨)
(bbgo) ~/bbgo$ uwsgi --http :8000 --home /home/ubuntu/.pyenv/versions/bbgo --chdir /home/ubuntu/bbgo -w bbgo.wsgi
- 브라우저로 <IP 주소>:8000 접속되는지 확인
- Nginx 가 잡고 있지 않은 포트로 테스트해야 합니다.
3. uWSGI + Nginx 로 bbgo 실행
- connect() 관련 에러 날 경우 뒤에 --chmod-socket=666 붙여 봄
(bbgo) ~/bbgo$ uwsgi --socket bbgo.sock --module bbgo.wsgi
4. uWSGI .ini 파일로 bbgo 실행
- bbgo용 uWSGI .ini 생성
(bbgo) ~/bbgo$ sudo vi /etc/uwsgi/sites/bbgo.ini
- 내용 작성
[uwsgi] chdir = /home/ubuntu/bbgo module = bbgo.wsgi home = /home/ubuntu/.pyenv/versions/bbgo master = true processes = 1 socket = /run/uwsgi/bbgo.sock chmod-socket = 666 vaccum = true
- 실행
(bbgo) ~/bbgo$ uwsgi --http :8000 --ini /etc/uwsgi/sites/bbgo.ini
- 브라우저로 <IP 주소>:8000 접속되는지 확인
-참고: uwsgi 에러 확인
$ sudo journalctl -u uwsgi
1. virtualenv 나가기
(bbgo) ~/bbgo$ pyenv deactivate
2. uWSGI 설치
~/bbgo$ sudo pip3 install uwsgi
3. uWSGI .ini 파일로 bbgo 실행
- virtualenv 환경에서 이미 만들었으면 생략
- bbgo용 uWSGI .ini 생성
$ sudo vi /etc/uwsgi/sites/bbgo.ini
- 내용 작성
[uwsgi] chdir = /home/ubuntu/bbgo module = bbgo.wsgi home = /home/ubuntu/.pyenv/versions/bbgo master = true processes = 1 socket = /run/uwsgi/bbgo.sock chmod-socket = 666 vaccum = true
- 실행
$ uwsgi --http :8000 --ini /etc/uwsgi/sites/bbgo.ini
- 브라우저로 <IP 주소>:8000 접속되는지 확인
4. Emperor 서비스 등록
- 설정 파일 생성
$ sudo vi /etc/systemd/system/uwsgi.service
- 내용 작성
[Unit] Description=uWSGI Emperor service [Service] ExecStartPre=/bin/bash -c 'mkdir -p /run/uwsgi; chown ubuntu:ubuntu /run/uwsgi' ExecStart=/home/ubuntu/.pyenv/versions/bbgo/bin/uwsgi -i /etc/uwsgi/sites/bbgo.ini Restart=always KillSignal=SIGQUIT Type=notify NotifyAccess=all StandardError=syslog [Install] WantedBy=multi-user.target
- 서비스 재시작
$ sudo systemctl daemon-reload $ sudo systemctl restart uwsgi
- 브라우저로 접속해 bbgo 동작 확인