黄金架构LAMP

image.png
image.png

什么是LAMP

LAMP是公认的最常见、最古老的黄金Web技术栈、
其实就是

  1. Linux 操作系统
  2. Apache/Nginx web服务器
  3. Mysql/Mariadb
  4. Perl/Php/Python

image.png

Linux

image.png
Linux到底好在哪?用Linus本人的话说就是,普通老百姓用户,压根别说你是在使用操作系统,你需要的只是应用程序,而不是操作系统。
操作系统主要是提供给程序员API,用于构建和运行应用的一个平台。
如果来说,你常用的应用在Linux下运行的更好,更方便,那没问题。
但是如果你平时用的软件,都和Linux没什么关系,那你没必要选择Linux。
那当然作为运维人员,你可以一手使用windows、一手使用Linux,毕竟你的服务器运维工作,几乎都是Linux环境了。
Linux系统主要是以开发者为中心,Windows主要以消费者为中心这是本质的区别。
Linux的特点是几乎所有的开发任务相关工具,都有很完善的支持,从底层的编译器,make编译工具,到bash脚本,git代码管理,vim编辑器,依赖管理工具等等都很齐全。
然而Windows/Mac的操作系统很少能完善这些开发工具的,Linux则是默认预装的开发环境。
WIndows几乎都是图形化接口,而Linux几乎都是现有命令行,再由图形化操作接口,更容易实现自动化。
简单来说

Apache

Apache Web Server虽然称之为web服务器,但是不是意味着他是一个物理服务器,它只是电脑软件中的一个软件而已,Web服务器的作用是将HTTP请求从前端转发到后端应用上。
image.png
web服务器功能,对用户静态请求进行解析、分发,把磁盘的数据读出来。
apache 高度模块化的服务器 支持多虚拟主机功能

PHP

PHP是一门服务端脚本编程语言,主要用于web开发,常用PHP脚本嵌入HTML源码中执行。
PHP是全球知名的编程语言之一,程序员可以免费试用,PHP支持多种操作系统,开发效率高,支持多种数据库操作。
国内众多网站,百度、雅虎、新浪都在大量使用PHP语言进行开发,知名的论坛软件Discuz也是由PHP开发且占据了80%的论坛软件市场。
image.png

MySQL

image.png
Mysql是一款数据库管理系统,也就是一个存储数据的工具,用户可以自行对数据库进行增加、删除、修改、查询等操作。
MySQL是数据库管理系统中的一款软件,被业界广泛使用,例如新浪、QQ、淘宝、都在大量使用MySQL数据库。
腾讯QQ使用Linux与MySQL数据库,存储注册用户2.8亿的信息,活跃人数9000万,凭借万台服务器搭建的数据库集群,腾讯QQ同时在线人数也达到了千万,这证明了MySQL数据库的大容量、快速响应特点。
MySQL是一款关系型数据库,尤其适合Web应用,特别是电商领域,MySQL遍布各种行业、移动、爱立信、惠普、银行、思科、摩托萝拉、等等。

LAMP架构

LAMP(Linux-Apache-MySQL-PHP)网站架构是目前国际流行的Web框架,该框架包括:Linux操作系统,Apache网络服务器,MySQL数据库,Perl、PHP或者Python编程语言,所有组成产品均是开源软件,是国际上成熟的架构框架,很多流行的商业应用都是采取这个架构,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程序。
【流程解析】
image.png
1.用户通过浏览器发送http请求,到达web服务器(apache或nginx)
2.web服务器解析用户请求信息,明确他到底要什么,如果是静态资源请求,直接通过linux内核读取硬盘上的数据,然后构建响应报文,给与用户。如果是动态资源请求,则转发请求给应用服务器(php,python),由php解析动态请求,解析完毕后,返回给apache,发给用户
3.如果涉及数据库操作,利用php-mysql驱动,获取数据库数据,再返回给php,最终给与用户
image.png

