文章

LAMP 架构介绍及环境搭建

LAMP动态网站架构

LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。

1、LAMP分别代表什么?

  • L代表服务器操作系统使用Linux
  • A代表网站服务使用的是Apache软件基金会中的httpd软件
  • M代表网站后台使用的数据库是MySQL数据库
  • P代表网站是使用PHP/Perl/Python等语言开发
    image.png

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

2.1 Apache(httpd)-----像极了饭店前台

  • 作用:提供web服务,接受用户的连接请求
    http
  • 注意:Apache或Nginx都只支持静态页面的解析

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

①静态网页

  • 静态网页指使用HTML(超文本标记语言)编写,一般后缀为.htm,.html等;网页文件中没有程序代码。
  • 静态页面,用户双击打开,看到的效果与web服务器是相同的,因为网页的内容在用户访问之前就已经确定。

②动态网页

  • 动态网页指网站使用特定的编程语言编写,网页文件中除了HTML标记以外,还包括一些实现特定功能的程序代码。
  • 服务端可以根据客户端的不同请求动态产生网页内容。
  • 动态网页后缀一般为.php .asp .aspx .cgi .perl .jsp等
  • 常见的留言板,论坛,注册,发帖都是用动态网页实现的。

③小结提问
1)什么是web服务?
答:提供网页浏览功能的服务。
即安装并启用web服务软件如:httpd/nginx等软件。客户端可以通过浏览器访问网站。

2)什么是web服务器?
答:简单来理解就是安装web服务软件,并能够提供web服务的机器。

3)Web一般是分为客户端与服务器端,两者是如何交互的?
答:通过HTTP协议。例如:http://www.hanzz.red

4)Aapche(httpd)能不能解析动态网页?
答:不能,Apache负责静态页面的解析。

2.2 PHP - 像极了服务生

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

1、当客户端请求的是动态资源时,apache(httpd程序)会调用libphpX.so模块进行相应的解析
2、如果解析处理需要用到后台数据库相关数据,此时php程序也会连接后台数据库
3、最终php程序将解析后的结果返回给apache(httpd程序),让apache返回给客户端

2.3 MySQL数据库 - 像极了后厨

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

3、LAMP架构是什么?- 像极了饭店

lamp-example


image.png




LAMP环境部署

任务背景
小韩经过一段时间学习,慢慢了解到公司的一些业务架构,发现好几个项目不是LAMP架构就是Nginx+Tomcat。于是小韩决定,慢慢的吃透这些架构,先学习LAMP架构,再研究Nginx+Tomcat架构。所以,小韩就给自己定一个任务,在自己的虚拟机环境下,构建LAMP环境。由于自己所维护的业务正好是一个电商平台,决定上线一个电商项目。

任务需求

1、任务具体要求

  • 使用yum(dnf)工具一键部署LAMP环境
  • 发布电商项目上线
    • 能够实现web界面注册会员账号
    • 能够实现web界面进行后台商品及会员的管理

2、架构分析

网上商城主要基于PHP+MySQL进行设计。
页面编写语言:PHP语言 -(服务生)负责解析动态页面,同时实现数据库的交互工作
数据库系统:MySQL -(厨师)负责存储数据,并提供用户请求的数据
web服务:Apache(httpd)-(前台)负责与客户端建立连接,使客户端能够访问网页。

3、效果预览

image.png


image.png


image.png

4、项目实施

4.1 环境准备

  • 关闭防火墙和selinux
systemctl stop iptables ebtables firewalld	#关闭三个防火墙

systemctl disable iptables ebtables firewalld	#禁止三个防火墙开机自启动

[root@hzz ~]# getenforce 			#查看selinux状态enforcing为强制模式,需修改为关闭状态disabled
Enforcing

[root@hzz ~]# setenforce 0			#先使用此命令临时修改selinux为宽容状态,此状态不影响服务正常运行
[root@hzz ~]# getenforce 
Permissive

[root@hzz ~]# vi /etc/selinux/config		#修改selinux配置文件将SELINUX=enforcing修改为disabled
vi编辑器按i键进行编辑,编辑完成后按Esc键退出编辑模式,开启大写按ZZ(两个z键)保存
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
  • 配置本地yum仓库
    • 挂载光盘镜像
[root@hzz ~]# lsblk 				#此命令查看磁盘分区,找到sr0光盘镜像
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0   20G  0 disk 
├─sda1          8:1    0    1G  0 part /boot
└─sda2          8:2    0   19G  0 part 
  ├─rhel-root 253:0    0   17G  0 lvm  /
  └─rhel-swap 253:1    0    2G  0 lvm  [SWAP]
sr0            11:0    1  3.8G  0 rom  

[root@hzz ~]# mount /dev/sr0 /mnt/		#将光盘镜像挂载到/mnt目录下,但这是临时挂载重启就失效
mount: /dev/sr0 写保护,将以只读方式挂载

[root@hzz ~]# echo "mount /dev/sr0 /mnt" >> /etc/rc.local #将挂载命令写入开机自动运行的文件内
[root@hzz ~]# ll /etc/rc.local 			#查看执行权限
lrwxrwxrwx. 1 root root 13 2月  10 16:02 /etc/rc.local -> rc.d/rc.local
[root@hzz ~]# ll /etc/rc.d/rc.local 		#查看链接文件源文件的执行权限
-rw-r--r--. 1 root root 493 2月  11 09:53 /etc/rc.d/rc.local
[root@hzz ~]# chmod +x /etc/rc.d/rc.local	#添加执行权限
[root@hzz ~]# ll /etc/rc.d/rc.local
-rwxr-xr-x. 1 root root 493 2月  11 09:53 /etc/rc.d/rc.local

永久挂载完成
  • 配置yum源
[root@hzz ~]# vi /etc/yum.repos.d/hzz.repo	#编写一个yum源的文件,将下面内容复制进去

[hzz]
name=hzz
baseurl=file:///mnt
gpgcheck=0
enabled=1

[root@hzz ~]# yum clean all			#清除yum缓存
此处输出省略

[root@hzz ~]# yum repolist all			#列出yum信息有我们刚创建的本地yum源
已加载插件:product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
hzz                                       | 4.1 kB     00:00     
(1/2): hzz/group_gz                         | 137 kB   00:00     
(2/2): hzz/primary_db                       | 4.0 MB   00:00     
源标识                      源名称                    状态
hzz                         hzz                       启用: 4,986
repolist: 4,986

4.2 安装Apache(httpd)软件

[root@hzz ~]# yum -y install httpd*

4.3 安装PHP相关软件

#该商城系统使用php5.4+
[root@hzz ~]# yum -y install php*

4.4 安装MySQL数据库软件

[root@hzz ~]# yum -y install mariadb*

4.5 启动web和MySQL服务

[root@hzz ~]# systemctl start httpd

[root@hzz ~]# systemctl start mariadb

[root@hzz ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

[root@hzz ~]# systemctl enable mariadb
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.

  • 初始化一下数据库
//初始化一下数据库 每一步我都会给注释
[root@Cloud ~]# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):  #这里直接回车 因为初始数据库没有密码
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y #这里问你要不要设置一个root密码,例如123。这个密码记好 后面要用到的
New password:     #输入新密码
Re-enter new password:     #重复输入
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y  #问你要不要去掉匿名用户 建议选择y去掉
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] n  #要不要禁止root远程登录 我这里没有禁止
 ... skipping.

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y #要不要删除测试用的数据库。这个库没啥用 直接删掉算了
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y #要不要刷新一下授权表。这里y刷新一下 因为改了密码
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB! 
弹出Thanks for using MariaDB之后我们就可以使用了

4.6 测试是否能够解析php页面

[root@hzz ~]# vi /var/www/html/test.php		#编辑一个php文件将下面代码复制进去
<?php
phpinfo();
?>
  • 在浏览器输入http://虚拟机ip地址/test.php。
    phptest.png

4.7 商城项目上线

  • 点击网址下载商城源码,解压源码将源码上传至服务器站点目录

下载地址: http://www.phpshe.com

  • 修改站点目录的所有者和所有组为apache
[root@hzz ~]# chown -R apache.apache /var/www/html/

4.8 安装商城系统

  • 在浏览器输入http://虚拟机或服务IP地址/install
    image.png

  • 配置数据库和管理员账户,管理员账户为自己随意设置
    image.png

  • 安装完成
    image.png

  • 前台后台和前面的效果演示图一样,进入后台输入刚才的管理员用户
    image.png

  • 后台可进行,商品管理,交易管理,用户管理
    image.png

  • 前台可以注册用户
    image.png

image.png

License: