AWS: EC2 part 2
今晚,我要來點網站!
AWS EC2: 架站
既然 EC2 是雲端板虛擬機,那架站就和在虛擬機一樣裝 XAMP 就是了。Amazon Linux 是 RPM 系的,所以安裝步驟大略上與 RHEL, Fedora 大同小異: yum 啦 DNF 啥的黃狗狗。
$ sudo dnf update
$ sudo dnf install httpd php php-mysqli mariadb105
然後設定權限:
$ sudo usermod -a -G apache ec2-user
$ exit # 出去後再登入才能反應變更
$ groups # 應該有 ec2-user adm wheel apache systemd-journal 之類的
最後開啟 apache:
$ systemctl start httpd
$ systemctl enable httpd
疑難排解:防火牆
你可能發現 http 連不了。這可能是因為 AWS 防火牆擋住了。這時候要在 AWS 設定安全群組 (security group)放行 22(SSH), 80(HTTP), 443(HTTPS) port 就可以了。去 AWS 的 VPC security group 設定吧。
疑難排解:HTTPS憑證
AWS 本身沒有直接實裝 https 憑證,所以放行 443 port 不會直接連成。還需要憑證才可以。如果沒錢可以用 Let's Encrypt 服務簽發憑證。一般來說會用到 Certbot ACME 來完成簽發。
$ sudo dnf install certbot python3-certbot-apache
$ sudo certbot --apache --agree-tos --email {電子郵件}
$ sudo certbot --apache -n -d {註冊網域} -cert-name {註冊網域}
如果沒有同意授權條款,或沒提供電子郵件,會收到 You should register before running non-interactively, or provide --agree-tos and --email <email_address> flags.
Let's Encrypt 不接受使用 AWS 網域簽發憑證。如果試圖用 AWS 網域憑證,會收到 Error creating new order :: Cannot issue for "**.**.amazonaws.com": The ACME server refuses to issue a certificate for this domain name, because it is forbidden by policy
訊息。
好……我免費仔,所以做完對外連線,我就要結束我的 EC2 了。
疑難排解:Access-Control-Allow-Origin
AWS 官方支援 Access-Control-Allow-Origin
header,但需要設定,所以我決定不幹。就這樣。
結語
EC2 講完了就趕緊 terminate 吧。那需要錢啊。
參考資料
- 架站
- 防火牆
- HTTPS 憑證
- How to install an SSL certificate on an AWS EC2 instance? - Help - Let's Encrypt Community Support
- Policy forbids issuing for name on Amazon EC2 domain - Server - Let's Encrypt Community Support
- AWS EC2 上使用 Nginx + Let's Encrypt 部署 Flask 應用程式 | by Cosine Chen | Medium
- Using Let's Encrypt on AWS EC2 Instance - DEV Community
- Access-Control-Allow-Origin