Node.js Express ์๋ฒ๋ฅผ AWS EC2 ์์ ๋ฐฐํฌ๋ฅผ ํด๋ณด์. EC2์ git, npm, node.js ์ค์น ๋ฑ์ ์ฌ์ ์ธํ ์ ์๋ตํ๊ณ ๋์ด๊ฐ๋ค.
Node.js ํ์ผ๋ค๊ณผ ํจํค์ง๋ฅผ ๋ชจ๋ ๋ด๋ ค๋ฐ์ ํ์ ํ์ผ์ ์คํ์ํค๋ ๊ฒ์ผ๋ก ์๋ฒ๋ฅผ ๋๋ฆด ์๋ ์๋ค.
node index.js
ํด๋ผ์ด์ธํธ์์ ๋ด ์๋ฒ์ api๋ก ์์ฒญ์ ๋ณด๋๋๋,
๋ฆฌ์กํธ ํ๋ก ํธ๊ฐ ๋ฐฐํฌ๋ url์๋ HTTPS ๋ณด์์ด ๋์ด ์์ง๋ง, ์์ฒญ์ ๋ณด๋ด๋ ๋ด ์๋ฒ์ url์ ๊ทธ๋ ์ง ์๋ค. ๋ฐ๋์ HTTPS ๊ฑธ๋ฆฐ ์ฃผ์๋ก ์์ฒญ์ ๋ณด๋ด์ผ ํ๋ค.
HTTPS ์ ์ฉ์ ์์ ๊ธ์์ ์ฐธ๊ณ ํ ์ ์๋ค.
Nginx ์ค์ (Proxy)
๊ณง๋ฐ๋ก 3000๋ฒ ํฌํธ(๊ธฐ๋ณธ) ์์ node๋ฅผ ์คํํด์ ์์ฒญ์ ๋ฐ๋๋ค๋ฉด ssl ์ธ์ฆ์ ๊ฑธ์ด์ค ์ ์๋ค. node ์๋ฒ ์์์ Nginx๊ฐ ๋จผ์ ์์ฒญ์ ๋ฐ๊ณ , ๋ด ์๋ฒ๋ก ๊ทธ ์์ฒญ์ ๋๋ ค์ฃผ๋ฉด ๋๋ค. ์ ๊ฐ๋ฆฟ?
server {
#listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
server_name xxx.shop;
location /app {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:3000/app;
proxy_redirect off;
}
ssl_certificate /etc/letsencrypt/live/xxx.shop/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/xxx.shop/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
๋ชจ๋ api๋ค์ uri๊ฐ /app์ผ๋ก ์์ํ๋๋ก ์์ฑํ๋ค.
์๋ฅผ ๋ค์ด ํด๋ผ์ด์ธํธ๋ https://xxx.shop/app/users/login
๋ก ์์ฒญ์ ๋ณด๋ผ ์ ์๋ค.
https(443)์ผ๋ก ์์ฒญ์ ๋ณด๋ด๋ฉด nginx์์ node ์๋ฒ (3000)์ผ๋ก ๋๋ ค์ค๋ค.
PM2
pm2๋ฅผ ์ด์ฉํด node ์๋ฒ๋ฅผ ๋ฌด์ค๋จ ๋ฐฐํฌํ ์ ์๋ค.
pm2 start index.js
pm2๋ฅผ ์ค์นํ ํ์ ํด๋น ๋๋ ํ ๋ฆฌ๋ก ๋ค์ด๊ฐ์ ์คํํ๋ค.