# VM & LB configuration
#### npm & pm2 설치
```
sudo apt install curl
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt install -y nodejs
sudo npm install pm2 -g
```
#### Repository 설정 및 실행
- Jenkins의 ssh rsa public key를 vm의 ~/.ssh/authorized_keys에 등록
- Doss의 Personal access token으로 repository clone
- Project Build & Run
```
npm i
npm run build
pm2 start /home/$USER/workspace/server-name/ecosystem.config.js --time --watch
```
- Run configuration
```
# ecosystem.config.js
module.exports = {
apps : [
{
name: "server-name",
script: "node ./dist/main",
watch: ["./dist"],
env: {
"NODE_ENV": "development",
},
env_production: {
"NODE_ENV": "production",
},
out_file: process.env.BLOBPATH + "/output.log",
error_file: process.env.BLOBPATH + "/error.log"
}
]
}
```
#### MySQL 방화벽 설정 (optional)
- Azure Console 에서 VM public ip 허용 등록
- Mysql에 User 추가
```
CREATE USER 'username'@'vm ip address' IDENTIFIED BY 'password';
GRANT ALL ON dbname.* TO 'username'@'vm ip address';
COMMIT;
```
#### NginX 설정
- 설치 & 실행
```
sudo apt install nginx
sudo systemctl start nginx
```
- SSL 셋팅 (optional)
- [SSL 생성방법 링크](https://hackmd.io/-9JVhw9yRGyMOmQr-XGvcQ?view)
- cert.pem파일과 key.pem파일 준비
- Nginx proxy 설정
```
# /etc/nginx/sites-available/default
upstream server_name {
server 127.0.0.1:3000; # 3000번 포트의 웹서버
}
server {
listen 443 ssl;
ssl_certificate /home/hasadmin/workspace/cert_file.cert.pem;
ssl_certificate_key /home/hasadmin/workspace/key_file.key.pem;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 443 포트로 들어오는 request를 3000번 포트의 웹서버로 proxy
proxy_pass http://server_name;
}
client_max_body_size 20M;
}
server {
listen 80;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 80 포트로 들어오는 request를 3000번 포트의 웹서버로 proxy
proxy_pass http://server_name;
}
client_max_body_size 20M;
}
```
- 재시작 & 상태확인
```
sudo systemctl restart nginx
# /etc/nginx/sites-enabled/default 파일에 위 설정이 적용되었는지 확인
systemctl status nginx.service
```
#### VM 생성 및 IP 할당 시 주의사항
- Load Balancer와 VM간 연결가능한 case
1) public ip 없는 VM들은 LB stadard(NIC)로 붙일 수 있음
2) public ip + avaialbilty set(fault domain 1개)이면 basic, std LB 모두 붙일 수 있음
- Load Balancer와 VM간 불가능한 case
1) public ip + no or different availability set/zone

2) SKU 타입이 LB와 VM의 public IP간 상이할 때

- VM 생성 시 가용성 및 public ip SKU 확인


- LB 생성 시 SKU 확인
