LAMP是Linux系統上的開源架站組合,從名稱來看,「L」表示「Linux」作業系統,「A」表示「Apache」網頁伺服器,「M」表示「MySQL」資料庫,「P」表示「PHP」程式語言,而phpMyAdmin則是以PHP作為基礎的資料庫管理工具。這篇文章將要介紹如何在Ubuntu Server上架設網站,選用LAMP Server + phpMyAdmin。二十分鐘內,一個屬於您自己的網頁伺服器便能誕生了!
作業系統環境以Ubuntu Server 22.04為例。安裝方式可以參考這篇文章:
更新 Ubuntu Server
在架設網站伺服器之前,先將系統更新到最新。可以使用以下指令來更新Ubuntu Server:
LAMP Server
安裝LAMP Server
使用以下指令來安裝Apache、MySQL和PHP:
安裝LAMP Server不會需要太久的時間。安裝好LAMP Server後,會自動啟動伺服器,此時用網頁瀏覽器,在網址列輸入伺服器的IP,應該會看到預設網頁。如果有看到,就表示LAMP Server已經安裝成功了!
LAMP Server的根目錄路徑
LAMP使用Apache作為網頁伺服器,網站的預設根目錄是在/var/www/html
下,剛安裝完LAMP後,會在根目錄下自動放置index.html
檔案,就是用網頁瀏覽器開啟伺服器的IP時看到的網頁。
查看PHP的詳細資訊
在網站根目錄/var/www/html
中新增一個info.php
檔案。可以使用以下指令,透過vim文字編輯軟體來建立新的info.php
檔案:
接著開始使用PHP程式語言來撰寫程式。可以透過phpinfo
函數來顯示出PHP的詳細資訊,如下:
<?php
phpinfo();
?>
儲存成PHP檔案後,接著在網頁瀏覽器網址列上輸入連結到這個PHP檔案的網址,就可以看到如下圖的表格:
透過PHP的phpinfo
函數顯示出來的表格,可以讓我們得知很多有用的資訊,例如PHP的版本、PHP使用的插件(plugin)、PHP設定檔php.ini
的路徑。
啟動、中止與重新啟動Apache伺服器
修改任何網站伺服器相關的設定或是安裝了新的網站伺服器相關的插件,通常都需要重新啟動Apache伺服器來套用更變。可以使用以下指令來完成:
啟動Apache
中止Apache
重新啟動Apache
phpMyAdmin
安裝phpMyAdmin
在終端機下輸入以下指令,來安裝phpMyAdmin:
安裝過程需要設定phpMyAdmin,一開始會要求選擇網頁伺服器,因為我們裝的LAMP是使用Apache作為網頁伺服器,所以選擇apache2
。用鍵盤的空白鍵(Space)來選擇項目,用Enter鍵確認選擇。
最後會詢問是否要設定dbconfig-common
,選擇「是」(Yes
)吧!
dbconfig-common
將需要建立一個新的MySQL使用者來操作運行phpMyAdmin資料庫管理工具時需要額外用到的資料表,預設的使用者名稱為phpmyadmin
,所以接著要設定phpmyadmin
這個MySQL使用者的密碼。
再輸入一次剛才輸入的phpmyadmin
使用者的密碼。
新的MySQL使用者phpmyadmin
建立完成後,phpMyAdmin就算是安裝完畢了!
設定MySQL的root密碼
MySQL的root密碼預設是空的,但是在預設情況下也無法使用密碼來登入root帳號(因為預設的驗證方式為auto_socket
)。如果要讓phpMyAdmin能用MySQL的root帳號來管理MySQL資料庫,我們必須先設定MySQL的root帳號,使其能夠使用密碼登入的功能。
因為一些歷史的原因,LAMP習慣上會使用root帳號來登入phpMyAdmin。這個小節會說明如何把MySQL的root帳號改為密碼登入,您可以了解一下,但筆者不建議您照著操作。您最好參考這篇文章的說明,為phpMyAdmin建立一個新的超級使用者(Superuser)帳號,而不要使用root帳號來登入phpMyAdmin。
首先輸入以下指令,用root帳號登入MySQL的mysql
資料庫。mysql
資料庫用來存放MySQL資料庫的內部設定,包括MySQL的帳號設定。
接著會進入MySQL的Shell。輸入以下指令,讓root帳號啟用mysql_native_password
插件,使其能夠擁有密碼,並且能使用密碼登入。
UPDATE user SET plugin='mysql_native_password' WHERE User='root';
再來輸入以下指令來重新載入特權表:
FLUSH PRIVILEGES;
接著要來設定MySQL的root密碼。輸入以下指令執行更改root密碼的腳本:
開啟VALIDATE PASSWORD
插件,可以幫助我們檢查root密碼的安全性,避免被設置得太簡單而有安全上的疑慮。輸入y
,同意啟用VALIDATE PASSWORD
插件。
接著要決定密碼的複雜度,輸入2
,使用最複雜的密碼。密碼長度必須大於等於8,且必須包含數字、英文大小寫字母和特殊字元。
接著要連續輸入兩次密碼。不過如果您在這個步驟出現Skipping password set for root as authentication with auth_socket is used by default
這樣的訊息而沒有進入更改密碼的步驟(似乎是BUG),請在完成mysql_secure_installation
的後續步驟之後,使用ALTER USER 'root'@'localhost' IDENTIFIED BY '<密碼>';
這個SQL敘述進行root密碼的第一次修改,之後若還要修改root密碼就可以正常使用mysql_secure_installation
來修改。
確認密碼輸入無誤後,輸入y
繼續。
輸入y
,移除匿名使用者的資料。
輸入y
,可以禁止從遠端使用MySQL的root帳號來登入MySQL。
輸入y
,移除測試用的資料庫。
輸入y
,重新載入特權表。
到這裡就設定完成了!
使用phpMyAdmin
在網頁瀏覽器的網址列輸入主機IP,並接上/phpmyadmin
,就可以開啟phpMyAdmin。
登入的帳號輸入root
,密碼輸入剛才使用mysql_secure_installation
腳本所設定的密碼,就可以用MySQL的root帳號登入MySQL資料庫啦!
Apache的設定檔
Apache的設定檔位在/etc/apache2
目錄下,因為筆者也不是很熟Apache,所以本篇文章不對設定檔的撰寫方式多做說明。但檢查Apache設定檔是否正確的指令,以及重新載入設定的指令,還是應該要提一下。
檢查Apache設定檔是否正確指令如下:
如上圖,如果您遇到Could not reliably determine the server's fully qualified domain name.
的訊息,可以執行以下指令來解決:
echo "ServerName localhost" | sudo tee /etc/apache2/conf-available/fqdn.conf > /dev/null && sudo ln -s /etc/apache2/conf-available/fqdn.conf /etc/apache2/conf-enabled/fqdn.conf
以上指令是將ServerName localhost
這行設定寫成一個獨立的設定檔fqdn.conf
,並讓Apache去使用這個設定檔,將預設的ServerName
設為localhost
。如果是把ServerName
設定寫在預設的(也就是第一個)虛擬主機(Virtual Host)的設定區塊中,ServerName
設定的作用會被忽略,所以不能解決這個問題。
有了預設的ServerName
後無論是檢查Apache設定檔,還是在啟動Apache伺服器的時候都不會再出現那個訊息了。
確認Apache的設定檔無誤之後,就可以使用以下指令讓Apache重新載入設定。
啟用.htaccess
檔案
Apache伺服器可以允許在每個網站目錄下放置.htaccess
檔案來分別做不同的設定。不過要讓Apache伺服器去套用.htaccess
檔案的設定,還需要在Apache設定檔的虛擬主機的設定區塊中加上Directory
區塊,並設定AllowOverride all
,來分別指定哪些目錄(以及其底下的子目錄)要支援.htaccess
檔案。
語法如下:
<Directory 網站目錄路徑>
AllowOverride all
</Directory>
設定方式如下圖:
設定完後記得執行以下指令來讓Apache重新載入設定:
.htaccess
檔案雖然會被加到網站目錄中,但它本身會被Apache伺服器拒絕訪問,所以不用擔心設定會外洩。
啟用rewrite
模組
支援Apache的PHP程式經常會使用.htaccess
檔案來進行伺服器端的轉址,這個轉址功能需要啟用rewrite
模組才可以使用。因此在.htaccess
檔案中使用RewriteRule
、RewriteCond
時,通常還會再加上<IfModule>
將其包裹住,如下:
<IfModule mod_rewrite.c>
...
</IfModule>
執行以下指令來啟用Apache的rewrite
模組:
重新啟動Aapche後就可以在.htaccess
檔案中使用RewriteRule
、RewriteCond
了!
再搭配Nginx伺服器
由於Apache伺服器不善於處理靜態資源的請求,若您在意伺服器的效能,還可以再加上Nginx來處理靜態資源的請求,可以參考這篇文章來架設LNAMP Server: