๊ฐ๋ฐํ vue-django ํ๋ก์ ํธ๋ฅผ ์ค์ ์ด์์๋ฒ์ ๋์ฐ๋ ๊ณผ์ ์ ์ ๋ฆฌํฉ๋๋ค!
๊ฐ๋ฐ์๋ฒ์์ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ด ์ด์์๋ฒ์์ ์ ์ฉํ ๋ ์กฐ๊ธ์ฉ ๋ค๋ฅธ ๋ถ๋ถ๋ ์์๊ณ ,
์ฌ๋ฌ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ์ผ ํ๊ธฐ ๋๋ฌธ์ ์์ด ๋ฒ๋ฆฌ์ง ์๊ธฐ ์ํด ๊ธฐ๋กํด๋ด ๋๋ค ์คํํธ..!
๐พ ๋จ๊ณ
- ์ธ์คํด์ค ์์ฑ
- ๋ณด์๊ท์น ์์ฑ
DB ACL ํ์ฉ ์์ฒญ- ๋์ปค ์ค์น - v23.0.3
- Jenkins ๋์ปค ์๋ฒ ๋์ฐ๊ธฐ - v2.399
- Jenkins ์ปจํ ์ด๋ ์์ฑ ๋ฐ ์คํ
- Jenkins ์ปจํ ์ด๋ ๋ด๋ถ์ DooD ๊ตฌ์ฑํ๊ธฐ
- ํจํค์ง ์ค์น ๋ฐ ํ๊ฒฝ ๊ตฌ์ฑ
- ์น ์๋ฒ ๋์ฐ๊ธฐ
- ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์น ์๋ฒ ๋์ฐ๊ธฐ
1. ์ธ์คํด์ค ์์ฑ
๊ฐ๋ฐ์๋ฒ
ssh -i {pemํค} ubuntu@{ip}
- OS : Ubuntu Server 20.04 LTS
- ํ์ : r2.c4m16 (4vCPU, 16GB)
- ์คํ ๋ฆฌ์ง : 300GB
์ด์์๋ฒ
- OS : Ubuntu Server 20.04 LTS
- ssh {id}@{domain}
- (kinit)
- 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๋ฒ ํฌํธ ์ฌ์ฉ
๋๋์ด ๋ฉ์ธ ํ๋ฉด์ด ์์๊ฒ ๋ฌ ๊ฒ์ ํ์ธํ ์ ์๋ค~!!
์ด๋ ๊ฒ ์ ์์ผ๋ก ์๋ฒ๋ฅผ ๋์๋ณธ ๊ฒ์ ์ฒ์์ด์ด์ ํ ๋จ๊ณ๋ฅผ ์์ ๊ฐ ๋๋ง๋ค ๋๋ฌด ์ฌ๋ฐ๊ณ ์ด๋ฐ ์๊ฐ์ ๋ณด๋ผ ์ ์์ด์ ๊ฐ์ฌํ๋ค!
๊ด๋ จ ๋ด์ฉ์ ๋ ๋ฐ๋ณตํ๊ณ , ๋ชจ๋ฅด๋ ๋ด์ฉ์ ์คํฐ๋ํด์ ์ ์ ๋ฆฌํด๋์ด์ผ๊ฒ ๋ค :)