이전 자동 실행 스크립트는 바로 Django 서버를 열어주는 부분까지였다.
새롭게 추가된 내용을 포함한 자동 실행 스크립트를 만들어 보자.
우선 다시 클라우드에서 서버를 새로 여는 과정을 되짚어보면 root 를 사용하지 않기 위해 유저를 생성해주고 설정하는 과정들이 있었다.
이 일련의 과정들을 빠르게 진행할 수 있게 init script 를 만들어 보자.
서버 항목에서 init script 로 들어가서 생성을 눌러준뒤 설정값들을 넣어주고 아래의 내용을 스크립트란에 넣어준다.
#!/bin/bash
NEW_USER_ID="유저아이디"
PASSWORD="비밀번호"
# user creations
echo "Creating new user"
useradd -s /bin/bash -d /home/$NEW_USER_ID -m $NEW_USER_ID
# password change
echo "Set password"
echo "$NEW_USER_ID:$PASSWORD" | chpasswd
# user auth
echo "Update authorization"
echo "$NEW_USER_ID ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers.d/$NEW_USER_ID
# check user auth
echo "Check user auth"
cat /etc/sudoers.d/$NEW_USER_ID
이는 기본값으로 특정 아이디와 비밀번호를 가진 유저를 자동으로 생성하면서 서버를 띄워주기 때문에 root 로 접속해서 유저정보를 생성하고 권한을 부여하는 작업을 생략할 수 있게 된다.
서버를 생성할때 생성한 스크립트를 선택해 준다.
그럼 이제 서버를 열면 자동으로 생성된 유저아이디로 접속하면 된다.
로컬환경에서 ssh config 를 수정해서 공인IP 를 별칭으로 미리 바꿔주면 사용하기 더 편리하다.
vi ~/.ssh/config
이제 해당 서버로 아래의 deploy.sh 파일을 scp 를 사용해서 던져준다.
scp deploy.sh {생성한 유저 이름}@{공인 IP 주소}:/home/{생성된 경로}/ # 가져다 놓을 경로!
#!/bin/bash
# git clone
echo "Start to clone"
git clone <https://github.com/IvaninITworld/Dev_django_app.git> dev_django_app
cd dev_django_app
# venv 설치
echo "Start to install venv"
sudo apt-get update
sudo apt install -y python3.8-venv
# venv 구성
echo "Start to make venv"
python3 -m venv venv
# 가상환경 작동
echo "Start to activate venv"
source venv/bin/activate
# pip install
echo "start to install requirements"
pip install -r requirements.txt
# # runserver 기존작업에 제외 -> nginx로 서버를 띄울거니까
# echo "Start to runserver"
# cd lion_app
# python3 manage.py runserver 0.0.0.0:8000
자동으로 깃클론을 받아서 가상환경을 셋팅하고 필요한 내용들을 꺼내서 설치하는 작업을 할 것이다.
./deploy.sh
가상환경으로 들어가서 잘 설치되었는지 확인해 보자
pip freeze
# 결과물
(venv) lion@likelion2:~/dev_django_app$ pip freeze
asgiref==3.7.2
backports.zoneinfo==0.2.1
Django==4.2.3
gunicorn==21.2.0
packaging==23.1
sqlparse==0.4.4
typing-extensions==4.7.1
(venv) lion@likelion2:~/dev_django_app$
그 다음 nginx 설정을 진행하고 gunicorn 을 실행한다.
set_server.sh
#!/bin/bash
SERVER_IP=
MANUAL="Usage: $0 [-i server_ip]"
# curl ifconfig.me 이용해서 ip 자동입력
while getopts "i:" option; do
case $option in
i)
SERVER_IP=$OPTARG
;;
*)
echo $MANUAL
exit 1
;;
esac
done
if [ -z $SERVER_IP ]; then
SERVER_IP=$(curl ifconfig.me)
# exit 1
fi
# nginx installation
echo "Install nginx"
sudo apt install -y nginx
# nginx configuration file
echo "Create nginx config"
sudo sh -c "cat > /etc/nginx/sites-available/django <<EOF
server {
listen 80;
server_name $SERVER_IP;
location / {
proxy_pass <http://127.0.0.1:8000>;
proxy_set_header Host \\\\\\$host;
proxy_set_header X-Real-IP \\\\\\$remote_addr;
}
}
EOF"
# symlink
echo "Create symlink"
TARGET_CONF=/etc/nginx/sites-enabled/django
if [ -e $TARGET_CONF ]; then
ehco "Remove symlink"
sudo rm $TARGET_CONF
fi
sudo ln -s /etc/nginx/sites-available/django $TARGET_CONF
# nginx restart
echo "Restart nginx"
sudo systemctl restart nginx
run_gunicorn.sh
#!/bin/bash
# Activate venv
source venv/bin/activate
# Set up execution path
cd lion_app
# Start gunicorn
gunicorn lion_app.wsgi:application --config lion_app/gunicorn_config.py
DisallowedHost 는 단지 공인IP, 즉 도메인으로 사용할 주소값이 또 새로운 주소로 들어갔기 때문에 그런 것이니 로컬, 혹은 메인 저장소 안쪽 settings.py 에 있는 ALLOWED_HOSTS 에 해당 공인 IP 주소를 넣으면 된다.
'Dev. > Cloud' 카테고리의 다른 글
[Cloud] 배포 - NCP : docker 로 배포 (0) | 2023.08.13 |
---|---|
[Cloud] 배포 - AWS : Amazon ECR (0) | 2023.08.08 |
[Cloud] 배포 - NCP : Nginx 설정파일 (0) | 2023.08.04 |
[Cloud] 배포 - NCP : Nginx, gunicorn (0) | 2023.08.03 |
[Cloud] 배포 - NCP : 자동 배포 (0) | 2023.08.01 |
댓글