Physical Address

304 North Cardinal St.
Dorchester Center, MA 02124

AWS 上使用 EC2 部署 node + Nginx + https

內容目錄

AWS 上使用 EC2 部署 node + Nginx

如果要在 AWS 的 EC2 上部署 node ,多半因為 SSL 關係建議多部署一個 Nginx 作反向代理,這樣就能設定 https 來部署服務。
大致流程如下:

  1. 安裝pm2
  2. 安裝nginx
  3. 設定反向代理
  4. 安裝certbot

安裝pm2

pm2是一個可以讓node在背景跑的套件

sudo npm i pm2 -g

安裝完後跑pm2

pm2 start app //會去執行app資料夾中的index

到這部可以先試試看程式有沒有跑起來,直接看 EC2 執行個體的公開IP就可以囉

安裝nginx

$ sudo yum install nginx
$ sudo systemctl enable nginx && sudo systemctl start nginx

設定反向代理

建立設定文件 configuration.conf

$ sudo vim /etc/nginx/conf.d/configuration.conf

輸入以下內容

server {
server_name <你的網域>;
location / {
        proxy_pass http://127.0.0.1:3000; //node使用的port
      }
}

儲存後,重新跑nginx

$ sudo nginx -t
$ sudo systemctl restart nginx

到這邊可以瀏覽網域(http)看看,如果發現失敗可以先檢查 route 53 或是你的 DNS 有無進行指向設定(A record)。

安裝Certbot

因為執行 certbot 需要使用 python 所以先處理環境

$ sudo python3 -m venv /opt/certbot/
$ sudo /opt/certbot/bin/pip install --upgrade pip

接著安裝 certbot

$ sudo /opt/certbot/bin/pip install certbot certbot-nginx

設定 certbot 為可執行指令

sudo ln -s /opt/certbot/bin/certbot /usr/bin/certbot

跑看看

$ sudo certbot --nginx

這時會跳出執行詢問,按照詢問填入就可以,若有錯誤則依照錯誤處理。

最後顯示成功時,輸入你的網域應該就能看到正確的指向了。如果失敗,我自己是忘記設定 EC2 的安全群組,記得要把會用到的 port 都打開。

排程處理

記得憑證會過期,所以要留下定期處理憑證

$ echo "0 0,12 * * * root /opt/certbot/bin/python -c 'import random; import time; time.sleep(random.random() * 3600)' && sudo certbot renew -q" | sudo tee -a /etc/crontab > /dev/null

參考資料

https://medium.com/@chiragmehta900/deploy-a-node-js-application-on-aws-ec2-with-nginx-with-ssl-47fb163d0909

https://dev.to/0xfedev/how-to-install-nginx-as-reverse-proxy-and-configure-certbot-on-amazon-linux-2023-2cc9