02 源码编译安装LAMP

avatar
作者
筋斗云
阅读量:0

      

目录

2.1Apache网站服务基础

2.1Apache简介

1. Apache的起源

起源背景

Apache的诞生

Apache软件基金会的成立

Apache的流行和影响

2.1.1 安装httpd服务器

1.准备工作

2.源码编译及安装

(1)解包

(2)配置

(3)编译及安装

3.确认安装结果

4 优化执行路径

5.添加httpd系统服务

2.2 httpd 服务器的基本配置

1:确定网站名称、IP 地址

2:配置并启动 httpd 服务

(1)配置 httpd 服务

(2)启动 httpd 服务

3:部署网页文档

4:查看 Web 站点的访问情况

2.3 构建虚拟 Web 主机

1:为虚拟主机提供域名解析(两个域名)

2:为虚拟主机准备网页文档(两个网站) 

3:添加虚拟主机配置 

4:在客户机中访问虚拟 Web 主机 

2.4 基于 IP 地址、基于端口的虚拟主机

1:为主机设置多个IP地址

2:基于 IP 地址的虚拟主机 

3:基于端口的虚拟主机 

2.5 MySQL 的编译安装

1:准备工作

(1)检查安装环境

(2)安装cmake

2:源码编译及安装

(1)创建运行用户

(2)解包

(3)配置

(4)编译并安装

3:安装后的其他调整

(1)对数据库目录进行权限设置

(2)建立配置文件

(3)初始化数据库

 4:启动并访问 MySQL 服务

2.6 构建 PHP 运行环境

1:准备工作

2:安装扩展工具库

(1)安装 libmcrypt

 (2)安装 mhash

(3)安装 mcrypt 

3:编译安装 PHP

(1)解包

 (2)配置

(3)编译及安装

2.7 设置 LAMP 组件环境

1:php.ini 配置调整

(1)php.ini 的建立及基本设置

(2)添加 ZendGuardLoader 优化模块 

 2:httpd.conf 配置调整

2.8 测试 LAMP 协同工作

1:测试 PHP 网页能否正确显示

2:测试 PHP 网页能否访问 MySQL 数据库 


         LAMP 架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整套系统和相关软件,能够提供动态Web 站点服务及其应用开发环境。LAMP 是一个缩写词,具体包括 Linux 操作系统、Apache 网站服务器、MySQL数据库服务器、PHP(或 Per、Python)网页编程语言。

        在构建 LAMP 平台时,各组件的安装顺序依次为 Linux、Apache、MySQL、PHP其中 Apache 和 MySQL 的安装并没有严格的顺序;而 PHP 环境的安装一般放到最后,负责沟通 Web 服务器和数据库系统以协同工作。

2.1Apache网站服务基础

2.1Apache简介

        "Apache HTTP Server"是开源软件项目的杰出代表,它基于标准的 HTTP 网络协议提供网页浏览服务,在 Web 服务器领域中长期保持着超过半数的份额。Apache 服务器可以运行在 Linux、UNIX、Windows 等多种操作系统平台中。

1. Apache的起源

Apache HTTP Server(简称Apache)的起源可以追溯到NCSA httpd服务器,其名称Apache取自“A Patchy Server”的读音,意为“基于原有Web服务程序的代码进行修改(补丁)后形成的服务器程序”。以下是Apache起源的详细概述:

起源背景
  • 前身:Apache HTTP Server的前身是NCSA httpd服务器,这是一个由美国国家超级电脑应用中心(National Center for Supercomputing Applications,NCSA)开发的Web服务器软件。
  • 发展:随着互联网的兴起,Web服务器的需求日益增长,NCSA httpd服务器因其性能限制和缺乏扩展性而难以满足日益增长的需求。此时,一群开发者开始对NCSA httpd服务器进行修改和完善,以提高其性能和可扩展性。
Apache的诞生
  • 成立Apache Group:这群开发者逐渐形成了Apache Group,他们致力于对NCSA httpd服务器进行持续的开发和维护。Apache Group的成立标志着Apache HTTP Server项目的正式启动。
  • 发布版本:1995年,Apache Group发布了Apache HTTP Server的1.0版本,这一版本在性能和功能上都有了显著提升,逐渐赢得了用户的青睐。
Apache软件基金会的成立
  • 背景:随着Apache HTTP Server的流行和成功,Apache Group在1999年进一步发展为Apache软件基金会(Apache Software Foundation,ASF)。ASF是一个非营利性组织,致力于开源软件的开发和推广。
  • 目标:ASF的成立为Apache HTTP Server的发展提供了更加坚实的后盾,它吸引了更多的开发者参与到Apache项目的开发中来,推动了Apache HTTP Server的不断进步和创新。
