LAMP (Apache/MySQL/PHP)的概念、结构与配置

1 篇文章 0 订阅
1 篇文章 0 订阅

LAMP的概念、结构和配置

  • LAMP概述

LAMP 是指(Linux+Apache+Mysql/MariaDB+Perl/PHP/Python)一组通常一起使用来运行动态网站或者服务器的自由软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。. 随着开源潮流的蓬勃发展,开放源代码的 LAMP 已经与J2EE和.Net商业软件形成三足鼎立之势,并且该软件开发的项目在软件方面的投资成本... LAMP 是Linux Apache MySQL PHP的简写,即把Apache、MySQL以及PHP安装在Linux系统上,组成一个环境来运行PHP的脚本语言,通常是网站

拆解分析如下:

· L代表服务器操作系统使用Linux

· A代表网站服务使用的是Apache软件基金会中的httpd的软件

· M代表网站后台使用的数据库时MySQL数据库

· P代表网站是使用PHP/Perl/Python等语言开发

1.1.LAMP平台的构成组件: 

Linux操作系统Linux操作系统是整个LAMP架构的基础部分,提供用于支撑Web站点的操作系统,为其他的组件提供了更好的稳定性、兼容性

Apache网站服务器为LAMP架构的前端,功能强大、稳定性良好(性能优化)

MySQL数据库服务器为LAMP架构的后端,是一款应用非常广泛的数据库系统。在企业网站、业务系统等应用中,各种账户信息、产品信息、客户资料等都可以存储到MySQL数据库

PHP、Perl、Python网页编程语言如今最为常见的就是PHP语言。Python语言现如今多用于自动化运维。

二、LAMP部署

2.1.MySQL部署

CentOS7系统默认可能会安装MariaDB,因此查询是否已经以rpm方式安装,若有即卸载。

# rpm -e mariadb

2.安装mysql运行所需依赖软件

# yum install -y gcc gcc-c++ make ncurses-devel autoconf lrzsz

ncurses //字符终端处理库,包括面板和菜单等功能

autoconf //兼容多系统进行make编译

上传 cmake、mysql   //至服务器

# tar zxvf cmake-2.8.6.tar.gz -C /usr/src

# cd /usr/src/cmake-2.8.6

# ./configure    //所有文件以configure运行  

# make && make install  

3.编译安装mysql

# tar zxf mysql-5.6.36.tar.gz -C /usr/src

# cd /usr/src/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

-DCMAKE_INSTALL_PREFIX //程序安装路径

-DSYSCONFDIR //程序初始化目录,配置文件存放目录

-DDEFAULT_CHARSET //指定字符集

-DDEFAULT_COLLATION //指定字符集校对规则

-DWITH_EXTRA_CHARSETS //支持额外的字符集

官方对相关配置选项的说明:

https://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html

# make && make install

# useradd -M -s /sbin/nologin mysql   //创建mysql运行用户和组

4.配置mysql

# chown -R mysql:mysql /usr/local/mysql   主 组

# cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf //复制mysql主配置文件到运行目录

初始化数据库,以mysql用户运行初始化脚本并制定mysql数据库运行目录和数据存放目录

# /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/

--user //指定运行用户

--basedir //指定安装目录

--datadir //指定数据库数据存放位置

修改属主权限

# chown -R root /usr/local/mysql

# chown -R mysql /usr/local/mysql/data

设置变量环境,方便执行mysql命令,若不设置则只能够使用绝对路径命令执行

# echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile

# . /etc/profile

添加为系统服务,方便控制mysql服务

# cp /usr/local/mysql/support-files/mysql.server /usr/local/mysql/bin/mysqld.sh

# vim /lib/systemd/system/mysqld.service

[Unit]

Description=Mysql Server

After=mysqld.target

[Service]

User=mysql

Type=forking

PIDFile=/usr/local/mysql/data/pillarx1m.pid

ExecStart=/usr/local/mysql/support-files/mysql.server start

ExecStop=/usr/local/mysql/support-files/mysql.server stop

[Install]

WantedBy=multi-user.target //Minimal 或者桌面/graohical.target

# systemctl daemon-reload //重载systemctl守护进程

# systemctl enable mysqld.service //将mysqld服务设置为开机自启

以下两种方法都可查询开机是否启动:

# systemctl list-unit-files | grep mysqld

# systemctl is-enabled mysqld.service

# systemctl start mysqld

# netstat -anpt | grep mysqld //可查看mysql运行状态,端口号为tcp:3306

