Source: Debian 12 / Ubuntu 22.04 使用源安装 LAMP 教程
本文將介紹使用官方來源和第三方來源在Debian 12 和Ubuntu 22.04 安裝最新版Apache 2 + PHP + MySQL 的教學課程,並且可以自行選擇PHP 版本。
PS:本文同時適用於Debian 11 Bullseye,Debian 10 Buster,Ubuntu 20.04 Focal 以及Ubuntu 22.04 Jammy
以下操作需要在root 使用者下完成,請使用sudo -i
或su root
切換到root 使用者進行操作。
1、更新系統並安裝部分必要軟體
apt update
apt upgrade -y
apt dist-upgrade -y
apt install curl vim wget gnupg dpkg apt-transport-https lsb-release ca-certificates
如果您透過iso 方式安裝Debian 11 並且設定了root 密碼,則預設不含sudo
套件,使用apt install sudo
安裝即可
2、增加Ondřej Surý 大神打包的PHP 來源並安裝PHP 8.x
和LEMP安裝方法一樣,我們還是使用Ondřej Surý大佬打包的PHP 來源。
至於為啥先裝PHP 再裝Apache 2,因為裝了PHP 以後Apache 2 會辨識你PHP 版本然後產生對應的設定檔?
2.1 Debian 和Ubuntu 安裝LAMP 區別
唯一的差別就是PHP 和Apache 2 的安裝添加源方法不一樣,其他步驟都一毛一樣。
2.2 加入大神做好的來源
Debian:
wget -O /usr/share/keyrings/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb [signed-by=/usr/share/keyrings/php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
Ubuntu:
add-apt-repository ppa:ondrej/php
2.3 更新系統來源
apt update
apt upgrade -y
2.4 安裝自己需要的PHP 版本
這個來源目前預設的PHP 是8.3.x,如果您需要其他版本,那麼請修改對應的PHP 版本號碼(注意設定檔哦)。
這裡舉例WordPress 需要的部分PHP 包
安裝PHP 8.3.x:
apt install php8.3-{fpm,cli,mysql,curl,gd,mbstring,xml,zip,imap,opcache,soap,gmp,bcmath} -y
安裝PHP 8.2.x:
apt install php8.2-fpm php8.2-cli php8.2-mysql php8.2-curl php8.2-gd php8.2-mbstring php8.2-xml php8.2-zip php8.2-imap php8.2-opcache php8.2-soap php8.2-gmp php8.2-bcmath -y
安裝PHP 8.1.x
apt install php8.1-fpm php8.1-cli php8.1-mysql php8.1-curl php8.1-gd php8.1-mbstring php8.1-xml php8.1-zip php8.1-imap php8.1-opcache php8.1-soap php8.1-gmp php8.1-bcmath -y
以下版本PHP 已經EOL,PHP 官方不再提供支持,請盡快更新您的程式相容最新的PHP,如果您的程式還未相容,建議鞭策開發者
安裝PHP 8.0.x
apt install php8.0-fpm php8.0-cli php8.0-mysql php8.0-curl php8.0-gd php8.0-mbstring php8.0-xml php8.0-zip php8.0-imap php8.0-opcache php8.0-soap php8.0-gmp php8.0-bcmath -y
安裝PHP 7.4.x
apt install php7.4-fpm php7.4-cli php7.4-mysql php7.4-curl php7.4-gd php7.4-mbstring php7.4-xml php7.4-xmlrpc php7.4-zip php7.4-json php7.4-imap php7.4-opcache php7.4-soap php7.4-gmp php7.4-bcmath -y
安裝PHP 7.3.x
apt install php7.3-fpm php7.3-mysql php7.3-curl php7.3-gd php7.3-mbstring php7.3-xml php7.3-xmlrpc php7.3-zip php7.3-opcache
安裝PHP 7.2.x (PHP 7.2 開始已經不支援mcrypt 組件)
apt install php7.2-fpm php7.2-mysql php7.2-curl php7.2-gd php7.2-mbstring php7.2-xml php7.2-xmlrpc php7.2-zip php7.2-opcache
安裝PHP 7.1.x
apt install php7.1-fpm php7.1-mysql php7.1-curl php7.1-gd php7.1-mbstring php7.1-mcrypt php7.1-xml php7.1-xmlrpc php7.1-zip php7.1-opcache
安裝PHP 7.0.x
apt php7.0-fpm php7.0-mysql php7.0-curl php7.0-gd php7.0-mbstring php7.0-mcrypt php7.0-xml php7.0-xmlrpc php7.0-zip php7.0-opcache
安裝PHP 5.6.x
apt install php5.6-fpm php5.6-mysql php5.6-curl php5.6-gd php5.6-mbstring php5.6-mcrypt php5.6-xml php5.6-xmlrpc php5.6-zip php5.6-opcache
如果希望安裝其他元件,可以透過搜尋看看有沒有對應的套件
apt-cache search php8.3* | grep php
修改php.ini
防止跨目錄攻擊,如果安裝的PHP 8.2.x 請相應修改/etc/php/8.3/fpm/php.ini
PHP 7.4.x 請相應修改/etc/php/7.4/fpm/php.ini
sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/' /etc/php/8.3/fpm/php.ini
修改php.ini
增加上傳大小限制
sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 10M/' /etc/php/8.3/fpm/php.ini
sed -i 's/post_max_size = 8M/post_max_size = 10M/' /etc/php/8.3/fpm/php.ini
您也可以同時安裝多個PHP 版本,然後使用下列指令選擇系統預設的PHP 版本:
update-alternatives --config php
3、增加Ondřej Surý 大神打包的Apache 2 來源並安裝
這裡我們推薦Ondřej Surý打包的Apache 2 來源。
3.1 Debian 和Ubuntu 安裝LAMP 區別
唯一的差別就是Apache 2 和PHP 的安裝添加源方法不一樣,其他步驟都一毛一樣。
3.2 先增加Apache 來源
Debian:
wget -O /usr/share/keyrings/apache2.gpg https://packages.sury.org/apache2/apt.gpg
echo "deb [signed-by=/usr/share/keyrings/apache2.gpg] https://packages.sury.org/apache2/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/apache2.list
Ubuntu:
add-apt-repository ppa:ondrej/apache2
3.3 接著更新並接安裝Apache 2.4
apt update
apt upgrade -y
apt install apache2 -y
安裝完畢後,我們可以使用apache2 -v
指令看到Apache 2 已經是最新的2.4 版本了
root@debian ~ # apache2 -v
Server version: Apache/2.4.54 (Debian)
Server built: 2022-06-08T16:00:36
3.4 Apache 2 開啟PHP-FPM 支持
首先,需要開啟Apache 2 的PHP-FPM 支持,我們以PHP 8.3 為例,依照自己的需求,可以開啟如下模組
a2enconf php8.3-fpm
a2enmod proxy_fcgi
a2enmod headers
a2enmod http2
a2enmod remoteip
a2enmod ssl
a2enmod rewrite
a2enmod expires
a2enmod deflate
a2enmod mime
a2enmod setenvif
然後我們重新啟動PHP-FPM 服務
systemctl restart php8.3-fpm
對應PHP 7.4.x 指令如下
systemctl restart php7.4-fpm
Apache 2 參考設定檔如下,因為預設Debian 的Apache 2 預設設定已經使用了example.com
這個域名,所以我們以example.org
為例,新建立個/etc/apache2/sites-available/example.org.conf
cat >> /etc/apache2/sites-available/example.org.conf << EOF
<VirtualHost *:80>
ServerName example.org
DocumentRoot /var/www/example.org
DirectoryIndex index.php index.html index.htm
ErrorLog ${APACHE_LOG_DIR}/example.org.error.log
CustomLog ${APACHE_LOG_DIR}/example.org.access.log combined
<Directory /var/www/example.org>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
EOF
然後使用a2ensite
命令使其生效
a2ensite example.org.conf
如果不需要這個vhost 的時候可以使用a2dissite example.org.conf
指令移除
偵測是否已經軟連結到/etc/apache2/sites-enabled
目錄
root@debian ~ # ls /etc/apache2/sites-enabled
000-default.conf example.org.conf
到這裡基本上沒有問題,我們可以執行apache2ctl configtest
命令檢查設定檔是否出錯
root@debian ~ # apache2ctl configtest
Syntax OK
顯示Syntax OK
則說明所有設定檔均無問題,可以重新啟動Apache 2 使我們的設定生效
systemctl restart apache2
我們的目錄在/var/www/example.org
,我們先建立這個目錄
mkdir -p /var/www/example.org
然後建立一個phpinfo.php
並輸入phpinfo()
函數
cat >> /var/www/example.org/phpinfo.php << EOF
<?php phpinfo(); ?>
EOF
好了,此時在瀏覽器輸入http://example.org/phpinfo.php
,如果看到經典的phpinfo
頁面則說明安裝成功,如果不成功,請仔細對比步驟查找哪裡出錯或在燒餅博客下方留言。
4.安裝MariaDB
這裡我們使用MariaDB 作為MySQL 的代替
4.1 首先,新增並導入Mariadb 的官方來源
按照官方的教學導入GPG
下載GPG Key:
curl -sSL https://mariadb.org/mariadb_release_signing_key.asc | gpg --dearmor > /usr/share/keyrings/mariadb.gpg
然後加入MariaDB 的來源
Debian:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/mariadb.gpg] https://mirror-cdn.xtom.com/mariadb/repo/10.11/debian $(lsb_release -sc) main" > /etc/apt/sources.list.d/mariadb.list
Ubuntu:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/mariadb.gpg] https://mirror-cdn.xtom.com/mariadb/repo/10.11/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/mariadb.list
您也可以在這裡找到更多的MariaDB 來源
4.2 接著更新一下系統
apt update
4.3 然後直接安裝最新穩定版MariaDB
apt install mariadb-server mariadb-client
安裝完畢後強烈建議使用mariadb-secure-installation
指令做一次安全設置
4.4 建立資料庫並測試
在開啟資料庫之前,您可以使用pwgen
這個小工具或隨機密碼產生器產生一個強大的隨機密碼,例如32 位,然後隨意挑選一個使用
apt install pwgen
pwgen 32
使用MySQL root 使用者登陸,因為預設使用Unix domain socket 模式,所以本機不需要MySQL root 密碼即可登入
mariadb -u root
建立資料庫example_database
CREATE DATABASE example_database DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
建立使用者名稱example_user
並賦予權限
GRANT ALL ON example_database.* TO 'example_user'@'localhost' IDENTIFIED BY '这里改成您要设置的强大的没人能猜出来的随机的密码';
刷新MySQL 權限
FLUSH PRIVILEGES;
沒問題以後就可以退出了
EXIT;
新建一個/var/www/example.org/mysql-test.php
檔案並測試
cat >> /var/www/example.org/mysql-test.php << EOF
<?php
\$dbname = 'example_database'; //MySQL 数据库名
\$dbuser = 'example_user'; //MySQL 用户名
\$dbpass = '您的强大的没人可以猜出来的密码';
\$dbhost = 'localhost'; //安装在本地就用 localhost
\$link = mysqli_connect(\$dbhost, \$dbuser, \$dbpass) or die("Unable to Connect to '\$dbhost'");
mysqli_select_db(\$link, \$dbname) or die("Could not open the db '\$dbname'");
\$test_query = "SHOW TABLES FROM \$dbname";
\$result = mysqli_query(\$link, \$test_query);
\$tblCnt = 0;
while(\$tbl = mysqli_fetch_array(\$result)) {
\$tblCnt++;
#echo \$tbl[0]."<br />\n";
}
if (!\$tblCnt) {
echo "MySQL is working fine. There are no tables.";
} else {
echo "MySQL is working fine. There are \$tblCnt tables.";
}
?>
EOF
建立完畢後存取http://example.org/mysql-test.php
如果出現MySQL is working fine. There are no tables.
則表示MySQL 運作正常。
5、安裝MySQL 8.0 (可選)
如果您必須使用某些MySQL 8.0 才有的功能,那麼可以依照MySQL官網的教學安裝MySQL 8.0
*注意:*除非您知道您在做什麼,否則不要同時安裝MySQL 和MariaDB
5.1 新增apt 來源
wget https://repo.mysql.com/mysql-apt-config_0.8.29-1_all.deb
dpkg -i mysql-apt-config_0.8.29-1_all.deb
國內的機器可以在新增完成後修改為清華TUNA 來源,您可以修改/etc/apt/sources.list.d/mysql-community.list
文件,替換成以下內容
deb https://mirrors.tuna.tsinghua.edu.cn/mysql/apt/debian $(lsb_release -sc) mysql-5.6 mysql-5.7 mysql-8.0 mysql-tools
5.2 安裝MySQL 8.0
apt update
apt install mysql-server -y
預設MySQL 會安裝最新的8.0 版本,如果您需要更低的版本,例如5.6 或5.7,可以使用以下命令:
dpkg-reconfigure mysql-apt-config
您可能需要設定一個強大的root 密碼,接下來的步驟和MariaDB 基本上相同,把mariadb
指令換成mysql
指令即可,本文不再贅述。