Apache的流行和影响
  • 全球排名:经过多年的发展,Apache HTTP Server已经成为世界使用排名第一的Web服务器软件,其市场占有率一直保持在较高水平。
  • 特点:Apache HTTP Server以其跨平台、安全性高、模块化设计以及丰富的功能特性而著称。它支持多种操作系统平台,可以轻松地与各种编程语言和数据库进行集成,为开发者提供了极大的灵活性和便利性。

2.1.1 安装httpd服务器

在配置 Apache 网站服务之前,需要正确安装好 httpd 服务器软件。httpd 服务器的安装可以选用 RPM 安装、源码编译安装这两种方式,前者相对比较简单、快速,但是在功能上存在一定的局限性。

1.准备工作

为了避免发生端口冲突、程序冲突等现象,建议卸载使用RPM 方式安装的httpd.httpd 服务编译安装时需要依赖 apr-util-devel、pcre-devel 等软件,因此在 httpd 编译安装之前需要先安装依赖软件。

检查是否已经安装httpd

关闭防火墙

如果提示错误,证明没有rpm安装的httpd

  1. apr-util-devel
    • apr-util 是Apache Portable Runtime Utility Libraries的缩写,它是Apache可移植运行时(APR)的一部分,但提供了额外的实用程序功能,如数据库连接池、加密和URI解析等。
    • apr-util-devel 包包含了开发apr-util库所需的头文件、链接库以及可能的文档和示例代码。如果你需要编译依赖于apr-util的应用程序或库,这个包是必须的。
  1. pcre-devel
    • PCRE(Perl Compatible Regular Expressions)是一个Perl兼容的正则表达式库,它提供了正则表达式的全面支持,包括Perl的许多高级特性。
    • pcre-devel 包包含了开发时需要的PCRE库的头文件和开发文档,这对于编译需要PCRE支持的应用程序或库是必要的。
  1. gcc*
    • GCC(GNU Compiler Collection)是GNU项目的一部分,是一套编程语言编译器,支持多种编程语言,包括C、C++、Objective-C、Fortran、Ada和Go等。
    • gcc* 通常不是一个具体的包名,而是指与GCC编译器相关的多个包。在安装GCC时,你可能会看到如gcc、gcc-c++(C++编译器)、gcc-objc(Objective-C编译器)等不同的包。根据你的需要,你可能需要安装这些包中的一个或多个。
    • GCC是编译和构建许多Linux应用程序和库所必需的编译器。
  1. lrzsz
    • lrzsz 是两个程序lrz和lsz的集合,这两个程序用于通过串行通信线路(如telnet或SSH)在本地和远程系统之间传输文件。lrz用于接收文件,而lsz用于发送文件。
    • 尽管lrzsz主要用于文件传输,但在某些情况下,它可能是安装或配置某些软件时的一个依赖项,特别是那些需要与远程系统交换数据的软件。
2.源码编译及安装
(1)解包

将下载获得的 httpd 源码包解压并释放到/usr/src 目录下,且切换到展开后的源码目录中。

(2)配置

根据服务器的实际应用需要,可以灵活设置不同的定制选项,如指定安装路径、启用字符集支持等。若要获知可用的各种配置选项及其含义,可以执行“./configure --help命令

--prefix:制定程序的安装目录

--enable-so:启用动态加载模块DSO的支持,使httpd具备进一步扩展功能的能力

--enable-rewrite:启用网页地址重写功能,用于网站优化

--enable-charset-lite:启动字符集支持,以便支持使用各种字符集编码的网页

--enable-cgi:启用cgi脚本程序支持,扩展网站的应用访问能力

(3)编译及安装

上面执行后显示版本及配置成功

3.确认安装结果

4 优化执行路径

5.添加httpd系统服务
[root@bogon system]# cd /lib/systemd/system [root@bogon system]# vim httpd.service  [Unit] Description=The Apache HTTP Server After=network.target  [Service] Type=fotking PIDFile=/usr/local/httpd/logs/httpd.pid ExecStart=/usr/local/bin/apachectl  $OPTIONS ExecReload=/bin/kill -HUP $MAINPID [install] WantedBy=multi-user.target     注释: After=network.target Before/After:要是一个服务 Before 另一个服务,那么在并行启动时(Systemd 总是用进程 0 并行启动所有东西,然后通过这两个标记来二次等待排序),那另一个服务这时就会等这个服务先启动并返回状态,注意是先启动而不是启动成功,因为失败也是一种状态,一定要成功才启动另一个服务是通过依赖关系定义的。反之 After 亦然。After=network.target 指的是后于network服务启动。  Type=forking 服务的启动方式,有fork方式和simple方式 forking的方式在启动程序后会调用 fork() 函数,把必要的通信频道都设置好之后父进程退出,留下守护精灵的子进程。你要是使用的这种方式,最好也指定下 PIDFILE=,不要让 Systemd 去猜,非要猜也可以,设置 GuessMainPID 为 yes。  ExecReload= /bin/kill -HUP $MAINPID  $ MAINPID是服务的systemd变量,它指向主应用程序的PID  WantedBy=multi-user.target 指定运行级别   

