장고:리눅스에 올리기
장고! 웹 프레임워크! 틀:장고
개요
보통 개발은 윈도우에서, 서비스는 리눅스에서 하곤 한다.
기본 서버환경 구축
과정 | 방법 | |
---|---|---|
파이썬 설치 |
|
|
가상환경 만들기 |
|
|
가상환경 실행 |
|
|
가상환경 해제 | 아무데에서나 deactivate를 입력 | |
장고 설치 | 가상환경을 실행한 상태에서..
pip install django |
기본 베이스에서 설치하면 다른 사람들에게도 영향이 간다. |
마크다운 설치 | pip install markdown |
가상환경 자동 실행
매번 디렉터리로 들어가 activate를 치고 프로젝트 디렉터리로 돌아오는 건 굉장히 귀찮은 일이다. 다음과 같 쉘.sh 파일을 만들어보자.
#!/bin/bash
cd ~/프로젝트/프로젝트명 #프로젝트 디렉터리로 이동
. ~/vens/가상환경주소/bin/activate #가상환경 실행
쉘 파일 실행은 . 쉘.sh
로 가능하다.(. 띄고 파일명임에 유의)
이걸 alias에 등록하여 사용하면 참 간단하게 원하는 가상환경을 실행하고 작업공간으로 이동할 수 있다.(리눅스:alias 참조)
git 에서 받아오기
과정 | 방법 | |
---|---|---|
디렉터리만들기 | 프로젝트 디렉터리를 담을 공간을 만든다. | ~/project 따위로. |
받아오기 | 프로젝트 디렉터리를 둘 디렉터리 안에서
git clone https://저장소주소 프로젝트명 |
마지막에 프로젝트명을 붙여야 한다.
그러면 프로젝트디렉터리 안에 해당 프로젝트명의 디렉터리가 새로 생긴다.(복사된 것) |
DB생성 | 프로젝트 디렉터리 안에서
python manage.py migrate |
~/project/mysite 등 안에서. |
서버구동 | python manage.py runserver |
호스트 설정
장고가 서버에서 서비스 될 때엔 Settings.py 안의 ALLOWED_HOSTS 항목을 설정해 주어야 한다.(아마 보안문제인듯)
그 안에 서버의 아이피를 기입한다.(도메인도 되는지 해보자.)
settings.py 분리
ALLOWED_HOSTS 안에 서버의 아이피를 기입했끼 때문에 localhost로 동작하지 못하게 된다. 이건 서버가 아닌, 작업PC에서 시범사이트를 돌리는 데 문제가 된다.
이를 방지하기 위해 세팅파일을 구분하여 로컬호스트로 동작할 때는 다른 파일로 서버를 동작시켜주어야 한다.
아래 읽기 전에;;
사실, settings를 분리해줄 것 없이, ALLOWED_HOSTS = ['id8436.iptime.org', '127.0.0.1'] 처럼 도메인을 벡터로 추가해주면 로컬과 서버에서 모두 사용할 수 있다.
로컬용 세팅파일 만들기
아무 이름이나 상관 없다. 만들고 싶은 곳에 로컬용 세팅파일을 만든다. 같은 경로에 만들면 찾기 쉽겠지.
내용은 다음과 같이.
기존 세팅파일의 임포트는 다 해준다. 그리고 아랫 줄 추가.(아님, 그냥 아래 두 줄만으로도 되는지 실험해보자.)
from .settings import *
ALLOWED_HOSTS = []#세팅파일을 불러와, 이 세팅만 덧씌운다.
로컬용 세팅파일로 서버 실행
기본적인 실행에선 settings.py를 통해 기본 세팅을 받지만, 이 파일을 바꾸어 서버를 실행하는 옵션이 있다.
python manage.py runserver --settings=config.로컬용세팅파일 #기존 세팅파일과 같은 경로에 있는 경우.
위와 같이 실행하면 새로 만든 파일을 세팅으로 받아 서버를 실행한다.
결과적으로 python manage.py runserver --settings=config.로컬용세팅파일 0:8000
형태로 작동시켜주면 된다.(리눅스라면 &을 붙이자. 백그라운드에서 실행하게끔)
0:8000은 8000번 포트로 모든 IP로부터 접속을 허용한다는 이야기.
nohup 을 사용한 지속작업
위처럼 실행시키면 터미널이 닫히거나 로그아웃하면 실행을 멈춰버린다. 이를 위해 nohup을 사용해
nohup python manage.py runserver --settings=config.로컬용세팅파일 0:8000 &
형태로 올리면 백그라운드에서 서버를 돌린다.
멈추기 위해선 종료해주어야 하는프로세스가 4개 정도 되어, killall python 을 입력하는 게 낫다.
서버 실행 자동화
파일명.sh 파일을 만들어보자.
위에서 설명한 가상환경 sh 파일에 python manage.py runserver 0:8000
등 서버를 실행한다는 내용만 추가해주면 된다.
주의
서버가 종료되지 않은 상태에서 터미널이 종료되면 서버 실행 시 Error : That port is already in use. 라는 에러가 뜬다.
이땐 killall python을 실행하고 서버를 실행하면 된다.(이거 말고 핀포인트로 종료하는 방법은 없나;;?