장고 엔진엑스 지유니콘, EC2 배포 과정
사전 내용
- 깃허브에 프로젝트 올리기
- EC2 인스턴스 생성 > ssh 접속
우분투 초기 설정
# 우분투 패키지 업데이트
sudo apt update && sudo apt upgrade
# 계정 비밀번호 설정
sudo passwd root
sudo passwd ubuntu
# 지역 설정
sudo locale-gen ko_KR.UTF-8
# 시간 설정
su
dpkg-reconfigure tzdata
Asia
Seoul
# 서버 이름 변경
sudo vi /etc/hostname
> {서버이름}
sudo vi /etc/hosts
> 127.0.0.1 {서버이름}
# ssh 키 설정
ssh-keygen
# 작업 장비 ssh 반영
vi ~/.ssh/authorized_keys
> 작업 장비의 ~/.ssh/id_rsa.pub 내용 추가
# 단축어 등록
vi ~/.bashrc
alias 단축어:'실행명령어'
alias vi:'vim'
export DJANGO_SETTINGS_MODULE=config.settings.prod
# 변경 내용 반영
source ~/.bashrc
# 재부팅
sudo shutdown -r now
#
필요 패키지 설치
# 에디터
sudo apt install vim
# 깃 - 기존에 있음
sudo apt install git
깃에서 프로젝드 클론
# 서버 키 깃허브 등록 계정정보 기반일 경우 필요없음
id_rsa.pub > gitgub > setting > Deploy keys
git clone 프로젝트 경로
# 시크릿키 파일 생성 (있는경우)
secrets.json
{
"SECRET_KEY": "..."
}
파이썬 설치, 가상환경 구축
패키지 설치
sudo apt install python3.7 python3-pip python3.7-dev
sudo apt install virtualenv
# 파이썬 패키기 관리자 업데이트
pip3 install --upgrade pip
# 가상환경 패키지 설치
# pip3 install virtualenv
# 가상환경 생성 / 프로젝트 안
virtualenv --python=python3.7 venv
# 가상환경 접속
source venv/bin/activate
# 프로젝트 파이썬 패키지 설치
pip3 install -r requirements.txt
# DB 생성 / 없을 경우
python3 manage.py migrate
# 관리자 계정 생성
python3 manage.py createsuperuser
# 정적 파일 생성
python3 manage.py collectstatic
gunicorn 설치/실행
# 지유니콘 설치
pip3 install gunicorn
#
sudo ufw allow 8000
#
sudo ufw delete allow 8000
# 테스트 실행
gunicorn config.wsgi:application —bind 0.0.0.0:8000
# 정상 작동 테스트
curl -i http://localhost:8000
# gunicorn.service 생성
sudo vi /etc/systemd/system/gunicorn.service
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/{프로젝트 경로, mamage.py 위치
ExecStart=/home/ubuntu/{프로젝트 경로, mamage.py 위치}/venv/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/gunicorn.sock \
{프로젝트 명}.wsgi:application
[Install]
WantedBy=multi-user.target
# 지유니콘 소켓 생성
sudo vi /etc/systemd/system/gunicorn.socket
[Unit]
Description=gunicorn socket
[Socket]
ListenStream=/run/gunicorn.sock
SocketUser=www-data
[Install]
WantedBy=sockets.target
#wsgi.py 배포설정 지정
vi {프로젝트 경로, mamage.py 위치}/config/wsgi.py
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.prod')
# 지유니콘 실행
sudo systemctl start gunicorn
# 서버 실행시 자동 실행
sudo systemctl enable gunicorn
# 지유니콘 상태 확인
sudo systemctl status gunicorn
# 소켓확인
file /run/gunicorn.sock
# Output
/run/gunicorn.sock: socket
# 지유니콘 재설정 시
sudo systemctl daemon-reload
sudo systemctl restart gunicorn
# 오류 시 로그 확인
sudo journalctl -u gunicorn.socket
# 지유니콘 프로세스 확인
ps -ef | grep gunicorn
# 지유니콘 상태 확인
sudo systemctl status gunicorn
nginx 설치/설정
# 엔진엑스 패키지 설치
sudo apt install nginx
# 정상 설치 확인
curl -i http://localhost
# 엔진엑스 설정/로그파일
/etc/nginx/nginx.conf
/var/log/syslog
/var/log/nginx/access.log
/var/log/nginx/error.log
# 엔진엑스 페이지 설정 경로
cd /etc/nginx/sites-available/
# 기존파일 백업
sudo cp default default.bak
# 페이지 수정 - 지유니콘 연결
sudo vi /etc/nginx/sites-available/default
server {
listen 80;
server_name {도메인, 아이피주소 naver.com}
proxy_set_header X-Forwarded-Proto $scheme;
location = /favicon.ico { access_log off; log_not_found off; }
# gunicorn app
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Url-Scheme $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://unix:/run/gunicorn.sock;
}
location /static/ {
autoindex on;
alias /home/ubuntu/{프로젝트 경로, mamage.py 위치}/static/;
}
location /media/ {
autoindex on;
alias /home/ubuntu/{프로젝트 경로, mamage.py 위치}/media/;
}
}
# 페이지 공개
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default
# nginx 설정 파일 문법 확인
sudo nginx -t
# 엔진엑스 재실행
sudo service nginx restart
sudo systemctl status nginx
# 정상 설치 확인
curl -i http://localhost
'파이썬 - python' 카테고리의 다른 글
확인된 장고 사용하는 회사/서비스 (0) | 2020.05.29 |
---|---|
파이썬 국내 슬랙 채널 (0) | 2020.05.24 |
[장고] timezone 시간 맞추기 (0) | 2020.05.03 |
장고 환경 변수 분리 django Separating environment [.env / secrets.json] (0) | 2020.04.06 |
django Tailwind CSS Tutorial (0) | 2020.03.28 |