개발한 vue-django 프로젝트를 실제 운영서버에 띄우는 과정을 정리합니다! 

 

개발서버에서 구축했던 방법이 운영서버에서 적용할 때 조금씩 다른 부분도 있었고, 

여러 단계를 거쳐야 했기 때문에 잊어 버리지 않기 위해 기록해봅니다 스타트..!

 

🐾 단계

  1. 인스턴스 생성
  2. 보안규칙 생성
  3. DB ACL 허용 요청
  4. 도커 설치 - v23.0.3
  5. Jenkins 도커 서버 띄우기 - v2.399
    1. Jenkins 컨테이너 생성 및 실행
    2. Jenkins 컨테이너 내부에 DooD 구성하기
  6. 패키지 설치 및 환경 구성
  7. 웹 서버 띄우기
    1. 백그라운드로 웹 서버 띄우기

 

1. 인스턴스 생성

개발서버

ssh -i {pem키} ubuntu@{ip}

  • OS : Ubuntu Server 20.04 LTS
  • 타입 : r2.c4m16 (4vCPU, 16GB)
  • 스토리지 : 300GB

운영서버

  • OS : Ubuntu Server 20.04 LTS
  1. ssh {id}@{domain}
  2. (kinit)
  3. ssh {user}@{host}

😃 커버로스을 이용해 티켓이 발급된 사용자만 접속할 수 있도록 보안 단계를 거치게 됩니다! 

 

2. 보안규칙 생성

보안 그룹에서 필요한 포트 열어주기

젠킨스 기본 포트는 8080이지만 장고에서 사용하고 있기 때문에 겹치지 않게 7070으로 변경!

  • 7070 : 젠킨스
  • 8080 : 장고
  • 8000 : 뷰

 

3. DB ACL 허용

 

 

4. Docker 설치

  • Docker Latest : v23.0.3

개발서버

# dependency library download  
sudo apt-get update  
sudo apt-get install -y curl apt-transport-https ca-certificates gnupg-agent software-properties-common  
  
# Docker 다운로드 링크 추가  
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg  
  
# Docker Repository 등록  
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null  
  
# Docker 설치  
sudo apt-cache policy docker-ce  
sudo apt-get update  
sudo apt-get install -y docker-ce docker-ce-cli containerd.io  
  
# docker 그룹에 사용자 추가  
sudo usermod -aG docker $USER  
  
# 그룹 변경사항 활성화  
sudo newgrp docker

 

운영서버

# sudo 권한을 위해 아래 계정으로 접속
ssh {user}@{host}

# dependency library download  
sudo apt-get update  
sudo apt-get install -y curl apt-transport-https ca-certificates gnupg-agent software-properties-common  
  
# Docker 다운로드 링크 추가  
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg  
  
# Docker Repository 등록  
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null  
  
# 의존성 문제 해결
curl -O http://archive.ubuntu.com/ubuntu/pool/main/libs/libseccomp/libseccomp2_2.5.1-1ubuntu1~20.04.2_amd64.deb
sudo dpkg -i libseccomp2_2.5.1-1ubuntu1~20.04.2_amd64.deb

# Docker 설치
sudo apt-cache policy docker-ce  
sudo apt-get update  
sudo apt-get install -y docker-ce docker-ce-cli containerd.io  
  
# docker 그룹에 사용자 추가  
sudo usermod -aG docker $USER

 

5. Jenkins 서버 띄우기

Jenkins 컨테이너 생성 및 실행

  • Jenkins 제공 공식 도커 이미지 사용 (Jenkins 2.399)
  • Jenkins 컨테이너 생성 시 --privileged 옵션 필요
    • Variable Parsing 시 PostgreSQL는 yum으로 설치되므로 systemctl 명령어 사용 필요
  • 프로젝트 내 폴더 생성 후 실행할 스크립트 파일 모으기 (/home/ubuntu/variable-comparison/script/<DBMS명>)
  • 인스턴스와 컨테이너 폴더 위치 마운트하기 (/root/script)
sudo docker run --privileged -d --name jenkins -p 7070:8080 -v /home1/{user}/variable-comparison/script:/root/script -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins

젠킨스 초기 비밀번호 확인

docker exec -i jenkins bash <<< "cat /var/jenkins_home/secrets/initialAdminPassword"

 

Jenkins 컨테이너 내부에 DooD 구성하기

# jenkins 컨테이너에 루트 권한으로 접속
docker exec -it -u root jenkins bash

