演習課 WEEK14 (部屬)


Posted by s103071049 on 2021-07-22

cloud 雲服務(ex:AWS / Google )特點有兩類

  1. 用 EC2 建主機,通常把她當主機來用
  2. 全部都用上面的服務,DB 放 RDS,server 邏輯放 lambda => 不用維護任何主機

aws 功能介紹

遠端機器
1. Iaas(Infrastructure as a service) 提供最基本架構變成一個服務
2. platform as a service
3. soft as a service
  • 虛擬機器(虛擬主機) EC2:遠端有一台機器,你想裝甚麼都可以
  • S3: 存檔案的地方,可以想成一個 dropbox
  • route53:做 DNS 相關
  • RDS : 資料庫有關,已將最底層的基礎建設(infrastructure)蓋好,所以我甚麼都不用裝,我只要跟他說我要一個 mySQL、一個數據庫,他就會給我網址。他會自己幫建好,完成後他會給我 url, username, password,我就可以自己在上面建 table
  • lambda : serveless,不是沒有 server 的意思,而是不用維護 server。按照執行時間計費,如果想要可以將所有東西都放上來,就不需要維護 server,
<?php
 ...
?>

php file => 存到主機 => 透過某個 url 將檔案跑起來  => 所以要維護主機

serverless 在 google 上 可以想成 cloud 函式
你只要提供檔案,後面東西幫你建好 => 透過某個 url 將檔案跑起來

note:
aws 不同區域東西不會共用


EC2 就是租一台虛擬主機,想像他將遠方的機器權限開給你。

部屬步驟

一、EC2 -> 啟動執行個體

Amazon machine image ,和映像檔有點像,都是把狀態建立一份快照 snapshot,可以想他整個主機的狀態建立起來,要還原的時候就可以用這個狀態去還原。所以我可以用這個 image 去產生一個新的主機

接著選我要的作業系統。選 ubuntu server 18.04

二、選擇 instance type
選機器規格,instance 表示這台主機。

三、configure instance details

  • purchasing option: 你租了就是你的 / 你租了會幫你換不同的實體主機
  • subnet : aviability zone哪一個機房
  • network : 這邊 vpc( virtual private cloud) 表示他在哪個 group 底下
  • IAM role(角色權限) : 服務給誰使用,舉例來說給 BE 群組的人使用。 role 也可以是帳號的概念。
amazon virtual private cloud (vpc)
有些服務完全不想對外,不想讓外界存取,舉例:公司的 DB

對內利用 VPC 進行存取
DB/EC2 加到同一個 VPC group 裡面,就可以用内網 ip 去溝通

DB 10.0.0.1
EC2 10.0.0.2
=====
^
|
連不到

EC2 可以同時對內又對外,DB 一樣只能內網連,但如果可以連到 EC2 就可以再想辦法連到 DB

DB 10.0.0.1
EC2 10.0.0.2
=====
EC2 20.134.1.2
^
|

VPC 是分組的概念,但不同組之間不能互連

VPC1
DB 10.0.0.1
EC2 10.0.0.2

VPC2
DB2
instanceA

四、新增 storage
硬碟儲存空間要多少,ex:32 G
這邊的硬碟可以在不同的虛擬機器上移動,很酷吧 XD

五、新增 TAGS (給他分類)

六、configure security groups (防火牆)
你要讓那些流量(traffic) 進你的主機,可以不同主機都用相同的規則,所以叫 groups。

  • SSH : 才能連進主機
  • SOURCE:允許從哪連進來,0.0.0.0/0 表示全部,每個地方都可以連進來。可以指定特定 ip 才能連進來。有些可以設定進還是出。
SSH TCP  PORT:22 
HTTPS TCP PORT:443
HTTP TCP PORT:80

七、建立 key pair
有點像密碼的感覺,要有 key 才能連到主機。 把她想成一個密碼

八、launch


  • 同個 VPC 可以用私有 IP 進行溝通,比較快

連到主機

  • ssh 公有ipv4 => 未提供 key 所以被擋下
  • ssh -i 下載的金鑰檔案的路徑 連到哪個主機的哪個帳號(ubuntu@IPv4) => 失敗,unprocted private key file (key 權限太大,別的使用者也可以用這個 key) => 解決方式:chmod 400 檔案路徑

現在,連進遠端的機器

  • top :檢視用多少記憶體
  • q : 離開

更新系統,才能載入較新的套件
$ sudo apt update && sudo apt upgrade && sudo apt dist-upgrade
通常大寫會是預設,所以預設是 Y。

因為 XAMPP command line 上面沒有,所以會裝另一套系統 LAMP,跟 XAMPP 是相同的感覺,只不過是給 Linux 系統專用的。

  • 安裝 Tasksel (讓我們快速安裝應用軟體包)
    $ sudo apt install tasksel
$sudo 用系統管理員身分執行
apt (advanced package tool) 可以想成作業系統的 npm ,裝甚麼軟體都要透過他
  • 用 Tasksel 下載 lamp-server
    $ sudo tasksel install lamp-server

chrome 會自動幫你換成 https,但因為還沒設定完 https,所以會壞掉 => 解決方式、用 http 連


cd 進去 $ cd /var/www/html

用 sudo 硬寫,測試看看 server 架好沒 ~
sudo vim a.html