搭建LAMP

部署linux系统环境

注意关闭防火墙、selinux

  1. [root@chaogelinux ~]# iptables -F
  2. [root@chaogelinux ~]# systemctl stop firewalld
  3. [root@chaogelinux ~]# systemctl disable firewalld
  4. [root@chaogelinux ~]# getenforce
  5. Disabled

安装apache

  1. yum install httpd -y

检查是否启动了某个端口

  1. netstat -tunlp | grep 80

部署apache

  1. # 启动
  2. [root@chaogelinux ~]# systemctl start httpd
  3. # 查看状态
  4. [root@chaogelinux ~]# systemctl status httpd
  5. # 开机自动启动
  6. [root@chaogelinux ~]# systemctl enable httpd
  7. # 不让他开机自动启动
  8. [root@chaogelinux ~]# systemctl disable httpd

配置apache

  1. 1.检查apache安装了那些文件,通过yum安装的软件,如何检查其安装信息
  2. rpm -ql httpd | grep ".conf"
  3. 2.apache主配置文件,在/etc/httpd目录
  4. /etc/httpd/conf/httpd.conf # 主配置文件绝对路径
  5. 3.查看著配置文件中的信息(排除空白+注释行)
  6. [root@localhost conf]# grep -Ev "^[ #]|^$" /etc/httpd/conf/httpd.conf
  7. ServerRoot "/etc/httpd" # httpd主配置目录定义
  8. Listen 80 # 定义apache运行的端口
  9. Include conf.modules.d/*.conf # 通过include语法,把其他目录中的配置文件包含进来,实现配置文件简洁化。
  10. User apache # 定义apache运行的用户名
  11. Group apache # 定义httpd服务运行的用户组
  12. ServerAdmin root@localhost # 定义主机名
  13. # 当用户访问网站的根目录,返回某些资源
  14. <Directory />
  15. </Directory>
  16. DocumentRoot "/var/www/html" # 定义httpd的网页根目录
  17. <Directory "/var/www">
  18. </Directory>
  19. <Directory "/var/www/html">
  20. </Directory>
  21. <IfModule dir_module>
  22. </IfModule>
  23. <Files ".ht*">
  24. </Files>
  25. ErrorLog "logs/error_log"
  26. LogLevel warn
  27. <IfModule log_config_module>
  28. </IfModule>
  29. <IfModule alias_module>
  30. </IfModule>
  31. <Directory "/var/www/cgi-bin">
  32. </Directory>
  33. <IfModule mime_module>
  34. </IfModule>
  35. AddDefaultCharset UTF-8
  36. <IfModule mime_magic_module>
  37. </IfModule>
  38. EnableSendfile on
  39. IncludeOptional conf.d/*.conf

image.png

部署mysql(mariadb)

  1. [root@chaogelinux ~]# yum install mariadb-server mariadb
  2. [root@chaogelinux ~]# systemctl start mariadb

检查mariadb的数据文件夹,存在mysql.sock文件,表示启动了,以及属主、属组权限

  1. [root@chaogelinux ~]# ls -l /var/lib/mysql/
  2. 总用量 28700
  3. -rw-rw----. 1 mysql mysql 16384 2 3 17:37 aria_log.00000001
  4. -rw-rw----. 1 mysql mysql 52 2 3 17:37 aria_log_control
  5. -rw-rw----. 1 mysql mysql 18874368 2 3 17:37 ibdata1
  6. -rw-rw----. 1 mysql mysql 5242880 2 3 17:37 ib_logfile0
  7. -rw-rw----. 1 mysql mysql 5242880 2 3 17:34 ib_logfile1
  8. drwx------. 2 mysql mysql 4096 2 3 17:34 mysql
  9. srwxrwxrwx. 1 mysql mysql 0 2 3 17:37 mysql.sock
  10. drwx------. 2 mysql mysql 4096 2 3 17:34 performance_schema
  11. drwx------. 2 mysql mysql 6 2 3 17:34 test

登录mariadb数据库

  1. [root@chaogelinux ~]# mysql -uroot -p
  2. Enter password:
  3. Welcome to the MariaDB monitor. Commands end with ; or \g.
  4. Your MariaDB connection id is 2
  5. Server version: 5.5.64-MariaDB MariaDB Server
  6. Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
  7. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  8. MariaDB [(none)]>

设置mariadb用户root的登录密码

  1. [root@chaogelinux ~]# mysqladmin -uroot password "chaoge666"
  2. 再次登录必须输入正确密码
  3. [root@chaogelinux ~]# mysql -uroot -pchaoge666

部署php

  1. 1.解决php安装的依赖开发环境
  2. yum install -y zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel libtool-ltdl-devel pcre pcre-devel apr apr-devel zlib-devel gcc make -y
  3. 2.安装php,以及php连接mysql数据库的驱动
  4. [root@chaogelinux ~]# yum install php php-fpm php-mysql -y
  5. 3.php不需要额外修改,但是需要修改apache配置文件,支持php
  6. [root@chaogelinux ~]# cat /etc/httpd/conf/httpd.conf #添加如下相关配置
  7. DocumentRoot "/www"
  8. TypesConfig /etc/mime.types
  9. AddType application/x-httpd-php .php
  10. AddType application/x-httpd-php-source .phps
  11. DirectoryIndex index.php index.html
  12. 4.修改首页文件内容
  13. [root@chaogelinux ~]# cat /www/index.php
  14. <meta charset=utf8>
  15. 我是新的首页,你好兄弟们
  16. <?php
  17. phpinfo();
  18. ?>
  19. 5.启动php进程
  20. systemctl start php-fpm

image.png
看到如上页面,说明apache已成功支持php扩展了

测试php连接mysql

  1. 1.添加php脚本
  2. [root@chaogelinux www]# cat /www/chaoge.php
  3. <?php
  4. $conn = mysql_connect('localhost','root','chaoge666');
  5. if ($conn)
  6. echo "php已成功连接mysql,你真棒";
  7. else
  8. echo "你咋回事,这都搞不定,细心检查下吧";
  9. mysql_close();
  10. ?>

访问php脚本文件,测试是否能够连接mysql数据库
image.png
若是关闭了数据库,或者出现其他配置错误问题,则会显示如下页面

  1. [root@chaogelinux www]# systemctl stop mariadb

image.png

基于LAMP搭建论坛

Crossday Discuz! Board是一套通用的社区论坛软件系统,用户可以在不需要任何编程的基础上,通过简单的设置和安装,搭建起具备完善功能、很强负载能力和可高度定制的论坛服务。
Discuz! 的基础架构采用世界上最流行的web编程组合PHP+MYSQL实现,是一个经过完善设计,适用于各种服务器环境的高效论坛系统解决方案。
image.png

  1. 1.下载discuz源码包
  2. wget http://download.comsenz.com/DiscuzX/3.2/Discuz_X3.2_SC_UTF8.zip
  3. 2.安装解压缩命令,解压缩源代码
  4. yum install unzip -y
  5. [root@chaogelinux www]# unzip Discuz_X3.2_SC_UTF8.zip
  6. 3.吧解压出的upload文件,拷贝到apache的根目录下
  7. [root@chaogelinux www]# mv upload/* .
  8. mv:是否覆盖"./index.php"? y
  9. 4.给与最高权限,便于实验
  10. [root@chaogelinux www]# chmod -R 777 /www/*

访问apache首页,查看是否进入论坛安装界面

  1. http://192.168.178.252/install/

image.png
image.png
image.png
image.png
image.png
此时我们基于lamp搭建的个人论坛就好了
image.png
大功告成,后续就是针对discuz论坛的额外学习了。
我们会针对更先进的LNMP做进一步的学习