LAMP架构详解+构建LAMP平台之Discuz论坛
- 1、LAPM架构简介
- 1.1动态资源与语言
- 1.2LAPM架构得组成
- 1.3LAPM架构说明
- 1.4CGI和astcgi
- 1.4.1CGI
- 1.4.2fastcgi
- 1.4.3CGI和fastcgi比较
- 2、搭建LAMP平台
- 2.1编译安装apache httpd
- 2.2编译安装mysql
- 2.3编译安装php
- 2.4安装论坛
1、LAPM架构简介
1.1动态资源与语言
WEB资源类型:
- 静态资源:原始形式与响应内容一致,在客户端浏览器执行
- 动态资源:原始形式通常为程序文件,需要在服务器端执行之后,将执行结果返回给客户端
注意:静态和动态的区别,不在于网页是否能动态变化,而在于服务端的页面文件和客户端得到页面文件是否一致
范例:静态资源
vim test.html
#客户端主机现在的时间:
<script type="text/javascript">
document.write(new Date());
</script>
1.2LAPM架构得组成
- L:linux
- A:apache (httpd)
- M:mysql, mariadb
- P:php, perl, python
1.3LAPM架构说明
工作过程:
1、当客户端请求的是静态资源时,web服务器会直接把静态资源返回给客户端
2、当客户端请求的是动态资源时,http的php模块会进行相应的动态资源运算,如果此过程还需要数据的数据作为运算参数时,php会连接mysql取得数据然后进行运算,运算结果转为静态资源由web服务器返回到客户端。
apache主要实现如下功能:
- 第一:处理http的请求、构建响应报文等自身服务;
- 第二:配置让Apache支持PHP程序的响应(通过PHP模块或FPM);
- 第三:配置Apache具体处理php程序的方法,如通过反向代理将php程序交给fcgi处理。
mysql 主要实现如下功能:
- 第一:提供PHP程序对数据的存储;
- 第二:提供PHP程序对数据的读取(通常情况下从性能的角度考虑,尽量实现数据库的读写分离)。
php主要实现如下功能:
- 第一:提供apache的访问接口,即CGI或Fast CGI(FPM);
- 第二:提供PHP程序的解释器;
- 第三:提供mysql数据库的连接函数的基本环境。
1.4CGI和astcgi
1.4.1CGI
CGI 可以让一个客户端,从网页浏览器通过http服务器向执行在网络服务器上的程序传输数据;CGI描述了客户端和服务器程序之间传输的一种标准
请求流程:
Client – (http协议) --> httpd – (cgi协议) --> application server (program file) – (mysql协议) --> mysql
1.4.2fastcgi
fastcgi的方式是,web服务器收到一个请求时,不会重新fork一个进程(因为这个进程在web服务器启动时就开启了,而且不会退出),web服务器直接把内容传递给这个进程(进程间通信,但fastcgi使用了别的方式,tcp方式通信),这个进程收到请求后进行处理,把结果返回给web服务器,最后自己接着等待下一个请求的到来,而不是退出
请求流程:
Client – (http协议) --> httpd – (fastcgi协议) --> fastcgi服务器 – (mysql协议) --> mysql
1.4.3CGI和fastcgi比较
CGI: 兼职, 一次性的过河拆桥式的服务
FASTCGI: 专职,全周期的持续式的服务
2、搭建LAMP平台
2.1编译安装apache httpd
关闭防火墙
systemctl disable --now firewalld #开机自动关闭防火墙
setenforce 0
安装环境依赖包
yum -y install gcc gcc-c++ make pcre-devel expat-devel perl pcre //安装依赖环境包
拷贝软件包
[root@localhost /]# cd data
[root@localhost data]#
[root@localhost data]#
[root@localhost data]#
[root@localhost data]# rz -E
rz waiting to receive.
[root@localhost data]# ls
apr-1.6.2.tar.gz apr-util-1.6.0.tar.gz httpd-2.4.29.tar.bz2
[root@localhost data]#
解压软件包
[root@localhost data]# tar xf apr-1.6.2.tar.gz
[root@localhost data]# tar xf apr-util-1.6.0.tar.gz
[root@localhost data]# tar xf httpd-2.4.29.tar.bz2
[root@localhost data]#
[root@localhost data]# ls
apr-1.6.2 apr-util-1.6.0 httpd-2.4.29
apr-1.6.2.tar.gz apr-util-1.6.0.tar.gz httpd-2.4.29.tar.bz2
[root@localhost data]#
移动apr包 apr-util包到安装目录中,并切换到 httpd-2.4.29目录中
[root@localhost data]# mv apr-1.6.2 httpd-2.4.29/srclib/apr
[root@localhost data]#
[root@localhost data]# mv apr-util-1.6.0 httpd-2.4.29/srclib/apr-util
[root@localhost data]#
[root@localhost data]# ls
apr-1.6.2.tar.gz apr-util-1.6.0.tar.gz httpd-2.4.29 httpd-2.4.29.tar.bz2
[root@localhost data]#
[root@localhost data]#
[root@localhost data]#
[root@localhost data]# cd httpd-2.4.29
[root@localhost httpd-2.4.29]#
编译安装
./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
make -j2&&make install
cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
//将文件拷入/etc/init.d/httpd
ln -s /usr/local/httpd/conf/httpd.conf /etc/
//建立配置文件软连接放入etc目录下
ln -s /usr/local/httpd/bin/* /usr/local/bin/
//将启动文件放入/usr/local/bin/目录下可以直接使用
添加httpd系统服务
vim /etc/init.d/httpd //进入配置文件
在开头行加入
# chkconfig: 35 85 21 //35级别自动运行 第85个启动 第21个关闭
chkconfig --add httpd //将httpd加入service管理器
vim /usr/local/httpd/conf/httpd.conf //#修改主机地址
service httpd start //启动httpd服务
在浏览器输入ip地址,发现http启动成功
2.2编译安装mysql
解压安装包
[root@localhost httpd-2.4.29]# cd /data
[root@localhost data]#
[root@localhost data]#
[root@localhost data]# ls
apr-1.6.2.tar.gz apr-util-1.6.0.tar.gz httpd-2.4.29 httpd-2.4.29.tar.bz2
[root@localhost data]#
[root@localhost data]#
[root@localhost data]# rz -E
rz waiting to receive.
[root@localhost data]# ls
apr-1.6.2.tar.gz httpd-2.4.29 mysql-boost-5.7.20.tar.gz
apr-util-1.6.0.tar.gz httpd-2.4.29.tar.bz2
[root@localhost data]#
[root@localhost data]# tar xf mysql-boost-5.7.20.tar.gz
[root@localhost data]# ls
apr-1.6.2.tar.gz httpd-2.4.29 mysql-5.7.20
apr-util-1.6.0.tar.gz httpd-2.4.29.tar.bz2 mysql-boost-5.7.20.tar.gz
[root@localhost data]#
[root@localhost data]#
安装依赖包
yum install -y ncurses-devel autoconf cmake
[root@localhost data]# cd mysql-5.7.20/
[root@localhost mysql-5.7.20]#
[root@localhost mysql-5.7.20]# ls
boost dbug libmysql rapid testclients
BUILD Docs libmysqld README unittest
client Doxyfile-perfschema libservices regex VERSION
cmake extra man scripts vio
CMakeLists.txt include mysql-test sql win
cmd-line-utils INSTALL mysys sql-common zlib
config.h.cmake libbinlogevents mysys_ssl storage
configure.cmake libbinlogstandalone packaging strings
COPYING libevent plugin support-files
[root@localhost mysql-5.7.20]#
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=boost \
-DWITH_SYSTEMD=1
//配置编译选项
make -j2 && make install
[root@localhost mysql-5.7.20]# useradd -s /sbin/nologin mysql
[root@localhost mysql-5.7.20]#
[root@localhost mysql-5.7.20]#
[root@localhost mysql-5.7.20]# chown -R mysql:mysql /usr/local/mysql/
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 = 1sql_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
chown mysql:mysql /etc/my.cnf
[root@localhost mysql-5.7.20]# echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile //加入PATH中,使其可以补全
[root@localhost mysql-5.7.20]# echo 'export PATH' >> /etc/profile //声明这个变量为全局变量
[root@localhost mysql-5.7.20]# cd /usr/local/mysql/
[root@localhost mysql]#
[root@localhost mysql]#
[root@localhost mysql]# bin/mysqld \
> --initialize-insecure \
> --user=mysql \
> --basedir=/usr/local/mysql \
> --datadir=/usr/local/mysql/data
[root@localhost mysql]# cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
[root@localhost mysql]#
[root@localhost mysql]# systemctl daemon-reload
[root@localhost mysql]#
[root@localhost mysql]#
[root@localhost mysql]# systemctl start mysqld.service
[root@localhost mysql]#
[root@localhost mysql]# netstat -anpt | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 77743/mysqld
mysqladmin -u root -p password "abc123" //刚开始没密码是空的直接回车,然后输入密码abc123,在此确认abc123,这是在root账户下运行的
quit; //退出
2.3编译安装php
安装依赖环境
yum -y install \
gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel
配置软件模块
cd /data
tar xf php-7.1.10.tar.bz2
cd /opt/php-7.1.10/./configure \
--prefix=/usr/local/php7 \
--with-apxs2=/usr/local/httpd/bin/apxs \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-config-file-path=/usr/local/php7 \
--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 -j2 && make install //编译与安装
cp /data/php-7.1.10/php.ini-development /usr/local/php7/php.ini
//复制模版文件作为PHP 的主配置文件,并进行修改
vim /usr/local/php7/php.ini
mysqli.default_socket = /usr/local/mysql/mysql.sock --1170行--修改 1170 G,大写的G,直接跳转
date.timezone = Asia/Shanghai --939行
ln -s /usr/local/php7/bin/* /usr/local/bin/
把PHP 的可执行程序文件放入路径环境变量的目录中便于系统识别
php -m //查看PHP 加载了哪些模块
vim /etc/httpd.conf //修改httpd 服务的配置文件,让apache支持PHP
AddType application/x-httpd-php .php --393行--插入以下内容(插在下面,原行不删)
AddType application/x-httpd-php-source .phps ##这里的点前面空格一定要加,否则报错
DirectoryIndex index.html index.php --255行--修改首页文件名设置
验证PHP 测试页
vim /usr/local/httpd/htdocs/index.php //进入配置文件
添加
<?php
phpinfo();
?>
systemctl restart httpd
2.4安装论坛
[root@localhost data]# mysql -u root -p
Enter password:
mysql> CREATE DATABASE bbs; //创建一个数据库//mysql> GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123'; //把bbs数据库里面所有表的权限授予给bbsuser,并设置密码//
show databases;//查看是否创建成功
select user,host from mysql.user;
unzip /opt/Discuz_X3.4_SC_UTF8.zip
cp -r upload/ /usr/local/httpd/htdocs/bbscd /usr/local/httpd/htdocs/bbschown -R daemon ./config
chown -R daemon ./data
chown -R daemon ./uc_client
chown -R daemon ./uc_server/data
在浏览器输入192.168.190.254/bbs