# docker 그룹 생성
groupadd docker
# docker 그룹에 jenkins 사용자 추가
usermod -G docker -a jenkins
# 호스트의 docker 그룹 ID(998)로 지정된 그룹명을 docker로 변경
# docker 그룹 ID는 /etc/group 파일에서 확인 가능
groupmod -g 499 docker
# 컨테이너 내부 사용자가 호스트의 파일에 접근 가능하도록 호스트 사용자 아이디(500)로 변경
usermod -u 500 jenkins

apt-get update
apt-get -y install lsb-release apt-transport-https ca-certificates curl gnupg2 software-properties-common
apt-get -y upgrade apt-transport-https

# Docker 다운로드 링크 추가
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey
apt-key add /tmp/dkey

# Docker Repository 등록
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") $(lsb_release -cs) stable"

# Docker 설치
apt-get update
apt-get -y install docker-ce docker-ce-cli containerd.io

 

6. 패키지 설치 및 환경 구성

1. 프로젝트 Git clone

  • 안될 경우, 사내 게이트웨이 신청 필요할 수 있음
git clone {repository url}

 

2. pyenv 설치 (python 3.9.10)

sudo apt update
sudo apt install -y git sqlite3 build-essential libedit-dev make

# pyenv 설치를 위한 패키지 다운로드
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev
# pyenv 다운로드
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash

# ~/.bashrc에 환경변수 추가
cat >> ~/.bashrc << 'EOF'
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
export PYENV_VIRTUALENV_DISABLE_PROMPT=1
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
EOF

# ~/.bashrc 적용
source ~/.bashrc

# pyenv로 python 3.9.10 버전 다운로드
#sudo apt install -y lzma
pyenv install 3.9.10
# py39라는 이름의 가상환경 생성
pyenv virtualenv 3.9.10 py39
# py39 활성화
pyenv activate py39

 

3. requirements.txt 설치

pip install -r requirements.txt

# setuptools가 먼저 설치되어야 mysqlclient 설치가 정상적으로 진행됨
# 설치 순서도 중요!

 

4. secret key 발급

 

5. 필요한 패키지

  • Redis
sudo apt-get install -y libssl-dev default-mysql-server default-mysql-client default-libmysqlclient-dev
sudo apt-get install -y python3-pip
pip3 install requests bs4 sqlalchemy pymysql mysqlclient pandas redis
  • PostgreSQL
apt-get update && apt-get -y install sudo
sudo apt-get install -y postgresql-client
sudo apt-get install -y postgresql-client-common
sudo apt install pip 
sudo apt install default-libmysqlclient-dev
pip install sqlalchemy requests bs4 psycopg2-binary mysqlclient numpy pandas
  • 설치가 잘 안 될 경우
# ModuleNotFoundError: No module named '_ctypes' 에러
sudo apt-get install libffi-dev
# 가상환경 파이썬 제거
pyenv uninstall 3.9.10
# 가상환경 파이썬 재설치
pyenv install 3.9.10
# py39라는 이름의 가상환경 생성
pyenv virtualenv 3.9.10 py39
# py39 활성화
pyenv activate py39

 

6. npm, vue, nvm 설치

node 버전을 잘 맞춰 주는 것이 매우 중요하다! 안 맞으면 띄워지지가 않음..

# npm 설치
sudo apt install npm

# vue-cli 설치
sudo npm install -g @vue/cli
vue --version #@vue/cli 5.0.8

# nvm 설치
sudo apt-get install build-essential libssl-dev
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
source ~/.bashrc

# 원하는 버전 설치
nvm install 16.14.2

# 실행
# nvm use default 16.14.2

# 버전 확인
node -v  # v16.14.2
npm -v # 8.5.0

 

7. vue.config.js 변경

publicPath: process.env.NODE_ENV === 'production' ? '/static/dist/' : 'http://{ip}:{port}',

.public('http://{ip}:{port}')

 

7. 서버 띄우기

* 주의

로컬을 띄운 상태에서 실행할 경우 로컬 화면이 나오는 것이기 때문에 로컬을 끈 상태에서 진행해야 진정한 서버를 볼 수 있다!

 

운영서버

백그라운드에서 띄우기!

  • nohup node ./node_modules/@vue/cli-service/bin/vue-cli-service serve --port 18080 &
  • nohup python manage.py runserver {ip}:{port} --settings=main.config.settings.debug
  • 15361번 포트, 18080번 포트 사용

드디어 메인 화면이 예쁘게 뜬 것을 확인할 수 있다~!!

 

이렇게 정식으로 서버를 띄워본 것은 처음이어서 한 단계를 알아 갈 때마다 너무 재밌고 이런 시간을 보낼 수 있어서 감사했다!

관련 내용은 더 반복하고, 모르는 내용은 스터디해서 잘 정리해두어야겠다 :)

+ Recent posts