티스토리 뷰
[ django 쇼핑몰] Google Cloud Platform 배포(무료 버전, 구글 클라우드 플랫폼, Compute Engine, uWSGI, 데몬)
지휘리릭 2020. 1. 27. 15:38https://console.cloud.google.com/
Google Cloud Platform
하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요.
accounts.google.com
1. 위의 GCP 사이트에 회원가입하고 난 후에, 아래와 같은 페이지가 나타나면 오른쪽 상단에 "활성화" 버튼 클릭
2. 개인정보 입력
3. 자동 결제 사용 설정 확인
4. 결제 옵션 설정 (신용카드만 가능)
5. 기다리기.. 생각보다 꽤 오래걸림 ;ㅠ
6. compute Engine -> VM 인스턴스
- 프로젝트가 자동으로 생성된다.
- 프로젝트가 생성되면 "만들기" 클릭
7. 프로젝트 설정
- 이름 설정
- 리전은 그냥 가까운 서울
- 머신 유형 : 고성능은 필요 없으니까 제일 낮은 옵션
8. 부팅디스크 설정
- Centos 7
- 크기는 20GB
9. 방화명 HTTP HTTPS 트래픽 허용 체크 -> "만들기" 클릭
10. VM 인스턴스 생성. 가상 컴퓨터가 켜진 것이다. -> SSH 클릭
11. SSH 연결 ( 터미널 환경을 조성 )
- 터미널 창이 켜지면, 필요한 패키지들을 설치한다.
$ python --version
Python 2.7.5
$ sudo yum -y install epel-release
$ sudo yum -y install https://centos7.iuscommunity.org/ius-release.rpm
$ sudo yum -y install python36u-devel python36u-pip
$ sudo python3.6 -m pip install -U pip
$ sudo python3.6 -m pip install virtualenv
12. 파일 업로드 및 가상환경
- 오른쪽 상단의 톱니바퀴 모양을 누르고 압축파일 업로드
$ ls
django_shoppingmall.zip
$ sudo yum -y install unzip
$ unzip <압축 파일>
$ python3.6 -m virtualenv venv
$ ls
db.sqlite3 django_shoppingmall manage.py order product templates users venv
$ source venv/bin/activate
(venv) $ $ pip install django==2.1.*
(venv) $ pip install djangorestframework
(venv) $ python manage.py runserver
13. 네트워크 설정
(1)
python manage.py runserver를 실행하고 웹페이지로 들어가면 아마도 실행이 안될 것이다.
다시 VM 인스턴스 화면으로 이동해서 외부 IP 주소 복사해서 접속
http://34.64.186.247
(2)
포트번호를 입력해도 안됨 http://34.64.186.247:8000
이유는 애초에 서버에 접속할 때에 127. ~~~ 으로만 접속할 수 있도록 설정해놨기 때문
(3)
모든 IP 주소로 접속할 수 있도록 한다.
(venv) $ python manage.py runserver 0.0.0.0:8000
(4)
이렇게 해도 안됨. 그 이유는 방화벽 때문. 방화벽을 끄거나, 해당 포트(8000)만 열어주면 됨
가장 간단한 방법인 방화벽을 끄는 방법 선택
(venv) $ sudo systemctl stop firewalld
(5)
그래도 안됨. 운영체제 설정, 방화벽 해제 다 했는데 구글클라우드플랫폼에서 막고있기 때문이다.
내부 방화벽을 해제하기 위해 다시 VM 인스턴스 화면으로 와서 nic0 클릭
방화벽 규칙 -> + 방화벽 규칙 만들기
모든 인스턴스에 대해서 IP로 필터링 할 것이다.
IP는 0.0.0.0/0 을 사용하겠다. 즉, 모든 IP 를 사용하겠다는 의미
만들기 클릭
다시 Compute Engine -> VM 인스턴스 -> 해당 인스턴스 클릭해서 세부정보로 이동
위에서 설정한 네트워크가 적용된 것을 볼 수 있다.
(6)
다시 서버에 접속하면 포트는 뚫린 것을 알 수 있다.
(이때, python manage.py runserver 0.0.0.0:8000 으로 접속해야한다. )
하지만 "DisallowedHost at / "에러 발생
DisallowedHost at /
Invalid HTTP_HOST header: '34.64.186.247:8000'. You may need to add '34.64.186.247' to ALLOWED_HOSTS.
ALLOWED_HOSTS 에 문제가 있다는 것이다.
그러면 settings.py 파일로 들어가서 ALLOWED_HOSTS 부분을 수정해야한다.
nano 편집기를 사용해서 편집하기 위해 nano 설치
(venv) $ sudo yum -y install nano
(venv) $ nano settings.py
ALLOWED_HOSTS =[] -> ALLOWED_HOSTS = ['*'] 수정하기
(7)
이제 제대로 접속된다. 외부에서 접속할 수 있는 환경이 조성됐다.
15. 데몬 진짜 배포
진짜 배포를 위해서는 uwsgi 가 필요. uwsgi를 위해서는 gcc 필요
(venv) $ sudo yum -y install gcc
(venv) $ pip install uwsgi
uwsgi --http :8000 --home ~/venv --chdir ~/ --module django_shoppingmall.wsgi
http : 포트번호 지정
home : 가상환경 경로 지정
chdir : 프로그램이 시작할 경로 지정 ( 프로젝트 폴더 )
module : 프로젝트 폴더 안에서 어떤 파일을 실행시킬 것인지
Error Handling
(1) 에러 내용
Internal Server Error
ModuleNotFoundError: No module named 'django_shoppingmall'unable to load app 0 (mountpoint='') (callable not found or import error)*** no app loaded. going in full dynamic mode ****** uWSGI is running in multiple interpreter mode ***spawned uWSGI worker 1 (and the only) (pid: 3446, cores: 1)--- no python application found, check your startup logs for errors ---
(2) 문제점 파악
경로 문제였다. django_shoppingmall 프로젝트 폴더 경로가 아래와 같고, 터미널 창에서는 상단의 django_shoppingmall 에서 시작했다.
django_shoppingmall
├─django_shoppingmall
│ └─wsgi.py
├─order
├─product
├─templates
└─users
원래는 --chdir ~/django_shoppingmall --module django_shoppingmall.wsgi 으로 입력했다.
chdir 에서 설정한 경로에서 django_shoppingmall 폴더를 찾고 그 안에서 wsgi.py 파일을 실행한다는 것이다.
그런데 나는 django_shoppingmall의 경로에서 chdir을 django_shoppingmall 으로 설정하였으니 프로젝트 폴더가 django_shoppingmall으로 인식되고, 그 안에서 다시 django_shoppingmall 폴더 안에 있는 wsgi 파일을 찾으니 ModuleNotFoundError가 발생한 것이다.
(3) 문제 해결
그래서 그냥 현재 폴더라고 인식할 수 있도록 --chdir ~/ --module django_shoppingmall.wsgi 라고 했더니 무사하게 웹서버에 접속되었고, 모든 작동이 정상적으로 수행됐다.
앞으로는 프로젝트 폴더 이름이랑 메인 폴더 이름이랑 구분할 수 있도록 해야겠다.
서버가 돌아가지만 그러면 터미널 창을 항상 켜놔야지만 서버에 접속할 수 있다는 점이다.
터미널 창을 꺼도 서버에 접속하려면 백그라운드로 실행되야 한다. 즉, 데몬으로 실행해야한다.
(venv) $ nohup uwsgi --http :8000 --home ~/venv --chdir ~/ --module django_shoppingmall.wsgi &
[1] 3850
(venv) $ nohup: ignoring input and appending output to ‘nohup.out’
이렇게 해도 nohup 과 & 으로 해도 서버에 접속된다.
간혹가다 다시 Internal Server Error 가 뜬다면, 터미널 창에 ps 를 입력해서 아직 실행되고있는 uwsgi 들을 제거해야한다.
kill -9 (uwsgi pid)
'django project > 쇼핑몰' 카테고리의 다른 글
- Total
- Today
- Yesterday
- django tag
- django clean
- 웹 배포
- UITableViewController Not Working
- python 웹 배포
- 알파벳 카운팅
- Realtime Database
- django 게시판
- CellForRowAt 호출안됨
- 데이터베이스 추천
- django 개발일지
- pythonanywhere배포
- 테이블출력안됨
- 장고 게시판
- django 로그인접근
- iOS 데이터베이스
- Firebase 데이터베이스 추천
- 실시간 데이터베이스
- ModelForm Form 차이
- django 태그
- 장고 태그달기
- Django
- iOS 검은 화면
- iOS 화면 안나옴
- cleaned_data
- pythonanywhere배포방법
- django pythoneverywhere
- iOS UITableView 출력안됨
- CellForRowAt Not Called
- 까만 화면
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |