網站部署

tags: Tag(網站部署)

參考資料-部屬 AWS EC2 雲端主機 + LAMP Server + phpMyAdmin + CloudFlare

參考資料-部署 AWS EC2 遠端主機 + Ubuntu LAMP 環境 + phpmyadmin

參考資料-一小時完成 VPS (Virtual Private Server) 部署

使用的主機 - aws

部署前可以先選地區,亞洲區速度會比較快

選擇啟動虛擬機器開始部署

AMI 選擇 Ubuntu

instance type 選擇不同主機的等級,選擇免費的版本接著按下 next 做其他的設定

instance details 網路相關設定,直接選擇next不做任何更動

Add storage主機硬碟要多大,直接選擇next不做任何更動

Add tags 方便管理主機,直接選擇next不做任何更動

aws上的防火牆,這邊新增http 80port、mysql 3306port、https 443 也可以連進主機,接著按review and launch

按下launch後會出現需要產生一組密碼來連線主機,下載完密碼後按下launch instance

這組密碼在設定filezilla時會需要用到

成功running就可以打開iterm2

打開iterm2後如果直接用ssh 加上key連接主機會跑出 key的權限太高的問題

可以使用aws網站上connect建議的設定,先使用chmod 400 加上key降低權限,再用ssh連線

使用指令top可以看到即時更新的主機資訊,按q可以離開

接著先更新ubuntu系統,sudo是指要用管理員的身份去執行,apt是指在ubuntu上面管理套件軟體

使用 sudo apt install tasksel 安裝tasksel

tasksel是一個軟體包(輔助工具),協助安裝其他軟體(像是lamp-server)

把Public IPv4 address貼到chrome,網頁成功顯示代表apache的server有架起來

用指令sudo mysql -u root mysql登入mysql(用輸入者身份)
讓root可以登入phpmyadmin UPDATE user SET plugin='mysql_native_password' WHERE User='root';
更新權限 FLUSH PRIVILEGES;
離開 exit;

設root密碼

登入phpmyadmin後,更新使用者root的權限,就可以從自己的電腦透過別的軟體(任意主機)連到遠端主機

測試php有沒有跑起來

使用sudo chown ubuntu /var/www/html讓ubuntu可以有權限更改檔案

接著可以把local的資料庫匯出資料,遠端的資料庫匯入資料

設定filezilla

設定完成後找到正確的檔案放置的位置再新增檔案

設定完gandi後就完成拉


什麼是 DNS?

什麼是 DNS?

網域名稱系統,將可讀取的網域名稱 (例如,www.amazon.com) 轉換為機器可讀取的 IP 地址 (例如,192.0.2.44)。

什麼是資料庫的 lock?為什麼需要 lock?

模擬一個在購物網站搶購的情況。如果有很多人一起去搶購,同時執行怎麼辦?

這種情況就叫做 race condition,意思就是有兩個或以上同時在存取資個資料的時候會發生的問題-超賣。

這種時候,需要加上一個 lock,而這個 lock 只有 transaction 可以使用。

* 只需要在指令後面加上 for update 。
  就可以鎖定資料,讓資料後續接收資料之後,才可以繼續接收其他資料。

* 這時候只能接收一筆資料。但這樣做會有效能上面的耗損。

* 假如有指定 where id = 1 就會只把那個 row 給鎖定起來。
  但如果沒有的話,就會把整個 table 被鎖定。
$conn->autocommit(FALSE);
$conn->begin_transaction();
$conn->query("SELECT amount from products where id = 1 for update");
$conn->commit();

NoSQL 跟 SQL 的差別在哪裡?

SQL 與 NoSQL

SQL 是一個拿來查詢資料庫的語言,並不是一個資料庫系統,MySQL 才是。

* 任何一種以 SQL 為基礎的資料庫系統,都有差不多的特性

* 例如:
  必須事先定義好 Schema,可以想成是資料庫的規格書。
  就是資料庫裡面要有哪些欄位、每一個欄位的資料型態是什麼。