2.2 httpd 服务器的基本配置

1:确定网站名称、IP 地址

2:配置并启动 httpd 服务

(1)配置 httpd 服务
 [root@www system]# vim /usr/local/httpd/conf/httpd.conf   修改网站名称: ServerName www.benet.com [root@www ~]# httpd -t Syntax OK
(2)启动 httpd 服务

3:部署网页文档

[root@localhost ~]# vim /etc/hosts 添加域名解析: 192.168.10.101 www.benet.com  [root@localhost ~]# curl www.benet.com <html><body><h1>It works!</h1></body></html>

4:查看 Web 站点的访问情况

2.3 构建虚拟 Web 主机

1:为虚拟主机提供域名解析(两个域名)

[root@www ~]# vim /etc/hosts 192.168.10.101 www.benet.com 192.168.10.101 www.accp.com

2:为虚拟主机准备网页文档(两个网站) 

[root@www ~]# mkdir -p /var/www/html/benetcom [root@www ~]# mkdir -p /var/www/html/accpcom [root@www ~]# echo "<h1>www.benet.com</h1>"> /var/www/html/benetcom/index.html [root@www ~]# echo "<h1>www.accp.com</h1>"> /var/www/html/accpcom/index.html

3:添加虚拟主机配置 

[root@www ~]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf  <Directory "/var/www/html"> Require all granted  </Directory>  <VirtualHost *:80>     DocumentRoot "/var/www/html/benetcom"     ServerName www.benet.com     ErrorLog "logs/www.benet.com.error_log"     CustomLog "logs/www.benet.com.access_log" common </VirtualHost>   <VirtualHost *:80>     DocumentRoot "/var/www/html/accpcom"     ServerName www.accp.com     ErrorLog "logs/www.accp.com.error_log"     CustomLog "logs/www.accp.com.access_log" common </VirtualHost>   [root@www ~]# vim /usr/local/httpd/conf/httpd.conf 去掉注释符号: Include conf/extra/httpd-vhosts.conf  [root@www ~]# systemctl restart httpd

4:在客户机中访问虚拟 Web 主机 

[root@node2 ~]# cat /etc/hosts 192.168.10.101 www.benet.com 192.168.10.101 www.accp.com   [root@node2 ~]# curl www.benet.com <h1>www.benet.com</h1>  [root@node2 ~]# curl www.accp.com <h1>www.accp.com</h1>

2.4 基于 IP 地址、基于端口的虚拟主机

1:为主机设置多个IP地址

[root@www ~]# cd /etc/sysconfig/network-scripts/ [root@www network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0 [root@www network-scripts]# cp ifcfg-ens33 ifcfg-ens33:1  [root@www network-scripts]# vim ifcfg-ens33:0 IPADDR=192.168.10.210 NETMASK=255.255.255.0 GATEWAY=192.168.10.254 NAME=ens33:0 DEVICE=ens33:0  [root@www network-scripts]# vim ifcfg-ens33:1 IPADDR=192.168.10.220 NETMASK=255.255.255.0 GATEWAY=192.168.10.254 NAME=ens33:1 DEVICE=ens33:1  [root@www network-scripts]# systemctl restart network [root@www network-scripts]# ip address 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00     inet 127.0.0.1/8 scope host lo        valid_lft forever preferred_lft forever     inet6 ::1/128 scope host         valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000     link/ether 00:0c:29:21:68:67 brd ff:ff:ff:ff:ff:ff     inet 192.168.10.101/24 brd 192.168.10.255 scope global noprefixroute ens33        valid_lft forever preferred_lft forever     inet 192.168.10.220/24 brd 192.168.10.255 scope global secondary noprefixroute ens33:1        valid_lft forever preferred_lft forever     inet 192.168.10.210/24 brd 192.168.10.255 scope global secondary noprefixroute ens33:0        valid_lft forever preferred_lft forever     inet6 fe80::91e7:44c5:3a3:b5d1/64 scope link noprefixroute         valid_lft forever preferred_lft forever [root@www network-scripts]#  