管理使用mysql数据库

# mysql -u root -p //u指定用户,p指定密码,默认root无密码,回车即可

# mysqladmin -u root -p password //修改密码为root用户密码为123,需要回车输入原密码,默认密码为空

数据库中所有数据存放在/usr/local/mysql/data/中

通过用户登录mysql界面后需要执行mysql操作语句才能够实现管理mysql数据库

每条语句最后应当加上";" 输入语句可以不区分大小写,但是参数必须区分。

2.2.PHP部署 

php/超文本预处理器是一种通用开源脚本语言,语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,拥有更好的网页执行速度,而且支持绝大多数流行的数据库,主要适用于Web开发领域。

PHP 能做什么? 

PHP 可以生成动态页面内容

PHP 可以创建、打开、读取、写入、关闭服务器上的文件

PHP 可以收集表单数据

PHP 可以发送和接收 cookies

PHP 可以添加、删除、修改您的数据库中的数据

PHP 可以限制用户访问网站上的一些页面

PHP 可以加密数据

2.2.1.部署PHP

1.准备安装环境

卸载之前rpm方式安装的PHP程序

# rpm -e php php-cli php-ldap php-common php-mysql --nodeps

相关组件及依赖包:

# yum install -y zlib-devel libxml2-devel xz-devel

2.安装三个加密扩展工具库:libmcrypt、mhash、mcrypt

# tar zxvf libmcrypt-2.5.8.tar.gz -C /usr/src/ //php加密算法扩展库程序

# cd /usr/src/libmcrypt-2.5.8/

# ./configure

# make && make install

# ln -s /usr/local/lib/libmcrypt.* /usr/lib/

# tar zxvf mhash-0.9.9.9.tar.gz -C /usr/src/

# cd /usr/src/mhash-0.9.9.9/

# ./configure  

# make && make install

# ln -s /usr/local/lib/libmhash.* /usr/lib/

# cd

# tar zxvf mcrypt-2.6.8.tar.gz -C /usr/src/

# cd /usr/src/mcrypt-2.6.8/

# ./configure //如若提示版本小于2.5,则执行以下命令设置变量重新配置

# vim /etc/profile //编辑系统文件,在最后新起一行加入以下内容:

export LD_LIBRARY_PATH=/usr/local/lib: LD_LIBRARY_PATH

# . /etc/profile

# ./configure //设置变量后重新配置

# make && make install

3.安装PHP

# yum install -y libjpeg-devel libpng-devel freetype-devel libtool* libtool-ltdl* libtool-ltdl-devel GD插件,提供验证码功能

# tar zxf php-5.5.38.tar.gz -C /usr/src

# cd /usr/src/php-5.5.38/

# ./configure --prefix=/usr/local/php5 --with-mcrypt --with-apxs2=/usr/local/httpd/bin/apxs --with-mysql=/usr/local/mysql/ --with-config-file-path=/usr/local/php5 --enable-mbstring --with-png-dir --with-freetype-dir --with-jpeg-dir --with-gd --libdir=/usr/lib64 --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-zip

--prefix:指定安装目录

--with-mcrypt:加载数据加密等扩展工具支持

--with-apxs2:指定apache提供的apxs模块支持程序位置

--with-mysql:指定mysql数据库安装位置

--with-config-file-path:指定php配置文件php.ini将要存放的位置

--enable-mbstring:启用多字符串功能

--with-mysqli:mysql扩展功能

make: *** [sapi/cli/php] 错误 1

# vim Makefile

EXTRA_LIBS = -liconv //88行左右此处添加如下内容: -liconv

或者:

#make clean

#make

# make && make install

4.设置LAMP运行环境

主要设置php.ini,用于确定PHP的运行参数,httpd.conf:用于加载libphp5.so,以便支持PHP网页

1.PHP.ini设置  

PHP的配置文件在解压目录下,有两个配置文件,分别用于开发与生产

/usr/src/php-5.5.38/php.ini-development //开发版,用于测试、学习

/usr/src/php-5.5.38/php.ini-production //生产版,用于生产环境

将PHP.ini配置文件拷贝至安装目录下

# grep -v "^;" /usr/src/php-5.5.38/php.ini-development | grep -v "^$" > /usr/local/php5/php.ini

# vim /usr/local/php5/php.ini

在[PHP] 的下一行加入如下:

default_charset = "utf-8"

file_uploads = On

upload_max_filesize = 2M

max_file_uploads = 20M

