基於 CentOS 7源碼編譯搭建 LAMP 架構

什麼是 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 httpd工作原理:
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/

開始安裝和配置 LAMP
httpd-2.4.41.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.28.tar.gz #mysql 主程序包

我百度雲給你準備好了你也可以官網下載
鏈接:https://pan.baidu.com/s/1YApxmJmaaEMDKsfmv6KT5g
提取碼:9jbe

首先準備環境一臺centos7的主機,xshell連接軟件。
[root@huaxinfeng01 ~]# yum -y install make gcc gcc-c++ openssl openssl-devel expat-devel # 安裝 make、gcc、openssl 等編譯工具和開發包(yum沒配置的話自己去配置阿里雲的)

編譯安裝依賴包 apr
[root@huaxinfeng01 ~]# tar xf apr-1.6.2.tar.gz -C /usr/local/src/
[root@huaxinfeng01 ~]# cd /usr/local/src/apr-1.6.2/
[root@huaxinfeng01 apr-1.6.2]# ./configure --prefix=/usr/local/apr
[root@huaxinfeng01 apr-1.6.2]# make && make install
[root@huaxinfeng01 apr-1.6.2]# cd

編譯安裝依賴包 apr-util
[root@huaxinfeng01 ~]# tar xf apr-util-1.6.0.tar.gz -C /usr/local/src/
[root@huaxinfeng01 ~]# cd /usr/local/src/apr-util-1.6.0/
[root@huaxinfeng01 apr-util-1.6.0]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/bin/apr-1-config
[root@huaxinfeng01 apr-util-1.6.0]# make -j 8 && make install
[root@huaxinfeng01 apr-util-1.6.0]# cd

注意:如果執行 make 報錯:
xml/apr_xml.c:35:19: fatal error: expat.h: No such file or directory

解決:
[root@huaxinfeng01 ~]# yum install expat-devel

編譯安裝依賴包 pcre
[root@huaxinfeng01 ~]# tar xf pcre-8.41.tar.gz -C /usr/local/src/
[root@huaxinfeng01 ~]#cd /usr/local/src/pcre-8.41/
[root@huaxinfeng01 pcre-8.41]# ./configure --prefix=/usr/local/pcre
[root@huaxinfeng01 pcre-8.41]# make && make install
[root@huaxinfeng01 pcre-8.41]# cd

