서버 환경에서 장고 Admin을 사용해 보자. 장고 Admin을 사용하려면 개발 환경에서 했던 것처럼 슈퍼 유저를 먼저 생성해야 한다.
슈퍼 유저 생성하기
(1단계) 서버 환경에서 슈퍼 유저 생성하기
서버 가상 환경에서 python manage.py createsuperuser 명령으로 슈퍼 유저를 생성하자.
# [MobaXterm] ubuntu@ip-172-26-8-122:~$ mysite (mysite) ubuntu@ip-172-26-8-122:~/projects/mysite$ python manage.py createsuperuser 사용자 이름 (leave blank to use 'ubuntu'): admin 이메일 주소: admin@mysite.com Password: Password (again): 비밀번호가 사용자 이름와 너무 유사합니다. 비밀번호가 너무 짧습니다. 최소 8 문자를 포함해야 합니다. 비밀번호가 너무 일상적인 단어입니다. Bypass password validation and create user anyway? [y/N]: y Superuser created successfully. (mysite) ubuntu@ip-172-26-8-122:~/projects/mysite$ |
사용자 이름: admin
이메일 주소: admin@mysite.com
Password: admin
(2단계) 장고 Admin 접속하기
그리고 웹 브라우저에서 장고 Admin에 접속해 보자.
502 Bad Gateway
nginx/1.18.0 (Ubuntu)
위와 같은 오류가 나오면 아래 명령어로 Gunicorn을 실행하자.
(mysite) ubuntu@ip-172-26-8-122:~/projects/mysite$ gunicorn --bind unix:/tmp/gunicorn.sock config.ws gi:application |
이렇게 보이는 이유는 Nginx가 장고 Admin에서 사용하는 정적 파일을 제대로 읽지 못했기 때문이다. Nginx가 바라보는 정적 파일은 /home/ubuntu/projects/mysite/static 디렉터리에 위치해야 한다. 하지만 장고 Admin이 사용하는 정적 파일들은 다음 디렉터리에 위치한다.
장고 Admin이 사용하는 정적 파일 디렉터리 위치
/home/ubuntu/venvs/mysite/lib/python3.8/site-packages/django/contrib/admin/static
장고에 내장된 개발 서버는 장고 Admin이 사용될 때 자동으로 위 디렉터리의 정적 파일을 읽도록 설계되었다. 하지만, Nginx는 그렇게 설계되지 않았다. Nginx는 장고에 특화된 웹 서버가 아니라 범용적인 웹 서버이기 때문이다.
관리자 정적 파일 복사하기
이 문제를 해결하려면 장고 환경설정 파일에 STATIC_ROOT 디렉터리를 설정하고 python manage.py collectstatic 명령을 수행하여 관리자 앱의 정적 파일을 STATIC_ROOT 디렉터리로 복사해야 한다.
(1단계) STATIC_ROOT 설정하기
다음처럼 prod.py 파일에 STATIC_ROOT 항목을 추가한다.
# D:\projects\mysite\config\settings\prod.py from .base import * ALLOWED_HOSTS = ['3.35.154.72'] STATIC_ROOT = BASE_DIR / 'static/' |
Nginx에 정적 파일 위치를 /home/ubuntu/projects/mysite/static 디렉터리로 등록하였으므로 STATIC_ROOT도 위와 같이 설정해야 한다.
* BASE_DIR : /home/ubuntu/projects/mysite
(2단계) STATICFILES_DIRS 설정하기
prod.py에 STATICFILES_DIR를 다음처럼 추가하자.
# D:\projects\mysite\config\settings\prod.py from .base import * ALLOWED_HOSTS = ['3.35.154.72'] STATIC_ROOT = BASE_DIR / 'static/' STATICFILES_DIRS = [] |
그런데 base.py 파일에는 이미 다음처럼 STATICFILES_DIR 항목이 정의되어 있다.
# D:\projects\mysite\config\settings\base.py STATICFILES_DIRS = [ BASE_DIR / 'static' ] |
base.py 파일에 STATICFILES_DIRS 항목이 이미 있는데 prod.py 파일에 다시 빈 값으로 설정하는 이유는 STATIC_ROOT가 설정된 경우 STATICFILES_DIRS 리스트에 STATIC_ROOT와 동일한 디렉터리가 포함되어 있으면 서버 실행 시 다음과 같은 오류가 발생하기 때문이다.
STATICFILES_DIRS 리스트에 STATIC_ROOT와 동일한 디렉터리가 포함되는 나타나는 오류
?: (staticfiles.E002) The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting.
따라서 prod.py파일에 STATICFILES_DIRS = []으로 설정하여 오류를 방지해야 한다.
(3단계) 변경된 내용 서버에 적용
파일을 수정했으면 git 명령으로 commin, push 하자.
cmd 창에서 가상환경 들어가서 진행
(mysite) D:\projects\mysite>git commit -a -m "STATIC ROOT 생성" [master f5a04af] STATIC ROOT 생성 1 file changed, 3 insertions(+) (mysite) D:\projects\mysite>git push Enumerating objects: 9, done. Counting objects: 100% (9/9), done. Delta compression using up to 6 threads Compressing objects: 100% (5/5), done. Writing objects: 100% (5/5), 490 bytes | 490.00 KiB/s, done. Total 5 (delta 3), reused 0 (delta 0), pack-reused 0 remote: Resolving deltas: 100% (3/3), completed with 3 local objects. To https://github.com/Yoni33333/pybo.git 2841a16..f5a04af master -> master (mysite) D:\projects\mysite> |
그리고 서버에서는 다음과 같이 git pull 명령으로 변경 내용을 적용하자.
# [MobaXterm] (mysite) ubuntu@ip-172-26-8-122:~/projects/mysite$ git pull remote: Enumerating objects: 9, done. remote: Counting objects: 100% (9/9), done. remote: Compressing objects: 100% (2/2), done. remote: Total 5 (delta 3), reused 5 (delta 3), pack-reused 0 Unpacking objects: 100% (5/5), 470 bytes | 78.00 KiB/s, done. From https://github.com/Yoni33333/pybo 2841a16..f5a04af master -> origin/master Updating 2841a16..f5a04af Fast-forward config/settings/prod.py | 3 +++ 1 file changed, 3 insertions(+) (mysite) ubuntu@ip-172-26-8-122:~/projects/mysite$ |
★ 변경된 프로그램 서버에 적용하기
# 개발 환경에서 프로그램이 변경된 경우(cmd 창)
1. git add *
2. git commit -m "수정내용 코멘트"
3. git push
# 서버 환경에서 변경된 내용 적용(MobaXterm)
1. git pull
2. git sudo systemctl restart mysite.service
(4단계) collectstatic 명령으로 정적 파일 복사하기
이제 python manage.py collectstatic 명령을 수행하여 관리자 앱의 정적 파일을 복사한다.
중간에 yes를 입력하여 진행하면 132개의 정적 파일이 '/home/ubuntu/projects/mysite/static' 에 복사되었다는 메시지를 확인할 수 있다.
# [MobaXterm] (mysite) ubuntu@ip-172-26-8-122:~/projects/mysite$ python manage.py collectstatic You have requested to collect static files at the destination location as specified in your settings: /home/ubuntu/projects/mysite/static This will overwrite existing files! Are you sure you want to do this? Type 'yes' to continue, or 'no' to cancel: yes 132 static files copied to '/home/ubuntu/projects/mysite/static'. (mysite) ubuntu@ip-172-26-8-122:~/projects/mysite$ |
정적 파일들이 잘 모였는지 다음 명령어를 이용하여 확인해 본다. ls -l 명령 수행 시 admin 디렉터리가 추가된 것을 확인할 수 있다.
# [MobaXterm] (mysite) ubuntu@ip-172-26-8-122:~/projects/mysite$ cd static (mysite) ubuntu@ip-172-26-8-122:~/projects/mysite/static$ ls -l total 440 drwxrwxr-x 6 ubuntu ubuntu 4096 Oct 26 10:20 admin -rw-rw-r-- 1 ubuntu ubuntu 160392 Oct 17 10:08 bootstrap.min.css -rw-rw-r-- 1 ubuntu ubuntu 63240 Oct 17 10:08 bootstrap.min.js -rw-rw-r-- 1 ubuntu ubuntu 89664 Oct 17 10:08 jquery-3.6.1.min.js -rw-rw-r-- 1 ubuntu ubuntu 88 Oct 17 10:08 style.css -rw-rw-r-- 1 ubuntu ubuntu 118231 Oct 17 10:08 글쓰기.html drwxrwxr-x 2 ubuntu ubuntu 4096 Oct 17 10:08 글쓰기_files (mysite) ubuntu@ip-172-26-8-122:~/projects/mysite/static$ |
그리고 다시 장고 Admin에 화면이 정상적으로 보여지는지 확인해 보자.
여기까지.
'개발자모드 > 혼자공부하는파이썬' 카테고리의 다른 글
[파이썬/장고#39] 장고(django)에 로깅(logging) 적용하기 - 로그를 파일로 저장하기 (0) | 2022.11.02 |
---|---|
[파이썬/장고#38] 서버환경에서 디버그 모드 끄기(DEBUG=False), 사용자 404 오류 페이지 만들기 (0) | 2022.10.31 |
[파이썬/장고#36] 웹 서버 Nginx 설치 및 설정 방법 (0) | 2022.10.24 |
[파이썬/장고#35] Gunicorn 설치 및 실행 방법 (ft. AWS서버에 서비스 등록, 관리자 권한으로 파일 열기) (0) | 2022.10.21 |
[파이썬/장고#34] 웹 브라우저와 서버, 서비스 작동 방식 이해 (ft. 정적/동적 페이지 요청, WSGI 서버 작동 원리) (0) | 2022.10.20 |
댓글