장고:리눅스에 올리기
장고! 웹 프레임워크! 틀:장고
개요[편집 | 원본 편집]
보통 개발은 윈도우에서, 서비스는 리눅스에서 하곤 한다.
기본 서버환경 구축[편집 | 원본 편집]
과정 | 방법 | |
---|---|---|
파이썬 설치 |
|
|
가상환경 만들기 | 잠시! git으로 동기화된 디렉터리에 가상환경이 있을텐데, 이건 못써먹나? 실험해보자!
|
|
첨언. | pip freeze > requirements.txt 명령을 기입하면 가상환경에 설치된 것이 텍스트파일에 기록된다.
이후 서버에서 pip install -r requirements.txt 를 실행하면 그 안에 있는 걸 따라 그대로 설치해준다. | |
가상환경 실행 |
|
|
가상환경 해제 | 아무데에서나 deactivate를 입력 | |
장고 설치 | 가상환경을 실행한 상태에서..
pip install django |
기본 베이스에서 설치하면 다른 사람들에게도 영향이 간다. |
가상환경 자동 실행[편집 | 원본 편집]
매번 디렉터리로 들어가 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 |
받아오기[편집 | 원본 편집]
매번 변경사항이 생길때마다 위의 과정을 거치는 건 비효율적이다.
git pull 에서 아이디와 패스워드를 입력하면 변경사항을 반영한다.
매번 아이디와 패스워드를 치는 것도 귀찮다. 그럴땐 프로젝트디렉터리에서 git config credential.helper store
을 넣어주자.
호스트 설정[편집 | 원본 편집]
장고가 서버에서 서비스 될 때엔 Settings.py 안의 ALLOWED_HOSTS 항목을 설정해 주어야 한다.(아마 보안문제인듯)
그 안에 서버의 아이피를 기입한다.(도메인도 되는지 해보자.)
서버 실행 자동화[편집 | 원본 편집]
파일명.sh 파일을 만들어보자.
위에서 설명한 가상환경 sh 파일에 python manage.py runserver 0:8000 --settings=세팅파일경로
등 서버를 실행한다는 내용만 추가해주면 된다.
최종형태[편집 | 원본 편집]
.sh 파일을 다음과 같이 만들어주면 프로젝트디렉터리로의 이동과 가상환경 실행, 서버동기화, 실행까지 단번에 끝낼 수 있다.
#!/bin/bash
cd ~/projects/mysite
. ~/venvs/mysite/bin/activate
git pull
python manage.py makemigrations
python manage.py migrate
python manage.py collectstatic --settings=config.service_settings # 운영세팅으로 collectstatic.
nohup python /home/id8436/projects/mysite/manage.py runserver 0:8000 --settings=config.service_settings &
에러가 뜨면 python manage.py collectstatic --noinput 를 사용한다.
주의[편집 | 원본 편집]
서버가 종료되지 않은 상태에서 터미널이 종료되면 서버 실행 시 Error : That port is already in use. 라는 에러가 뜬다.
이땐 killall python을 실행하고 서버를 실행하면 된다.(이거 말고 핀포인트로 종료하는 방법은 없나;;?
nohup 을 사용한 지속작업[편집 | 원본 편집]
위처럼 실행시키면 터미널이 닫히거나 로그아웃하면 실행을 멈춰버린다. 이를 위해 nohup을 사용해
nohup python manage.py runserver --settings=config.로컬용세팅파일 0:8000 &
형태로 올리면 백그라운드에서 서버를 돌린다.
멈추기 위해선 종료해주어야 하는프로세스가 4개 정도 되어, killall python 을 입력하는 게 낫다.