[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-aws-上g3m-4部署-node-nginx":3},{"id":4,"slug":5,"title":6,"description":7,"content":8,"date":9,"image":10,"imageAlt":6,"author":11,"categories":14,"path":20,"minRead":21},3572,"aws-上g3m-4部署-node-nginx","AWS 上使用 EC2 部署 node + Nginx + https","AWS 上使用 EC2 部署 node + Nginx 如果要在 AWS 的 EC2 上部署 node ，多半 […]","\u003Ch1>AWS 上使用 EC2 部署 node + Nginx\u003C\u002Fh1>\n\u003Cp>如果要在 AWS 的 EC2 上部署 node ，多半因為 SSL 關係建議多部署一個 Nginx 作反向代理，這樣就能設定 https 來部署服務。\u003Cbr \u002F>\n大致流程如下：\u003C\u002Fp>\n\u003Col>\n\u003Cli>安裝pm2\u003C\u002Fli>\n\u003Cli>安裝nginx\u003C\u002Fli>\n\u003Cli>設定反向代理\u003C\u002Fli>\n\u003Cli>安裝certbot\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch2>安裝pm2\u003C\u002Fh2>\n\u003Cp>pm2是一個可以讓node在背景跑的套件\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-jsx\">sudo npm i pm2 -g\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>安裝完後跑pm2\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-jsx\">pm2 start app \u002F\u002F會去執行app資料夾中的index\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>到這部可以先試試看程式有沒有跑起來，直接看 EC2 執行個體的公開IP就可以囉\u003C\u002Fp>\n\u003Ch2>安裝nginx\u003C\u002Fh2>\n\u003Cpre>\u003Ccode class=\"language-jsx\">$ sudo yum install nginx\n$ sudo systemctl enable nginx &amp;&amp; sudo systemctl start nginx\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>設定反向代理\u003C\u002Fh3>\n\u003Cp>建立設定文件 configuration.conf\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-jsx\">$ sudo vim \u002Fetc\u002Fnginx\u002Fconf.d\u002Fconfiguration.conf\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>輸入以下內容\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-jsx\">server {\nserver_name &lt;你的網域&gt;;\nlocation \u002F {\n        proxy_pass http:\u002F\u002F127.0.0.1:3000; \u002F\u002Fnode使用的port\n      }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>儲存後，重新跑nginx\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-jsx\">$ sudo nginx -t\n$ sudo systemctl restart nginx\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>到這邊可以瀏覽網域(http)看看，如果發現失敗可以先檢查 route 53 或是你的 DNS 有無進行指向設定(A record)。\u003C\u002Fp>\n\u003Ch2>安裝Certbot\u003C\u002Fh2>\n\u003Cp>因為執行 certbot 需要使用 python 所以先處理環境\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-jsx\">$ sudo python3 -m venv \u002Fopt\u002Fcertbot\u002F\n$ sudo \u002Fopt\u002Fcertbot\u002Fbin\u002Fpip install --upgrade pip\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>接著安裝 certbot\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-jsx\">$ sudo \u002Fopt\u002Fcertbot\u002Fbin\u002Fpip install certbot certbot-nginx\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>設定 certbot 為可執行指令\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-jsx\">sudo ln -s \u002Fopt\u002Fcertbot\u002Fbin\u002Fcertbot \u002Fusr\u002Fbin\u002Fcertbot\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>跑看看\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-jsx\">$ sudo certbot --nginx\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>這時會跳出執行詢問，按照詢問填入就可以，若有錯誤則依照錯誤處理。\u003C\u002Fp>\n\u003Cp>最後顯示成功時，輸入你的網域應該就能看到正確的指向了。如果失敗，我自己是忘記設定 EC2 的安全群組，記得要把會用到的 port 都打開。\u003C\u002Fp>\n\u003Ch3>排程處理\u003C\u002Fh3>\n\u003Cp>記得憑證會過期，所以要留下定期處理憑證\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-jsx\">$ echo &quot;0 0,12 * * * root \u002Fopt\u002Fcertbot\u002Fbin\u002Fpython -c &#039;import random; import time; time.sleep(random.random() * 3600)&#039; &amp;&amp; sudo certbot renew -q&quot; | sudo tee -a \u002Fetc\u002Fcrontab &gt; \u002Fdev\u002Fnull\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>參考資料\u003C\u002Fh2>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fmedium.com\u002F@chiragmehta900\u002Fdeploy-a-node-js-application-on-aws-ec2-with-nginx-with-ssl-47fb163d0909\">https:\u002F\u002Fmedium.com\u002F@chiragmehta900\u002Fdeploy-a-node-js-application-on-aws-ec2-with-nginx-with-ssl-47fb163d0909\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fdev.to\u002F0xfedev\u002Fhow-to-install-nginx-as-reverse-proxy-and-configure-certbot-on-amazon-linux-2023-2cc9\">https:\u002F\u002Fdev.to\u002F0xfedev\u002Fhow-to-install-nginx-as-reverse-proxy-and-configure-certbot-on-amazon-linux-2023-2cc9\u003C\u002Fa>\u003C\u002Fp>\n","2023-11-16T10:00:10","",{"name":12,"link":13},"Chih Fan","http:\u002F\u002Fpost.billxu.net",[15,18],{"name":16,"slug":17},"Devops","devops",{"name":19,"slug":19},"node","\u002Fblog\u002Faws-上g3m-4部署-node-nginx",1]