Dev./Cloud

[Cloud] 배포 - NCP : 자동으로 nginx 까지

Ivan'show 2023. 8. 5.
728x90
반응형

이전 자동 실행 스크립트는 바로 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/{생성된 경로}/ # 가져다 놓을 경로!

deploy.sh

#!/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 주소를 넣으면 된다.

 

 

 

728x90
반응형

댓글