2:基于 IP 地址的虚拟主机 

[root@www ~]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf <Directory "/var/www/html"> Require all granted </Directory>  <VirtualHost 192.168.10.210:80>     DocumentRoot "/var/www/html/benetcom"     ServerName www.benet.com     ErrorLog "logs/www.benet.com.error_log"     CustomLog "logs/www.benet.com.access_log" common </VirtualHost>   <VirtualHost 192.168.10.220:80>     DocumentRoot "/var/www/html/accpcom"     ServerName www.accp.com     ErrorLog "logs/www.accp.com.error_log"     CustomLog "logs/www.accp.com.access_log" common </VirtualHost> [root@www ~]# systemctl restart httpd 客户端测试 [root@node2 ~]# curl 192.168.10.210 <h1>www.benet.com</h1>  [root@node2 ~]# curl 192.168.10.220 <h1>www.benet.com</h1>

3:基于端口的虚拟主机 

[root@www ~]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf <Directory "/var/www/html"> Require all granted </Directory>  Listen 80 Listen 8080  <VirtualHost 192.168.10.101:80>     DocumentRoot "/var/www/html/benetcom"     ServerName www.benet.com     ErrorLog "logs/www.benet.com.error_log"     CustomLog "logs/www.benet.com.access_log" common </VirtualHost>   <VirtualHost 192.168.10.101:8080>     DocumentRoot "/var/www/html/accpcom"     ServerName www.accp.com     ErrorLog "logs/www.accp.com.error_log"     CustomLog "logs/www.accp.com.access_log" common </VirtualHost>   [root@www ~]# systemctl restart httpd [root@www ~]# netstat -anpt | grep httpd     客户端测试 [root@node2 ~]# curl 192.168.10.101:80 <h1>www.benet.com</h1>  [root@node2 ~]# curl 192.168.10.101:8080 <h1>www.accp.com</h1>

2.5 MySQL 的编译安装

1:准备工作

(1)检查安装环境

备注:

初始化mysql需要autoconf,它是自动化配置脚本生成工具,安装自动化脚本生成工具

(2)安装cmake
[root@www ~]# tar zxf cmake-2.8.6.tar.gz  [root@www ~]# cd cmake-2.8.6  [root@www cmake-2.8.6]# ./configure  [root@www cmake-2.8.6]# gmake && gmake install  备注: 此步骤可以用yum的方法安装cmake yum -y install cmake

2:源码编译及安装

(1)创建运行用户

(2)解包

(3)配置
[root@www ~]# cd mysql-5.6.36 [root@www mysql-5.6.36]# cmake \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DSYSCONFDIR=/etc \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_EXTRA_CHARSETS=all  -DDEFAULT_COLLATION:用于指定数据集如何排序,以及字符串的比对规则
(4)编译并安装

3:安装后的其他调整

(1)对数据库目录进行权限设置

(2)建立配置文件

(3)初始化数据库
[root@www mysql-5.6.36]# /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/

 4:启动并访问 MySQL 服务

[root@www mysql-5.6.36]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld [root@www mysql-5.6.36]#  chmod +x /etc/rc.d/init.d/mysqld [root@www mysql-5.6.36]# chkconfig --add mysql 服务 mysql 信息读取出错:没有那个文件或目录 [root@www mysql-5.6.36]# chkconfig --add mysqld [root@www mysql-5.6.36]# chkconfig mysqld on [root@www mysql-5.6.36]# systemctl start mysql [root@www mysql-5.6.36]# netstat -anpt | grep mysql tcp6       0      0 :::3306                 :::*                    LISTEN      57921/mysqld         [root@www mysql-5.6.36]# mysql -u root -p Enter password:                             //密码是空的 Welcome to the MySQL monitor.  Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.6.36 Source distribution  Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.  Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.  Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.  mysql> set password =password('123456'); Query OK, 0 rows affected (0.00 sec)  mysql> exit Bye [root@www mysql-5.6.36]# 

2.6 构建 PHP 运行环境

1:准备工作

为了避免发生程序冲突等现象,建议先将 RPM 方式安装的 PHP 及相关依赖包

2:安装扩展工具库

(1)安装 libmcrypt
[root@www ~]# tar zxf libmcrypt-2.5.8.tar.gz [root@www ~]# cd libmcrypt-2.5.8/  [root@www libmcrypt-2.5.8]# ./configure  [root@www libmcrypt-2.5.8]# make && make install  [root@www libmcrypt-2.5.8]# ln -s /usr/local/lib/libmcrypt.* /usr/lib/    //做个软连接
 (2)安装 mhash
