簡介LAMP源碼編譯搭建LAMP架構
為什麼要源碼編譯
一般來說,我們軟體的安裝方式有Yum(rpm),和源碼編譯兩種方式,那麼為什麼我們需要源碼編譯安裝一部分軟體?選擇源碼編譯安裝軟體有以下幾個原因:
1. 滿足不同的運作平台,我們Linux發行版本衆多,但是每個版本采用的軟體或者核心版本都不一樣,而我們的二進制包所依賴的環境不一定能夠正常運作,是以大部分軟體直接提供源碼!
2. 友善定制,滿足不同的需求,很多時候我們所需要的軟體都是可以定制的,我需要什麼就安裝什麼,大多數二進制代碼都是一鍵裝全,是以自由度并不高!
3. 友善運維、開發人員維護,我們的源碼是可以打包二進制的,但是對于這個軟體的打包都會有一份代價不小的額外工作,包括維護,是以如果是源碼的話,軟體産商會直接維護,但是如果是二進制的話,一般都是Linux發行商提供!
什麼是LAMP
LAMP=Linux Apache Mysql/MariaDB PHP/Perl/Python 這些軟體都是開源免費的軟體,幾個程式各自是獨立的,經常為了達到我們需要的效果而協同工作,組成了我們常見的LAMP架構平台! LAMP是世界上最流行的組合,當然同時也有Nginx,也就是LNMP: LAMP 相對于 Nginx來說較為安全,但是Nginx處理高并發比Apache要強,Nginx 相對于 LAMP 來說安全較為差一點,同樣的配制環境負載遠遠高于 LAMP 國内的一些大公司,淘寶、新浪都在使用Nginx,像那麼大的公司網站需要用到伺服器群用LAMP搭建環境成本遠遠大于Nginx。打個比方本來1000000W通路量需要 10台LAMP環境伺服器才能完成,但是使用Nginx也許隻需要5、6台,這樣一來對于這樣的公司來說就大大的節約了成本。
從網站的流量上來說,70%以上的通路流量是LAMP來提供的,LAMP是最強大的網站解決方案,在以前這句話沒有錯,但是在現在,這句話有待證明!!!因為在以後的過程中,會發現我們會使用的架構是Nginx和Apache結合使用:使用Nginx可以做叢集等相關配置,可以和Apache一起使用,有的會用Apache去跑php,然後用Nginx做反向代理,比如Apache運作在8080端口,Nginx在80端口,通路php檔案時,反向代理到Apache,靜态頁通過Nginx處理。Nginx支援高并發,Apache對php的運作比較穩定。.
常見的網頁類型:htm,html,shtml,stm.php,asp,aspx,shtm,jsp等等Apache本事隻處理靜态頁面,處理動态頁面需要使用libphp5.so這個子產品去工作,編譯php也其實是将一個至關重要的子產品打入到Apache内部,然後Apache收到php請求,将請求交給這個子產品來處理!
Apache工作原理:
Apache本身隻處理html靜态語言頁面,當用戶端需要通路php頁面的時候,Apache會調用libphp5.so這個子產品去工作,這個子產品會把php頁面轉換成html靜态頁面,讓Apache處理,Apache處理過,會傳回給用戶端
LAMP相關網站
Apache=http://httpd.apache.org/ #httpd主程式包
MySQL=http://dev.mysql.com/downloads/mysql/ #mysql主程式包
PHP=http://php.net/downloads.php #php主程式包
apr=http://apr.apache.org/ #apr是httpd的依賴包
apr-util=http://apr.apache.org/ #apr-util是httpd的第二個依賴包
apr和apr-util這個兩個軟體是對後端服務軟體進行優化的.
apr-util隻是在apr的基礎上提供了更多的資料結構和作業系統封裝接口而已。
pcre 是httpd的第三個依賴包 http://pcre.org/
PCRE(Perl Compatible Regular Expressions中文含義:perl語言相容正規表達式)是一個用C語言編寫的正規表達式函數庫,PCRE被廣泛使用在許多開源軟體之中,最著名的莫過于Apache HTTP伺服器和PHP腳本語言、R腳本語言,此外,正如從其名字所能看到的,PCRE也是perl語言的預設正則庫。
安裝和配置LAMP
需要源碼編譯安裝的軟體包
httpd-2.4.37.tar.gz #Apache主程式包
apr-1.6.2.tar.gz #Apache依賴包
apr-util-1.6.0.tar.gz #Apache依賴包
pcre-8.41.tar.gz #Apache依賴包
php-7.1.24.tar #php主程式包
mysql-5.7.19.tar.gz #mysql 主程式包
下載下傳源碼安裝包
https://mirrors.aliyun.com/apache/httpd/httpd-2.4.37.tar.gz
http://archive.apache.org/dist/apr/apr-1.6.2.tar.gz
http://archive.apache.org/dist/apr/apr-util-1.6.0.tar.gz
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.41.tar.gz
準備環境
裝之前先安裝make、gcc、openssl等編譯工具和開發包
yum -y install make gcc gcc-c++ openssl openssl-devel expat-devel
編譯安裝依賴包apr
tar xf apr-1.6.2.tar.gz -C /usr/local/src/
cd /usr/local/src/apr-1.6.2/
./configure --prefix=/usr/local/apr && make && make install
編譯安裝依賴包apr-util
tar xf apr-util-1.6.0.tar.gz -C /usr/local/src/
cd /usr/local/src/apr-util-1.6.0/
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/bin/apr-1-config && make && make install
如果執行make 報錯:
xml/apr_xml.c:35:19: fatal error: expat.h: No such file or directory
解決:
yum install expat-devel
編譯安裝依賴包pcre
tar xf pcre-8.41.tar.gz -C /usr/local/src/
cd /usr/local/src/pcre-8.41/
./configure --prefix=/usr/local/pcre && make && make install
編譯安裝Apache
tar zxf httpd-2.4.37.tar.gz -C /usr/local/src/
cd /usr/local/src/httpd-2.4.37/
./configure --prefix=/usr/local/apache --enable-so --enable-rewrite --enable-ssl --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre --enable-modules=most --enable-mpms-shared=all --with-mpm=event
選項說明:
–prefix=/usr/local/apache #安裝路徑
–enable-so #支援動态加載子產品
–enable-rewrite #支援網站位址重寫
–enable-ssl #支援SSL加密
–with-pcre=/usr/local/pcre #pcre路徑
–with-apr=/usr/local/apr #apr路徑
–with-apr-util=/usr/local/apr-util #apr-util路徑
一共有三種穩定的MPM(Multi-Processing Module,多程序處理子產品)模式。它們分别是prefork,worker和event,它們同時也代表這Apache的演變和發展。
make && make install
(1)配置檔案
/usr/local/apache/conf/httpd.conf
(2)網站根目錄
/usr/local/apache/htdocs/index.html
(3)生成啟動腳本
cp /usr/local/apache/bin/apachectl /etc/init.d/
chmod +x /etc/init.d/apachectl
(4)寫個apache系統服務腳本,754權限儲存
vim /usr/lib/systemd/system/apache.service
[Unit]
Description=apache
After=network.target
[Service]
Type=forking
ExecStart=/etc/init.d/apachectl start
ExecReload=/etc/init.d/apachectl restart
ExecStop=/etc/init.d/apachectl stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
(5)啟動服務
systemctl enable apache
systemctl start Apache.service
(6)修改Apache的運作使用者——預設是daemon使用者運作的程序
單獨建立一個使用者來運作服務:
useradd -M -s /sbin/nologin apache #用該使用者運作Apache
vim /usr/local/apache/conf/httpd.conf #修改配置檔案改變Apache運作身份
改:166 User daemon #運作使用者
為:166 User apache
改:167 Group daemon #運作組,建立Apache的時候已經即時建立了Apache這個組
為:167 Group apache
(7)更改目錄權限
chown -R apache:apache /usr/local/apache/
源碼編譯mysql
MySQL官網:https://www.mysql.com/
下載下傳位址
http://www.mysql.com/Downloads/MySQL-5.7/mysql-5.7.19.tar.gz #MySQL程式。
http://liquidtelecom.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz #Boost庫是一個可移植、提供源代碼的C++庫。
MySQL從5.7版本之後,boost是必須的,建議把系統自帶的boost庫解除安裝,源碼編譯安裝高版本
yum -y remove boost-*
解除安裝系統自帶的MySQL
yum -y remove mysql mariadb-*
安裝必要的資源包
建議使用網絡yum源,RHEL7CD光牒中自帶的軟體包版本不夠,mysql-5.7.19.tar.gz的編譯對軟體包的版本要求比較高,其中cmake的版本要不低于2.8
網絡yum源配置可以參考
https://blog.sina.com.cn/s/blog_14e8c64ca0102vztv.html
安裝依賴包
yum install -y cmake make gcc gcc-c++ bison ncurses ncurses-devel
添加使用者群組
groupadd mysql
useradd -M -s /sbin/nologin -r -g mysql mysql #-M不建立使用者目錄
在生成環境中,安裝資料庫之前,需要規劃好資料存儲的目錄
這個目錄最好是一塊單獨的分區或者磁盤,做成raid或者LVM,編譯日後磁盤的維護和擴容
對于讀寫比較頻繁的業務,可以采用SSD等轉速高的磁盤
注:mysql-5.7.19.tar.gz安裝時占用空間比較大,虛拟機環境下建議新添加一塊硬碟進行安裝,真實伺服器中可不需要
解壓源碼包
tar xf boost_1_59_0.tar.gz -C /usr/local/src/
tar xf mysql-5.7.19.tar.gz -C /usr/local/src/
cd /usr/local/src/mysql-5.7.19
規劃安裝目錄:
安裝目錄: /var/lib/mysql
資料目錄: /var/lib/mysql/data
mkdir -p /var/lib/mysql/data
chown -R mysql:mysql /var/lib/mysql
編譯安裝MySQL
cmake -DCMAKE_INSTALL_PREFIX=/var/lib/mysql \
-DMYSQL_DATADIR=/var/lib/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/src/boost_1_59_0
參數注釋:
DCMAKE_INSTALL_PREFIX:指定MySQL程式的安裝目錄,預設/usr/local/mysql
DEFAULT_CHARSET:指定伺服器預設字元集,預設latin1
DEFAULT_COLLATION:指定伺服器預設的校對規則,預設latin1_general_ci
ENABLED_LOCAL_INFILE:指定是否允許本地執行LOAD DATA INFILE,預設OFF
WITH_COMMENT:指定編譯備注資訊
WITH_xxx_STORAGE_ENGINE:指定靜态編譯到mysql的存儲引擎,MyISAM,MERGE, MEMBER以及CSV四種引擎預設即被編譯至伺服器,不需要特别指定。
WITHOUT_xxx_STORAGE_ENGINE:指定不編譯的存儲引擎
SYSCONFDIR:初始化參數檔案目錄
MYSQL_DATADIR:資料檔案目錄
MYSQL_TCP_PORT:服務端口号,預設3306
MYSQL_UNIX_ADDR:socket檔案路徑,預設/tmp/mysql.sock
這些編譯參數的幫助尋找方法:
http://www.mysql.com→→Documentation→→選擇對應的版本(5.7)Installation & Upgrades→→Installing MySQL from Source →→MySQL Source-Configuration Options
最終的URL https://dev.mysql.com/doc/refman/5.7/en/source-configuration-options.html
編譯
mysql-5.7.19編譯時會占用大量的系統資源,建議使用多個核心同時進行編譯,否則可能會編譯失敗
make -j 4 #注:-j 用來指定CPU核心數,可加快編譯速度。 加 -j 4我用4核心來編譯的,可以提高編譯速度;當然你要确定CPU多少核心
grep processor /proc/cpuinfo | wc -l #檢視伺服器CPU核心數
安裝
make install
編輯配置檔案
vim /etc/my.cnf
[mysqld]
basedir=/var/lib/mysql
datadir=/var/lib/mysql/data
port=3306
socket=/var/lib/mysql/mysql.sock
character-set-server=utf8
log-error=/var/log/mysqld.log
pid-file=/tmp/mysqld.pid
[mysql]
socket=/var/lib/mysql/mysql.sock
[client]
socket=/var/lib/mysql/mysql.sock
添加path路徑,讓系統能讀到mysql的指令:
vim /etc/profile.d/mysql.sh
export PATH=/var/lib/mysql/bin:$PATH
使修改生效
. /etc/profile.d/mysql.sh
生成服務啟動腳本
cp /var/lib/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
修改權限:
chown -R mysql:mysql /var/lib/mysql
初始化資料庫
/var/lib/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/var/lib/mysql --datadir=/var/lib/mysql/data
啟動服務
/etc/init.d/mysqld start
Starting MySQL [ OK ]
如果啟動失敗,報錯:
[[email protected] ~]# /etc/init.d/mysqld start
Starting MySQL… ERROR! The server quit without updating PID file (/tmp/mysqld.pid)
解決方法:
把資料目錄删除,重新初始化:
cd /var/lib/mysql/data/
rm -rf ./*
/var/lib/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/var/lib/mysql --datadir=/var/lib/mysql/data
啟動
/etc/init.d/mysqld start
Starting MySQL. SUCCESS!
修改登入密碼
mysql -u root -p
mysql> set password for [email protected] = password(‘123456’);
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
安全初始化:
[[email protected] mysql]# mysql_secure_installation
MySQL5.7 提供了三種密碼政策,根據需要設定複雜度不同的密碼
輸入兩次密碼,然後一直Y 下去
源碼編譯安裝php7.1.24
官網位址:http://php.net/
Php7.1.24程式包下載下傳位址 http://jp2.php.net/distributions/php-7.1.24.tar.gz
Centos7安裝epel源:
rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum clean all
yum list
安裝所需依賴包
yum -y install php-mcrypt libmcrypt libmcrypt-devel autoconf freetype gd libmcrypt libpng libpng-devel libjpeg libxml2 libxml2-devel zlib curl curl-devel re2c php-pear
tar xf php-7.1.24.tar.gz -C /usr/local/src
cd /usr/local/src/php-7.1.24/
配置相關參數
./configure --prefix=/usr/local/php/ \
--with-apxs2=/usr/local/apache/bin/apxs \
--enable-mbstring \
--with-curl \
--with-gd \
--enable-fpm \
--enable-mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-config-file-path=/usr/local/php/etc/ \
--with-mysqli=mysqlnd \
--with-mysql-sock=/var/lib/mysql/mysql.sock \
--enable-maintainer-zts
Php配置選項中文手冊http://php.net/manual/zh/configure.about.php
參數注釋:
–with-apxs2 #将php編譯為Apache的一個子產品進行使用
–enable-mbstring #多位元組字元串的支援
–with-curl #支援cURL
–with-gd #支援gd庫
–enable-fpm #支援建構fpm
–enable-mysqlnd #啟用mysqlnd
–with-pdo-mysql #支援pdo:MySQL支援
–with-config-file-path #設定配置檔案路徑
–with-mysqli #支援MySQLi
–with-mysql-sock #關聯mysql的socket檔案
–enable-maintainer-zts #如果Apache是event模型,那需要指定zts
編譯&安裝
make -j 4 && make install
生成配置檔案
cp php.ini-production /usr/local/php/etc/php.ini
編輯Apache的配置檔案,支援php的檔案:
vim /usr/local/apache/conf/httpd.conf
在393行下面添加:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
建立測試頁
vim /usr/local/apache/htdocs/index.php
<?php
phpinfo();
?>
測試連結mysql是否成功
vim /usr/local/apache/htdocs/index.php
<?php
$mysqli = new mysqli("localhost", "root", "123456");
if(!$mysqli) {
echo"database error";
}else{
echo"php env successful";
}
$mysqli->close();
phpinfo();
?>
傳回successful即為連接配接成功
也可以測試phpMyadmin