post_max_size = 8M

extension = php_mysqli.dll

short_open_tag = On //修改自带的为on

分别是设置默认字符集、允许文件上传、上传文件最大限制、每个请求最多能够上传总数、通过post提交的数据量限制、识别PHP语法标记、以及添加mysql支持

5.添加优化模块(php的补丁包)

# tar zxf zend-loader-php5.5-linux-x86_64_update1.tar.gz -C /usr/src/

# cd /usr/src/zend-loader-php5.5-linux-x86_64/

# cp ZendGuardLoader.so /usr/local/php5/

# vim /usr/local/php5/php.ini //加入优化模块 [PHP]中

zend_extension=/usr/local/php5/ZendGuardLoader.so

zend_loader.enable=1

6.httpd.conf配置调整

# vim /usr/local/httpd/conf/httpd.conf

找到如下项,大概在159行左右,在此项下一行添加如下二行内容:

LoadModule php5_module        modules/libphp5.so

AddType application/x-httpd-php .php //此行为添加项

LoadModule rewrite_module modules/mod_rewrite.so //此行为添加项

找到如下项,大概在261行左右,在末尾加上"index.php",效果如下图

    DirectoryIndex index.html index.php //index.php为后添加

# systemctl restart httpd

2.2.2测试LAMP环境是否可用

1.设置php网页进行测试

# vim /usr/local/httpd/htdocs/test.php

添加如下内容:

<?php

phpinfo( );

?>

用于显示服务器PHP环境信息的网页

客户机进行访问测试:http://192.168.1.10/test.php

2.测试PHP是否能够访问Mysql数据库

# vim /usr/local/httpd/htdocs/test1.php //新建mysql连接网页

以下为php5.3推荐的写法,在5.5中被遗弃,因此在5.5中写以下内容后,虽然能够连接成功,但是会提示"不建议用mysql 而是用mysqli",因此5.5版本的php用第二部分的网页内容,主要是将MySQL改为了MySQLi

5.3适用网页内容:

<?php

$link=mysql_connect('localhost','root','123456'); //设置登录信息,连接mysql

if($link) echo "恭喜你,数据库连接成功!"; //连接成功后返回的结果

mysql_close(); //关闭连接

?>

5.5适用网页内容:

<?php

$link=mysqli_connect('localhost','root','123456');

if($link) echo "恭喜你,数据库连接成功!";

mysqli_close($link);

?>

# mysqladmin -u root -p password //设置mysql密码为 123456

Enter password: //默认密码为空 ,回车即可

New password:

Confirm new password:

客户机进行访问测试:http://192.168.1.10/test1.php

三、LAMP架构应用实例

phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径,尤其要处理大量资料的汇入及汇出更为方便。其中一个更大的优势在于由于phpMyAdmin跟其他PHP程式一样在网页服务器上执行,但是您可以在任何地方使用这些程序产生的HTML页面,也就是远端管理MySQL数据库,方便的建立、修改、删除数据库及资料表。也可借由phpMyAdmin建立常用的php语法,方便编写网页时所需要的sql语法正确性。

1.部署phpMyAdmin系统

1.解包并移动至网页根目录

# tar zxf phpMyAdmin-4.7.2-all-languages.tar.gz -C /usr/local/httpd/htdocs/

# cd /usr/local/httpd/htdocs

# mv phpMyAdmin-4.7.2-all-languages/ phpMyAdmin

生成配置文件

# cd phpMyAdmin/

# cp config.sample.inc.php config.inc.php

浏览器访问

http://192.168.1.10/phpMyAdmin/

用户名密码均为mysql系统中的授权信息,如root 123456

出现的问题:

1.在配置php时,如出现"Sorry, I cannot run apxs. Possible reasons follow:"

解决方案:

# vim /usr/local/httpd/bin/apxs

#! /usr/bin/perl -w //将第一行修改为此内容

2.phpmyadmin在web界面进行登录无反应,解决方案:修改系统时间为当前时间即可修改

部署其他应用:

部署skyuc

# yum install -y unzip

# unzip SKYUC.v3.4.2.SOURCE.zip

# cp -rf SKYUC.v3.4.2.SOURCE/wwwroot/ /usr/local/httpd/htdocs/skyuc/

# cd /usr/local/httpd/htdocs/skyuc/

# chown -R daemon:daemon admincp/ data/ templates/ upload/

[root@pillarx1d ~]# mysql -u root -p

mysql> create database skyucdb;

