源码编译构建LAMP

一、LAMP介绍

LAMP 架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整套系统和
相关软件,能够提供动态 Web 站点服务及其应用开发环境。LAMP 是一个缩写词,具
体包括 Linux 操作系统、Apache 网站服务器、MySQL 数据库服务器、PHP(或 Perl、
Python)网页编程语言。本章将以源码编译的方式搭建 LAMP 环境,能够满足企业定
制化的需求。
在构建 LAMP 平台时,各组件的安装顺序依次为 Linux、Apache、MySQL、PHP。
其中 Apache 和 MySQL 的安装并没有严格的顺序;而 PHP 环境的安装一般放到最后,
负责沟通 Web 服务器和数据库系统以协同工作。

1.1、Apache 简介

“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.2、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 的所有使用者提供尽可能安全的服务器程序。

二、编译安装HTTP服务

2.1、安装Apache所需软件

软件包说明:apr-1.6.2.tar.gz、apr-util-1.6.0.tar.gz(工具)是跨平台的组件包

要测APR给tomcat带来的好处最好的方法是在慢速网络上(模拟Internet),将Tomcat线程数开到300以上的水平,然后模拟一大堆并发请求。如果不配APR,基本上300个线程狠快就会用满,以后的请求就只好等待。但是配上APR之后,并发的线程数量明显下降,从原来的300可能会马上下降到只有几十,新的请求会毫无阻塞的进来。

APR对于Tomcat最大的作用就是socket调度。你在局域网环境测,就算是400个并发,也是一瞬间就处理/传输完毕,但是在真实的Internet环境下,页面处理时间只占0.1%都不到,绝大部分时间都用来页面传输。如果不用APR,一个线程同一时间只能处理一个用户,势必会造成阻塞。所以生产环境下用apr是非常必要的。

[root@localhost ~]# cd /opt
[root@localhost opt]# ll
总用量 8020
-rw-r--r--  1 root root 1071074 84 17:33 apr-1.6.2.tar.gz
-rw-r--r--  1 root root  565507 84 17:33 apr-util-1.6.0.tar.gz
-rw-r--r--  1 root root 6567926 84 17:33 httpd-2.4.29.tar.bz2
drwxr-xr-x. 2 root root       6 326 2015 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	###yum -y install bzip2

[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 

2.2、安装环境

[root@localhost opt]#  yum -y install \gcc \gcc-c++ \make \pcre-devel \expat-devel \perl
依赖环境包包说明
gcc 		        ###C语言的编译器
gcc-c++ 		    ###C++的编译器
make 		        ###源代码编译(源代码转换成二进制文件)
pcre-devel	        ###支持正则表达式
expat-devel	        ###网站解析HTML文件
perl		        ###perl编译器

[root@localhost opt]# cd /opt/httpd-2.4.29/
[root@localhost opt]# ./configure \--prefix=/usr/local/httpd \--enable-so \--enable-rewrite \--enable-charset-lite \--enable-cgi

配置模块解释
--prefix:指定将 httpd 服务程序安装到哪个目录下,如/usr/local/httpd
--enable-so:启用动态加载模块支持,使 httpd 具备进一步扩展功能的能力。
--enable-rewrite:启用网页地址重写功能,用于网站优化及目录迁移维护。
--enable-charset-lite:启动字符集支持,以便支持使用各种字符集编码
--enable-cgi:启用 CGI 脚本程序支持,便于扩展网站的应用访问能力。

编译及安装

[root@localhost opt]# make && make install                 ###先make -jn   然后make install   -jn是你核心数,最大不要超过虚拟机的核心数

优化执行路径

[root@localhost opt]#ln -s /usr/local/httpd/conf/httpd.conf /etc/
[root@localhost opt]#ln -s /usr/local/httpd/bin/* /usr/local/bin/
[root@localhost opt]#httpd -v      ###查看下HTTP版本

2.3、编译安装HTTP服务

建立[service].service 配置文件添加系统给服务
在/lib/systemd/system/目录下,建立一个以.service 结尾的单元(unit)配置文件,
用于控制由 systemd 管理或监控的 httpd 服务
http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html

[root@localhost ~]# 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


[root@localhost system]# systemctl start httpd.service
[root@localhost system]# systemctl enable httpd.service         ###开机自启http
[root@localhost system]# systemctl is-enabled httpd.service   ###检查HTTP单元是否启动

2.4、修改配置文件

vi /usr/local/httpd/conf/httpd.conf
ServerName www.51xit.top:80  ###更改下

在这里插入图片描述重启服务,查看端口是否开启

systemctl restart httpd
netstat -anpt | grep httpd

在这里插入图片描述

2.5、配置文件解读

1.全局配置项
全局配置决定 httpd 服务器的全局运行参数,使用“关键字 值”的配置格式。例如, 配置网站名称时使用的“ServerName www.kgc.com”,其中“ServerName”为配置关键字, 而“www.kgc.com”为对应的值。 每一条全局配置都是一项独立的配置,不需要包含在其他任务区域中。以下列出了 httpd.conf 文件中最常用的一些全局配置项
ServerRoot “/usr/local/httpd”
Listen 80
User daemon
Group daemon
ServerAdmin webmaster@kgc.com
ServerName www.kgc.com
DocumentRoot “/usr/local/httpd/htdocs”
DirectoryIndex index.htmlindex.php
ErrorLog “logs/error_log”
LogLevel warn
CustomLog logs/access_log
common PidFile logs/httpd.pid
AddDefaultCharset UTF-8
Include conf/extra/httpd-default.conf

在上述设置行中,各全局配置项的含义如下
ServerRoot:设置 httpd 服务器的根目录,该目录下包括了运行 Web 站点必需的子目录和文件。默认的根目录为/usr/local/httpd,与 httpd 的安装目录相同。在 httpd.conf 配置文件中,如果指定目录或文件位置时不使用绝对路径,则目录或文 件位置都认为是在服务器的根目录下。 ?
Listen:设置 httpd 服务器监听的网络端口号,默认为 80
User:设置运行 httpd 进程时的用户身份,默认为 daemon
Group:设置运行 httpd 进程时的组身份,默认为 daemon
ServerAdmin:设置 httpd 服务器的管理员 E-mail 地址,可以通过此 E-mail 地址及 时联系 Web 站点的管理员
ServerName:设置 Web 站点的完整主机名(主机名+域名)
DocumentRoot:设置网站根目录,即网页文档在系统中的实际存放路径。此配置 项比较容易和 ServerRoot 混淆,需要格外注意
DirectoryIndex:设置网站的默认索引页(首页),可以设置多个首页文件,以空格 分开,默认的首页文件为index.html
ErrorLog:设置错误日志文件的路径,默认路径为 logs/error_log。 ? LogLevel:设置记录日志的级别,默认级别为 warn(警告)
CustomLog:设置访问日志文件的路径、日志类型,默认路径为 logs/access_log, 使用的类型为 common(通用格式)
PidFile:设置用于保存 httpd 进程号(PID)的文件,默认保存地址为 logs/httpd.pid, logs 目录位于 Apache 的服务器根目录下
AddDefaultCharset:设置站点中的网页默认使用的字符集编码,如 UTF-8、gb2312
Include:包含另一个配置文件的内容,可以实现将一些特殊功能的配置放到一个单 独的文件中,再使用 Include 配置项将其包含到 httpd.conf 文件中,这样便于独立 进行配置功能的维护而不影响主配置文件。 以上配置项是 httpd.conf 文件中主要的全局配置项。还有其他很多配置项

2.区域配置项
除了全局配置项以外,httpd.conf 文件中的大多数配置是包括在区域中的。区域配置使用一对组合标记,限定了配置项的作用范围。例如,最常见的目录区域配置的形
###定义"/“目录区域的开始
Options FollowSymLinks ###控制选项,允许使用符号链接
AllowOverride None ###不允许隐含控制文件中的覆盖配置
Require all denied ###禁止任何人访问此区域
###定义”/"目录区域的结束

三、安装mysql

3.1、yum安装

yum -y install \
ncurses \
ncurses-devel \
bison \
cmake

useradd -s /sbin/nologin  mysql

上传mysql-boost-5.7.20.tar.gz到opt目录下
cd /opt
tar xf mysql-boost-5.7.20.tar.gz
cd /opt/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

3.2、配置选项含义

1、DCMAKE_INSTALL_PREFIX:指定将 mysql 数据库程序安装到某目录下,
如目录/usr/local/ mysql。
2、DMYSQL_UNIX_ADDR:指定套接字文件的存储路径,数据库连接的文件
3、DSYSCONFDIR:指定初始化参数文件目录
3、DDEFAULT_CHARSET:指定默认使用的字符集编码,如 utf8。
5、DDEFAULT_COLLATION:指定默认使用的字符集校对规则,utf8_general_ci 是适用于 UTF-8 字符集的通用规则。
6、DWITH_INNOBASE_STORAGE_ENGINE=1 :安装INNOBASE存储引擎
7、DWITH_ARCHIVE_STORAGE_ENGINE=1 :安装ARCHIVE存储引擎
8、DWITH_BLACKHOLE_STORAGE_ENGINE=1 :安装ARCHIVE存储引擎
9、DWITH_PERFSCHEMA_STORAGE_ENGINE :安装FEDERATED存储引擎

指定安装文件的安装路径时常用的选项:
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql 指定安装路径
-DMYSQL_DATADIR=/data/mysql 数据安装路径
-DSYSCONFDIR=/etc 配置文件的安装路径

由于MySQL支持很多的存储引擎而默认编译的存储引擎包括:csv、myisam、myisammrg和heap。若要安装其它存储引擎,可以使用类似如下编译选项:
-DWITH_INNOBASE_STORAGE_ENGINE=1 安装INNOBASE存储引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 安装ARCHIVE存储引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 安装BLACKHOLE存储引擎
-DWITH_FEDERATED_STORAGE_ENGINE=1 安装FEDERATED存储引擎

若要明确指定不编译某存储引擎,可以使用类似如下的选项:
-DWITHOUT__STORAGE_ENGINE=1

比如:
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 不启用或不编译EXAMPLE存储引擎
-DWITHOUT_FEDERATED_STORAGE_ENGINE=1
-DWITHOUT_PARTITION_STORAGE_ENGINE=1

如若要编译进其它功能,如SSL等,则可使用类似如下选项来实现编译时使用某库或不使用某库:
-DWITH_READLINE=1
-DWITH_SSL=system 表示使用系统上的自带的SSL库
-DWITH_ZLIB=system
-DWITH_LIBWRAP=0

其它常用的选项:
-DMYSQL_TCP_PORT=3306 设置默认端口的
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock MySQL进程间通信的套接字的位置
-DENABLED_LOCAL_INFILE=1 是否启动本地的LOCAL_INFILE
-DEXTRA_CHARSETS=all 支持哪些额外的字符集
-DDEFAULT_CHARSET=utf8 默认字符集
-DDEFAULT_COLLATION=utf8_general_ci 默认的字符集排序规则
-DWITH_DEBUG=0 是否启动DEBUG功能
-DENABLE_PROFILING=1 是否启用性能分析功能

3.3、编译安装

make && make install

数据库目录进行权限调整

chown -R mysql:mysql /usr/local/mysql/

建立调整配置文件

[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


chown mysql:mysql /etc/my.cnf

3.4、设置环境变量

echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
echo 'export PATH' >> /etc/profile
source /etc/profile

cd /usr/local/mysql/

bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data

cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl enable mysqld
systemctl start mysqld
systemctl status mysqld
netstat -anpt | grep 3306

mysqladmin -u root -p password "abc123" //刚开始没密码是空的直接回车,然后输入密码abc123,在此确认abc123,这是在root账户下运行的

mysql -u root -p     ##这个命令敲下,提示要输入密码,这个就是刚才设置的密码abc123

四、安装PHP环境

4.1、安装PHP环境依赖包

yum -y install \
libjpeg \
libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 \
libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel

4.2、编译安装详解

cd /opt
tar xjvf php-7.1.10.tar.bz2
cd 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

1、prefix=/usr/local/php 			            ###指定将 PHP 程序安装到哪个目录下
2with-apxs2=/usr/local/httpd/bin/apxs 	    ###设置 Apache HTTP Server 提供的 apxs 模块支持程序的文件位置
3with-mysql-sock=/usr/local/mysql/mysql.sock 	###指定mysql的mysql.sock位置
4with-mysqli 	###mysqli扩展技术不仅可以调用MySQL的存储过程、处理MySQL事务,而且还可以使访问数据库工作变得更加稳定。
5with-zlib				                    ###支持zlib功能--压缩流
6with-curl				                    ###开启curl扩展功能
libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl同时也支持HTTPS认证、HTTP POSTHTTP PUTFTP 上传(这个也能通过PHPFTP扩展完成)HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。PHP中使用cURL实现Get和Post请求的方法
7with-gd				                        ###激活gd库的支持
8with-jpeg-dir 				                ###要激活 jpeg 的支持
9with-png-dir				                    ###要激活png的支持
10、enable-mbstring 			                ###启用多字节字符串功能,以便支持中文等代码。


make && make install

cp php.ini-development /usr/local/php/lib/php.ini	###将php.ini-development开发样板,复制到生产环境中去

vi /usr/local/php/lib/php.ini
mysqli.default_socket = /usr/local/mysql/mysql.sock
date.timezone = Asia/Shanghai

/usr/local/php/bin/php -m      //验证安装的模块

vi /etc/httpd.conf 			####在合适位置新增

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

DirectoryIndex index.php index.html

rm -f /usr/local/httpd/htdocs/index.html
vi /usr/local/httpd/htdocs/index.php

<?php
phpinfo();
?>

systemctl restart httpd


http://192.168.32.21/

mysqladmin -uroot -p password 'abc123'   
这个地方回车后,输入是初始密码,我们这边安装的初始密码是空的。回车即可

4.4、测试数据库的连通性

mysql -u root -p

CREATE DATABASE myadm;
GRANT all ON myadm.* TO 'myadm'@'%' IDENTIFIED BY 'admin123';
GRANT all ON myadm.* TO 'myadm'@'localhost' IDENTIFIED BY 'admin123';
flush privileges;

vi /usr/local/httpd/htdocs/index.php

<?php
$link=mysqli_connect('20.0.0.10','myadm','admin123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
?>

在这里插入图片描述

4.5、安装phpMyadmin

cd /opt
unzip phpMyAdmin-4.7.6-all-languages.zip -d /opt/
mv phpMyAdmin-4.7.6-all-languages /usr/local/httpd/htdocs/myadm
cd /usr/local/httpd/htdocs/myadm
cp config.sample.inc.php config.inc.php

vi config.inc.php

$cfg['Servers'][$i]['host'] = '20.0.0.10'; //把localhost 改成IP       31行

http://20.0.0.10/myadm
使用root 以及前面为root配置的密码登录管理系统。可以对数据库进行管理操作了

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值