編譯安裝 Apache
把我給你的zip包rz到root的家目錄下面解壓了(用unzip解壓,如果上傳不會自行百度)
[root@huaxinfeng01 ~]# tar zxvf httpd-2.4.37.tar.gz -C /usr/local/src/
[root@huaxinfeng01 ~]# cd /usr/local/src/httpd-2.4.37/
[root@huaxinfeng01 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 的演變和發展。

[root@huaxinfeng01 httpd-2.4.37]# make && make install
[root@huaxinfeng01 httpd-2.4.37]# cd

  1. 配置文件
    [root@huaxinfeng01 ~]# ls /usr/local/apache/conf/httpd.conf

  2. 網站根目錄
    [root@huaxinfeng01 ~]# ls /usr/local/apache/htdocs/

  3. 生成啓動腳本
    [root@huaxinfeng01 ~]# cp /usr/local/apache/bin/apachectl /etc/init.d/
    [root@huaxinfeng01 ~]# chmod +x /etc/init.d/apachectl

  4. 寫個 apache 系統服務腳本, 以 754 的權限保存此文件
    [root@huaxinfeng01 ~]# 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
  1. 啓動服務
    [root@huaxinfeng01 ~]# systemctl enable apache
    [root@huaxinfeng01 ~]# systemctl start apache.service

  2. 修改 Apache 的運行用戶:
    默認是 daemon 用戶運行的進程

[root@huaxinfeng01 ~]# useradd -M -s /sbin/nologin apache #創建一個用戶 用來運行 apache
[root@huaxinfeng01 ~]# vim /usr/local/apache/conf/httpd.conf #修改配置文件改變 apache 運行身份
改:166 User daemon #運行用戶
爲:166 User apache

改:167 Group daemon #運行組,創建 apache 的時候已經即時創建了 apache 這個組
爲:167 Group apache

[root@huaxinfeng01 ~]# chown -R apache:apache /usr/local/apache/ #默認是 root,改爲 apache
測試訪問
在這裏插入圖片描述

源碼編譯 mysql源碼編譯 mysql
這個可能有點卡,如果是虛擬機一定要配置成高性能
MySQL 從 5.7 版本之後,boost 是必須的,建議把系統自帶的 boost 庫卸載,源碼編譯安裝高版本
[root@huaxinfeng01 ~]# yum -y remove boost-[root@xuegod63 ~]# yum -y remove boost-
卸載系統自帶的 MySQL
[root@huaxinfeng01 ~]# yum -y remove mysql mariadb-*
[root@huaxinfeng01 ~]# rm -rf /var/lib/mysql/* #刪除舊數據文件

安裝源碼編譯必要的資源包
[root@huaxinfeng01 ~]# yum install -y cmake make gcc gcc-c++ bison ncurses ncurses-devel
[root@huaxinfeng01 ~]# groupadd mysql
[root@huaxinfeng01 ~]# useradd -M -s /sbin/nologin -r -g mysql mysql

注:mysql-5.7.28.tar.gz 安裝時佔用空間比較大,虛擬機環境下建議新添加一塊硬盤進行安裝,真 實服務器磁盤空間一般比較大
[root@huaxinfeng01 ~]# tar xf mysql-boost-5.7.28.tar.gz -C /usr/local/src/
[root@huaxinfeng01 ~]# cd /usr/local/src/mysql-5.7.28

在生產環境中,安裝數據庫之前,需要規劃好數據存儲的目錄 這個目錄最好是一塊單獨的分區或者磁盤,做成 raid 或者 LVM,編譯日後磁盤的維護和擴容 對於讀寫比較頻繁的業務,可以採用 SSD 等轉速高的磁盤

規劃安裝目錄:
安裝目錄: /var/lib/mysql
數據目錄: /var/lib/mysql/data
[root@huaxinfeng01 mysql-5.7.19]# mkdir -p /var/lib/mysql/data
[root@huaxinfeng01 mysql-5.7.19]# chown -R mysql:mysql /var/lib/mysql

編譯安裝 MySQL
[root@huaxinfeng01 mysql-5.7.19]# 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/mysql-5.7.28/boost/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

[root@huaxinfeng01 mysql-5.7.19]# make -j 4 #編譯估計 30 分鐘
[root@huaxinfeng01 mysql-5.7.19]# make install
[root@huaxinfeng01 mysql-5.7.19]# cd

編輯配置文件
[root@huaxinfeng01 ~]# vim /etc/my.cnf
[mysqld] port=3306 user=mysql basedir=/var/lib/mysql datadir=/var/lib/mysql/data socket=/tmp/mysql.sock character-set-server=utf8 log-error=/var/log/mysqld.log [mysql] socket=/tmp/mysql.sock

添加 path 路徑,讓系統能讀到 mysql 的命令:
[root@huaxinfeng01 ~]# vim /etc/profile.d/mysql.sh
PATH=/var/lib/mysql/bin:$PATH

使環境變量修改生效
[root@huaxinfeng01 ~]# source /etc/profile.d/mysql.sh

生成服務啓動腳本 [root@huaxinfeng01 ~]# cp /var/lib/mysql/support-files/mysql.server /etc/init.d/mysqld

[root@huaxinfeng01~]# chmod +x /etc/init.d/mysqld
修改權限:
[root@huaxinfeng01~]# chown -R mysql:mysql /var/lib/mysqlv
初始化數據庫 :
[root@huaxinfeng01~]# mysqld --defaults-file=/etc/my.cnf --initialize-insecure
#初始化數據庫, --initialize 表示默認生成一個安全的密碼,–initialize-insecure 表示不生成密碼

啓動服務
[root@huaxinfeng01~]# /etc/init.d/mysqld start
Starting MySQL… SUCCESS!

如果報錯
Starting MySQL… ERROR! The server quit without updating PID file (/tmp/mysqld.pid)
解決方法: 把數據目錄刪除,重新初始化:
[root@huaxinfeng01 ~]# cd /var/lib/mysql/data/
[root@huaxinfeng01 data]# rm -rf ./*
[root@huaxinfeng01 data]# mysqld --defaults-file=/etc/my.cnf --initialize-insecure --user=mysql --basedir=/var/lib/mysql --datadir=/var/lib/mysql/data

[root@huaxinfeng01~]# /etc/init.d/mysqld start
登陸 mysql 數據庫,因初始化無密碼,直接輸入 mysql 可登陸:
[root@huaxinfeng01~]# mysql
mysql> set password for root@localhost = password(‘123456’);
mysql> flush privileges;

源碼編譯安裝 php7.1.24
[root@huaxinfeng01~]# rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
[root@huaxinfeng01~]# yum clean all
[root@huaxinfeng01~]# yum list
注:RHEL 光盤和 CentOS 源缺少很多軟件包,建議使用擴展源進行安裝依賴包 如果擴展源不能用,用本地 yum 源
[root@huaxinfeng01~]# yum -y install php-mcrypt libmcrypt libmcrypt-devel autoconf freetype freetype-devel gd libmcrypt libpng libpng-devel libjpeg libxml2 libxml2-devel zlib curl curl-devel libjpeg-devel freetype-devel libmcrypt-devel

[root@huaxinfeng01~]# tar xf php-7.1.24.tar.gz -C /usr/local/src
[root@huaxinfeng01~]# cd /usr/local/src/php-7.1.24/

配置相關參數
[root@huaxinfeng01 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=/tmp/mysql.sock
–enable-maintainer-zts

編譯
[root@huaxinfeng01 php-7.1.24]# make -j 4
安裝
[root@huaxinfeng01 php-7.1.24]# make install
生成配置文件
[root@huaxinfeng01 php-7.1.24]# cp php.ini-production /usr/local/php/etc/php.ini
編輯 Apache 的配置文件,支持 php 的文件:
[root@huaxinfeng01 php-7.1.24]# vim /usr/local/apache/conf/httpd.conf
在 393 行下面添加:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

創建測試頁面
[root@huaxinfeng01 php-7.1.24]# cd /usr/local/apache/htdocs/
[root@huaxinfeng01 htdocs]# vim index.php

<?php     
phpinfo();    
 ?>

測試 http://192.168.1.63/index.php
在這裏插入圖片描述
測試連接 MySQL 是否成功

<?php    
 $mysqli = new mysqli("localhost", "root", "123456");     
if(!$mysqli)      { echo"database error"; }     
else{ echo"php 連接 mysql successful"; }      
$mysqli->close();     phpinfo();    

 ?>

ok安裝完畢記得給我點贊哦謝謝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章