[Python] 파이썬 웹 개발 시작하기
파이썬으로 웹 사이트 제작
    Python Web development start with nginx    
//=========
* 파이썬 설치
sudo apt-get update
python --version
python3 --version
sudo apt install python
* pip = Python Package Index (PyPI), 파이썬 패키지 관리 도구 설치
sudo apt-get install python3-pip
//=======================================
* virtualenv - 독립적인 가상의 파이썬 실행환경 설치
sudo pip3 install virtualenv
* VirtualenvWrapper - 현재 경로와 관계없이 가상환경을 활성화 도움 툴
sudo pip3 install virtualenvwrapper
$ cd ~
$ mkdir ~/.virtualenvs
.bashrc 나 .zshrc 파일에 다음을 추가
# python virtualenv settings
export WORKON_HOME=~/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON="$(which python3)"  # Usage of python3
source /usr/local/bin/virtualenvwrapper.sh
source .bashrc  // or 재로그인
//===========
* 가상환경 생성(VirtualenvWrapper 사용)
mkvirtualenv pyweb1
    - 가상환경 지우기 : rmvitualenv pyweb1
    - 가상환경 리스트 : workon
    - 가상환경 해제 : deactivate
    - 가상환경 확인 : which python
    
* 가상환경 진입 
workon pyweb1
which python //가상환경 확인
    /home/ubuntu/.virtualenvs/pyweb1/bin/python
//=======================================
* uWSGI 설치
    WSGI(Web Server Gateway Interface)
    - 파이썬과 웹서버를 연결
pip3 install uwsgi
sudo apt-get install uwsgi-plugin-python
    - uwsgi.ini 파일에 plugins = python , 
        - uwsgi python 명령 사용 가능
    - 테스트 파일  test.py 작성
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"] 
    - 웹서버 구동 테스트
uwsgi --http :8000 --wsgi-file test.py
    - 127.0.0.1:8000 으로 접속
    - 설정파일 작성
~/pyweb1/uwsgi.ini 파일 생성
[uwsgi]
chdir = /home/ubuntu/pyweb1
virtualenv = /home/ubuntu/.virtualenvs/pyweb1
#home = /home/ubuntu/.virtualenvs/pyweb1 #가상환경경로
#daemonize=/home/ubuntu/.virtualenvs/pyweb1/wsgi_daemon.log
logger = file:/home/ubuntu/.virtualenvs/pyweb1/wsgi.log
#uid = ubuntu    #gid = ubuntu
chmod-socket=666
#chown-socket = ubuntu:ubuntu
socket = 127.0.0.1:3031
#socket=/tmp/uwsgi_pyweb1.sock
#stats = 127.0.0.1:9191
#master = true    #processes = 4    #threads = 2 #vacuum = true
#enable-threads = true    #single-interpreter = true    #lazy-apps = true
#module = wsgi:application
#module = pyweb1.wsgi
callable = app
wsgi-file = test.py
    - uwsgi 실행
        - 가상 환경에서 실행 (workon pyweb1)
uwsgi uwsgi.ini   &
        - uwsgi 시작이 안되는 경우, 쉘이 zsh라면 bash로 바꾼다.
//=======================================
* NginX 설정
sudo apt-get install nginx
sudo ufw app list
sudo ufw allow 'Nginx HTTP' // 방화벽에 허용 등록
    -  자동 시작
/etc/init.d/nginx 파일이 있는지 확인
service --status-all
sudo update-rc.d nginx defaults
    - sudo update-rc.d -f nginx remove // 자동시작 제거
    - 설정 파일
/etc/nginx/sites-available/default 파일에 다음을 추가
#===========
#pyweb1
server {
    #listen 8080 ;
    #listen [::]:80 ;
    server_name pyweb1.test;
    #root /home/ubuntu/pyweb1;        
    #index index.html index.htm;
    
    location / {
        try_files $uri @app;
    }
    location @app {
        include /etc/nginx/uwsgi_params;
        uwsgi_pass 127.0.0.1:3031;
        #uwsgi_pass unix:/tmp/uwsgi_pyweb1.sock;
   }
}
    - 서버 시작
sudo service  nginx start
//===============
//참고
https://brownbears.tistory.com/16
https://edykim.com/ko/post/connecting-flask-uwsgi-to-nginx/
https://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html
https://medium.freecodecamp.org/how-to-build-a-web-application-using-flask-and-deploy-it-to-the-cloud-3551c985e492