一刀未剪的 AWS 部署紀錄

想把自己的部署過程紀錄下來。

簡述

我參考的文章是這篇:[ 紀錄 ] 部屬 AWS EC2 雲端主機 + LAMP Server + phpMyAdmin。這是我覺得寫的最清楚的一篇,如果看不懂我的可以看它的就好。

至於這篇記錄可以簡單分成以下幾個重點:

  1. 開啟 AWS 的虛擬主機服務
  2. 連線到虛擬主機,並設定作業環境(LAMP)
  3. 買網域,然後把網域和 IP 位址串起來
  4. 過程中碰到的錯誤處理

另外標題也說了,這篇主要是以紀錄性質為主,所以我不會著墨太多在一些細節上,不懂的部分你還是得靠自己上網查資料,總之加油囉!

第一步:開通 AWS 虛擬主機

註冊 AWS 帳號

沒錯,我在一開始就卡關了,因為手機驗證一直收不到驗證碼。另外還因為一直重新發送驗證碼太多次,害自己的帳號被 ban 掉:

error

後來聯繫客服,但等了 2 天都沒得到回應:

question

簡單來說,這個問題出在「電信行」的關係,因為我的手機是台灣之星所以才收不到。

總之最後決定重新辦一個新的帳號,並且跟家人借手機(台哥大),最後不到幾分鐘就解決這問題了。

所以呢,如果你的手機電信是台灣之星

  • 建議直接換一支手機來取得驗證碼
  • 建議直接換一支手機來取得驗證碼
  • 建議直接換一支手機來取得驗證碼

不然真的會被搞很久。

推薦閱讀:AWS Startups AWS Identity aws「Amazon web services」註冊電話驗證碼遲遲未收到?!

選虛擬機器

這邊就按照教學選擇 「Ubuntu Server 20.04 LTS (HVM), SSD Volume Type」

machine

還蠻有趣的,真的好像在選主機一樣。

選擇方案

一樣按照教學選擇有「綠色標章」的免費方案:

instance-type

細節設定

直接下一步

instance-details

添加 Storage

直接下一步

add-storage

添加 tag

直接下一步

add-tag

設定安全群組

security-group

附註:仔細看會發現我這邊選成兩個 HTTP 了,這樣會有問題,所以選的時候要記得再確認一下。

if you want to set up a web server and allow Internet traffic to reach your instance, add rules that allow unrestricted access to the HTTP and HTTPS ports

簡單來說這邊是要設定「你想怎麼連到這台機器」。預設只有 SSH,所以你必須自己加上 HTTP 和 HTTPS 這兩個,這樣之後才有辦法用瀏覽器來連。

有趣的是這邊可以順便複習一下網路的知識,像圖片裡有出現 TCP 協議 和 port 這些專有名詞。雖然這邊的值是自動帶入而且不能改,但至少你能大概看懂這邊在設定什麼。

最後檢查

就跟你網購買東西結帳的概念一樣,最後都會讓你確認一下你剛剛的選擇和設定:

review-and-launch

設定金鑰(key pair)

要連到這台機器的話必須透過 AWS 的公鑰(public key)和自己手上的私鑰(private key)。所以這邊要做設定。

key-pair

下面有提醒你,設定好之後記得把私鑰下載到電腦裡保存,不然之後就沒辦法下載了。另外這邊也看到以前學的東西「RSA」,一種非對稱式加密的方法。

總之呢,確保私鑰下載完後就可以進到下一步了。

建立成功

看到這畫面就代表成功了:

lanch-success

接著案右下角的「View Instance」。(這邊截圖截不到,但你滾軸往下滑就會看到了)

取得 IP 位址

到這裡就已經完成主機的啟動囉!

回主控台可以看到自己 server 的 Public IPv4 位址,記起來就對了。

instance-console

第二步:連到虛擬主機和設定環境(LAMP)

用 SSH 來連線

conn

按下 conn,接著會跳出這畫面:

conn-02

這邊有提供不同的選項來連線,但這邊會用 SSH 的方式來做。所以接下來打開你的 CLI,然後按照圖片的指示一步一步來。

1
chmod 400 "<私鑰檔案路徑>"

chmod(change mode)是 Linux 的指令,用來設定一個「檔案權限」,像是誰可以 read 啦、write 啦等等之類的。

所以簡單來說這邊是在設定「只有 user 可以 READ」這個私鑰檔案。詳細可以參考這個網站

接著:

1
ssh -i "<私鑰檔案路徑>"  ubuntu@ec2-< IPv4 位置>.compute-1.amazonaws.com

附註:-i 是 identity_file 的意思,所以後面才接私鑰檔案。

看到 welcome… 就代表連線成功了:

conn-03

設定 LAMP

接下來要來對這台主機設定伺服器環境:LAMP(Linux + Apache + MySQL + PHP)

附註:注意現在的主機是 Ubuntu,也就是 Linux 的環境,所以指令會跟一般你在 windows 上用的不一樣。(這邊也能明顯感受到你真的在操作遠端的主機,輸入指令都會卡卡的)

  1. 更新 Ubuntu 系統
1
sudo apt update && sudo apt upgrade && sudo apt dist-upgrade

跑到一半時會跳出需要多少空間的訊息,問你要不要繼續?輸入 y 就好。

  1. 安裝 tasksel
1
sudo apt install tasksel

一樣跟你說要多少空間,要不要繼續?輸入 y 就好。

  1. 用 tasksel 下載 lamp-server