NoSQL特性
1. 沒有 Schema,可以想像成存 JSON 資料進 DB
   (Schema 就是結構,也就是 table 看起來的模樣,有 id 名稱 型態等資訊)
   好處是比較彈性,可是相對的在查詢資料的時候速度也會比較慢一點。
2. 用 key-value 來存
3. 不支援 JOIN
4. 通常用來存一些結構不固定的資料(log 之類的)

如果把資料存在 NoSQL 的資料庫裡面,可能就會長這樣:

{
  id: 1,
  author: 'huli',
  content: '大家好',
  create_time: 12345,
  comments: [
    {
      id: 1,
      content: 'comment 1',
      create_time: ...
    }, {
      id: 2,
      content: 'comment2',
      create_time: ...
  }
  ]
}

NoSQL 最適合的一點是 搜集數據。

* 例如說現在很多手機 App 其實會偷偷搜集你的資料傳回去
  做一些數據分析之類的。

* 可能會搜集:手機廠牌、型號、作業系統版本、安裝過的 App 等等的。

SQL 跟 NoSQL 並不是互斥的概念,可以在你的系統裡面用 SQL 類的資料庫系統儲存文章、評論,同時也用 NoSQL 類的資料庫來搜集使用者資訊。

資料庫的 ACID 是什麼?

SQL 大小事

* 在資料庫的交易中,為確保交易(Transaction)是正確可靠的,所以必須具備四個特性

1. Atomicity (原子性)
   * 資料操作不能只有部分完成。
     一次的 transaction 只能有兩種結果:成功或失敗
   
2. Consistency (一致性)
   * transaction 完成前後,資料都必須永遠符合 schema 的規範
     保持資料與資料庫的一致性
     
3. Isolation (隔離性)
   * 資料庫允許多個 transactions 同時對其資料進行操作
     但也同時確保這些 transaction 的交叉執行
     不會導致數據的不一致

4. Durability (持續性)
   * transaction 完成後,對資料的操作就是永久的
     即便系統故障也不會丟失

什麼是資料庫的 View 以及使用時機

View 檢視表、視圖 (SQL View)

又稱檢視表,是一個虛擬的資料表。

* 優點:隱藏/過濾原始資料,並簡化資料查詢。
  加強資料庫的安全性,View 可以將實體資料表結構隱藏起來,
  同時限制使用者只可以檢視及使用哪些資料表欄位。
建立 View
CREATE VIEW view_name [(column_list)] AS
SELECT column_name(s)
FROM table_name
WHERE condition;

// CREATE VIEW 表格名稱 AS 欲建立表格的SQL指令

什麼是 Stored procedure 以及如何使用

資料庫補充 View、Stored Procedure 與 Trigger

就像是 sql 的 function。

語法:

delimiter //
CREATE PRECEDURE 函式名稱(變數 變數型態)
  BEGIN 
    執行內容;
  END //
  delimiter;

預存程序是專門寫 function 的地方,不需要使用delimiter

使用的時候 - 加 CALL 才可以呼叫:

CALL 函式名稱(引數)

因為是把 function 寫在資料庫上面,所以需要 debug 就必須要打開資料庫才可以看到長什麼樣子,就會造成許多麻煩

資料庫的 Trigger 以及使用時機

儲存一些變動資訊,也就是 log 。

delimiter //
CREATE TRIGGER 名稱
    BEFORE UPDATE FROM table名稱
    FOR EACH ROW
  BEGIN 
    要做什麼;
  END //
  delimiter;

預存程序是專門寫 function 的地方,不需要使用delimiter

往後只要變動資料,就會被記錄下來。


讓PHP顯示錯誤訊息

顯示PHP錯誤訊息 加速偵錯(Debug)效率

設定php.ini,讓PHP顯示出錯誤訊息,加速偵錯(Debug)的效率。

/etc資料夾後,一層一層接著找到php.ini

使用sudo vim php.ini更新 display_errorson
接著使用sudo service apache2 restart重啟Apache

就能直接看到bug出現在哪一行了!

Select a repo