[EC2] Flask, Gunicorn, ngnix를 사용해 호스팅 하기 - 2

옥영빈·2023년 2월 24일
0
-> sudo nano /etc/systemd/system/myenv.service

안에 내용을 작성한다.

[Unit]
Description=Gunicorn instance to serve my sample flask app

After=network.target
[Service]

// user = ubuntu 이 부분은 ubuntu로 했다면 필수
User=ubuntu
Group=www-data

// WorkingDirectory server.py 가 있는 폴더로 지정
WorkingDirectory=/home/ubuntu

// Environment = envs/["myenv"]/bin" 이 부분이 중요
Environment="PATH=/home/ubuntu/miniconda3/envs/myenv/bin"

// 이 부분은 사실 잘 모르지만 myenv.sock가 생성이 되는데 그 설정을 적용 시킨다 라는 의미 인 듯?
ExecStart=/home/ubuntu/miniconda3/envs/myenv/bin/gunicorn --workers 3 --bind unix:myenv.sock -m 007 wsgi:app

[Install]
WantedBy=multi-user.target

저장 하고 나온다.

-> sudo systemctl start myenv
-> sudo systemctl enable myenv
를 차례대로 입력하면
 Created symlink /etc/systemd/system/multi-  user.target.wants/myenv.service →  /etc/systemd/system/myenv.service.
 라고 명령어가 나올 것 이다.
 위의 명령어가 나오지 않았다면 처음부터 다시 해야 할 듯...
-> sudo systemctl status myenv
 상태를 확인 해보면
  Active: active (running)
이런식으로 running 이라는 메세지가 확인이 되어야 한다.

WorkingDirectory=/home/ubuntu 이 부분에 myenv.sock가 생성이 된다.

http://localhost:8000/ 다시 확인 해보기

다음 Ngnix 설정하기

  • nginx 설치
-> sudo apt-get install nginx
  • www-data 에 사용자인 ubuntu를 추가
sudo usermod ubuntu -g www-data
  • conf 파일 생성
sudo nano /etc/nginx/sites-available/myenv
server {
    // 80포트는 http의 기본 포트 즉:8000 과같은 포트번호는 나오지 않는다
    listen 80;
    server_name <"ip번호 ex) 11.111.111">;
location / {
        include proxy_params;
        proxy_pass http://unix:/home/ubuntu/myenv.sock;
    }
}

저장하기

  • 심볼릭링크를 생성 하기 (사실 잘 모른다.. 따라 했다)
-> sudo ln -s /etc/nginx/sites-available/myenv /etc/nginx/sites-enabled
  • ngnix 구성 테스트
-> sudo nginx -t
  • 웹 서버 다시 시작
-> sudo systemctl restart nginx

그리고 위에서 입력한 ip번호로 들어가면 끝!

sudo nano /etc/nginx/sites-enabled/pic2vox 에서
모르고 주석처리를 한다는게 // 를 넣어버려서 계속 에러가 발생했었다...

이후 알게된 사실 하나

이렇게 설치를 하고 html로 테스트를 하면 화면은 뜨는걸 확인이 가능 했다.
하지만 이후 html을 수정하고 코드를 이것저것 수정을 했는데 최신화가 안되는 문제 발생!

그래서 찾은 방법

  • gunicorn.service 생성하기
-> sudo nano /etc/systemd/system/gunicorn.service
[Unit]
Description=Gunicorn service
After=network.target

[Service]
User=ubuntu
WorkingDirectory=/home/ubuntu
Environment="PATH=/home/ubuntu/miniconda3/envs/myenv/bin"
ExecStart=/home/ubuntu/miniconda3/envs/myenv/bin/gunicorn --workers 3 --bind unix:myenv.sock -m 007 wsgi:app

[Install]
WantedBy=multi-user.target

저장 하고 나온다.

  • 시스템 관리자 다시 로드하기
-> sudo systemctl daemon-reload
  • Gunicorn 서비스 활성화 하기
-> sudo systemctl enable gunicorn
  • Gunicorn 서비스 시작 하기
-> sudo systemctl start gunicorn
  • Gunicorn 서비스 상태 확인 하기
-> sudo systemctl status gunicorn

다시 한번 강조

출처
1번글 : https://faun.pub/deploy-a-flask-ml-model-on-ngnix-using-wfastcgi-gunicorn-gateway-ubuntu-18-04-part-i-8c621beda19d
2번 글 : https://faun.pub/deploy-a-flask-ml-model-on-ngnix-using-wfastcgi-gunicorn-gateway-ubuntu-18-04-part-ii-2a3adbf25f57

profile
webGL개발 초보

0개의 댓글