# Deploy 心得
###### tags: `tool` `review`
以前在系統廠上班的時候,常常聽到deploy這個詞,現在終於知道在幹嘛了...
我老實講拉,我不知道原來有自己的網站那麼爽捏,為了怕以後還需要用到架設網站,所以我把一些mega都放在這裡,以後我會感謝現在的這個自己的.
#### AWS補充
AWS進入
> 我的帳戶=>管理主控台=>輸入email=>在輸入密碼
主要步驟如下:
```
1. 購買機器(digital ocean)
2. 購買Domain(gandi免費贊助)
3. 在機器上node一個php的環境, 把php code放上去(像是用ftp檔傳檔案,使用git clone把資料放進去)
4. 用ip去連連看
5. 把Domain和ip用DNS串起來
```
起手式:`ssh root@主機ipv4網址`
### 第一步驟要先安裝 [LAMP](https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-ubuntu-16-04)
也就是Linux, Apache, MySQL, PHP的縮寫
其實這份文件寫的很詳細, 就照上面和老師的做就好了.
防火牆和密碼的強度我就沒有動了
第一次成功會有一個Default page的頁面
(做到這邊代表安裝好防火牆,也連上主機了)
### 第二步驟要安裝mySQL
這邊有一個問題是, 正在安裝時, 是不會像老師一樣出現要你輸入密碼的對話框,然後就之後的內容是在闡釋, 要怎麼把密碼的強度設計強一點(這邊我直接跳過)
### 第三步驟要安裝PHP
指令: `sudo apt-get install php libapache2-mod-php php-mcrypt php-mysql`
注意`php-mcrypt`這個沒辦法安裝,所以指令改為`sudo apt-get install php libapache2-mod-php php-mysql`
重點在於後面透過vim打開info.php要能顯示出畫面,若是只有原始碼,代表有步驟做錯
### 第四步驟安裝[phpmyadmin](https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-phpmyadmin-on-ubuntu-18-04)
重點是跑完指令以後,記得要安裝這個模組`phpenmod mbstring`
可以跑出phpmyadmin的登入頁面,代表有成功了
## 錯誤訊息
### 1. 安装phpMyAdmin后无法使用root帐户登录
請看這篇[文章](https://wycrow.com/archives/73),主要是因為`这是因为出于安全原因,MySQL不允许远程用户以root用户身份登录`
所以這邊我設定了超級用戶`pmauser`和設定了一組密碼
### 2. 登入以後index.html都可以顯示畫面,唯獨除了index.php以外?
一開始出現這個問題時, 是直接出現[500 error](https://www.ubuntu-tw.org/modules/newbb/viewtopic.php?viewmode=compact&order=ASC&topic_id=105012&forum=9)
那debug的重點就是要先知道問題錯在哪? 不然會沒有下一步的
```
;display_errors = Off
display_errors = On
;display_startup_errors = Off
display_startup_errors = On
```
這樣就知道問題在哪了,錯誤會被`echo`出來
### 3. 出現mysqli_real_connect : hy000 2002 : no such file or directory
大概是說,我沒有conn.php這份檔案, 我檢查了下, 這應該是因為conn.php被ignore了,所以clone repository沒有複製到這一份.那我自己手動加吧~
手動加的話
指令`vim xxxxxxx/week13/hw3/conn.php`
這樣就可以直接進入conn.php的空頁面
把如下內容帶入
```php
$servername = '購買機器所提供的ipv4';
$username = 'pmauser';
$password =
$dbname = '';
$conn = new mysqli($servername, $username, $password, $dbname);
$conn->query("SET NAMES UTF8");
$conn->query("SET time_zone = '+08:00'");
if($conn->connect_error){
die("connection fail: " .$conn->connect_error);
}
```
### 4. 還是不行,出現mysqli::__construct(): (HY000/2002): Connection refused
看到了[這篇](https://stackoverflow.com/questions/27905049/php-warning-mysqli-connect-hy000-2002-connection-refused)
大意大概是
unix系統下連接mysql的方式有兩種,一種是TCP,一種是socket
- TCP是所有系統都支持的,通過TCP/IP協議可以訪問本地和遠程server
- socket只有unix系統支持(windows不支持),通過Unix socket file只能訪問本地server。
```
1. mysql --host=127.0.0.1 -u root -p #通过TCP连接
2. mysql --host=localhost -u root -p #通过socket连
```
這時候要更把server name改掉,並且重新建立新的db(我就照抄原本menter.program.co的各種schemma和table)
```php
$servername = '127.0.0.1';
$username = 'pmauser';
$password = 'phpmyadmin自己預設的密碼'
$dbname = '需要重新建立';
$conn = new mysqli($servername, $username, $password, $dbname);
$conn->query("SET NAMES UTF8");
$conn->query("SET time_zone = '+08:00'");
if($conn->connect_error){
die("connection fail: " .$conn->connect_error);
}
```
### 5. 這時候phpmyadmin又出現報錯囉, 使用設定檔案中定義的控制使用者連線失敗問題
[按照文章內容修正](http://rogermylife.me/?p=129)
不是很了解為什麼會出現這個問題,但是我先依照底下的說明做修改
```
第八步驟是最終目的,但是在mySQL 5.7中,會發現程式碼是正確的,錯的是帳號密碼,所以只要更改etc/phpmyadmin裡的config-db.php檔案即可
```
### 6. count(); Parameter must be an array or an object that implements Countable
這個問題查了下,似乎是新的版本才會有此問題
```
What I expected
No warning at all in both PHP 5.6.x and PHP 7.x.
What happened instead
The error above with PHP 7.x.
```
出現畫面如影片所示,直接透過這個視頻內容更改,主要是改底層的phpmyadmin config
[按照影片內容修正](https://www.youtube.com/watch?v=-4sR84QiEtM)
### 7. 不是啊,怎麼子網域還會出現?
這一步驟我一開始想的方法,是透過子網域遮罩來做,就是透過轉址的方式
其實更直覺的是直接把相關的index.php檔案放到fizeZella 裡面的這個目錄底下/var/www/html/,直接在裡面放入index.php即可,我要去中正紀念堂而不是還要跟計程車司機說喔我要去台北市中正區中山南路21號的感覺~~
後記:
每次解決完一個問題後面又出現一個,我想這就是deploy讓人崩潰的地方吧,但是真的看到網站上上線的那一刻,真的有股不言而喻的感動.