# 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 ![](https://i.imgur.com/bmD8nwQ.png =200x) 2) SKU 타입이 LB와 VM의 public IP간 상이할 때 ![](https://i.imgur.com/MoNy6O4.png =200x) - VM 생성 시 가용성 및 public ip SKU 확인 ![](https://i.imgur.com/qM568YY.png =600x) ![](https://i.imgur.com/xkydNhK.png =230x) - LB 생성 시 SKU 확인 ![](https://i.imgur.com/GUxCmbq.png =600x)