[root@www ~]# tar zxf mhash-0.9.9.9.tar.gz  [root@www ~]# cd mhash-0.9.9.9/  [root@www mhash-0.9.9.9]# ./configure  [root@www mhash-0.9.9.9]# make && make install  [root@www mhash-0.9.9.9]# ln -s /usr/local/lib/libmhash* /usr/lib/
(3)安装 mcrypt 
[root@www ~]# tar zxf mcrypt-2.6.8.tar.gz [root@www ~]# cd mcrypt-2.6.8/  [root@www mcrypt-2.6.8]# ./configure  [root@www mcrypt-2.6.8]# export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH  [root@www mcrypt-2.6.8]# ./configure  [root@www mcrypt-2.6.8]# make && make install

3:编译安装 PHP

(1)解包
[root@www ~]# tar zxf php-5.5.38.tar.gz [root@www ~]# cd php-5.5.38
 (2)配置
[root@www php-5.5.38]# ./configure --prefix=/usr/local/php5 \ --with-mcrypt \ --with-apxs2=/usr/local/httpd/bin/apxs \ --with-mysql=/usr/local/mysql \ --with-mysqli=/usr/local/mysql/bin/mysql_config \ --with-config-file-path=/usr/local/php5 \ --enable-mbstring 

注意:

不能用192.168.10.101连接。

想用主机IP连接需要在安装php时指定mysql函数集为mysqlnd

--with-mysqli=mysqlnd

如果使用本地函数集,php连接mysql数据库可以使用localhost、127.0.0.1、本机主机名

,但不能用本机IP地址192.168.10.101

--with-apxs2=/usr/local/httpd/bin/apxs

整合apache,apxs功能是使用mod_so中的LoadModule指令,加载指定模块到apache,要求apache要打开SO模块

(3)编译及安装
[root@www php-5.5.38]# make && make install  备注: 这一步时间很长    备注: ./configure --prefix=/usr/local/php5 \ --with-apxs2=/usr/local/httpd/bin/apxs \ --with-mysql=mysqlnd \ --with-mysqli=mysqlnd \ --with-config-file-path=/usr/local/php5 \ --enable-mbstring 

2.7 设置 LAMP 组件环境

1:php.ini 配置调整

(1)php.ini 的建立及基本设置
[root@www php-5.5.38]# cp php.ini-development /usr/local/php5/php.ini [root@www php-5.5.38]# vim /usr/local/php5/php.ini  default_charset = "UTF-8"         #去掉前面的注释 file_uploads = On  upload_max_filesize = 2M  max_file_uploads = 20  post_max_size = 8M  short_open_tag = On         ##修改值 extension=php_mysqli.dll        ##去掉前面的注释
(2)添加 ZendGuardLoader 优化模块 
[root@www~]#tar zxf zend-loader-php5.5-linux-x86_64_update1.tar.gz [root@www~]#cd zend-loader-php5.5-linux-x86_64/  [root@www zend-loader-php5.5-linux-x86_64]#cp ZendGuardLoader.so /usr/local/php5/lib/php [root@www ~]# vim /usr/local/php5/php.ini  在[PHP]下面添加:  [PHP] zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so  zend_loader.enable=1

 2:httpd.conf 配置调整

[root@www ~]# vim /usr/local/httpd/conf/httpd.conf Listen *:80  …… //省略部分内容  LoadModule php5_module modules/libphp5.so   <IfModule mime_module> AddType application/x-httpd-php .php  </IfModule>  DirectoryIndex index.html index.php #Include conf/extra/httpd-vhosts.conf [root@www ~]# apachectl -t  Syntax OK  [root@www ~]# systemctl restart httpd

2.8 测试 LAMP 协同工作

1:测试 PHP 网页能否正确显示

[root@www ~]# vim /usr/local/httpd/htdocs/test1.php  <?php  phpinfo( );  ?>

2:测试 PHP 网页能否访问 MySQL 数据库 

[root@www ~]# vim /usr/local/httpd/htdocs/test2.php  <?php  $link=mysqli_connect('localhost','root','123456');  if($link) echo "恭喜你,数据库连接成功啦!!";  mysqli_close($link);  ?>   注意: 对数据库的连接授权,授权后可以使用主机名连接 mysql> grant all on *.* to root@'www.benet.com' identified by '123456';  注意: 如果用的是mysqlnd,要用IP地址进行连接,127.0.0.1或192.168.10.101都可以

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!