Dev./Cloud

[Cloud] 배포 - NCP : docker 로 배포

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

도커파일에서 실행하던 런 코드를 스크립트 파일로 바꾼다.

스크립트 파일의 경로를 한번에 scripts 로 정리하고

새롭게 start 파일로 작성한다. 경로에 민갑하기 때문에 최상위 경로에 하나 만들어주고 lion_app (manage.py 가 있는) 에 하나 더 만들어서 구분지어 준다.

FROM python:3.11-alpine
LABEL likelion.web.backendauthor="Ivan kim <xormrdlsrks2@gmail.com>"

...

COPY ./scripts/start /start
RUN sed -i 's/\\r$//g' /start
# \\r : 캐리지 리턴
RUN chmod +x /start

# RUN python3 manage.py migrate -> start 스크립트로 대체

RUN if [ -e /var/www/html/static ]; then rm -rf /var/www/html/static; fi
# 정적파일을 긁어다가 root 로 보내줘야함
RUN python3 manage.py collectstatic

# CMD ["gunicorn", "lion_app.wsgi:application", "--config", "lion_app/gunicorn_config.py"] -> start 스크립트로 대체

start 파일 → 알파인 이미지에는 bash 가 없기 때문에 sh 로 작성

#!/bin/sh

python3 manage.py migrate
gunicorn lion_app.wsgi:application --config lion_app/gunicorn_config.py

 

 

 

NCP 에 올려서 동작시켜보자

쿨라우드 서버에서 코드를 클론받아서 동작시키는 방법

서버와 로컬이 다른점은 거의 없다. 우분투 위에서 설치해야하니 필요한 패키지들을 설치하는 스크립트를 작성해서 배포하고 오픈되는 IP 주소로 잘 연결해주면 무리없이 컨테이너를 띄울 수 있다.

우분투 서버를 새로 띄운다고 생각했을 때 필요한 패키지들을 순차적으로 설치하주는 스크립트를 짜보자.

우선 NCP 에서 서버를 생성할 때 서브 슈퍼유저를 생성해주니까 그 부분을 감안한 실행코드를 짠다.

deploy.sh

#!/bin/bash

# Required package install
echo "apt-get update execution"
sudo apt-get update 

echo "apt-get install curl execution"
sudo apt-get install -y curl

echo "apt-get install docker execution"
sudo apt-get install -y docker.io docker-compose

# 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
scp deploy.sh {생성한 유저 이름}@{공인 IP 주소}:/home/{생성된 경로}/ # 가져다 놓을 경로!

#
-rwxr-xr-x 1 lion lion  868 Aug  4 19:41 deploy.sh
...
./deploy.sh

초기 배포 설정이 완료되면 docker-compose 로 컨테이너를 띄운다.

docker-compose up --build
...
lion-app-dc | [2023-08-05 12:07:27 +0000] [10] [INFO] Booting worker with pid: 10
lion-app-dc | [2023-08-05 12:07:27 +0000] [11] [INFO] Booting worker with pid: 11
lion-app-dc | [2023-08-05 12:07:27 +0000] [12] [INFO] Booting worker with pid: 12
lion-app-dc | [2023-08-05 12:07:27 +0000] [13] [INFO] Booting worker with pid: 13

브라우저로 확인하면,

Disallowed 의 경우, settings 에서 설정을 변경해주면 되고 nginx 에서 django 로 프록시 연결해주면 nginx 로 들어오는 접근도 넘겨줄 수 있다.

server_name localhost 175.45.195.249;

ALLOWED_HOSTS = [
    "localhost",
    "127.0.0.1",
    "175.45.195.249", # 추가
]

CSRF_TRUSTED_ORIGINS = [
    '<http://localhost:8888>',
]

 

 

 

 

728x90
반응형

댓글