ํ๋์ EC2 Instance์ ๋ ๊ฐ์ Server ๋ฅผ ์ฌ๋ฆฌ๋ ๊ฐ๋จํ ๋ฐฉ์
80
๋ฒ ํฌํธ - Vue.js frontend serve
8000
๋ฒ ํฌํธ - Django backend serve
1. EC2 instance ๋ง๋ค๊ธฐ
์ํ๋ Amazon Machine Image (AMI) ์ ํํ๊ธฐ
๋๋ Ubuntu 16.04
๋ก ํ๋ค
2. PEM key ๋ง๋ค๊ธฐ
๊ธฐ์กด์ ์์ฑํ PEM key
๊ฐ ์๋ค๋ฉด, Instance ์์ฑ ํ PEM key๋ฅผ ์์ฑํ ์ง ๋ฌผ์ด๋ณด๋๋ฐ ๊ทธ ๋ ์์ฑํ๋ฉด ๋๋ค
PEM Key
๋ ์์ ํ ๊ณณ์ ๋ณด๊ดํด์ผ ํ๋ค!
ํ๋ผ์ด๋น ํค๋ฅผ ์์ ํ ์ฌ๋์ ๋๊ตฌ๋ instance์ ์ฐ๊ฒฐํ ์ ์์ผ๋ฏ๋ก ๋ณด์๋ ์์น์ ํ๋ผ์ด๋น ํค๋ฅผ ์ ์ฅํด ๋์ด์ผ ํ๋ค!
3. EC2์ ์ ์ํ๊ธฐ
3-1. PEM key ๋ฅผ ์ ์ฅํ ๊ฒฝ๋ก๋ก ์ด๋
cd ~/[PEM Key ์ ์ฅํ ๊ฒฝ๋ก]
3-2. ์ ๊ทผ ๊ถํ ๋ณ๊ฒฝํ๊ธฐ
sudo chmod 400 [PEM Key ์ด๋ฆ]
chmod
๋ ํ์ผ์ ์ ๊ทผ ๊ถํ์ ๋ณ๊ฒฝํ๋ ๋ช
๋ น์ด
400
์ ํ์ผ ์์ ์์ ์ฝ๊ธฐ ๊ถํ ๋ถ์ฌ
3-3. ssh
๋ช
๋ น์ผ๋ก EC2์ ์ ์ํ๊ธฐ
AWS console์ EC2 Instance ๋ชฉ๋ก์์ ์ ์ํ๋ ค๋ instance๋ฅผ ์ ํํ๊ณ ์ฐ๊ฒฐ (Connect)
์ ๋๋ฅด๋ฉด ์ฐ๊ฒฐ ๋ฐฉ๋ฒ์ด ์ ํ์๋ modal ์ฐฝ์ด ๋ฌ๋ค
๊ทธ ์ค์ ssh -i
๋ก ์์ํ๋ ๋ช
๋ น์ด๋ฅผ ๋ณต์ฌํ๋ค
PEM Key๊ฐ ์ ์ฅ๋์ด ์๋ ๊ณณ์์ ํด๋น ๋ช
๋ น์ด๋ฅผ ์คํํ๋ค
์ฌ๊ธฐ๊น์ง ํ๋ฉด Ubuntu Bash๋ก ์ ์ํ ์ํ๊ฐ ๋๋ค!
4. EC2์ ๋ฐฐํฌ์ ํ์ํ ํ์ผ๋ค์ ์ค์นํ๋ค
4-1. nvm ์ค์น
sudo apt update # update ํ๊ธฐ
sudo apt install -y build-essentail libssl-dev
sudo curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
์ค์ง์ ์ผ๋ก ๋
ธ๋๋ ๋์ค์ apt update
๋ .bashrc
์์ ํ๊ณ ์ ์ฉํ๋ค์์ ํ๋ฒ์ ์ค์นํ ์์
4-2. python 3.7 ์ค์น
sudo apt install software-properties-common # ์ฐ๋ถํฌ 16.04 ์์ add-apt-repository ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ค์น
sudo add-apt-repository ppa:deadsnakes/ppa # ํ์ด์ฌ 3.7์ ์ค์นํ๊ธฐ ์ํ ํจํค์ง ์ ์ฅ์ ์
๋ ฅ
sudo apt update
sudo apt upgrade # update & upgrade ํ๊ธฐ
sudo apt install -y python3.7 # -y ์๋ถ์ด๋ฉด ์์ค ๋
ธ ๋ฌผ์ด๋ด
python3.7 --version # ์์ง python --version ํ๋ฉด ์ ๋์ด
sudo apt-get install python3-pip # pip ์๋ค๊ณ ํด์ ์ค์น!!!!!
python3.7 -m pip install pip # python3.7 ์ฌ์ฉํ๋ pip ์ค์น
pip3.7 --version # pip3.7 ๋ก ์
๋ ฅํ๋ ค๋ ๋ถํธ
4-3. .bashrc
์ alias ์ค์ ํ๊ธฐ
$ sudo vim ~/.bashrc # ๋ชจ๋ vim ๋ช
๋ น์ด๋ sudo ๋ฅผ ์ฌ์ฉํ๋ค
# ๋๋ฌธ์ G (shift + g) ๋๋ฅด๋ฉด ๋งจ ์๋๋ก ์ด๋
# ๊ทธ๋ฆฌ๊ณ i ๋๋ฅด๋ฉด Insert mode๋ก ์ ํ๋๋ค
์๋์ alias
์
๋ ฅํ๊ธฐ
alias python="python3.7"
alias pip="pip3.7"
esc
+ :wq
+ enter
๋ก ์ ์ฅํ๊ณ ๋์ค๊ธฐ
source
๋ช
๋ น์ด๋ก ์์ ๋ ๊ฐ ๋ฐ๋ก ์ ์ฉํ๊ธฐ
4-4. node & npm ์ค์น
nvm install 12.15.0
node -v
npm -v
4-5. nginx ์ค์น
sudo apt install -y nginx
nginx
๋ก ๋น๋๋ ํ์ผ ์๋นํ ์์
5. ๋ณด์๊ทธ๋ฃน ์ค์ ํ๊ธฐ
: AWS console์์ EC2 instance์ ๋ํ ๋ณด์๊ทธ๋ฃน์ ์ค์ ํ๋ค
5-2. ๋ณด์๊ทธ๋ฃน ๋ง๋ค๊ธฐ
80
ํฌํธ์ 8000
ํฌํธ๋ฅผ ํ์ฉํ ๋ณด์๊ทธ๋ฃน์ด๊ธฐ ๋๋ฌธ์
๋ณด์๊ทธ๋ฃน ์ด๋ฆ์ 80-8000 ์ผ๋ก ์ค์ ํ๊ณ ,
์ค๋ช
์๋ "Allow 80-8000" ์ด๋ผ๊ณ ์ ์๋ค
5-2. Inbound ๊ท์น ์ค์
80
ํฌํธ์ 8000
ํฌํธ์ ๋ํ Inbound ๊ท์น์ ์ถ๊ฐํ๋ค
6. nginx ์ํ ํ์ธ
sudo service nginx status
Active: active (running)
์ด๋ผ๊ณ ๋จ๋ ๊ฒ ํ์ธํ๊ธฐ
AWS Console์ Instance ๋ชฉ๋ก์์ instance ๋๋ฅด๋ฉด ๋์ค๋ ์ฃผ์๋ฅผ ๋ณต์ฌํด์ Browser์์ ์คํ์ํค๋ฉด ์๋์ ๊ฐ์ ํ๋ฉด์ด ๋์์ผ ํจ
7. ๋ฐฐํฌํ ํ๋ก์ ํธ Clone ํ๊ธฐ
7-1. clone
git clone [ํ๋ก์ ํธ web URL]
7-2 Frontend ์ ํ์ํ ํจํค์ง ์ค์น & build
cd frontend
npm install
npm run build
8. ์๋น ์ค๋นํ๊ธฐ
8-1. nginx.conf
์์
cd /etc/nginx
ls # nginx.conf ๊ฐ ์๋ ๊ฒ์ ํ์ธ
sudo vi nginx.conf
include /etc/nginx/sites-enabled/*.conf;
์ enabled๋ฅผ available๋ก ์์
์์ ํ: include /etc/nginx/sites-available/*.conf;
์ ์ฅ ํ ๋น ์ ธ๋์ค๊ธฐ
8-2. sites-available
์์
cd sites-available
ls # default๊ฐ ์๋ ๊ฒ์ ํ์ธ
sudo vi default
์ฃผ์์ ์ ์ธํ๊ณ ์ ๋ถ ์ง์ด ํ, ์๋์ ๋ด์ฉ์ ์ถ๊ฐํ๊ธฐ
server {
listen 80;
location / {
root /home/ubuntu/[ํ๋ก์ ํธ๋ช
]/frontend/build;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
}
:wq
๋ก ์ ์ฅ ํ ๋น ์ ธ๋๊ฐ๊ธฐ
8-3. nginx ์ฌ ์์ํ๊ธฐ
sudo service nginx restart
์ฌ์ดํธ URL๋ก ์ ์ํ๋ฉด Frontend ์๋น ๋๋ ๊ฒ ํ์ธ ๊ฐ๋ฅ
9. MySQL ์ค์
9-1. ์ค์น
sudo apt update && sudo apt upgrade # apt ํจํค์ง ์ธ์คํจ๋ฌ ๊ฐฑ์
sudo apt install mysql-server
sudo apt install libmysqlclient-dev
sudo apt install python3.7-dev
9-2. root ๊ณ์ ์ค์
sudo mysql_secure_installation
์
๋ ฅ ํ ๋น๋ฐ๋ฒํธ ์ค์ ํ๊ธฐ
9-3. root ๊ณ์ ์ผ๋ก ์ ์ ํด๋ณด๊ธฐ
sudo mysql -u root -p
์
๋ ฅ ํ ์ค์ ํ ๋น๋ฐ๋ฒํธ ์
๋ ฅ
9-4. database ๋ง๋ค๊ธฐ
mysql> create database [database๋ช
];
10 . .env
file ์ค์
ํ์ํ ๋ด์ฉ ์
๋ ฅํ ๋น ์ ธ๋๊ฐ๊ธฐ
11. backend ๊ฐ์ ํ๊ฒฝ ์ค์
11-1. pipenv ์ค์น
cd ~/[ํ๋ก์ ํธ๋ช
]/backend
pip install pipenv --three
11-2. ๊ฐ์ํ๊ฒฝ ์คํํ๊ธฐ
11-3. ํ์ํ ํจํค์ง ์ค์นํ๊ธฐ
pipenv install -r requirements.txt
pipenv install mysql-client
12. gunicorn ์ค์ ํ๊ธฐ
12-1. gunicorn ์ค์น
pipenv install gunicorn
12-2. gunicorn
web server gateway interface
gunicorn django_server.wsgi:application -b 0.0.0.0:8000 --daemon
--daemon
๋ถ์ด๋ฉด Background์์ ์คํ๋จ
12-3. ์ ์คํ๋๊ณ ์๋์ง ํ์ธ
12-4. nginx ์ฌ์คํ
sudo service nginx restart
๋ฐฐํฌ ๋์~
+
์ฌ๋ฐฐํฌ
ํ์ฌ ๋ฐฉ์์ผ๋ก๋ ์ฌ๋ฐฐํฌ ์ ์ ๋ง์ ๋ง ๋นํจ์จ์ ์ด๋ค! ์๋ํ ํ ์์ !!!! ์ด๋ ๊ฒ ๊ทธ๋ฅ ๋ชป๋ฌ!!!!!!!!
backend ์์ ์
lsof -i TCP:8000
sudo kill -9 pid๋ฒํธ
git pull origin master
cd backend
pipenv shell
gunicorn django_server.wsgi:application -b 0.0.0.0:8000 --daemon
sudo service nginx restart
frontend ์์ ์
git pull origin master
cd frontend
npm run build
sudo service nginx restart