LAMP 架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整套系统和相关软件,能够提供动态 Web 站点服务及其应用开发环境。LAMP 是一个缩写词,具体包括 Linux 操作系统、Apache 网站服务器、MySQL 数据库服务器、PHP(或 Perl、Python)网页编程语言。本章将以源码编译的方式搭建 LAMP 环境,能够满足企业定制化的需求。
在构建 LAMP 平台时,各组件的安装顺序依次为 Linux、Apache、MySQL、PHP。
其中 Apache 和 MySQL 的安装并没有严格的顺序;而 PHP 环境的安装一般放到最后,负责沟通 Web 服务器和数据库系统以协同工作。
“Apache HTTP Server”是开源软件项目的杰出代表,基于标准的 HTTP 网络协议提供网页浏览服务,在 Web 服务器领域中长期保持着超过半数的份额。Apache 服务器可以运行在 Linux、UNIX、Windows 等多种操作系统平台中。
Apache 服务器是针对之前出现的若干个 Web 服务器程序进行整合、完善后形成的软件,其名称来源于“A Patchy Server”,意思是“基于原有 Web 服务程序的代码进行修改(补丁)后形成的服务器程序”。
1995 年, Apache 服务程序发布了 1.0 版本,之后一直由“Apache Group”负责该项目的管理和维护;直到 1999 年,在“Apache Group”的基础上成立了 Apache 软件基金会(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 网站服务器。在后续内容中,若未作特殊说明,使用“Apache”或者“httpd”,均指的是“Apache HTTP Server”。
(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 的所有使用者提供尽可能安全的服务器程序。
####编译安装HTTP服务####
#####安装Apache所需软件#####
apr-1.6.2.tar.gz
apr-util-1.6.0.tar.gz
httpd-2.4.29.tar.gz
####将上面3个包传到opt目录下####
[root@localhost ~]# cd /opt
[root@localhost opt]# ll
total 81636
-rw-r--r-- 1 root root 1071074 Aug 31 15:32 apr-1.6.2.tar.gz
-rw-r--r-- 1 root root 565507 Aug 31 15:32 apr-util-1.6.0.tar.gz
-rw-r--r-- 1 root root 6567926 Aug 31 15:32 httpd-2.4.29.tar.bz2
-rw-r--r-- 1 root root 48833145 Aug 31 15:32 mysql-boost-5.7.20.tar.gz
-rw-r--r-- 1 root root 15069098 Aug 31 15:32 php-7.1.10.tar.bz2
-rw-r--r-- 1 root root 11475526 Aug 31 15:32 phpMyAdmin-4.7.6-all-languages.zip
drwxr-xr-x. 2 root root 6 Oct 31 2018 rh
[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
[root@localhost opt]# mv 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
##################安装环境#######
[root@localhost opt]# yum -y install \
> gcc \
> gcc-c++ \
> make \
> pcre-devel \
> expat-devel \
> perl
[root@localhost opt]# cd /opt/httpd-2.4.29/
[root@localhost httpd-2.4.29]# ./configure \
> --prefix=/usr/local/httpd \
> --enable-so \
> --enable-rewrite \
> --enable-charset-lite \
> --enable-cgi
###编译及安装###
[root@localhost httpd-2.4.29]# make -j3 ###先make -j3 然后make install -j3是你核心数,最大不要超过虚拟机的核心数
[root@localhost httpd-2.4.29]# make install
####优化执行路径####
[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 ###查看下HTTP版本
Server version: Apache/2.4.29 (Unix)
Server built: Aug 31 2020 15:55:00
###建立[service].service 配置文件添加系统给服务####
在/lib/systemd/system/目录下,建立一个以.service 结尾的单元(unit)配置文件,
用于控制由 systemd 管理或监控的 httpd 服务
[root@localhost httpd-2.4.29]# cd /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
:wq
[root@localhost system]# systemctl start httpd.service
[root@localhost system]# systemctl enable httpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@localhost system]# systemctl is-enabled httpd.service
enabled
####httpd.conf修改配置文件###
[root@localhost system]# vi /usr/local/httpd/conf/httpd.conf
ServerName www.51xit.top:80 ###更改下
[root@localhost system]# systemctl restart httpd
[root@localhost system]# netstat -anpt | grep 80
tcp6 0 0 :::80 :::* LISTEN 42997/httpd
###安装mysql###
[root@localhost ~]# cd /opt
[root@localhost opt]# ll
total 81640
-rw-r--r-- 1 root root 1071074 Aug 31 15:32 apr-1.6.2.tar.gz
-rw-r--r-- 1 root root 565507 Aug 31 15:32 apr-util-1.6.0.tar.gz
drwxr-xr-x 12 501 games 4096 Aug 31 15:55 httpd-2.4.29
-rw-r--r-- 1 root root 6567926 Aug 31 15:32 httpd-2.4.29.tar.bz2
-rw-r--r-- 1 root root 48833145 Aug 31 15:32 mysql-boost-5.7.20.tar.gz
-rw-r--r-- 1 root root 15069098 Aug 31 15:32 php-7.1.10.tar.bz2
-rw-r--r-- 1 root root 11475526 Aug 31 15:32 phpMyAdmin-4.7.6-all-languages.zip
drwxr-xr-x. 2 root root 6 Oct 31 2018 rh
[root@localhost opt]# yum -y install \
> ncurses \
> ncurses-devel \
> bison \
> cmake
[root@localhost opt]# useradd -s /sbin/nologin mysql
[root@localhost opt]# tar xf mysql-boost-5.7.20.tar.gz
###配置选项###
[root@localhost opt]# cd /opt/mysql-5.7.20/
[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
###编译安装###
[root@localhost mysql-5.7.20]# make -j3
[root@localhost mysql-5.7.20]# make install
###数据库目录进行权限调整###
[root@localhost mysql-5.7.20]# chown -R mysql:mysql /usr/local/mysql/
###建立调整配置文件###
[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
:wq
[root@localhost mysql-5.7.20]# chown mysql:mysql /etc/my.cnf
###设置环境变量###
[root@localhost mysql-5.7.20]# echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
[root@localhost mysql-5.7.20]# echo 'export PATH' >> /etc/profile
[root@localhost mysql-5.7.20]#source /etc/profile
###初始化数据库###
[root@localhost mysql-5.7.20]# cd /usr/local/mysql/
[root@localhost mysql]# bin/mysqld \
> --initialize-insecure \
> --user=mysql \
> --basedir=/usr/local/mysql \
> --datadir=/usr/local/mysql/data
[root@localhost mysql]# systemctl enable mysqld
Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.
[root@localhost mysql]# systemctl start mysqld
[root@localhost mysql]# systemctl status mysqld ### 出现 Active:active(running) 表示成功开启
[root@localhost mysql]# netstat -anpt | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 114516/mysqld
[root@localhost mysql]# mysqladmin -u root -p password
Enter password: ### 回车
New password: ****** ###自己输入密码,123456
Confirm new password: ******
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
####################安装PHP环境#####
[root@localhost opt]# ll
total 81644
-rw-r--r-- 1 root root 1071074 Aug 31 15:32 apr-1.6.2.tar.gz
-rw-r--r-- 1 root root 565507 Aug 31 15:32 apr-util-1.6.0.tar.gz
drwxr-xr-x 12 501 games 4096 Aug 31 15:55 httpd-2.4.29
-rw-r--r-- 1 root root 6567926 Aug 31 15:32 httpd-2.4.29.tar.bz2
drwxr-xr-x 38 7161 31415 4096 Aug 31 16:25 mysql-5.7.20
-rw-r--r-- 1 root root 48833145 Aug 31 15:32 mysql-boost-5.7.20.tar.gz
-rw-r--r-- 1 root root 15069098 Aug 31 15:32 php-7.1.10.tar.bz2
-rw-r--r-- 1 root root 11475526 Aug 31 15:32 phpMyAdmin-4.7.6-all-languages.zip
drwxr-xr-x. 2 root root 6 Oct 31 2018 rh
[root@localhost opt]# yum -y install \
> libjpeg \
> libjpeg-devel \
> libpng libpng-devel \
> freetype freetype-devel \
> libxml2 \
> libxml2-devel \
> zlib zlib-devel \
> curl curl-devel \
> openssl openssl-devel
[root@localhost opt]# tar xjvf php-7.1.10.tar.bz2
[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
[root@localhost php-7.1.10]# make -j3
[root@localhost php-7.1.10]# make install
[root@localhost php-7.1.10]# cp php.ini-development /usr/local/php/lib/php.ini
[root@localhost php-7.1.10]# vi /usr/local/php/lib/php.ini
mysqli.default_socket = /usr/local/mysql/mysql.sock
date.timezone = Asia/Shanghai
[root@localhost php-7.1.10]# /usr/local/php/bin/php -m ###验证安装的模块
[PHP Modules]
Core
ctype
curl
date
dom
fileinfo
filter
ftp
gd
hash
iconv
json
libxml
mbstring
mysqli
mysqlnd
openssl
pcre
PDO
pdo_sqlite
Phar
posix
Reflection
session
SimpleXML
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zip
zlib
[Zend Modules]
[root@localhost php-7.1.10]# vi /etc/httpd.conf ###在合适的位置新增
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
DirectoryIndex index.php index.html
:wq
[root@localhost php-7.1.10]# rm -f /usr/local/httpd/htdocs/index.html
[root@localhost php-7.1.10]# vi /usr/local/httpd/htdocs/index.php
<?php
phpinfo();
?>
:wq
[root@localhost php-7.1.10]#systemctl restart httpd
网页验证,出现以下界面,则显示成功
下面测试数据库工作是否正常:
[root@localhost php-7.1.10]# mysql -u root -p
Enter password: ****** ###密码,123456
###输入以下内容飞权限账号、密码###
CREATE DATABASE myadm;
GRANT all ON myadm.* TO 'myadm'@'%' IDENTIFIED BY 'admin123';
GRANT all ON myadm.* TO 'myadm'@'localhost' IDENTIFIED BY 'admin123';
flush privileges;
exit ###退出mysql
[root@localhost php-7.1.10]# vi /usr/local/httpd/htdocs/index.php
<?php
$link=mysqli_connect('20.0.0.21','myadm','admin123');
if($link) echo "Success!!
";
else echo "Fail!!";
?>
:wq
网页验证,出现以下界面,则显示成功
如果有一点错误,则显示失败
IP地址错误如下图:
[root@localhost ~]# cd /opt
[root@localhost opt]# unzip phpMyAdmin-4.7.6-all-languages.zip -d /opt/
[root@localhost opt]# mv phpMyAdmin-4.7.6-all-languages /usr/local/httpd/htdocs/myadm
[root@localhost opt]# cd /usr/local/httpd/htdocs/myadm
[root@localhost myadm]# cp config.sample.inc.php config.inc.php
[root@localhost myadm]# vi config.inc.php
$cfg['Servers'][$i]['host'] = '127.0.0.1'; ###把localhost 改成IP 31行
:wq