mysql> grant all on skyucdb.* to skyuc@localhost identified by 'Aa123456';

http://192.168.1.10/skyuc

点击"立即安装"时报错:

Deprecated: mysql_escape_string(): This function is deprecated; use mysql_real_escape_string() instead. in /usr/local/httpd/htdocs/skyuc/wwwroot/includes/class_core.php on line 811

 OK

解决方法:

# vim /usr/local/httpd/htdocs/skyuc/wwwroot/includes/class_core.php

找到171行中将"mysql_escape_string"改为:"mysql_real_escape_string"

点击"立即安装"时报错:

Strict Standards: Non-static method Shutdown::init() should not be called statically, assuming $this from incompatible context in /usr/local/httpd/htdocs/skyuc/wwwroot/includes/class_core.php on line 2446

2446行可以禁用

后端连接为:192.168.1.10/skyuc/admincp

部署discuz

[root@pillarx1d ~]# mysql -u root -p

mysql> create database bbsdb;

mysql> grant all on bbsdb.* to bbs@localhost identified by 'Aa123456';

# yum install -y unzip

# unzip Discuz_7.0.0_FULL_SC_UTF8.zip

# cd Discuz_7.0.0_FULL_SC_UTF8

# cp -rf upload/ /usr/local/httpd/htdocs/bbs

# cd /usr/local/httpd/htdocs/bbs/

# chown -R daemon config.inc.php attachments/ forumdata/ uc_client/data/cache/ templates/ uc_server

网页访问安装页面:

192.168.1.10/bbs/install

http://192.168.1.10/bbs/admincp.php //后台

http://192.168.1.10/bbs/index.php //首页

根据报错进行修改:

# vim /usr/local/php5/php.ini

short_open_tag = On //将off修改为on

# /etc/init.d/httpd restart

安装海洋cms影视:

解压并移动到网页根目录即可

基于虚拟主机的应用搭建:

# yum install -y bind

# mv /etc/named.conf /etc/named.conf.bak

# vim /etc/named.conf

options {

        directory       "/var/named";

};

zone "myadmin.com" IN {

        type master;

        file "myadmin.com.zone";

};

zone "skyuc.com" IN {

        type master;

        file "skyuc.com.zone";

zone "bbs.com" IN {

        type master;

        file "bbs.com.zone";

};

# vim /var/named/myadmin.com.zone

$TTL 600

@       IN      SOA     myadmin.com.      admin.myadmin.com.(

                        20170405

                        1d

                        5d

                        2D

                        6h

)

@       IN      NS      ns1.myadmin.com.

ns1     IN      A       192.168.1.10

www     IN      A       192.168.1.10

# vim /var/named/skyuc.com.zone

$TTL 600

@       IN      SOA     skyuc.com.      admin.skyuc.com.(

                        20170405

                        1d

                        5d

                        2D

                        6h

)

@       IN      NS      ns1.skyuc.com.

ns1     IN      A       192.168.1.10

www     IN      A       192.168.1.10

# vim /var/named/bbs.com.zone

$TTL 600

@       IN      SOA     bbs.com.      admin.bbs.com.(

                        20170405

                        1d

                        5d

                        2D

                        6h

)

@       IN      NS      ns1.bbs.com.

ns1     IN      A       192.168.1.10

www     IN      A       192.168.1.10

# systemctl restart named

客户端DNS服务器指定该服务器IP。然后通过nslookup分别解析三个域名 查看是否能够解析。

# mv /usr/local/httpd/conf/extra/httpd-vhosts.conf /usr/local/httpd/conf/extra/httpd-vhosts.conf.bak

# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf

NameVirtualHost 192.168.1.10:80

<Directory "/usr/local/httpd/htdocs/">

        Order allow,deny

        Allow from all

</Directory>

<VirtualHost 192.168.1.10:80>

    DocumentRoot "/usr/local/httpd/htdocs/phpMyAdmin"

    ServerName www.myadmin.com

    ErrorLog "logs/myadmin.log/www.myadmin.com.error.log"

    CustomLog "logs/myadmin.log/www.myadmin.com.custom.log" common

</VirtualHost>

<VirtualHost 192.168.1.10:80>

    DocumentRoot "/usr/local/httpd/htdocs/skyuc/wwwroot"

    ServerName www.skyuc.com

    ErrorLog "logs/skyuc.log/www.skyuc.com.error_log"

    CustomLog "logs/skyuc.log/www.skyuc.com.access_log" common

</VirtualHost>

<VirtualHost 192.168.1.10:80>

    DocumentRoot "/usr/local/httpd/htdocs/bbs"

    ServerName www.bbs.com

    ErrorLog "logs/bbs.log/www.bbs.com.error_log"

    CustomLog "logs/bbs.log/www.bbs.com.access_log" common

</VirtualHost>

# cd /usr/local/httpd/logs/

# mkdir myadmin.log skyuc.log bbs.log

进入主配置文件,声明虚拟主机配置信息位置:

# vim /usr/local/httpd/conf/httpd.conf

Include conf/extra/httpd-vhosts.conf

# systemctl restart httpd

  • 总结

Apache/MySQL/PHP各自有什么作用?

我们可以将LAMP架构理解为饭店,家饭店很特别,前台小姐姐灰常漂亮,服务生和厨师很丑,丑到不能见人的那种(自行脑补哈),所以你去饭店就只能看见前台小姐姐。

1. 聊聊Apache(httpd)

· 像极了前台

· 作用:提供web服务,接受用户的连接请求!

注意:Apache或Nginx都只支持静态页面的解析

 


当客户端请求的是静态资源时,web服务(httpd程序)会直接返回静态资源给客户端

(1)静态网页

· 静态网页指使用HTML(超文本标记语言)编写,一般后缀为.htm、.html等;网页文件中没有程序代码

· 静态网页,用户双击打开,看到的效果与web服务器是相同的,因为网页的内容在用户访问之前,就已经确定

(2)动态网页

· 动态网页指网站使用特定的编程语言编写,网页文件中除了HTML标记以外,还包括一些实现特定功能的程序代码

· 服务器端可以根据客户端的不同请求动态产生网页内容

· 动态网页后缀一般为.php、.asp、.aspx、cgi、.perl、.jsp等

· 常见的留言板、论坛、注册、发帖都是用动态网页实现的

(3)疑问总结

1)什么是web服务?

