源碼編譯構建LAMP服務
####LAMP介紹####
LAMP 架構是目前成熟的企業網站應用模式之一,指的是協同工作的一整套系統和
相關軟件,能夠提供動態 Web 站點服務及其應用開發環境。LAMP 是一個縮寫詞,具
體包括 Linux 操作系統、Apache 網站服務器、MySQL 數據庫服務器、PHP(或 Perl、
Python)網頁編程語言。本章將以源碼編譯的方式搭建 LAMP 環境,能夠滿足企業定
制化的需求。
在構建 LAMP 平臺時,各組件的安裝順序依次為 Linux、Apache、MySQL、PHP。
其中 Apache 和 MySQL 的安裝並沒有嚴格的順序;而 PHP 環境的安裝一般放到最後,
####Apache 簡介####
“Apache HTTP Server”是開源軟件項目的傑出代表,基於標準的 HTTP 網絡協議提供
網頁瀏覽服務,在 Web 服務器領域中長期保持著超過半數的份額。Apache 服務器可以運
行在 Linux、UNIX、Windows 等多種操作系統平臺中。
Apache 服務器是針對之前出現的若幹個 Web 服務器程序進行整合、完善後形成的軟
件,其名稱來源於“A Patchy Server”,意思是“基於原有 Web 服務程序的代碼進行修改(補
丁)後形成的服務器程序”。
1995 年, Apache 服務程序發布了 1.0 版本,之後一直由“Apache Group”負責該項目
(Apache Software Foundation,ASF)。目前,Apache 項目一直由 ASF 負責管理和維護。
ASF 是非盈利性質的組織,最初只負責“Apache Web”服務器項目的管理,隨著 Web
應用需求的不斷擴大,ASF 逐漸增加了許多與 Web 技術相關的開源軟件項目,因此 Apache
現在不僅僅代表著 Web 服務器,更廣泛地代表著 ASF 管理的眾多開源軟件項目。ASF 基
金會的官方網站是 http://www.apache.org/。
“Apache HTTP Server”是 ASF 旗下著名的軟件項目之一,其正式名稱是“httpd”,也就
均指的是“Apache HTTP Server”。
####Apache 的主要特點####
1、開放源代碼:這是 Apache 服務器的重要特性之一,也是其他特性的基礎。
Apache 服務程序由全世界的眾多開發者共同維護,並且任何人都可以自由使
用,這充分體現了開源軟件的精神。
2、跨平臺應用:這個特性得益於 Apache 的源代碼開放。Apache 服務器可以運
行在絕大多數軟硬件平臺上,所有 UNIX 操作系統都可以運行 Apache 服務
器,甚至 Apache 服務器可以良好地運行在大多數 Windows 系統平臺中。
Apache 服務器的跨平臺特性使其具有被廣泛應用的條件。
3、支持各種Web 編程語言:Apache服務器可支持的網頁編程語言包括Perl、PHP、
Python、Java 等,甚至微軟的 ASP 技術也可以在 Apache 服務器中使用。支
持各種常用的 Web 編程語言使 Apache 具有更廣泛的應用領域。
4、模塊化設計:Apache 並沒有將所有的功能集中在單一的服務程序內部,而是
盡可能地通過標準的模塊實現專有的功能,這為 Apache 服務器帶來了良好的
擴展性。其他軟件開發商可以編寫標準的模塊程序,從而添加 Apache 本身
並不具有的其他功能。
5、運行非常穩定:Apache 服務器可用於構建具有大負載訪問量的 Web 站點,很
多知名的企業網站都使用 Apache 作為 Web 服務軟件。
6、良好的安全性:Apache 服務器具有相對較好的安全性,這是開源軟件共同具
有的特性。並且,Apache 的維護團隊會及時對已發現的漏洞提供修補程序,
為 Apache 的所有使用者提供盡可能安全的服務器程序。
×××LAMP實驗
實驗環境:
1.虛擬機ip 192.168.32.20 ——————vm1與主機相連。內存3G(不得少於2G)
關閉核心防護,關閉防火墻,搭建以光盤為源的yum倉庫。
2.需要安裝的幾個軟件包:
Apache
mysql
Php
實驗規劃:
1.搭建apache服務
2.搭建mysql服務
3.構建PHP運行環境
4.部署phpmyadmin系統
實驗步驟:
1.實驗環境初步設置
[root@localhost ~]# systemctl stop firewalld ###零時關閉防火墻
[root@localhost ~]# systemctl disable firewalld ###永久關閉防火墻
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# setenforce 0 ###零時關閉核心防護
[root@localhost yum.repos.d]# sed -i ‘/SELINUX/s/=[a-z]/=disabled/g‘ /etc/sysconfig/selinux
###永久關閉核心防護
搭yum倉庫
[root@localhost ~]# mount /dev/cdrom /mnt ###掛載光盤
mount: /dev/sr0 寫保護,將以只讀方式掛載
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# mkdir jlh
[root@localhost yum.repos.d]# mv C jlh ###將裏面的配置文件移到jlh文件夾裏
[root@localhost yum.repos.d]# cp jlh/CentOS-Base.repo local.repo
[root@localhost yum.repos.d]# vi local.repo
[centos]
name=centos
baseurl=file:///mnt ###其yum下載源未mnt下
gpgcheck=0
enabled=1
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
2.搭建apache服務
(1)將apache的服務三個包上傳到opt目錄下面
(2)解壓壓縮包
[root@localhost opt]# tar xf apr-1.6.2.tar.gz ###將該壓縮文件解壓到當前目錄下面
[root@localhost opt]# tar xf apr-util-1.6.0.tar.gz ###將該壓縮文件解壓到當前目錄下面
[root@localhost opt]# tar xf httpd-2.4.29.tar.bz2 ###將該壓縮文件解壓到當前目錄下面
查看
(3)將安裝http所需要的插件移到http/scrlib目錄中
[root@localhost opt]# mv apr-1.6.2 httpd-2.4.29/srclib/apr
###將解壓好的apr-1.6.2 插件移到httpd-2.4.29/srclib目錄下的/apr文件中,用於編譯安裝
[root@localhost opt]# mv apr-util-1.6.0 httpd-2.4.29/srclib/apr-util
###將解壓好的apr-util-1.6.0 插件移到httpd-2.4.29/srclib目錄下的/apr-util 文件中
(4)配置(自定義個性化配置)
[root@localhost httpd-2.4.29]# ./configure \
--prefix=/usr/local/httpd \
--enable-so \
--enable-rewrite \
--enable-charset-lite \
--enable-cgi
./configure \ ###配置你的安裝選項,生成編譯時所需的Makefile文件
--prefix=/usr/local/httpd \ ###指定將httpd程序安裝到/usr/local/httpd目錄下
--enable-so \ ###啟用動態加載模塊功能,使 httpd 具備進一步擴展功能的能力。
--enable-rewrite \ ###啟用網頁地址重寫功能,用於網站優化及目錄遷移
--enable-charset-lite \ ###啟用字符集支持,以便支持使用各種字符集編碼的網頁
--enable-cgi ###啟用CGI腳本程序支持,便於擴展網站的應用訪問能力
(5)編譯及安裝
[root@localhost httpd-2.4.29]# make -j2 ###編譯,-j2,雙線程編譯,安裝起來更快。
[root@localhost httpd-2.4.29]# make install ###安裝
(6)優化執行路徑
執行程序文件的原路徑不在PATH環境變量中,做個軟鏈接使其可以執行
[root@localhost httpd-2.4.29]# ln -s /usr/local/httpd/conf/httpd.conf /etc/
[root@localhost httpd-2.4.29]# ln -s /usr/local/httpd/bin/* /usr/local/bin/
[root@localhost httpd-2.4.29]# httpd -v ###查看版本
Server version: Apache/2.4.29 (Unix)
Server built: Feb 21 2019 06:12:43
(7)將 httpd 服務添加到系統服務中
[root@localhost httpd-2.4.29]# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
[root@localhost httpd-2.4.29]# vi /etc/init.d/httpd ###編輯配置文件
[root@localhost httpd-2.4.29]# chkconfig --add httpd ###添加為系統服務,將httpd加入到SERVICE管理器
[root@localhost httpd-2.4.29]# chkconfig --list httpd
######查看http服務自啟狀態 該輸出結果只顯示Sysv服務,
並不包含原生 systemd 服務。SysV 配置數據可能被原生 systemd 配置覆蓋
(8)建立[service].service 配置文件添加系統給服務
在/lib/systemd/system/目錄下,建立一個以.service 結尾的單元(unit)配置文件,
用於控制由 systemd 管理或監控的 httpd 服務
[root@localhost httpd-2.4.29]# cd /lib/systemd/system/ ###進入/lib/systemd/system/
[root@localhost system]# vim httpd.service ###編輯管理文件
[Unit]
Description=The Apache HTTP Server
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/httpd/logs/httpd.pid
ExecStart= /usr/local/bin/apachectl $OPTIONS
ExecrReload= /bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
(9)啟動httpd.service服務
[root@localhost system]# systemctl start httpd.service ###臨時啟動
[root@localhost system]# systemctl enable httpd.service ###永久啟動
[root@localhost system]# systemctl is-enabled httpd.service ###檢查HTTP單元是否啟動
enabled
(10)編輯httpd主配置文件
[root@localhost system]# vi /usr/local/httpd/conf/httpd.conf
(11)重啟服務
[root@localhost system]# systemctl restart httpd
[root@localhost system]# httpd -t ###檢查http服務狀態,看是否有語法錯誤
Syntax OK
[root@localhost system]# apachectl -t ###檢查apachectl服務狀態,看是否有語法錯誤
Syntax OK
[root@localhost system]# netstat -anpt | grep 80 ###查看httpd服務運行狀態
tcp6 0 0 :::80 :::* LISTEN 67327/h
[root@localhost system]# vi /usr/local/httpd/htdocs/index.html
####網頁默認顯示內容為:/usr/local/httpd/htdocs/index.html
Yum安裝的在/var/www/html/index.htmll裏面
(12)瀏覽器驗證
3.搭建mysql服務
(1)安裝編譯工具與插件
[root@localhost system]# yum -y install \
ncurses \
ncurses-devel \
bison \
cmake
(2) 建立數據庫程序用戶
[root@localhost system]# useradd -s /sbin/nologin mysql
(3)上傳mysql-boost-5.7.20.tar.gz到opt目錄下
(4)解壓mysql安裝包
[root@localhost system]# cd /opt ###進入opt目錄
[root@localhost opt]# tar xf mysql-boost-5.7.20.tar.gz ### 解壓軟件包
[root@localhost opt]# cd /opt/mysql-5.7.20/ ###進入到 /opt/mysql-5.7.20/裏
(5)配置(個性化配置及優化項目)
[root@localhost mysql-5.7.20]# cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1
####配置選項含義###
#1、DCMAKE_INSTALL_PREFIX:指定將 mysql 數據庫程序安裝到某目錄下,
如目錄/usr/local/ mysql。
#2、DSYSCONFDIR:指定初始化參數文件目錄
#3、DDEFAULT_CHARSET:指定默認使用的字符集編碼,如 utf8。
#4、DDEFAULT_COLLATION:指定默認使用的字符集校對規則,utf8_general_ci
是適用於 UTF-8 字符集的通用規則。
#5、DWITH_EXTRA_CHARSETS:指定額外支持的其他字符集編碼。
------註意:如果在CMAKE的過程中有報錯,當報錯解決後,需要把源碼目錄中的CMakeCache.txt文件刪除,然後再重新CMAKE,否則錯誤依舊------------
(6) 編譯、編譯安裝
[root@localhost mysql-5.7.20]#make -j2 ###編譯
[root@localhost mysql-5.7.20]# make install ###安裝
[root@localhost mysql-5.7.20]#chown -R mysql:mysql /usr/local/mysql/
###對數據庫目錄進行權限設置
(7) 編輯mysql主配置文 件 (裏面內容不要刪除,追加,如果刪除了,瀏覽器訪問時,root登不進去,需要重新授權)
[root@localhost mysql-5.7.20]#vi /etc/my.cnf
[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
[mysql]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
[root@localhost mysql-5.7.20]# chown mysql:mysql /etc/my.cnf ###改屬組
(8)設置環境變量
[root@localhost mysql-5.7.20]#echo ‘PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH‘ >> /etc/profile
###把這兩個路徑添加到環境變量中,並放到profile文件中使之開機自運行,否則不生效
[root@localhost mysql-5.7.20]#echo ‘export PATH‘ >> /etc/profile
###設為全局變量,使它使用環境更廣
[root@localhost mysql-5.7.20]#source /etc/profile
###立即生效
(9)配置初始化
[root@localhost mysql-5.7.20]#cd /usr/local/mysql/
[root@localhost mysql]#[root@localhost mysql]# bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
(10)添加系統服務
[root@localhost mysql]# cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
[root@localhost mysql]# systemctl daemon-reload
(11)查看服務運行狀態
[root@localhost mysql]# systemctl start mysqld ###啟動服務
[root@localhost mysql]# netstat -anpt | grep 3306 ###查看狀態
tcp6 0 0 :::3306 :::* LISTEN 86794/mysqld
[root@localhost mysql]# systemctl enable mysqld ###設置開機啟動
(12)訪問數據庫操作
[root@localhost mysql]# mysqladmin -u root -p password
剛開始沒密碼是空的直接回車,然後輸入密碼abc123,在此確認abc123,這是在root賬戶下運行的
[root@localhost mysql]# mysqladmin -u root -p password ###登入數據庫
4.構建PHP運行環境
(1)上傳php-7.1.10.tar.bz2包到opt目錄下
(2)安裝所需要的工具
[root@localhost php-7.1.10]# yum -y install \
libjpeg \
libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 \
libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel
(3)解壓壓縮包
[root@localhost opt]# tar xf php-7.1.10.tar.bz2
(4) 配置個性化配置
[root@localhost opt]# cd php-7.1.10
[root@localhost php-7.1.10]# ./configure \
--prefix=/usr/local/php \
--with-apxs2=/usr/local/httpd/bin/apxs \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip
(5)編譯及安裝
[root@localhost php-7.1.10]#make -j3 ###編譯
[root@localhost php-7.1.10]#make install ###安裝
(6)拷貝php配置文件
[root@localhost php-7.1.10]# cp php.ini-development /usr/local/php/lib/php.ini
###從php源碼中復制 php.ini--development 到php安裝目錄的lib目錄下改名為php.ini
[root@localhost php-7.1.10]# vi /usr/local/php/lib/php.ini ###編輯該配置文件
###本地數據庫一般是通過socket文件連接,而本地數據庫的socket文件如果不在默認路徑,就必須告訴php從哪裏讀取socket文件。將php與mysql關聯.
[root@localhost php-7.1.10]# /usr/local/php/bin/php -m ###驗證安裝模塊
(6)修改apache配置文件,關聯php與apache服務
[root@localhost php-7.1.10]# vi /etc/httpd.conf
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
默認主頁加上index.php,並放在index.html前,支持php的首頁文件
[root@localhost php-7.1.10]# rm -f /usr/local/httpd/htdocs/index.html
###刪除器默認的首頁文件
(7)網站加目錄裏寫php測試頁
[root@localhost php-7.1.10]# vi /usr/local/httpd/htdocs/index.php
[root@localhost php-7.1.10]# systemctl restart httpd ###重新啟動http服務
(8)瀏覽器測試,輸入http://192.168.32.20
(10)修改設置mysql密碼,並創建用戶,設置權限
[root@localhost php-7.1.10]# mysqladmin -uroot -p password
進入到數據庫中
創建數據庫mantis,並相應的用戶分配權限
CREATE DATABASE myadm; ####創建數據庫myadm
GRANT all ON myadm. TO ‘myadm‘@‘%‘ IDENTIFIED BY ‘admin123‘; ###授權
GRANT all ON myadm. TO ‘myadm‘@‘localhost‘ IDENTIFIED BY ‘admin123‘;
flush privileges; ### 刷新權限
配置文件
mysql> exit 退出
Bye
(11)編輯/usr/local/httpd/htdocs/index.php文件
[root@localhost php-7.1.10]# systemctl restart httpd 在啟動http服務
(13)測試
5.部署phpmyadmin系統 phpMyAdmin是一個使用PHP語言編寫,用來管理MYSQL數據庫的Web應用系統
(1)上傳軟件包phpMyAdmin-4.7.6-all-languages.zip
![](https://s1.51cto.com/images/blog/201902/23/cbb46543155818aee4b1f1d7fe27b166.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk
(2)解壓壓縮包
[root@localhost opt]# unzip phpMyAdmin-4.7.6-all-languages.zip -d /opt/
###註意軟件包格式,是zip格式,用unzip解壓
[root@localhost opt]# mv phpMyAdmin-4.7.6-all-languages /usr/local/httpd/htdocs/myadm
###將解壓的插件移到apache目錄中
[root@localhost opt]# cd /usr/local/httpd/htdocs/myadm
(3)創建phpMyadmin的配置文件並編輯配置文件
[root@localhost opt]# cd /usr/local/httpd/htdocs/myadm
[root@localhost myadm]# cp config.sample.inc.php config.inc.php
###復制配置文件內容到 config.inc.php中
[root@localhost myadm]# vi config.inc.php 編輯該配置文件
(4)重新啟動apache服務
[root@localhost myadm]# systemctl stop httpd
[root@localhost myadm]# systemctl start httpd
6.登錄測試
在瀏覽器中訪問http://192.168.32.20/myadm
解決辦法,在數據庫中可root授權。
[root@localhost myadm]# mysql -u root -p
mysql> GRANT ALL PRIVILEGES ON . TO ‘root‘@‘%‘ IDENTIFIED BY ‘123456‘; ###添加root授權協議。
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> flush privileges; ###刷新
Query OK, 0 rows affected (0.00 sec)
再次測試
源碼編譯構建LAMP服務