|
|
| (같은 사용자의 중간 판 5개는 보이지 않습니다) |
| 22번째 줄: |
22번째 줄: |
| |잠시! git으로 동기화된 디렉터리에 가상환경이 있을텐데, 이건 못써먹나? 실험해보자! | | |잠시! git으로 동기화된 디렉터리에 가상환경이 있을텐데, 이건 못써먹나? 실험해보자! |
|
| |
|
| #sudo apt install python3-venv | | #sudo apt install python3-venv -y |
| #가상환경을 만들고자 하는 디렉터리로 이동 | | #가상환경을 만들고자 하는 디렉터리로 이동 |
| #mkdir venvs | | #mkdir venvs |
| 58번째 줄: |
58번째 줄: |
|
| |
|
| ===가상환경 자동 실행=== | | ===가상환경 자동 실행=== |
| 매번 디렉터리로 들어가 activate를 치고 프로젝트 디렉터리로 돌아오는 건 굉장히 귀찮은 일이다. 다음과 같 쉘.sh 파일을 만들어보자.<syntaxhighlight lang="python"> | | 매번 디렉터리로 들어가 activate를 치고 프로젝트 디렉터리로 돌아오는 건 굉장히 귀찮은 일이다. 다음과 같 쉘.sh 파일을 만들어보자.<syntaxhighlight lang="python">#!/bin/bash |
| #!/bin/bash | |
|
| |
|
| cd ~/프로젝트/프로젝트명 #프로젝트 디렉터리로 이동 | | cd ~/프로젝트/프로젝트명 #프로젝트 디렉터리로 이동 |
| . ~/vens/가상환경주소/bin/activate #가상환경 실행 | | . ~/vens/가상환경주소/bin/activate #가상환경 실행</syntaxhighlight>쉘 파일 실행은 <code>. 쉘.sh</code> 로 가능하다.(. 띄고 파일명임에 유의) |
| | |
| </syntaxhighlight>쉘 파일 실행은 <code>. 쉘.sh</code> 로 가능하다.(. 띄고 파일명임에 유의) | |
|
| |
|
| 이걸 alias에 등록하여 사용하면 참 간단하게 원하는 가상환경을 실행하고 작업공간으로 이동할 수 있다.([[리눅스:alias(명령 축약)|리눅스:alias]] 참조) | | 이걸 alias에 등록하여 사용하면 참 간단하게 원하는 가상환경을 실행하고 작업공간으로 이동할 수 있다.([[리눅스:alias(명령 축약)|리눅스:alias]] 참조) |
| 105번째 줄: |
102번째 줄: |
|
| |
|
| 그 안에 서버의 아이피를 기입한다.(도메인도 되는지 해보자.) | | 그 안에 서버의 아이피를 기입한다.(도메인도 되는지 해보자.) |
| ==settings.py 분리==
| |
| ALLOWED_HOSTS 안에 서버의 아이피를 기입했끼 때문에 localhost로 동작하지 못하게 된다. 이건 서버가 아닌, 작업PC에서 시범사이트를 돌리는 데 문제가 된다.
| |
|
| |
| 이를 방지하기 위해 세팅파일을 구분하여 로컬호스트로 동작할 때는 다른 파일로 서버를 동작시켜주어야 한다.
| |
|
| |
| ===아래 읽기 전에;;===
| |
| 사실, settings를 분리해줄 것 없이, ALLOWED_HOSTS = ['''<nowiki/>'id8436.iptime.org'<nowiki/>''', '''<nowiki/>'127.0.0.1''''] 처럼 도메인을 벡터로 추가해주면 로컬과 서버에서 모두 사용할 수 있다.
| |
|
| |
|
| 분리해두면 하나를 수정했을 때 다른 하나를 또 고쳐야 되기도 하고.
| |
|
| |
| 그러나, DEBUG 등의 세팅을 위해선 분리해주는 게 좋긴 하다; -> 그래서 import를 사용해 덧씌운다!
| |
|
| |
| ===로컬용 세팅파일 만들기===
| |
| 아무 이름이나 상관 없다. 만들고 싶은 곳에 로컬용 세팅파일을 만든다. 같은 경로에 만들면 찾기 쉽겠지.
| |
|
| |
| 내용은 다음과 같이.<syntaxhighlight lang="python">
| |
| 기존 세팅파일의 임포트는 다 해준다. 그리고 아랫 줄 추가.(아님, 그냥 아래 두 줄만으로도 되는지 실험해보자.)
| |
|
| |
| from .settings import *
| |
|
| |
| ALLOWED_HOSTS = []#세팅파일을 불러와,필요한 세팅만 덧씌운다.
| |
| </syntaxhighlight>
| |
|
| |
| ====세팅파일에선 DEBUG설정을 False로 해주어야 한다.====
| |
| 디버그 정보는 프로젝트에 관련한 중요 사항들로, 정보가 노출되지 않게끔 해야 한다.
| |
| <br /> | | <br /> |
| ===로컬용 세팅파일로 서버 실행===
| |
| 기본적인 실행에선 settings.py를 통해 기본 세팅을 받지만, 이 파일을 바꾸어 서버를 실행하는 옵션이 있다.
| |
|
| |
| python manage.py runserver --settings=config.로컬용세팅파일 #기존 세팅파일과 같은 경로에 있는 경우.
| |
|
| |
| 위와 같이 실행하면 새로 만든 파일을 세팅으로 받아 서버를 실행한다.
| |
|
| |
| 결과적으로 <code>python manage.py runserver --settings=config.로컬용세팅파일 0:8000</code> 형태로 작동시켜주면 된다.(리눅스라면 &을 붙이자. 백그라운드에서 실행하게끔)
| |
|
| |
| 0:8000은 8000번 포트로 모든 IP로부터 접속을 허용한다는 이야기.
| |
|
| |
| ===nohup 을 사용한 지속작업===
| |
| 위처럼 실행시키면 터미널이 닫히거나 로그아웃하면 실행을 멈춰버린다. 이를 위해 nohup을 사용해
| |
|
| |
| <code>nohup python manage.py runserver --settings=config.로컬용세팅파일 0:8000 &</code> 형태로 올리면 백그라운드에서 서버를 돌린다.
| |
|
| |
| 멈추기 위해선 종료해주어야 하는프로세스가 4개 정도 되어, killall python 을 입력하는 게 낫다.
| |
|
| |
|
| ==서버 실행 자동화== | | ==서버 실행 자동화== |
| 165번째 줄: |
121번째 줄: |
| python manage.py makemigrations | | python manage.py makemigrations |
| python manage.py migrate | | 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 & | | nohup python /home/id8436/projects/mysite/manage.py runserver 0:8000 --settings=config.service_settings & |
|
| |
|
| </syntaxhighlight> | | </syntaxhighlight>에러가 뜨면 python manage.py collectstatic --noinput 를 사용한다. |
|
| |
|
| ===주의=== | | ===주의=== |
| 174번째 줄: |
132번째 줄: |
| 이땐 killall python을 실행하고 서버를 실행하면 된다.(이거 말고 핀포인트로 종료하는 방법은 없나;;? | | 이땐 killall python을 실행하고 서버를 실행하면 된다.(이거 말고 핀포인트로 종료하는 방법은 없나;;? |
|
| |
|
| =리눅스(우분투)에 올리기=
| |
| runserver는 사실 개발용 기능이다. 웹 서버에 올리기 위해선 아파치 같은 웹서버용 소프트웨어를 실행시켜야 한다.
| |
|
| |
| ==gunicorn==
| |
|
| |
| ===개요===
| |
|
| |
| * 파이썬 WSGI서버 중 하나.(파이썬을 웹서버와 중계하는 역할.)
| |
| * runserver로 접속할 수 있음을 확인한 후 진행한다.
| |
|
| |
| ===사전작업. wsgi.py 세팅===
| |
| startapp 명령어를 통해 만든 세팅파일 디렉토리에 wsgi.py가 있다. 이 안에서 서버와 소통하기 위한 기본적인 세팅을 손볼 수 있다.<syntaxhighlight lang="python">
| |
| import os
| |
|
| |
| from django.core.wsgi import get_wsgi_application
| |
|
| |
| os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
| |
|
| |
| application = get_wsgi_application()
| |
| </syntaxhighlight>기본 형태는 위와 같다만, 내 글을 따라온 사람이라면... 운영용 세팅파일인 <code>config.service_settings</code> 로 바꾸어주어야 한다.
| |
| <br /> | | <br /> |
| | ===nohup 을 사용한 지속작업=== |
| | 위처럼 실행시키면 터미널이 닫히거나 로그아웃하면 실행을 멈춰버린다. 이를 위해 nohup을 사용해 |
|
| |
|
| === 사용 ===
| | <code>nohup python manage.py runserver --settings=config.로컬용세팅파일 0:8000 &</code> 형태로 올리면 백그라운드에서 서버를 돌린다. |
| {| class="wikitable"
| |
| !과정
| |
| !설명
| |
| !방법
| |
| |-
| |
| |설치
| |
| |가상환경 내에서 설치해주자.
| |
| (runserver를 실행시켰을 때 잘 돌아감을 확인한 후 진행하자.)
| |
| |<code>pip install gunicorn</code>
| |
| |-
| |
| |테스트
| |
| |manage.py 가 있는 곳에서 <code>gunicorn wsgi의 경로</code> 를 입력해준다.
| |
| (필자의 경우 gunicorn --bind 0:8000 config.wsgi:application)
| |
|
| |
|
| --bind 0:8000은 모든 IP에서 8000번 포트로 들어오는 걸 허용한다는 의미.
| | 멈추기 위해선 종료해주어야 하는프로세스가 4개 정도 되어, killall python 을 입력하는 게 낫다. |
| | |
| 이걸 입력해주면
| |
| | |
| [2020-12-19 23:41:50 +0900] [86493] [INFO] Starting gunicorn 20.0.4과 같이 뜬다.
| |
| | |
| (해당 도메인으로 들어가보자. runserver로 진행한 것과 동일하게 뜰 것이다.)
| |
| |<code>gunicorn --bind 0:8000 config.wsgi:application</code>
| |
| |-
| |
| |유닉스 소켓으로 서비스
| |
| |유닉스 계열 시스템에선 포트방식보단 유닉스 소켓방식이 더 선호된다.
| |
| 백그라운드에서 실행되게 하자.
| |
| | |
| 소켓파일은 /tmp/gunicorn.sock 으로 생성된다.
| |
| | |
| 소켓방식으로 띄우면 단독으로 gunicorn 테스트는 불가.
| |
| |<code>gunicorn --bind unix:/tmp/gunicorn.sock config.wsgi:application &</code>
| |
| |}
| |
| | |
| ===종료===
| |
| 다른 것들을 테스트하기 위해 종료해야 할 때가 있다. <code>pkill -f gunicorn</code>
| |
| | |
| ==nginx==
| |
| 아파치와 같은 웹서버.
| |
| | |
| === 사용 ===
| |
| {| class="wikitable"
| |
| !과정
| |
| !설명
| |
| !방법
| |
| |-
| |
| |설치
| |
| |가상환경 내에서 설치해주자.
| |
| |<code>sudo apt install nginx</code>
| |
| |-
| |
| |설치 확인
| |
| |제대로 설치가 되었는지 확인
| |
| |<code>nginx -v</code>
| |
| |-
| |
| |설정파일 작성(sites-available)
| |
| |설정 디렉터리 아래에 설정파일을 만든다.(mysite로 만들 때)
| |
| 다음과 같이 파일을 작성한다.<syntaxhighlight lang="python">
| |
| server {
| |
| # 받을 포트.
| |
| listen 8000;
| |
| # 고정아이피.
| |
| server_name id8436.iptime.org;
| |
| #location = /favicon.ico { access_log off; log_not_found off; }
| |
| # static 디렉터리 파일. # static 디렉터리 주소.
| |
| location /static {
| |
| alias /home/id8436/projects/mysite/static;
| |
| }
| |
| # static으로의 설정 외의 연결은 이곳에서 처리하게끔.
| |
| location / {
| |
| include proxy_params;
| |
| proxy_pass http://unix:/tmp/gunicorn.sock; # gunicorn 소켓경로를 지정해준다.
| |
| }
| |
| }
| |
| </syntaxhighlight>
| |
| |sudo nano /etc/nginx/sites-available/mysite
| |
| |-
| |
| |설정파일 작성(site-enabled)
| |
| |site-available 안의 설정파일 중 활성화시키고 싶은 것들을 관리한다.
| |
| 기존 default 설정을 삭제하고 위에서 작성한 설정파일을 링크해둔다.
| |
| |<code>sudo rm /etc/nginx/sites-enabled/default</code>
| |
| <code>sudo ln -s /etc/nginx/sites-available/mysite</code>
| |
| |-
| |
| |확인 및 변동사항 적용
| |
| |설정파일을 테스트하고,
| |
| 재시작한다.
| |
| |<code>sudo nginx -t</code>
| |
| <code>sudo systemctl restart nginx</code>
| |
| |-
| |
| |이외 설정
| |
| |굳이 안건드려도 된다.
| |
| 기본 설정파일은 /etc/nginx/nginx.conf
| |
| | |
| sudo nano /etc/nginx/nginx.conf 형태로 기초 설정파일을 만질 수 있다.
| |
| |
| |
| |}
| |
| <br />
| |
| | |
| === 이외 명령들 ===
| |
| {| class="wikitable"
| |
| !명령
| |
| !설명
| |
| |-
| |
| |<code>sudo /etc/init.d/nginx start</code>
| |
| |쓸 일이 있을진 모르겠지만...(나중에 필요없으면 지우자.) nginx 시작
| |
| |-
| |
| |sudo systemctl start nginx
| |
| |시작
| |
| |-
| |
| |sudo systemctl stop nginx
| |
| |종료
| |
| |}
| |
| <br />
| |
| | |
| ==apache와 연동==
| |
| mod_wsgi 설치.
| |
| {| class="wikitable"
| |
| |+
| |
| !과정
| |
| !설명
| |
| !방법
| |
| |-
| |
| |httpd 설치 확인
| |
| |httpd가 설치되어있는지 확인.
| |
| |sudo httpd -V
| |
| |-
| |
| |
| |
| |
| |
| |
| |
| |-
| |
| |
| |
| |
| |
| |
| |
| |}
| |
장고! 웹 프레임워크! 틀:장고
- 장고:개요
- 장고:웹페이지설계
- 장고:앱
- 장고:url
- 장고:model
- 장고:DB
- 장고:모델 필드
- 장고:모델의 변경
- 장고:view
- 장고:클래스형 뷰, 제네릭 뷰
- 장고:view 각종 기능
- 장고:template
- 장고:static. 정적파일 사용하기
- 장고:CSS 사용하기
- 장고:JS 사용하기
- 장고:글꼴 사용
- 장고:부트스트랩
- 장고:media. 미디어 파일 사용하기
- 장고:관리자페이지
- 장고:settings.py
- 장고:기능구현
- 장고:회원관리
- 장고:유저
- 장고:커스텀 유저
- 장고:소셜로그인
- 장고:입력받기
- 장고:저장된 내용 활용하기
- 장고:변수 내보내기
- 장고:글쓰기
- 장고:페이징(페이지나누기)
- 장고:답변쓰기(댓글쓰기)
- 장고:추천,즐겨찾기
- 장고:새글(최신글) 나타내기
- 장고:썸머노트 설치
- 장고:네비게이션 바 만들기
- 장고:검색기능
- 장고:카테고리 만들기
- 장고:사진 올리기
- 장고:파일 업로드
- 장고:이메일app 만들기
- 장고:매직 그리드
- 장고:웹서비스
- 장고:Git
- 장고:리눅스에 올리기
- 장고:우분투에 올리기(nginx 사용)
- 장고:도커로 올리기
- 장고:서버 옮기기
- 장고:팁
보통 개발은 윈도우에서, 서비스는 리눅스에서 하곤 한다.
| 과정
|
방법
|
|
| 파이썬 설치
|
- sudo apt update
- sudo apt install --only-upgrade python3
|
- 업데이트 하고
- 설치 혹은 업데이트 한다.
|
| 가상환경 만들기
|
잠시! git으로 동기화된 디렉터리에 가상환경이 있을텐데, 이건 못써먹나? 실험해보자!
- sudo apt install python3-venv -y
- 가상환경을 만들고자 하는 디렉터리로 이동
- mkdir venvs
- cd venvs
- python3 -m venv mysite
|
- 가상환경 패키지 설치
- cd 명령어로 이동하지.
- 가상환경디렉터리를 만들고,
- 가상환경 디렉터리로 이동 후,
- mysite라는 이름의 가상환경 제작
|
|
|
첨언.
|
pip freeze > requirements.txt 명령을 기입하면 가상환경에 설치된 것이 텍스트파일에 기록된다.
이후 서버에서 pip install -r requirements.txt 를 실행하면 그 안에 있는 걸 따라 그대로 설치해준다.
|
| 가상환경 실행
|
- cd bin
- . activate
|
- 가상환경 안의 bin으로 이동.
- 해당 경로에서 활성화. 그럼 프롬프트 왼쪽에 가상환경명이 뜬다.
|
| 가상환경 해제
|
아무데에서나 deactivate를 입력
|
|
| 장고 설치
|
가상환경을 실행한 상태에서..
pip install django
|
기본 베이스에서 설치하면 다른 사람들에게도 영향이 간다.
|
매번 디렉터리로 들어가 activate를 치고 프로젝트 디렉터리로 돌아오는 건 굉장히 귀찮은 일이다. 다음과 같 쉘.sh 파일을 만들어보자.
#!/bin/bash
cd ~/프로젝트/프로젝트명 #프로젝트 디렉터리로 이동
. ~/vens/가상환경주소/bin/activate #가상환경 실행
쉘 파일 실행은 . 쉘.sh 로 가능하다.(. 띄고 파일명임에 유의)
이걸 alias에 등록하여 사용하면 참 간단하게 원하는 가상환경을 실행하고 작업공간으로 이동할 수 있다.(리눅스:alias 참조)
| 과정
|
방법
|
|
| 디렉터리만들기
|
프로젝트 디렉터리를 담을 공간을 만든다.
|
~/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 python manage.py runserver --settings=config.로컬용세팅파일 0:8000 & 형태로 올리면 백그라운드에서 서버를 돌린다.
멈추기 위해선 종료해주어야 하는프로세스가 4개 정도 되어, killall python 을 입력하는 게 낫다.