天天看點

基于Centos7.5源碼編譯搭建LAMP架構

簡介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的運作比較穩定。.

基于Centos7.5源碼編譯搭建LAMP架構

常見的網頁類型: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

繼續閱讀