連到資料庫看看 $ sudo mysql -u root mysql (我的 user 叫 root,第二個 mysql 表示我要連進的 database)

  • 離開 SQL 指令: exit;
  • 簡單測試:select version();
    現在是從主機連入,如果從外部連入就要改一些東西。
我要讓 root 可以用密碼連進來
$ UPDATE user SET plugin='mysql_native_password' WHERE User='root';

立刻做權限的變更,不然可能暫存
$ FLUSH PRIVILEGES;

離開
$ exit;

設定 root 的密碼 $ sudo mysql_secure_installation
設完密碼後 => 刪除匿名 user => 選 N 允許遠端其他機器連入 => 剩下都 Y

phpMyAdmin 只是管理 mySql的介面,要裝不裝都沒差。

phpmyadmin
用 php 寫的 mysql 管理器

從遠端連入

telnet ip 3306 => 檢查是否幫你連上 3306 這個 port => 沒反應,表示 port 沒開

  • security group 安全性 => 安全群組 => 動作 => 編輯傳入規則 => 現在傳出規則沒有限制,傳入規則再加一個 mysql 3306 port,ipv6、ipv4 都新增 => 再 telnet 一次 => connection refuse (至少 port 開了只是阻止你連進)

連線方式一:mySql 進入

mysql 雙層設定 :設定一、哪個 ip 可以連進來;設定二、哪個帳號從哪個 host 可以連進來

mySQL 安全權限設定

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
進入 Vim 編輯器將 bind-address = 127.0.0.1 那行的最前面加上 # 或 將 127.0.0.1 改成 0.0.0.0 => wq 存檔離開
sudo service mysql restart (重開 mysql)

mySQL 使用者權限
(host 不同就是不同帳號,)

上次使用 sudo mysql_secure_installation 之後需要登入才能改變 mySQL 權限設定
mysql -u root -p 用 root mySQL 使用者登入 mySQL
SELECT user,authentication_string,plugin,host FROM mysql.user 查看 mySQL 有那些使用者帳號

GRANT ALL PRIVILEGES ON *.* TO 'mySQL 使用者帳號'@'%' IDENTIFIED BY 'mySQL 使用者密碼'; 選擇你想要遠端連接的使用者帳號,更改 host 欄位中的 localhost 為 %。 指令意思 = root 透過這個 host 登入,密碼要是 'mySQL 使用者密碼'。

參照資料 :
如何遠端連接虛擬主機上的 mySQL 資料庫
[ 紀錄] 部屬 AWS EC2 雲端主機 + LAMP Server + phpMyAdmin

  • standard:從外面連到主機 ip 位置。會有一些東西要調,比方說限制誰從哪裡連進來。mySQL 預設只能從 127.0.0.1 連進來。
  • ssh : 先用 ssh 連進去這個機器,再從這個機器連到 mySql

連線方式二:PHP 進入

一、安裝
$ sudo apt install phpmyadmin
空白鍵才是選取

二、設定連進 phpmyadmin 的密碼
(要否額外創一組帳密給 phpmyadmin 用,不要的話就輸入資料庫帳密登入)


放檔案

  • ls-al => 發現權限是 root 才有 => 改權限 $ sudo chown ubuntu /var/www/html
  • 調整設定顯示錯誤訊息 => 使用作業系統 (key word : php ubuntu config path) => The default location for the php. ini file is: Ubuntu 16.04:/etc/php/7.0/apache2. CentOS 7:/etc/php => 進入到 etc/php/7.0/apache2 => vim php.ini => 調整 display_errors = on (因為 read-only 所以用管理員身分進行調整 sudo vim php.ini) => (key word : ubuntu restart apache) 使用指令 $ sudo /etc/init.d/apache2 restart
  • (key word : php show err log) => Configure PHP.ini to Display All Errors display_errors = on
  • sudo vim php.ini 將 short_open_tag = On 調整

參考資料:
Edit the PHP configurations on a cloud server with Linux
Display All PHP Errors: Basic & Advanced Usage
Starting, stopping, and restarting Apache 2 webserver command

SFTP

  • Filezilla:選 SFTP、主機填入你的 IP、登入形式為金鑰檔案、使用者為 ubuntu、金鑰檔案選之前下載 .pem 檔。接著就連線。
  • 連線 => 東西放在根目錄 / => var => www => html (可以將本地的東西拖到上面或是下載下來)
  • 也可以用 git 管理但就要裝好 git

domain 設置

  • 先將 IP 複製
  • grandi.net 名稱伺服器設成 cloudflare
    用 cloudflare 可以將 https 自動弄好。cloudflare 會代管 DNS,
  • 步驟:新增網站 => 設置 DNS => 新增紀錄 A、名稱???、貼上複製的 IP

系統設計

系統設計的原則 : 避免 SINGLE POINT OF FAILURE (SPOF)

這也解釋為甚麼資料庫、主機至少要兩台,因為一台掛掉還有另一台可以備援。

參照筆記:
筆記、CS75 (Summer 2012) Lecture 9 Scalability Harvard Web Development David Malan


#note







Related Posts

React hook form(4) - controlled component & forwardRef

React hook form(4) - controlled component & forwardRef

EDA工作站建置(CENTOS 8)

EDA工作站建置(CENTOS 8)

接計畫的兩三事 #1

接計畫的兩三事 #1


Comments