為了應對越來越頻繁的資安通報,解決方案就是用PPA各別安裝Apache / PHP / MySQL/ phpMyAdmin套件,這樣如果遇到資安通報可立即升級修補漏洞,確保系統安全,晚上也好睡覺,以下是分拆安裝(Apache / PHP / MySQL/ phpMyAdmin)的安裝方法步驟說明:
步驟1. 安裝Apache/PHP 為了取得Apache官網最新版本及PHP最新版本,這裡使用 Ondřej Surý 的 PPA套件
※輸入以下指令下載PPA套件
sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository -y ppa:ondrej/apache2
sudo add-apt-repository -y ppa:ondrej/php
※安裝 Apache 2.4.63(包含 OpenSSL)
sudo apt install -y apache2 apache2-utils ssl-cert openssl
※確認 Apache 版本及是否安裝
apache2 -v
應該會顯示:
Server version: Apache/2.4.63 (Ubuntu)
Server built: (日期資訊)
※啟動並設定開機自動啟動 Apache
sudo systemctl enable apache2
sudo systemctl start apache2
接下來安裝PHP套件及設定
※安裝 PHP 8.3 及所需的擴充功能
sudo apt install -y php8.3 libapache2-mod-php8.3 php8.3-cli php8.3-common \
php8.3-curl php8.3-gd php8.3-mbstring php8.3-mysql php8.3-sqlite3 \
php8.3-xml php8.3-zip php8.3-intl php8.3-bcmath php8.3-imagick
※確認 PHP 版本
php -v
如果返回
PHP 8.3.x (cli) (built: ...)
Copyright (c) The PHP Group
表示有正確安裝PPA提供的PHP8.3套件,
反之若回
PHP 8.1.x (cli) (built: ...) Copyright (c) The PHP Group
表示未正確啟用PPA的PHP套件,而是使用Ubuntu22.04內建的PHP
※解決方案-清除暫存重新安裝
※強制刷新套件列表
sudo apt update && sudo apt upgrade
※然後檢查 PHP 8.3 是否可用:
※如果仍然只顯示 PHP 8.1,請手動清理快取:
sudo apt clean
sudo apt update
※再次確認 PHP 8.3 版本
php -v
如果返回
PHP 8.3.17 (cli) (built: Feb 15 2025 09:09:01) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.17, Copyright (c) Zend Technologies
with Zend OPcache v8.3.17, Copyright (c), by Zend Technologies
這樣就有安裝PPA提供的PHP8.3了,不是Ubuntu內建的PHP
備註: 檢查常用模組是否啟用,若未啟用則手動啟用,如模組功能有用到imagick套件,檢查imagick是否有啟用!
sudo phpenmod curl mbstring mysqli pdo pdo_mysql exif gd gettext fileinfo openssl
重啟範例:
sudo apt install --reinstall php8.3-模組名稱
sudo phpenmod 模組名稱
sudo systemctl restart apache2
# 重啟 Apache
sudo systemctl restart apache2
※最後是在 Ubuntu 22.04 上啟用 PHP cURL 並配置 curl.cainfo,讓cURL函數能正成常運作
1. 更新套件清單、安裝基礎元件(curl、憑證庫)
sudo apt update
sudo apt install -y curl libcurl4-openssl-dev ca-certificates
2. 安裝 PHP + Apache 專用 cURL 模組(針對 PHP 8.3)
sudo apt install -y php8.3-curl
3.啟用 PHP curl 模組(Apache 會用這個版本)
4. 下載最新憑證庫 cacert.pem 並放入指定資料夾
sudo wget https://curl.se/ca/cacert.pem -O /usr/local/share/ca-certificates/cacert.pem
5.修改 php.ini 配置,位置應該在/etc/php/8.3/apache2/php.ini,或是可透過phpinfo();查詢php.ini路徑,用筆記本打開編輯,找到curl.cainfo,取消前面的#註解,加上cacert.pem路徑
curl.cainfo = "/usr/local/share/ca-certificates/cacert.pem"
6.更新系統的 CA 證書讓系統能識別新添加的證書檔案:
sudo update-ca-certificates
執行後若看到:0 added, 0 removed 也沒關係,因為我們用的是 curl 自訂路徑,不影響。
7.重啟 Apache
sudo systemctl restart apache2
8.驗證是否成功(最關鍵!)
建立一個 phpinfo.php 放在網站根目錄,內容如下:
<?php phpinfo(); ?>
在瀏覽器開啟 http://yourdomain/phpinfo.php,確認:
出現 cURL support => enabled
出現 curl.cainfo => /usr/local/share/ca-certificates/cacert.pem
最後還需要修改php.ini的upload_max_filesize及post_max_size與其他參數,不然原生的預設值只有2MB,現在隨便一張圖都幾百MB了,要改大一點才不會上傳失敗
先去http://yourdomain/phpinfo.php搜尋php.ini,找到目錄位置,用筆記本打開
將以下值參全部修改
upload_max_filesize = 2000M
post_max_size = 2000M
max_execution_time = 600
memory_limit = 4G
max_input_time = 600
max_file_uploads = 500
如果還想要更穩定的PHP上傳環境~不要跟系統共用/tmp資料夾,可以指定upload_tmp_dir路徑,方法如下
1. 建立專屬的暫存資料夾
sudo mkdir -p /var/www/html/uploads/php_tmp
sudo chmod 777 /var/www/html/uploads/php_tmp
2. 修改 PHP 設定 php.ini,路徑因該在
/etc/php/8.3/apache2/php.ini
搜尋 ;upload_tmp_dir修改為upload_tmp_dir = /var/www/html/uploads/php_tmp
儲存後,重啟Apache
sudo systemctl restart apache2
然後瀏覽器打開,搜尋 upload_tmp_dir,應該會看到:
upload_tmp_dir /var/www/html/uploads/php_tmp /var/www/html/uploads/php_tmp
這樣就算有超大圖檔都不會爆掉
以上流程到這裡為止Apache 及PHP的安裝就都全部完成了,可以在WWW根目錄中置入phpinfo.php,編輯內容貼上
<?php
phpinfo();
?>
儲存後於網址輸入https://www.Your_website.com/phpinfo.php
就能觀看Apach資訊及啟用中的PHP套件
這樣整個伺服器建置進度就有50%了,接下來要安裝MySQL/ phpMyAdmin,由於PPA未提供相關套件,所以我們使用Ubuntu22.04內建的MySQL / phpMyAdmin套件
步驟2.安裝MYSQL
※設置 MySQL-啟用 MySQL 並設置密碼
sudo apt update
sudo apt install mysql-server
※啟動 MySQL 服務 如果 MySQL 已經安裝,但未啟動,可以使用以下命令啟動:
sudo systemctl start mysql
※為了確保 MySQL 會在系統啟動時自動啟動,執行以下指令:
sudo systemctl enable mysql
※設定 MySQL root 密碼 接下來,我們需要設置 root 用戶的密碼。執行:
sudo mysql_secure_installation
會要求您輸入 root 密碼及安全設置,鍵盤Enter到底即可
※執行以下命令來安裝 phpMyAdmin:
sudo apt install phpmyadmin
在安裝過程中,系統會提示選擇 Web 伺服器。請選擇 apache2,並按 Enter 確認。
配置 phpMyAdmin 與 MySQL 整合 在安裝過程中,會提示是否配置 phpMyAdmin 與 MySQL 整合。選擇 "Yes" 並設置一個 phpMyAdmin 的密碼。
※啟用 PHP 與 phpMyAdmin 相關擴展 安裝 phpMyAdmin 後,啟用 Apache 模組並重新啟動服務:
sudo phpenmod mbstring
sudo systemctl restart apache2
※設定 Apache 訪問phpMyAdmin 權限
sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin
※重啟 Apache 使更改生效
sudo systemctl restart apache2
※完成以上步驟了,就可以測試訪問 phpMyAdmin,路徑如下
https://www.Your_website.com/phpmyadmin
如果phpMyAdmin沒有跑起來,可能原因是mysqli及mbstring套件沒安裝或沒跑起來,重新安裝即可顯示登入頁面
sudo apt install --reinstall php8.3-mysqli
sudo phpenmod mysqli
sudo systemctl restart apache2
sudo apt install --reinstall php8.3-mbstring
sudo phpenmod mbstring
sudo systemctl restart apache2
如果套件都正常運作,會顯示phpmyadmin登入畫面
如無意外,輸入密碼因該也是登不進去,需要另外設定用戶的認證方法及密碼
※輸入以下指令先登入mysql
sudo mysql -u root -p
※會看到auth_socket屬性
SELECT user,plugin,host FROM mysql.user WHERE user = 'root';
※改成你要登入phpmyadmin root 的密碼 (修改your pass)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your pass';
說明:使用 ALTER USER 修改 MySQL root 用戶的認證方法,將 auth_socket 改為 mysql_native_password,這樣可以使用密碼登入而非通過 socket 登入。
刷新權限 (FLUSH PRIVILEGES;) 以確保更改生效。
之後再輸入roor及密碼就能登入phpmyadmin,要建資料表新增編及刪除都可以操作
到這裡為止就完成分拆安裝(Apache / PHP / MySQL/ phpMyAdmin)的工作,伺服器未來在更新維護上也更便利,雖然工作流程繁瑣,但至少不用煩惱~惱人的資安通報問題,以上工作心得分享,有需要的朋友參考看看!!
備註:如需要申請 Let's Encrypt的 SSL 與安裝可參考下篇文章說明
留言
張貼留言