部署 (1) —— 建立 AWS EC2 主機及 SSH 連線


環境:

macOS Catalina 10.15.7

選用:

AWS EC2
映像檔:Ubuntu

註冊 AWS 帳號

註冊 AWS 會員步驟

點選「建立帳戶」:

註冊成功之後,進入「AWS 管理主控台」後:

  1. 可以點選主機地區,如果主要服務是在台灣的話,可以選東京或新加坡,但是收費比較貴,若免費的話,就不影響,所以也可以點選美東或美西地區,地點比較遠,有時候速度會稍慢。
  2. 點選「EC2」

建立 Amazon EC2 免費雲端虛擬主機

  1. 第一步:選取哪一種虛擬光碟來安裝 server
    IMAGE 為映像檔,有點像是虛擬光碟,使用哪種虛擬光碟來安裝,有 Amazon Linux、Ubuntu 的 server 可以選擇。

  1. 第二步:選擇一個 instance type
    勾選 Free tier eligible 的主機,另外,種類上的 t2.nano 比 t2.micro 更便宜

  2. 第三步:逐個步驟設定講解

    step. 4 ~ step. 5 不用設定,在以下做講解:
    step. 4: add storage:可以設定主機硬碟(size)要多大,還可以決定要不要加密(encryption)。
    step. 5: add tags:使用標籤,可以方便管理主機。

step. 6: configure security group: 設定及新增 AWS 上的防火牆。
防火牆上有兩個,一個是主機上的防火牆,另一個是 AWS 的防火牆,目前在 AWS 只限定 SSH 連線,且 source 為 0.0.0.0/0 所有 IP 都可連線,在這邊可以加上 HTTP、HTTPS 連進主機。

step. 7: preview instance launch:確認設定之後,點選按鈕 Launch,會有下方視窗出現,需要產生一組檔案形式的金鑰,來記住很長的金鑰密碼,這組密碼用於連線我設定的 AWS 虛擬主機,然後將這個產生的金鑰檔案下載到筆電 / 電腦裡。

然後點選右下角「Launch」

將虛擬主機開機

進入執行個體控制台

這樣就設定好虛擬主機囉,接下來要使用 SSH 連線至主機。

使用 SSH 連線至主機

連線教學:AWS 網站教學提供的 SSH 指令

此處的:ubuntu@ec2-x-xx-xxx-xxx.us-east-2.compute.amazonaws.comx-xx-xxx-xxx 是 AWS 該主機的「公有 IPv4 地址」

  1. 勾選剛設定好的主機後,點選上方的「連線」按鈕:
  2. 點選「SSH session」:
    (1) 先在 terminal cd 到金鑰檔案(jean01.pem)的路徑位置:
    Jean-Lu-2:w14_server_setup jeanlu$ pwd
    /Users/jeanlu/document/github/w14_server_setup
    Jean-Lu-2:w14_server_setup jeanlu$ ls
    jean01.pem
    
    (3) 針對 jean01.pem 進行權限更改:
    chmod 可以修改檔案的讀取(w,權重為 4)、寫入(r,權重為 2)、執行(x,權重為 1)權限,所以有三組使用者 rwx,三組分別為:檔案擁有者、加入此群組的使用者、非前述兩組本人及群組的使用者,可以以代號來表示檔案權限(rwx),例如: rwx是可以讀取、寫入、執行(其權重比為 4+2+1 = 7),rw- 可以讀取及寫入(權重比為 4+2 = 6)。
    原本的金鑰權限為rw-r--r--,檔案擁有者可以讀寫,群組使用者及非前述的本人及群組使用者可以進行寫入金鑰檔案,chmod 400 就是第一組使用者權重比 4(可以讀取),該群組使用者及非前述兩組使用者權重比為 0,即不可以讀取、寫入、執行該金鑰檔案。
    $ ls -al
    -rw-r--r--@  1 jeanlu  staff  1704  7 20 13:32 jean01.pem
    $ chmod 400 jean01.pem
    $ ls -al
    -r--------@  1 jeanlu  staff  1704  7 20 13:32 jean01.pem
    
    更改好金鑰檔案的檔案權限後,就可以使用 SSH 指令連到剛設好的主機,那 SSH 指令要怎麼打才可以連線呢?可以參考 AWS 提供的 SSH 指令:
    如果選的伺服器為 Amazon Linux AMI ,使用者名稱:ec2-user
    若選擇 Ubuntu Server LTS 使用者名稱:ubuntu
    SSH 連線: ssh -i ~/路徑/xxx.pem ubuntu@<公有 IPV4>

如果沒有修改金鑰的檔案權限,就使用 SSH 連線,會發生以下情況:
大概就是說金鑰 too open 太開放,沒有受到保護,叫我要更改金鑰的權限(從 rw-r--r-- 變成 r--------

-rw-r--r--@  1 jeanlu  staff  1704  7 20 13:32 jean01.pem
$ ssh -i "jean01.pem" ubuntu@ec2-x-xx-xxx-xxx.us-east-2.compute.amazonaws.com
The authenticity of host 'ec2-x-xx-xxx-xxx.us-east-2.compute.amazonaws.com (x.xx.xxx.xxx)' can't be established.
ECDSA key fingerprint is SHA256:xdxxxxx5DxxxxxtBeixxivxxx5vxxxxxlxxC4.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'ec2-x-xx-xxx-xxx.us-east-2.compute.amazonaws.com' (ECDSA) to the list of known hosts.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'jean01.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "jean01.pem": bad permissions
ubuntu@ec2-x-xx-xxx-xxx.us-east-2.compute.amazonaws.com: Permission denied (publickey).

修改好金鑰的權限後,成功連線 SSH:

$ chmod 400 jean01.pem  # 將金鑰權限改成只有檔案擁有者本人可以讀取。
$ ls -al
-r--------@  1 jeanlu  staff  1704  7 20 13:32 jean01.pem
$ ssh -i "jean01.pem" ubuntu@ec2-x-xx-xxx-xxx.us-east-2.compute.amazonaws.com
ubuntu@ip-xxx-xx-x-xx:~$

成功連線:

$ ssh -i "jean01.pem" ubuntu@ec2-x-xx-xxx-xxx.us-east-2.compute.amazonaws.com
Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 5.4.0-1045-aws x86_64) # 歡迎來到 Ubuntu server

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
  System information as of Tue Jul 20 06:57:27 UTC 202 # 一些主機設定
  System load:  0.0               Processes:           92
  Usage of /:   14.9% of 7.69GB   Users logged in:     0
  Memory usage: 22%               IP address for eth0: 172.31.7.90
  Swap usage:   0%

 * Canonical Livepatch is available for installation.
   - Reduce system reboots and improve kernel security. Activate at:
     https://ubuntu.com/livepatch

0 packages can be updated.
0 of these updates are security updates.



The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

問題思考:

思考一:AWS 在選擇 Ubuntu 映像檔下載時,有一個 64-bit(x86)64-bit(arm) 的選項
查了一下, macbook pro 的 intel 晶片以 x86 為架構, M1 晶片以 arm 為架構。

思考二:為什麼要在 security group 加上 HTTP ( port 80 ) 及 HTTPS ( port 443 ) ?
在 AWS 防火牆上增加可以使用 HTTP 及 HTTPS 連線到主機的連接埠,

思考三:什麼是 Putty?
Putty 讓在 windows 的平台上連線 ssh 的一套免費軟體。在 Mac 上可以透過內建的 terminal(終端機)連線 SSH。

思考四:在 AWS EC2 建立好 Ubuntu 的 server,那要怎麼使用剛剛下載的金鑰及 SSH 連線登入呢?
詳見上方步驟。

思考五:SSH 連線所需要的 IPV4 到底是哪一個呢?是 IPV6?公有 IPv4 地址?私有 IPv4 地址?公有 IPv4 DNS?私有 IPv4 DNS?
後來發現有兩種連線方式:

  1. 第一種連線方式是複製 AWS 提供的 SSH 連線指令 ssh -i "jean01.pem" ubuntu@ec2-x-xx-xxx-xxx.us-east-2.compute.amazonaws.com
  2. 第二種連線方式是:ssh -i <剛剛下載的金鑰路徑> ubuntu@<公有 IPv4 地址>,舉例:ssh -i /Users/jeanlu/document/github/w14_server_setup/estella.pem ubuntu@3.xxx.65.xxx
  3. 補充:在金鑰路徑後面的 使用者名稱@<公有 IPv4 地址> 的使用者名稱指的是當初建立主機時,所選的映像檔 AMI(amazon machine image)的使用名稱,我選擇的是 ubuntu server,所以使用者名稱就是 unbuntu,如果選的是 Amazon Linux AMI 的主機,使用者名稱就是 ec2-user

思考六:使用 SSH 連線上主機之後,要幹嘛?

在 Linux 上面要達成網頁伺服器需要 Apache 這套伺服器軟體吶!不過 Apache 僅能提供最基本的靜態網站資料而已,想要達成動態網站的話,那麼最好還是需要 PHP 與 MySQL 的支援才好。(參考自:鳥哥私房菜

在伺服器裡建立一個 LAMP 環境( LAMP=Linux + Apache + MySQL + PHP),可幫助我們達成動態與靜態網站的環境需求,有 Apache 可以提供最基本靜態網站,而需要建立動態網站的話,就需要 PHP 跟 MySQL 的支援。。

思考七:知道為什麼要建立一個 LAMP 環境後,那要怎麼安裝 LAMP 呢?


推薦:
如果想要更瞭解 AWS EC2 可以參考這篇:第一次在 AWS EC2 執行 Docker 就上手,新手入門之實作教學 & 心得分享

#MySQL #PHP #LAMP #aws ec2 #部署






你可能感興趣的文章

出去玩行程

出去玩行程

ORM & Sequelize 基本使用與介紹

ORM & Sequelize 基本使用與介紹

蔡比八寫後端(6) - TypeORM entity & column

蔡比八寫後端(6) - TypeORM entity & column






留言討論