파이썬으로 웹 사이트 제작
    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


반응형
Posted by codens