LNMP (Linux + Nginx + MySQL + PHP) 是高性能 Web 架構首選。本文記錄從源碼編譯安裝各組件、配置關聯、部署 phpwind 論壇的完整實戰流程(教學/學習用途,生產環境建議用編譯工具/容器)。
# 1. 解壓並移動
tar zxvf mysql-5.5.15-linux2.6-x86_64.tar.gz -C /usr/local
cd /usr/local
mv mysql-5.5.15-linux2.6-x86_64 mysql
# 2. 創建用戶組/用戶
groupadd mysql
useradd -r -g mysql -s /sbin/nologin mysql
# 3. 權限設置
cd /usr/local/mysql
chown -R mysql:mysql .
chown -R root .
chown -R mysql data
# 4. 初始化數據庫 (5.5 版本)
scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data
# 5. 配置文件
cp support-files/my-medium.cnf /etc/my.cnf
# 6. 啟動腳本
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
service mysqld start
# 7. 環境變量 (方便直接用 mysql 命令)
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile
# 8. 庫文件與頭文件鏈接 (供 PHP 編譯找到)
echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
ldconfig
ln -s /usr/local/mysql/include /usr/include/mysql
# 1. 安裝編譯依賴
yum groupinstall -y "Development Tools"
yum install -y libxml2-devel libcurl-devel libjpeg-devel libpng-devel freetype-devel \
openssl-devel libmcrypt-devel libxslt-devel bzip2-devel
# 2. 下載解壓 PHP
wget https://cn2.php.net/distributions/php-5.4.45.tar.gz
tar zxvf php-5.4.45.tar.gz
cd php-5.4.45
# 3. 配置編譯參數 (關鍵:--with-mysql, --with-mysqli, --with-pdo-mysql 指向 mysql 安裝路徑)
./configure \
--prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--enable-fpm \
--with-mysql=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-pdo-mysql=/usr/local/mysql \
--with-iconv-dir \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--enable-mbregex \
--enable-mbstring \
--with-mcrypt \
--with-gd \
--enable-gd-native-ttf \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--enable-short-tags \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www
# 4. 編譯安裝
make -j$(nproc) && make install
# 5. 配置文件
cp php.ini-production /usr/local/php/etc/php.ini
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
# 編輯 php-fpm.conf 設置 pid, error_log, pool 等
# 6. 啟動 PHP-FPM
/usr/local/php/sbin/php-fpm
# 加入開機啟動
echo '/usr/local/php/sbin/php-fpm' >> /etc/rc.local
# 1. 安裝依賴
yum install -y pcre-devel openssl-devel
# 2. 下載編譯
wget https://nginx.org/download/nginx-1.4.7.tar.gz
tar zxvf nginx-1.4.7.tar.gz
cd nginx-1.4.7
./configure \
--prefix=/usr/local/nginx \
--user=www --group=www \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-pcre
make && make install
# 3. 基礎配置 (nginx.conf)
# 關鍵: location ~ \.php$ { fastcgi_pass unix:/tmp/php-cgi.sock; ... }
# 4. 啟動
/usr/local/nginx/sbin/nginx
# nginx.conf 關鍵 location 段
location ~ \.php$ {
fastcgi_pass unix:/tmp/php-cgi.sock; # 或 127.0.0.1:9000
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# php-fpm.conf 監聽方式一致
listen = /tmp/php-cgi.sock
listen.owner = www
listen.group = www
listen.mode = 0660
# 1. 解壓到 Web 根目錄
unzip phpwind_v9.0_utf8.zip -d /usr/local/nginx/html/phpwind
# 2. 設置權限
chown -R www:www /usr/local/nginx/html/phpwind
chmod -R 755 /usr/local/nginx/html/phpwind
# 3. 創建數據庫
mysql -uroot -p -e "CREATE DATABASE phpwind DEFAULT CHARSET utf8;"
# 4. 瀏覽器訪問 https://your-ip/phpwind/install.php 完成安裝向導
# 填寫數據庫信息、管理員帳號等
curl -I https://localhost → Nginx 響應正常curl https://localhost/phpinfo.php → PHP 解析正常,顯示 mysqlnd、gd、mbstring 等擴展mysql -uphpwind -p -e "SHOW TABLES;" → phpwind 表創建成功| 風險點 | 建議 |
|---|---|
| 源碼編譯耗時長、依賴地獄 | 使用 yum/apt 安裝官方包,或 Docker 容器化部署 |
| 版本過舊 (PHP 5.4, MySQL 5.5) | 升級至 PHP 8.2+, MySQL 8.0/Percona, Nginx 1.24+ |
| 無自動化部署/回滾 | 引入 Ansible / Jenkins / GitLab CI |
| 安全更新困難 | 訂閱安全郵件列表,定期 yum update |
| 單點故障 | 架構演進:Nginx 集群 + PHP-FPM 池 + MySQL 主從/集群 + Redis 緩存 |
本文完整記錄了 LNMP 組件源碼編譯安裝、關聯配置、phpwind 部署的全流程。對於理解組件交互原理、排查編譯錯誤、學習 Linux 運維基礎有極大幫助。**現代生產環境請使用成熟的部署工具鏈(Ansible/Docker/K8s)和長期支持版本組件。**