Back-End
網站部署
AWS
Ubuntu
LAMP
phpmyadmin
在練習這週的網站部署時,主要參考下列幾篇筆記:
網站部署大致可分為下列幾個步驟:
Ubuntu 是基於 Debian 的 Linux 發行版,是個免費開源的作業系統。Ubuntu Server 版是為執行伺服端的應用程式而設計的伺服器版本。
$ chmod 400 <私鑰檔案路徑>
$ ssh -i "<私鑰檔案路徑>" ubuntu@ec2-< IPv4 位置>.us-east-2.compute.amazonaws.com
安裝好 Ubuntu Server 後,需要把更新系統版本到最新,避免遇到安全性漏洞以及程式的 BUG。
CLI 指令如下,其中 apt 是用來管理 ubuntu 軟體的程式(可想像成 npm install
):
$ sudo apt update && sudo apt upgrade && sudo apt dist-upgrade
top
:查看主機即時資訊會進去下方介面,可查看有哪些 process 在運行、或占用多少 Memory等等。點選 Q 鍵可離開。
exit
:結束連線狀態輸入 exit
後就會直接登出,回到本地端。
這個指令雖然很基本,自己一開始卻沒有想到,反而還會重開 bash 或等它自動斷線XD 此外,bash 可以同時開啟多個視窗,所以是可以分別對本機和遠端主機下指令的。
LAMP 是 Linux 系統上的開源架站組合,縮寫分別代表:
$ sudo apt install tasksel
跳出訊息「安裝會佔用 XX 空間,是否繼續安裝?(Y/n)」,輸入 Y。
$ sudo tasksel install lamp-server
會進入紫色的下載畫面:
telnet <IP 位置> <port>
指令,檢視這個埠是否可使用,出現 Connected 就代表成功:phpMyAdmin 是以 PHP 為基礎的資料庫管理工具,讓使用者能夠以 Web 介面管理 MySQL 資料庫。
$ sudo apt install phpmyadmin
跳出訊息「安裝會佔用 XX 空間,是否繼續安裝?(Y/n)」,輸入 Y。
<Yes>
此處將會建立一個帳號來管理 phpMyAdmin 運行時用到的資料表,使用者名稱預設為 phpmyadmin,接著要設定這個使用者密碼。
<OK>
<OK>
,即完成設置設置完 phpMyAdmin 之後,接著要設定 MySQL 的 root 使用者,建立超級使用者(Superuser)以便在 phpMyAdmin 中進行管理。
也就是說,使用者必須登入後,才能夠實際對資料庫進行增刪改查等動作,並且也可透過 phpMyAdmin 圖形化介面直接操作資料庫。
由於 MySQL 預設使用 auth_socket 的驗證 plugin,使用者可以透過 sudo 直接登入 root 帳號。但這樣就無法透過 phpMyAdmin 登入圖形化介面,因為 phpMyAdmin 預設需要密碼登入。
我們可按照下列步驟來設定 root 密碼:
$ sudo mysql -u root mysql
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit
$ sudo mysql_secure_installation
$ y
,開啟 VALIDATE PASSWORD 插件選 1 以上要中英文大小寫 + 符號混用 + 一定長度,複雜性較高。
y
y
<IPv4 地址>/phpmyadmin
,會看到 phpmyadmin 的登入畫面,輸入帳密確認是否能夠登入<步驟 6 設定的 root 密碼>
順利以 root 帳密登入 phpmyadmin 後,會發現有個問題,當我們想查看任一個資料庫的資料表,或是想要執行匯入匯出功能時,會跳出下列錯誤訊息:
Warning in ./libraries/plugin_interface.lib.php#551
count(): Parameter must be an array or an object that implements Countable
原因是在 php 7.2 版本後,count()
在沒有添加參數的情形下,會噴出 Warning 警告訊息。這部分需要我們手動解決。其中有兩個部分需利用 vim 編輯器修改:
vim 指令:編輯完成後,按 esc 再輸入
:wq
即可儲存後退出 vim 編輯器。
$ sudo vim /usr/share/phpmyadmin/libraries/plugin_interface.lib.php
將第 551 行的 count($options) > 0
去掉,修改後如下:
小技巧:可使用 PgDn 按鍵快速往下,不用一行一行往下滑XD
if ($options != null ) {
// …
}
$ sudo vim /usr/share/phpmyadmin/libraries/sql.lib.php
將第 613 行修改成換成下列判斷式:
|| ((count($analyzed_sql_results['select_expr']) == 1)
完成以上步驟後,就可以正常操作 phpmyadmin 了!
參考資料:
此外,若想要使用 phpmyadmin 以外的圖形化界面操作資料庫(例如:Sequel Pro),可能會有無法連線的問題,因為預設只能從本機登入 MySQL,因此我們需要修改一些設定,步驟如下:
到 phpmyadmin 使用者帳號的介面,點選 root 帳號的「編輯權限」後,會進入編輯權限介面:
點選上方的「登入資訊」,在修改登入的主機名稱,改成任意主機,符號會變成 &
<你的域名>
,如果有出現和先前一樣的 Apache2 Ubuntu 預設頁面,就代表部署成功!
$ chmod 400 <私鑰檔案路徑>
$ ssh -i "<私鑰檔案路徑>" ubuntu@ec2-< IPv4 位置>.us-east-2.compute.amazonaws.com
cd ..
兩次,回到根目錄底下ls
找到 var 資料夾cd var/www/html
,會進到預設的 apache 首頁所在目錄,也就是我們剛才連到的域名頁面cd ..
回到 /var/www
目錄,再輸入 ls -al
可知目前只有 root 帳號有編輯權限:chown
指令來修改 ubuntu 帳號的檔案權限:
chown(change owner)
:改變檔案擁有者 = 定義誰擁有文件。chmod(change mode)
:改變檔案的權限 = 定義誰可以做什麽。
$ sudo chown ubuntu /var/www/html
var/www/html
目錄新增檔案!這時再以 la -al
檢視,會發現變成 ubuntu 擁有權限:以上傳 GitHub repository 為例:
git clone <GitHub 專案網址>
域名/對應路徑/檔案名稱
,確認是否有成功把檔案放上去除了使用 CLI 操作,我們還可以透過設定 FileZilla,以 key-pairs 登入 AWS EC2 來存取檔案,如此一來即可直接在圖形化界面進行操作。
設定步驟如下:
.pem
檔案/home/ubuntu
目錄var/www/html
,會看到 apache 的預設首頁 index.html 檔<網域名稱/路徑>
,確認是否有部署成功conn.php
如果是部署動態網站,需要連線到遠端資料庫,那就需要修改 conn.php
連線資料庫需要的資料,也就是修改成剛剛設定的 root 帳密:
$server_name = 'localhost';
$username = 'root';
$password = '<root 密碼>';
$db_name = '<資料庫名稱>';
終於來到一直很期待的網站部署,想起之前隨意聊就有提過,完成十四週能夠架一個自己的網站,擁有屬於自己的網域,可以帥氣的和朋友分享自己做出的網站了!和助教索取折扣碼的當下,竟然莫名有點感動QQ
發現自己終於走到課程的一半,雖然後面還有一段路要走,但也在過程中體會到,自己很喜歡在寫程式這件事中獲得的成就感。好像有點扯遠了,回到這禮拜的部署心得XD
主要是參考幾位同學的筆記,還有一些網路上的資料,跟著步驟一步步進行部署前的設定。其實筆記中步驟都已經整理得很清楚,自己只是跟隨前人的腳步去操作,也因此少繞了很多遠路,很佩服從零開始摸索的學長姐們,感謝萬分。
但過程中也有遇到一些不懂的部分,還是想要去理解每個步驟的意義是什麼,就花了點時間去查找資料,例如:
Ubuntu Server 是為執行伺服端的應用程式而設計的伺服器版本。簡言之,就是專門用來架設伺服器。
能夠使用 Tasksel 安裝 LAMP,快速配置 LAMP 環境。
是 Linux 系統上的開源架站組合,縮寫代表:Linux + Apache + Mysql + PHP。
上傳 Markdown 檔案時,發現中文部分會有亂碼問題,有查到幾個解決方法,但覺得好像在這花有點多時間,決定之後再參來考方法三來解決: