------LAMP-----

一、何为LAMP

Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。随着开源潮流的蓬勃发展,开放源代码的LAMP已经与J2EE和.Net商业软件形成三足鼎立之势,并且该软件开发的项目在软件方面的投资成本较低,因此受到整个IT界的关注。从网站的流量上来说,70%以上的访问流量是LAMP来提供的,LAMP是最强大的网站解决方案。

二、LAMP架构和通信过程

LAMP的架构:

LAMP是一个多C/S架构的平台,最初级为web客户端基于TCP/IP通过http协议发起传送,这个请求可能是动态的,也可能是静态的。
所以web服务器通过发起请求的后缀来判断,如果是静态的资源就由web服务器自行处理,然后将资源发给客户端。如果是动态这时web服务器会通过CGI(Common Gateway interface)协议发起给php。
这里如果php是以模块形式与Web服务器联系。那么他们是通过内部共享内存的方式。如果是php单独的放置与一台服务器,那么他们是通过sockets套接字监听的方式通信(这又是一个C/S架构)。
这时php会相应的执行一段程序,如果在执行程序时,需要用到数据。那么php就会通过mysql协议发送给mysql服务器(也可以看作是一个C/S架构)。由mysql服务器处理,将数据供给php程序。

lamp流程:

  1. 用户发送http请求到达httpd服务器
  2. httpd解析url获取需要的资源的路径,通过内核空间读取硬盘资源,如是静态资源,则构建响应报文,发回给用户
  3. 如果是动态资源,将资源地址发给php解析器,解析php程序文件,解析完毕将内容发回给httpd,httpd构建响应报文,发回给用户
  4. 如果涉及到数据库操作,则利用php-mysql驱动,获取数据库数据,返回给PHP解析器。

php + mysql的通信:

PHP跟mysql怎么整合起来呢,php又怎么被httpd所调用呢?
首先httpd并不具备解析代码的能力,他要依赖于php的解析器,接着php本身不依赖于mysql,他只是一个解析器,能执行代码就OK了,那他什么时候用到mysql呢,如果要在mysql中存数据时才用到mysql,只是当php中有运行mysql语句时才用到mysql。
php语言要想联系mysql,通常用到php的驱动,rpm包的叫php_mysql,php跟mysql没有一点关系,只有程序员在php中编写mysql语句时才连接mysql来执行sql语句的。
基于php-mysql去连接mysql只使用一个函数mysql_connect();而mysql_connect()正是php-mysql提供的一个API,只要指明要连接的服务器即可。
注意:在以后编译php时,要想跟apache结合,就要编译成php-fpm

LAMP架构(全编译安装)_第1张图片

三、使用源码安装LAMP

部署环境:CentOS7.6系统,base源、epel源为阿里镜像源,IP地址为192.168.11.12
进入下方相应网站下载所需软件包:
http://httpd.apache.org #http压缩包
http://apr.apache.org #httpd插件包
http://mirrors.sohu.com #mysql压缩包
http://www.php.net #php压缩包
https://www.phpadmin.net #phpadmin压缩包
LAMP架构(全编译安装)_第2张图片

#上传所有软件包Linux系统的/root/目录下
LAMP架构(全编译安装)

#apr-1.7.0和apr-util-1.6.1是httpd2.4以后的版本所需的插件,必须安装
#phpmyadmin是一个使用php语言编写,用来管理mysql数据库的web管理系统,后面lamp搭建完成后验证
一、Apache的编译安装:
#关闭selinux和防火墙
LAMP架构(全编译安装)

#安装编译工具和插件
[root@lamp ~]# yum -y install gcc gcc-c++ make pcre-devel expat-devel perl
#解压httpd和apr
[root@lamp ~]# tar -xf httpd-2.4.39.tar.gz
[root@lamp ~]# tar -xf apr-1.7.0.tar.gz
[root@lamp ~]# tar -xf apr-util-1.6.1.tar.gz
#将插件放入到httpd目录下的srclib中,并改名
[root@lamp ~]# mv apr-1.7.0 httpd-2.4.39/srclib/apr
[root@lamp ~]# mv apr-util-1.6.1 httpd-2.4.39/srclib/apr-util

#进行个性化配置
[root@lamp httpd-2.4.39]# ./configure \
--prefix=/usr/local/httpd \
--enable-so \
--enable-rewrite \
--enable-charset-lite \
--enable-cgi

#选项解释:
#--prefix=/usr/local/httpd 指定将httpd程序安装到/usr/local/httpd目录下
#--enable-so 启用动态加载模块功能
#--enable-rewrite 启用网页地址重写功能,用于网站优化及目录迁移
#--enable-charset-lite 启用字符集支持,以便使用各种字符集编码的网页
#--enable-cgi 启用cgi脚本程序支持,便于扩展网站的应用访问能力

#编译安装
[root@lamp httpd-2.4.39]# make && make install
#将httpd服务添加到系统服务
[root@lamp httpd-2.4.39]# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
[root@lamp httpd-2.4.39]# vim /etc/init.d/httpd
#添加以下两行(注意:‘#’不能省略)

LAMP架构(全编译安装)_第3张图片

#将httpd加入到service管理器
[root@lamp httpd-2.4.39]# chkconfig --add httpd
#重新加载系统管理器
[root@lamp httpd-2.4.39]# systemctl daemon-reload
#编辑httpd主配置文件
[root@lamp httpd-2.4.39]# vim /usr/local/httpd/conf/httpd.conf
加入下面内容,保存退出

LAMP架构(全编译安装)_第4张图片

#优化执行路径,执行文件的原路径不在PATH环境变量中所以生成软链接
[root@lamp httpd-2.4.39]# ln -s /usr/local/httpd/conf/httpd.conf /etc/
[root@lamp httpd-2.4.39]# ln -s /usr/local/httpd/bin/ /usr/local/bin/
#检测语法错误:httpd -t 或者 apachectl -t

LAMP架构(全编译安装)

#查看程序版本:httpd -v

LAMP架构(全编译安装)

#启动服务并设置开机启动,查端口
[root@lamp httpd-2.4.39]# systemctl start httpd
[root@lamp httpd-2.4.39]# systemctl enable httpd
[root@lamp httpd-2.4.39]# ss -anput | grep 80

LAMP架构(全编译安装)

#用w7/10客户端访问服务器
#浏览器访问ip192.168.11.12,显示it works即表示正常

LAMP架构(全编译安装)

#网页默认显示内容为:/usr/local/httpd/htdocs/index.html

LAMP架构(全编译安装)

Apache配置文件介绍:

|——bin ##http用到的命令

| |—— ab #服务器性能测试工具

| |——apachectl #控制Apache启动的命令

| |——apxs #是Apache HTTP 编译和安装扩展模块的工具

#后文在编译php软件是就用到了此命令,

#例如:--with-apxs2=/application/apache2.2.32/bin/apxs

| |——htcacheclean #清理磁盘 缓冲区的命令,很少用到

| |—— htpasswd #建立和更新基本认证的文件(打开网页需要输入用户名和密码)

| |—— httpd #httpd为Apache控制 命令程序, apachectl执行时会调用httpd

| |—— rotatelogs #Apache自带的日志轮询命令

|——conf #http配置文件的目录

| |—— extra #这个是额外的Apache配置文件目录,这个目录文件我们会经常访问修改。

#如: httpd-vhosts.conf 默认就在此目录

| |——httpd.conf #apache 的住配置文件

|——htdocs #编译 Apache时默认的站点目录

| |—— index.html #默认的网站首页面

|——logs # Apache的错误日志和访问日志

| |—— access_log #这是Apache默认的访问日志

| |——error_log #这是Apache的错误日志,如果Apache出现错误可以查看这个日志。

| |——httpd.pid #httpd 的pid文件, http进程启动后,会把所有进程的ID写到此文件。

|——modules #Apache的模块目录,比如PHP、 memcache等模块编译后都在这里。

二、MySQL的编译安装:

#安装编译工具与插件
[root@lamp ~]# yum -y install ncurses ncurses-devel bison cmake
#建立数据库程序用户
[root@lamp ~]# useradd mysql -M -s /sbin/nologin
#解压boost并改名
[root@lamp ~]# tar -xf boost_1_59_0.tar.gz -C /usr/local/
[root@lamp ~]# cd /usr/local/
[root@lamp local]# mv boost_1_59_0 boost
#解压mysql软件包到/opt目录下
[root@lamp ~]# tar -xf mysql-5.7.17.tar.gz -C /opt/

LAMP架构(全编译安装)

#配置(个性化配置及优化项目)
[root@lamp ~]# cd /opt/mysql-5.7.17/
[root@lamp mysql-5.7.17]# 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=/usr/local/boost \
-DWITH_SYSTEMD=1

#选项解释:
LAMP架构(全编译安装)_第5张图片

#编译及安装
[root@lamp mysql-5.7.17]# make && make install
#对数据库目录进行权限设置
[root@lamp mysql-5.7.17]# chown -R mysql:mysql /usr/local/mysql/

#编辑mysql主配置文件
[root@lamp mysql-5.7.17]# vim /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

LAMP架构(全编译安装)_第6张图片

[root@lamp mysql-5.7.17]# chown -R mysql.mysql /etc/my.cnf
#设置环境变量
#把这两个路径添加到环境变量中,并放到profile中使其开机运行,否则不生效
[root@lamp mysql-5.7.17]# echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
#设置为全局变量,使其使用范围更广
[root@lamp mysql-5.7.17]# echo 'export PATH' >> /etc/profile
#加载环境变量,使其生效
[root@lamp mysql-5.7.17]# source /etc/profile

#初始化数据库
[root@lamp mysql-5.7.17]# cd /usr/local/mysql
[root@lamp mysql]# bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
#添加系统服务
[root@lamp mysql]# cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
[root@lamp mysql]# systemctl daemon-reload
#启动mysql服务并设开机自启,查端口
[root@lamp mysql]# systemctl start mysqld
[root@lamp mysql]# systemctl enable mysqld
[root@lamp mysql]# ss -anput | grep 3306

LAMP架构(全编译安装)_第7张图片

#对数据库进行操作,,设置密码
[root@lamp mysql]# mysqladmin -uroot -p password '0'
#由于之前数据库无密码,所以直接回车
#使用设置的密码登录mysql
[root@lamp mysql]# mysql -uroot -p
#对root用户进行授权
mysql> grant all privileges on . to 'root'@'%' identified by '0' with grant option;
mysql> flush privileges;

LAMP架构(全编译安装)_第8张图片

#退出数据库
mysql> \q

三、php的编译安装

#安装编译工具和插件
[root@lamp ~]# 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@lamp ~]# tar -jxf php-7.2.17.tar.bz2
[root@lamp ~]# cd php-7.2.17/

#进行编译配置
[root@lamp php-7.2.17]#  ./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

#make编译安装
[root@lamp php-7.2.17]# make && make install
#创建配置文件
[root@lamp php-7.2.17]# cp php.ini-development /usr/local/php/lib/php.ini
#编辑配置文件
[root@lamp php-7.2.17]# vim /usr/local/php/lib/php.ini
#修改下列内容,保存退出
mysqli.default_socket = /usr/local/mysql/mysql.sock #将php与mysql关联
date.timezone = Asia/Shanghai #设置时区,同步时间

LAMP架构(全编译安装)
LAMP架构(全编译安装)_第9张图片

#验证安装的模块
[root@lamp php-7.2.17]# /usr/local/php/bin/php -m
#关联php和apache服务
#编辑apache配置文件,使httpd支持php网页解析,添加以下两行内容:
[root@lamp php-7.2.17]# vim /etc/httpd.conf
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
修改以下内容:
DirectoryIndex index.php index.html #注意:php文件必须放前面,优先读取

LAMP架构(全编译安装)_第10张图片

#删除默认html文件
[root@lamp php-7.2.17]# rm -f /usr/local/httpd/htdocs/index.html
#编辑php测试网页
[root@lamp php-7.2.17]# vim /usr/local/httpd/htdocs/index.php
添加以下内容(php信息):

LAMP架构(全编译安装)
保存退出

#先关闭httpd服务,再开启
[root@lamp php-7.2.17]# systemctl stop httpd
[root@lamp php-7.2.17]# systemctl start httpd
#验证:用w7/10的浏览器访问192.168.11.12

LAMP架构(全编译安装)_第11张图片

#测试数据库
[root@lamp ~]# mysql -uroot -p
mysql> create database han;
mysql> grant all on han. to 'han'@'%' identified by '0';
mysql> grant all on han.
to 'han'@'localhost' identified by '0';
mysql> flush privileges;

LAMP架构(全编译安装)_第12张图片

#重启MySQL服务
[root@lamp ~]# systemctl restart mysqld
#编辑主页文件
[root@lamp ~]# vim /usr/local/httpd/htdocs/index.php
修改成如下图片中内容:

LAMP架构(全编译安装)_第13张图片

#先关闭httpd服务,再开启
[root@lamp php-7.2.17]# systemctl stop httpd
[root@lamp php-7.2.17]# systemctl start httpd
#验证:用w7/10的浏览器访问192.168.11.12

LAMP架构(全编译安装)_第14张图片

四、lamp架构的应用:实战1
------部署phpMyAdmin系统:phpmyadmin是一个使用php语言编写,用来管理mysql数据库的web应用系统

#解压
[root@lamp ~]# tar -xf phpMyAdmin-5.0+snapshot-all-languages.tar.gz -C /opt/
[root@lamp ~]# cd /opt/
#移动phpmyadmin到apache目录下并改名
[root@lamp opt]# mv phpMyAdmin-5.0+snapshot-all-languages /usr/local/httpd/htdocs/myadm
#进入phpmyadmin目录
[root@lamp opt]# cd /usr/local/httpd/htdocs/myadm/
#创建配置文件
[root@lamp myadm]# cp config.sample.inc.php config.inc.php
#修改配置文件
[root@lamp myadm]# vim config.inc.php
修改看图片上:

LAMP架构(全编译安装)_第15张图片

#先关闭httpd服务,再开启
[root@lamp php-7.2.17]# systemctl stop httpd
[root@lamp php-7.2.17]# systemctl start httpd
#验证:用w7/10的浏览器访问192.168.11.12/myadm

LAMP架构(全编译安装)_第16张图片

#用户名root,密码为数据库密码,我的为0,登录即可

LAMP架构(全编译安装)_第17张图片

五、lamp架构的应用:实战2
------部署wordpress论坛网站:wordpress是一个使用php语言编写,可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把 WordPress当作一个内容管理系统(CMS)来使用。

#安装相应的工具包
[root@lamp ~]# yum -y install wget unzip
#下载wordpress包
[root@lamp ~]# wget https://cn.wordpress.org/wordpress-4.9.4-zh_CN.zip
#解压
[root@lamp ~]# unzip wordpress-4.9.4-zh_CN.zip

LAMP架构(全编译安装)

#将wordpress目录移动到apache默认网站目录下
[root@lamp ~]# mv wordpress /usr/local/httpd/htdocs/
#登录mysql创建wordpress网站的后台数据库
[root@lamp ~]# mysql -uroot -p
mysql> create database wordpress;
mysql> show databases;

LAMP架构(全编译安装)_第18张图片

#用w7/10浏览器访问:192.168.11.12/wordpress

LAMP架构(全编译安装)_第19张图片

LAMP架构(全编译安装)_第20张图片

LAMP架构(全编译安装)_第21张图片

#这一步需手动创建此文件,复制里面内容去创建,后点击安装即可
[root@lamp ~]# cd /usr/local/httpd/htdocs/
#粘贴进去即可,保存退出
[root@lamp wordpress]# vim wp-config.php

LAMP架构(全编译安装)_第22张图片

LAMP架构(全编译安装)_第23张图片

LAMP架构(全编译安装)_第24张图片

LAMP架构(全编译安装)_第25张图片