編譯安裝LAMP
一、相關概念:
1、LAMP = (Linux,Apache,MySQL,PHP(Python,Perl))
2、httpd 運作在Apache 提供的 Apache Portable Runtime(APR)中,以相容不同的作業系統
3、Apache的三種工作模式:
Apache 是基于子產品化進行設計的,其中最核心的元件是MPM(Multi Processing Module )多重處理子產品,而Apache就是通過此子產品來進行對作業系統程序線程的管理。它包含多種工作模式,其中最主要的三種工作模式分别是:
- 1.profork(預派生)
- 2.worker(工作模式)
- 3.event(事件模式)
4、多版本共存安裝
- rpm包的安裝位置:
-
/bin /sbin /usr/bin /usr/bin
-
/lib /usr/lib
-
/etc
-
/usr/share/{doc,man}
-
- 編譯安裝:
- usr/local
- /bin /sbin
- /lib
-
/etc
- share/{doc,man}
eg: /usr/local/apr bin sbin lib includes etc share/man
- usr/local
4、安裝順序 apr-->libxml2-devel -->apr-util-->httpd--> MySQL -->php-->XCache
- 若要使用新版1.6.1的apr-util須要提前安裝好libxml2-devel包,否則會報如下錯誤:

可以參照:https://blog.51cto.com/castiel/2051440
二、安裝
1、安裝apr和apr-util
- 1.1下載下傳源碼包
wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.7.0.tar.gz wegt http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-util-1.6.1.tar.gz
- 1.2 編譯源碼并安裝
編譯apr-util時有如下報錯:make && make install apr-uitl 編譯 ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
編譯安裝LAMP - 使用
rpm -qa|grep expat
發現已經安裝了expat,于是猜想是不是缺少相關的子包(-util 程式接口包, -devel程式開發包)包。但是expat并沒有util包,于是便安裝了expat-devel包。錯誤消失。編譯安裝LAMP 編譯安裝LAMP - PS:apr 僅為了運作httpd而使用,對系統無其他用處。
2、安裝httpd
- 2.1 下載下傳httpd源碼包
httpd編譯參數:wget http://www.apache.org/dist/httpd/httpd-2.4.38.tar.bz2
--enable-so 支援共享子產品 --enable-ssl 啟用ssl --enable-deflate 将HTML頁面壓縮發送 --enable-proxy-fcgi 工作在FCIG模式 --enable-mpms-shared --with-mpm 設定預設的工作模式 --enable-rewrite 支援HTML重寫 --enable-cigd work event 模式依賴
- 編譯安裝httpd
./configure --prefix=/usr/local/httpd --sysconfdir=/etc/httpd --enable-so --enable-rewrite --enable-ssl --enable-cigd --enable-cig --enable-modules=most --enable-mods-shared=most --enable-mpms-shared=all --with-mpm=event --with-apr=/usr/local/apr --wirh-apr-util=/usr/local/apr-util
- PCRE 報錯 使用指令檢視相關的包,并安裝pcre-devel即可
編譯安裝LAMP yum provides pcre-config
編譯安裝LAMP - openssl 版本報錯 一開始以為真是版本的問題,後來才發現是沒有安裝openssl-devel 包,安裝一下就不會報錯了。
編譯安裝LAMP - 編譯完成:
編譯安裝LAMP 3、MySQL 由于編譯時間較長,這裡使用通用二進制格式安裝。
- 3.1 下載下傳通用二進制壓縮包
wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.17-linux-glibc2.12-x86_64.tar.xz
- 3.2 将壓縮包解壓至/usr/local 目錄下,這是官方指定的目錄,必須是此目錄。
tar xf mysql-8.0.17-linux-glibc2.12-x86_64.tar.xz -C /usr/local/
- 3.3 建立msyql 系統使用者及使用者組(預設會建立) 。
useradd -r mysql
- 3.4 切換到/usr/local/mysql 目錄,然後順序執行一下指令。
* bin/mysqld --initialize --defaults-file=/etc/my.cnf --user=mysql # 初始化資料庫 * bin/mysql_ssl_rsa_setup # 建立密鑰對 my.cnf 簡單配置如下:
[client]
port=3306
socket=/tmp/mysql.sock
[mysqld]
port=3306
basedir=/usr/local/mysql
datadir=/mydata/mysqldata
socket=/tmp/mysql.sock
- 3.5 使用MySQL官方提供的腳本啟動 mysqld 服務
support-files/mysql.server start
- 3.6 将msyqld 服務添加到 systemd 管理
- 啟動mysqld 服務後,預設會在
下生成一個mysql.service 腳本,/run/systemd/generator.late/
- 将此腳本複制到 /usr/lib/systemd/system 下,并追擊兩行:
- 啟動mysqld 服務後,預設會在
[Install]
WantedBy=multi-user.target
整體内容如下:
#Automatically generated by systemd-sysv-generator
[Unit]
Documentation=man:systemd-sysv-generator(8)
SourcePath=/etc/rc.d/init.d/mysqld
Description=LSB: start and stop MySQL
Before=runlevel2.target
Before=runlevel3.target
Before=runlevel4.target
Before=runlevel5.target
Before=shutdown.target
After=network-online.target
After=remote-fs.target
After=ypbind.service
After=nscd.service
After=ldap.service
After=ntpd.service
After=xntpd.service
After=network-online.target
Wants=network-online.target
Conflicts=shutdown.target
[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
ExecStart=/etc/rc.d/init.d/mysqld start
ExecStop=/etc/rc.d/init.d/mysqld stop
ExecReload=/etc/rc.d/init.d/mysqld reload
[Install]
WantedBy=multi-user.target
4、安裝PHP,工作在FastCGI模式
-
yum install bzip2-devel libpng-devel libjpeg-turbo-devel libxslt-devel freetype-devel libzip
- 4.2 編譯參數
./configure --prefix=/usr/local/php --with-fpm-user=webu --with-fpm-group=webu --with-curl --with-freetype-dir --with-gd --with-gettext --with-iconv-dir --with-kerberos --with-libdir=lib64 --with-libxml-dir --with-mysqli --with-openssl --with-pcre-regex --with-pdo-mysql --with-pdo-sqlite --with-pear --with-png-dir --with-jpeg-dir --with-xmlrpc --with-xsl --with-zlib --with-bz2 --with-mhash --enable-fpm --enable-bcmath --enable-libxml --enable-inline-optimization --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-sysvshm --enable-xml --enable-zip --enable-fpm
- 4.3 安裝完後添加相應的系統使用者群組 webu
useradd -r webu
- 4.4 将fpm-php 服務添加到systemd 管理
cp /data/LAMP/php-7.3.8/sapi/fpm/php-fpm.service /usr/lib/systemd/system/ systemctl daemon-reload #重新加載 systemd 服務
-
cp /data/LAMP/php-7.3.8/php.ini-production /usr/local/php/etc/php.ini #源碼目錄下 cp /data/LAMP/php-7.3.8/sapi/fpm/php-fpm /usr/local/php/etc/php-fpm #源碼目錄下 cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf #安裝目錄下 cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf #安裝目錄下
- 4.6 修改httpd.conf 及index.php檔案。
- 增加如下字段:
<FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch> # 添加對php頁面的支援(可不加) AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps
- 修改去掉以下行的注釋
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so # 首頁預設檔案 可以寫多個 <IfModule dir_module> DirectoryIndex index.html index.php </IfModule>
- 将DocumentRoot 目錄下的index.html 改名為index.php 并追加:
<? phpinfo() ?>
- 增加如下字段:
- 4.7 重新開機httpd服務,在浏覽器通路就能看到php版本的相關資訊了。
- 4.8 測試PHP與MySQL的連通性,修改index.php代碼為:
<?php $conn=mysqli_connect("localhost","使用者","密碼"); if($conn) echo "Success..."; else echo "Failure..."; ?>