1
sudo tasksel install lamp-server

下載中的畫面:

dowload-lamp-server

下載完後就可以打開瀏覽器輸入 ip 位址來看看剛誕生的伺服器:

server-born

設定 phpmyadmin

接著要來設定一些跟 PHP 和 MySQL 有關的東西。

  1. 下載 phpmyadmin
1
sudo apt install phpmyadmin

一樣跟你說要多少空間,要不要繼續?輸入 y 就好。

  1. 連接 apache2

set-apache2

  • 先按空白鍵
  • 出現星號 *
  • 按下 Enter
  1. 設定 configuration

phpmyadmin-configuration

這邊跟你說 phpmyadmin 必須先安裝 database 跟設定 configuration,如果你沒有要手動設定的話,直接按下 yes 就好。

  1. 設定密碼

phpmyadmin-passowrd

填完之後用 tab 聚焦到 <OK> 再按下 Enter,如果沒填的話會隨機產生(這真是我看過最厲害的恐嚇方式),所以最好乖乖填。

  1. 確認密碼

再確認一次囉。

phpmyadmin-passowrd-again

登入 phpmyadmin

接著就可以到瀏覽器網址輸入 IPv4/phpmyadmin 進到登入畫面。但你會發現明明輸入正確卻無法登入:

phpmyadmin-login-error

簡單來說,剛剛設的密碼不是 root 這個使用者,而 root 預設的權限是沒辦法直接用密碼來登入的。

所以這邊要先修改 phpmyadmin 的設定,設定成 root 可以用密碼登入。

  1. 進入 mySQL
1
sudo mysql -u root mysql
  1. 下 SQL 指令
1
UPDATE user SET plugin='mysql_native_password' WHERE User='root'; FLUSH PRIVILEGES;

看到有影響 1 個欄位就代表成功了:

1
2
3
Query OK, 1 row affected (0.01 sec) # 影響一個欄位
Rows matched: 1 Changed: 1 Warnings: 0
Query OK, 0 rows affected (0.01 sec)
  1. 離開 mySQL
1
exit
  1. 設定 root 的密碼

再提醒一次,剛剛設定的密碼不是給 root 用的,所以這邊要再重新設定一次。

1
sudo mysql_secure_installation

root-password

是否設定密碼?(y)

root-password-options

密碼強度設定:

  • Low (0) = 長度 >= 8
  • Medium (1) = 長度 >= 8,要有大小寫和特殊字元
  • Strong (2) = 長度 >= 8,要有大小寫,特殊字元和 dictionary file(字典檔?反正應該就是一種文字檔吧)

怕麻煩的話選 0 就好,除非你真的很注重安全性。

輸入密碼:

root-password-done

這邊輸入時發現沒有東西是正常的,不是你鍵盤壞掉。

總之呢,相信你的感覺就對了,接下來會連續問一些問題,可以都輸入 y,最後看到 All done! 就 OK 了。

做到這邊後,就可以回瀏覽器到 phpmyadmin 重新登入了。

測試檔案

環境設定好後,可以來試著放檔案上去看看。

接下來就是考驗你對 CLI 的熟練度了,試著用 cd 和 ls 來找到 var 這個資料夾吧。

move

接著進到裡面

1
cd var/www/html

嘗試建立一個新檔案

1
touch index.php

這時候會跟你說權限不足(Permission denied),所以要來設定一下。(跟 chmod 是差不多的概念)

1
sudo chown ubuntu /var/www/html

設定完後應該就能建立檔案囉。

touch-file

接著用 vim 來寫一些東西:

vim

回到瀏覽器的網址輸入 IPv4/index.php 看看有沒有 work!

hello

大功告成!到這邊為止,你已經把虛擬主機的環境都設定好囉。

第三步:購買域名

先到 gandi 買一個自己喜歡的域名。(或去其他地方買也行)

domain-01

domain-02

附註:後來結帳才發現 .com 是公司或集團才可以用的域名,哈哈!

domain-03

接著是一些基本的結帳流程,就不特別貼了,因為要一直把個資馬掉有點麻煩。

最後結帳完的結果:

domain-04

接著要來把 Domain 和 IP 串起來,先回到首頁登入,會自動進入主控台。接著點選域名 > peanu.tw(你買的域名) > DNS 紀錄:

domain-05

把 A 的值改成 AWS 的 Ipv4 就可以了。

最後你就可以用網域來連啦~

文末

以上就是部署的整個過程,很開心自己把這個流程給跑完了。

最後是一些錯誤紀錄

  1. 選到同樣的協定

lanch-failed

The same permission must not appear multiple times

簡單來說就是我眼殘,選到兩個 HTTP。應該要選擇 HTTP 和 HTTPS 才對。

  1. ssh 連主機時發生錯誤
1
2
3
4
The authenticity of host 'ec2-3-93-242-234.compute-1.amazonaws.com (Ipv4)' can't be established.
ED25519 key fingerprint is SHA256:<key-value>.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?

參考 這篇文章 後得知,原來是透過 SSH 連到某個主機時,會先比對雙方的 key(防止中間人攻擊)。但是我們是第一次連線,電腦裡面沒有之前的 public key 紀錄,所以才會跳上面那個警告,確保你是否信任這個主機。

總之呢,輸入 yes 就可以了。這個動作自動會把 public key 儲存到 ~/.ssh/known_hosts 檔案裡,這樣下次在比對 key 的時候就能查到紀錄了。

為什麼要用 FileZilla? mentor-program-day84
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×