cloud 雲服務(ex:AWS / Google )特點有兩類
- 用 EC2 建主機,通常把她當主機來用
- 全部都用上面的服務,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