演習課 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

Linkedin Java 檢定題庫  try catch 流程

Linkedin Java 檢定題庫 try catch 流程

How to Set Up Firewall with UFW on Ubuntu 20.04

How to Set Up Firewall with UFW on Ubuntu 20.04

npm ERR! enoent ENOENT: no such file or directory, open ... package.json

npm ERR! enoent ENOENT: no such file or directory, open ... package.json


Comments