答:提供网页浏览功能的网站服务。

即安装了web服务软件如,httpd/nginx等软件,并启动。客户通过浏览器可以访问网站。

2)什么是Web服务器?

答:简单来理解就是安装web服务软件,并能提供Web服务的机器。

3)Web一般是分为客户端与服务器端,两者是如何交互的呢?

答:通过HTTP协议http://www.itheima.com

4)Apache(httpd)的作用和特点?

答:Apache用于接受用户连接请求;只负责静态页面的解析。

2. 聊聊PHP

· 像极了服务生

· 作用:PHP主要负责PHP脚本程序的解析以及实现与MySQL数据库的交互工作,我们项目中的注册/登录/下单/支付等大多数功能都是基于PHP+MySQL进行实现。PHP是一种通用开源脚本语言。

 


(1)当客户端请求的是动态资源时,Apache(httpd程序)会调用libphpX.so模块进行相应的解析。

(2)如果解析处理需要用到后台数据库相关数据,此时php程序也会连接后台数据库。

(3) 最终php程序将解析后的结果返回给Apache(httpd程序),让Apache返回给客户端。

3. 聊聊MySQL

· 像极了大厨

· 作用:MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle旗下产品。其主要作用用于永久的存储数据。

Apache/MySQL/PHP各自有什么作用?

我们可以将LAMP架构理解为饭店,家饭店很特别,前台小姐姐灰常漂亮,服务生和厨师很丑,丑到不能见人的那种(自行脑补哈),所以你去饭店就只能看见前台小姐姐。

LAMP架构是什么?

· 像极了饭店


(1) Apache像极了饭店前台,专门用来接受客户请求,并做一些静态页面处理(只买酒水饮料)。

(2) PHP像极了服务生,他专门用来解析处理由前台不能处理的”订单”,如用户想吃一碗意大利面,服务生就需要和后厨沟通,并做相应的安排处理.然后将处理后的结果返回给前台,由前台再给用户,因为服务生太丑了,见不得人。

(3) MySQL像极了后厨,专门用来存放食材,并且只能由中间的服务生和后厨沟通,来获取什么食材。

· 专业解释如下

(1) 客户端发送请求连接web服务器的80端口,由Apache相应并处理用户的静态请求。

(2) 如果客户端请求的是动态资源,由Apache加载调用libphpX.so模块(安装php程序带来)进行解析处理。

(3) 如果处理需要和后台数据库沟通,那么由php程序去完成。

(4) Php程序将处理完后的结果再返回给Apache,由Apache返回给客户端。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值