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:

sudo apt update && sudo apt upgrade && sudo apt dist-upgrade

lamp

LAMP Server

安裝LAMP Server

使用以下指令來安裝Apache、MySQL和PHP:

sudo apt install apache2 mysql-server php libapache2-mod-php php-mysql

lamp

安裝LAMP Server不會需要太久的時間。安裝好LAMP Server後,會自動啟動伺服器,此時用網頁瀏覽器,在網址列輸入伺服器的IP,應該會看到預設網頁。如果有看到,就表示LAMP Server已經安裝成功了!

lamp

LAMP Server的根目錄路徑

LAMP使用Apache作為網頁伺服器,網站的預設根目錄是在/var/www/html下,剛安裝完LAMP後,會在根目錄下自動放置index.html檔案,就是用網頁瀏覽器開啟伺服器的IP時看到的網頁。

lamp

查看PHP的詳細資訊

在網站根目錄/var/www/html中新增一個info.php檔案。可以使用以下指令,透過vim文字編輯軟體來建立新的info.php檔案:

sudo vim info.php

lamp

接著開始使用PHP程式語言來撰寫程式。可以透過phpinfo函數來顯示出PHP的詳細資訊,如下:

<?php
    phpinfo();
?>

lamp

儲存成PHP檔案後,接著在網頁瀏覽器網址列上輸入連結到這個PHP檔案的網址,就可以看到如下圖的表格:

lamp

透過PHP的phpinfo函數顯示出來的表格,可以讓我們得知很多有用的資訊,例如PHP的版本、PHP使用的插件(plugin)、PHP設定檔php.ini的路徑。

啟動、中止與重新啟動Apache伺服器

修改任何網站伺服器相關的設定或是安裝了新的網站伺服器相關的插件,通常都需要重新啟動Apache伺服器來套用更變。可以使用以下指令來完成:

啟動Apache
sudo apachectl start
中止Apache
sudo apachectl stop
重新啟動Apache
sudo apachectl restart

phpMyAdmin

安裝phpMyAdmin

在終端機下輸入以下指令,來安裝phpMyAdmin:

sudo apt install phpmyadmin

lamp

安裝過程需要設定phpMyAdmin,一開始會要求選擇網頁伺服器,因為我們裝的LAMP是使用Apache作為網頁伺服器,所以選擇apache2。用鍵盤的空白鍵(Space)來選擇項目,用Enter鍵確認選擇。

lamp

最後會詢問是否要設定dbconfig-common,選擇「是」(Yes)吧!

lamp

dbconfig-common將需要建立一個新的MySQL使用者來操作運行phpMyAdmin資料庫管理工具時需要額外用到的資料表,預設的使用者名稱為phpmyadmin,所以接著要設定phpmyadmin這個MySQL使用者的密碼。

lamp

再輸入一次剛才輸入的phpmyadmin使用者的密碼。

lamp

新的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的帳號設定。

sudo mysql -u root mysql

lamp

接著會進入MySQL的Shell。輸入以下指令,讓root帳號啟用mysql_native_password插件,使其能夠擁有密碼,並且能使用密碼登入。

UPDATE user SET plugin='mysql_native_password' WHERE User='root';

lamp

再來輸入以下指令來重新載入特權表:

FLUSH PRIVILEGES;

lamp

接著要來設定MySQL的root密碼。輸入以下指令執行更改root密碼的腳本:

sudo mysql_secure_installation

開啟VALIDATE PASSWORD插件,可以幫助我們檢查root密碼的安全性,避免被設置得太簡單而有安全上的疑慮。輸入y,同意啟用VALIDATE PASSWORD插件。

lamp

接著要決定密碼的複雜度,輸入2,使用最複雜的密碼。密碼長度必須大於等於8,且必須包含數字、英文大小寫字母和特殊字元。

lamp

接著要連續輸入兩次密碼。不過如果您在這個步驟出現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來修改。

lamp

確認密碼輸入無誤後,輸入y繼續。

lamp

輸入y,移除匿名使用者的資料。

lamp

輸入y,可以禁止從遠端使用MySQL的root帳號來登入MySQL。

lamp

輸入y,移除測試用的資料庫。

lamp

輸入y,重新載入特權表。

lamp

到這裡就設定完成了!

lamp

使用phpMyAdmin

在網頁瀏覽器的網址列輸入主機IP,並接上/phpmyadmin,就可以開啟phpMyAdmin。

lamp

登入的帳號輸入root,密碼輸入剛才使用mysql_secure_installation腳本所設定的密碼,就可以用MySQL的root帳號登入MySQL資料庫啦!

lamp

Apache的設定檔

Apache的設定檔位在/etc/apache2目錄下,因為筆者也不是很熟Apache,所以本篇文章不對設定檔的撰寫方式多做說明。但檢查Apache設定檔是否正確的指令,以及重新載入設定的指令,還是應該要提一下。

檢查Apache設定檔是否正確指令如下:

apachectl configtest

lamp

如上圖,如果您遇到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

lamp

以上指令是將ServerName localhost這行設定寫成一個獨立的設定檔fqdn.conf,並讓Apache去使用這個設定檔,將預設的ServerName設為localhost。如果是把ServerName設定寫在預設的(也就是第一個)虛擬主機(Virtual Host)的設定區塊中,ServerName設定的作用會被忽略,所以不能解決這個問題。

有了預設的ServerName後無論是檢查Apache設定檔,還是在啟動Apache伺服器的時候都不會再出現那個訊息了。

lamp

確認Apache的設定檔無誤之後,就可以使用以下指令讓Apache重新載入設定。

sudo apachectl graceful

啟用.htaccess檔案

Apache伺服器可以允許在每個網站目錄下放置.htaccess檔案來分別做不同的設定。不過要讓Apache伺服器去套用.htaccess檔案的設定,還需要在Apache設定檔的虛擬主機的設定區塊中加上Directory區塊,並設定AllowOverride all,來分別指定哪些目錄(以及其底下的子目錄)要支援.htaccess檔案。

語法如下:

<Directory 網站目錄路徑>
    AllowOverride all
</Directory>

設定方式如下圖:

lamp

設定完後記得執行以下指令來讓Apache重新載入設定:

sudo apachectl graceful

.htaccess檔案雖然會被加到網站目錄中,但它本身會被Apache伺服器拒絕訪問,所以不用擔心設定會外洩。

啟用rewrite模組

支援Apache的PHP程式經常會使用.htaccess檔案來進行伺服器端的轉址,這個轉址功能需要啟用rewrite模組才可以使用。因此在.htaccess檔案中使用RewriteRuleRewriteCond時,通常還會再加上<IfModule>將其包裹住,如下:

<IfModule mod_rewrite.c>
...
</IfModule>

執行以下指令來啟用Apache的rewrite模組:

sudo a2enmod rewrite

lamp

重新啟動Aapche後就可以在.htaccess檔案中使用RewriteRuleRewriteCond了!

再搭配Nginx伺服器

由於Apache伺服器不善於處理靜態資源的請求,若您在意伺服器的效能,還可以再加上Nginx來處理靜態資源的請求,可以參考這篇文章來架設LNAMP Server: