Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
在解決問題之道上不斷前行
如果要在 AWS 的 EC2 上部署 node ,多半因為 SSL 關係建議多部署一個 Nginx 作反向代理,這樣就能設定 https 來部署服務。
大致流程如下:
pm2是一個可以讓node在背景跑的套件
sudo npm i pm2 -g
安裝完後跑pm2
pm2 start app //會去執行app資料夾中的index
到這部可以先試試看程式有沒有跑起來,直接看 EC2 執行個體的公開IP就可以囉
$ 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 需要使用 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