Linux操作技术文档——LAMP平台部署及应用

LAMP平台部署及应用

一、LAMP平台概述

Linux操作系统:作为LAMP架构的基础,提供用于支撑Web站点的操作系统,能够与其他三个组件提供更好的稳定性、兼容性。
Apache网站服务器:作为LAMP架构的前端,是一款功能强大、稳定性好的Web服务器程 序,该服务器直接面向用户提供网站访问,发送网页、图片等文件内容。
MySQL数据库服务器:作为LAMP架构的后端,是一款流行的开源关系数据库系统。在企业网站、业务系统等应用中,各种账户信息、产品信息、客户资料、业务数据等都可以存储到MySQL数据库,其他程序可以通过SQL语句来查询、更改这些信息。
PHP/Perl/Python网页编程语言:作为三种开发动态网页的编程语言,负责解释动态网页文 件,并提供Web应用程序的开发和运行环境。

在构建LAMP平台时,各组件的安装顺序依次为Linux、Apache、MySQL、PHP。其中Apache和 MySQL的安装并没有严格的顺序;而PHP环境的安装一般放到最后,负责沟通Web服务器和数据库系统以协同工作。

二、安装LAMP组件

1、安装Linux操作系统

安装Linux

2、安装Apache网站服务器

软件包:https://download.csdn.net/download/g950904/12504171
1、脚本安装

[root@http ~]# vim httpd.sh
#!/bin/bash
cd /media
yum -y install zlib-*
tar zxf apr-1.5.2.tar.gz -C /usr/src
tar zxf apr-util-1.5.4.tar.gz -C /usr/src
tar zxf pcre-8.39.tar.gz -C /usr/src
tar zxf openssl-1.0.1u.tar.gz -C /usr/src
tar zxf httpd-2.4.25.tar.gz -C /usr/src

cd /usr/src
cd apr-1.5.2
./configure --prefix=/usr/local/apr && make && make install

cd ..
cd apr-util-1.5.4
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install

cd ..
cd pcre-8.39
./configure --prefix=/usr/local/pcre && make && make install

cd ..
cd openssl-1.0.1u
./config -fPIC --prefix=/usr/local/openssl enable-shared && make && make install

cd ..
cd httpd-2.4.25
./configure --prefix=/usr/local/httpd --enable-so --enable-cgi --enable-cgid --enable-ssl --with-ssl=/usr/local/openssl --enable-rewrite --with-pcre=/usr/local/pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mods-shared=most --enable-mpms-shared=all --with-mpm=event --enable-proxy --enable-proxy-fcgi --enable-expires --enable-deflate && make && make install
ln -s /usr/local/httpd/bin/* /usr/local/bin
[root@http install]# sh httpd.sh
模块 说明
–enable-so 支持动态共享模块(即打开 DSO 支持)
–enable-rewrite 支持 url 重写
–enable-ssl 支持 ssl
–with-ssl=/usr/local/openssl 指定 ssl 安装位置
–enable-cgi 启用 cgi
–enable-cgid MPM 使用的是 event 或 worker 要启用 cgid
–enable-modules=most 指明要静态编译到 httpd 二进制文件的模块,all 或者 most,all 表示包含所有模块,most 表示包含大部分常用模块
–enable-mods-shared=most 指明要以 DSO 方式编译的模块
–enable-mpms-shared=all 启用 MPM 所有支持的模式
–with-mpm=event 指定启用的 mpm 模式,默认使用 enevt 模式
–with-pcre=/usr/local/pcre 支持 pcre
–with-z=/usr/local/zlib 使用 zlib 压缩库
–with-apr=/usr/local/apr 指定 apr 的安装路径
–with-apr-util=/usr/local/apr-util 指定 apr-util 的安装路径
–enable-expires 激活彧通过配置文件控制 HTTP 的“Expires:”和“Cache-Control:”头内容
–enable-deflate 提供对内容的压缩传输编码支持,一般是 html、js、css 等内容的站点

2、优化链接

[root@http ~]# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
[root@http ~]# vim /etc/init.d/httpd
#!/bin/sh
#声明服务启动级别,开机启动顺序,关机关闭顺序
# chkconfig: 35 85 15
#服务声明,简要信息
# description: apache 2.4.25
......
[root@http ~]# chkconfig --add httpd                 //添加httpd到系统服务
[root@http ~]# chkconfig httpd on                 //设置服务开机自启(等同于:systemctl enable httpd)
[root@http ~]# systemctl start httpd                 //开启服务(等同于:service httpd start)

3、安装MySQL数据库服务器

[root@mysql ~]# vim mysql.sh       //cmask版本选择为3.15.6
#!/bin/bash
#由于没有下载mysql源码包,所以提前准备好
echo '正在下载资源包...'
yum -y install ncurses-devel gcc gcc-c++ 

read -p '你想要的Cmake版本:' VER
wget https://github.com/Kitware/CMake/releases/download/v$VER/cmake-$VER.tar.gz
tar zxf cmake-$VER.tar.gz -C /usr/src
cd /usr/src/cmake-$VER
echo '正在编译安装...'
./configure &> /dev/null
gmake && gmake install &> /dev/null

groupadd mysql
useradd -M -s /sbin/nologin mysql -g mysql

tar zxf /media/mysql-5.6.36.tar.gz -C /usr/src
cd /usr/src/mysql-5.6.36
echo '预编译中...'
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all &> /dev/null
echo  '正在编译安装...'
make -j8 && make install -j8 &> /dev/null

echo  '对数据库目录进行授权:'
chown -R mysql:mysql /usr/local/mysql
echo  '建立配置文件:'
rm -rf /etc/my.cnf
cp support-files/my-default.cnf /etc/my.cnf
echo '安装Perl模块...'
yum -y install perl-Data-Dumper &> /dev/null
echo '初始化数据库...'
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/
echo '设置环境变量:'
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
. /etc/profile
#mysql 的启动和关闭:
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
/etc/init.d/mysqld start

echo  '创建软连接,优化路径:'
ln -s /usr/local/mysql/bin/mysql /usr/local/bin
ln -s /usr/local/mysql/bin/mysqladmin /usr/local/bin
#/etc/init.d/mysqld是一个shell脚本,在启动过程中会调用mysqld_safe脚本,最后调用mysqld服务启动mysql,如下所示.
#$bindir/mysql_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null 2>&1 
netstat -anpt | grep 3306
cat << EOF

****************************************
* Mysql  has been installed successfully. *
****************************************

EOF

4、安装PHP

[root@php ~]# yum -y install epel-release
[root@php ~]# yum -y install gcc gcc-c++ libxml2-devel lzip2-devel libcurl-devel libmcrypt-devel openssl-devel bzip2-devel
[root@php ~]# tar zxf /media/libmcrypt-2.5.7.tar.gz -C /usr/src/
[root@php ~]# cd /usr/src/libmcrypt-2.5.7/
[root@php libmcrypt-2.5.7]# ./configure --prefix=/usr/local/libmcrypt && make && make install
[root@php ~]# tar zxf /media/php-5.6.27.tar.gz -C /usr/src/
[root@php ~]# cd /usr/src/php-5.6.27/
[root@php php-5.6.27]# ./configure --prefix=/usr/local/php5.6 --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-fpm --enable-sockets --enable-sysvshm --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt=/usr/local/libmcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts && make && make install

三、设置LAMP组件环境

1、php配置调整

[root@php php-5.6.27]# cp /usr/src/php-5.6.27/php.ini-production /etc/php.ini
[root@php php-5.6.27]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@php php-5.6.27]# chmod +x /etc/init.d/php-fpm 
[root@php php-5.6.27]# chkconfig --add php-fpm
[root@php php-5.6.27]# chkconfig php-fpm on
[root@php php-5.6.27]# cp /usr/local/php5.6/etc/php-fpm.conf.default /usr/local/php5.6/etc/php-fpm.conf
[root@php php-5.6.27]# vim /usr/local/php5.6/etc/php-fpm.conf
pid = run/php-fpm.pid
listen = 192.168.1.30:9000
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
[root@php php-5.6.27]# systemctl start php-fpm

2、配置Apache与php的静/动分离

[root@http ~]# vim /usr/local/httpd/conf/httpd.conf
LoadModule proxy_module modules/mod_proxy.so              //去掉#号
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so              //去掉#号
Include conf/extra/httpd-vhosts.conf              //去掉#号
AddType application/x-httpd-php .php              //添加
AddType application/x-httpd-php-source .phps              //添加
<IfModule dir_module>
    DirectoryIndex index.html index.php              //添加index.php
</IfModule>
[root@http ~]# systemctl restart httpd
[root@http ~]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
 ServerAdmin [email protected]
 DocumentRoot "/var/www/benet"
 ServerName www.benet.com
 ServerAlias benet.com
 ErrorLog "logs/benet.com-error_log"
 CustomLog "logs/benet.com-access_log" common
 ProxyRequests Off
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://192.168.1.30:9000/var/www/benet/$1
 #
 # ProxyPass fcgi://192.168.1.30:9000/var/www/benet
 #
<Directory "/var/www/benet">
 Options FollowSymLinks
 AllowOverride None
 Require all granted
</Directory>
</VirtualHost>
[root@http ~]# systemctl restart httpd

3、部署Discuz论坛

1、http端解包并复制到网站目录

[root@http ~]# cp /media/Discuz_X3.3_SC_UTF8.zip /usr/src/
[root@http ~]# cd /usr/src/
[root@http src]# unzip Discuz_X3.3_SC_UTF8.zip 
[root@http src]# mkdir -p /var/www/benet
[root@http src]# mv upload/ /var/www/benet/bbs
[root@http src]# chmod -R 777 /var/www/benet/bbs

2、php端解包并复制到网站目录

[root@php ~]# mkdir -p /var/www/benet
[root@php ~]# vim /var/www/benet/index.php
<?php
phpinfo();
?>
[root@php ~]# cp /media/Discuz_X3.3_SC_UTF8.zip /usr/src/
[root@php ~]# cd /usr/src/
[root@php src]# unzip Discuz_X3.3_SC_UTF8.zip 
[root@php src]# mv upload/ /var/www/benet/bbs
[root@php src]# chmod -R 777 /var/www/benet/bbs
[root@php src]# vim /etc/php.ini 
short_open_tag = On
[root@php src]# service php-fpm restart

3、在mysql服务器上创建bbs数据库及用户

[root@mysql ~]# mysql
mysql> create database bbsdb;
mysql> grant all on bbsdb.* to runbbs@'%' identified by 'pwd@123';

四、Apache网站优化

1、MPM(Multi Process Modules):多进程处理模块

1、作用:负责实现网络监听、请求的处理等功能,目的为了在不同的平台上实现最优化的性能和稳定性。

操作系统平台 MPM
BeOS beos
NetWare mpm_netware
OS/2 mpm_os2
linux prefork、worker、event
Windows mpm_winnt

2、linux平台

MPM 说明
prefork模式 非线程、预生成进程型MPM,一个子进程同一时间点仅能处理一个用户请求,根据并发请求数动态调整子进程
worker模式 线程化、多进程型MPM,每个进程可生成多个线程,每个线程处理一个请求,缺点:长连接,资源容易被占用
event模式 worker的改进版,使用监控线程处理长连接出现的资源占用问题

3、修改mpm配置文件

[root@localhost ~]# vim /usr/local/httpd/conf/extra/httpd-mpm.conf
<IfModule mpm_event_module>
    StartServers             3                 //apache 启动时候默认开始的子进程数
    MinSpareThreads         75                 //最小空闲数量的工作线程
    MaxSpareThreads        250                 //最大空闲数量的工作线程
    ThreadsPerChild         25                 //每个子进程产生的线程数量
    MaxRequestWorkers      400                 //允许同时的最大接入请求数量
    MaxConnectionsPerChild   0                 //每个子进程可处理的请求数
</IfModule>
[root@http ~]# yum -y install httpd-tools
[root@http ~]# ab -c 160 -n 10000 http://192.168.1.10/index.html                 //使用ab压力测试命令进行160人并发访问,发出10000个请求。

2、深度优化

1、优化启用网站压缩deflate

[root@http ~]# vim /usr/local/httpd/conf/httpd.conf
LoadModule deflate_module modules/mod_deflate.so                 //去除“#”号
<IfModule mod_deflate.c>                 //在末尾添加
 DeflateCompressionLevel 6                 //压缩程度的等级
 SetOutputFilter DEFLATE                  //设置输出过滤器
 #AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-javascript application/x-httpd-php              
 #AddOutputFilterByType DEFLATE image/*                
 AddOutputFilterByType DEFLATE text/*                 //设置对文件是文本的内容进行压缩
 AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript                  //对 javascript 文件进行压缩
 AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp                  //对 php 类型的文件进行压缩
 SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary                  //设置不对后缀gif,jpg,jpeg,png 的图片文件进行压缩。注:?:表示不会捕获 ( )里内容了
 SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary                 //设置不对 exe,tgz,gz 等的文件进行压缩
 SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary                 //设置不对 pdf,avi,mp3 等的文件进行压缩
</IfModule>
[root@http ~]# systemctl restart httpd

2、优化启用网站缓存expires

[root@http ~]# vim /usr/local/httpd/conf/httpd.conf
LoadModule expires_module modules/mod_expires.so                 //去除“#”号
<IfModule mod_expires.c>                 //在末尾添加
ExpiresActive On                
ExpiresByType text/css "now plus 1 month"              
ExpiresByType application/x-javascript "now plus 5 day"              
ExpiresByType image/jpeg "access plus 1 month"                
ExpiresByType image/gif "access plus 1 month"              
ExpiresByType image/bmp "access plus 1 month"                
ExpiresByType image/x-icon "access plus 1 month"             
ExpiresByType image/png "access plus 1 minute"               
ExpiresByType application/x-shockwave-flash "access plus 1 month"          
ExpiresDefault "now plus 0 minute"                
</IfModule>
[root@http ~]# systemctl restart httpd

3、禁止网站目录遍历

[root@http ~]# vim /usr/local/httpd/conf/httpd.conf
Options FollowSymLinks                 //原Options Indexes FollowSymLinks去除Indexes
[root@http ~]# systemctl restart httpd

4、apache隐藏版本号

[root@http ~]# vim /usr/local/httpd/conf/httpd.conf
Include conf/extra/httpd-default.conf                 //去除“#”号
[root@http ~]# vim /usr/local/httpd/conf/extra/httpd-default.conf
ServerTokens Prod
ServerSignature Off
[root@http ~]# systemctl restart httpd

5、配置httpd日志轮替切割(每隔一天记录一个日志)

[root@http ~]# vim /usr/local/httpd/conf/httpd.conf
#ErrorLog "logs/error_log"                 //禁用
#CustomLog "logs/access_log" common                 //禁用
ErrorLog "|/usr/local/httpd/bin/rotatelogs -l logs/error_%Y%m%d.log 86400"                 //添加
CustomLog "|/usr/local/httpd/bin/rotatelogs -l logs/access_%Y%m%d.log 86400" combined                 //添加
[root@http ~]# systemctl restart httpd

6、配置防盗链

[root@http ~]# vim /usr/local/httpd/conf/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so                 //去除“#”号
[root@http ~]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
<VirtualHost>
......                 //添加
 RewriteEngine On                 //启用 rewrite
 RewriteCond %{HTTP_REFERER} !^$              
 RewriteCond %{HTTP_REFERER} !^http://benet.com/.*$ [NC]                
 RewriteCond %{HTTP_REFERER} !^http://benet.com$ [NC]                
 RewriteCond %{HTTP_REFERER} !^http://www.benet.com/.*$ [NC]                
 RewriteCond %{HTTP_REFERER} !^http://www.benet.com$ [NC]              
 RewriteRule . *\.(gif|jpg|swf)$http://www.benet.com/about/nolink.png[R,NC,L]                 
 ......
 </VirtualHost>
[root@http ~]# systemctl restart httpd

7、在php服务器上安装xcache缓存,提高网站访问速度

[root@php ~]# wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz
[root@php ~]# tar xf xcache-3.2.0.tar.gz
[root@php ~]# cd xcache-3.2.0/
[root@php xcache-3.2.0]# yum -y install autoconf
[root@php xcache-3.2.0]# /usr/local/php5.6/bin/phpize 
[root@php xcache-3.2.0]# ./configure --enable-xcache --enable-xcache-coverager -[root@php xcache-3.2.0]# ./configure --enable-xcache --enable-xcache-coverager --enable-xcache-optimizer --with-php-config=/usr/local/php5.6/bin/php-config && make && make install
[root@php xcache-3.2.0]# touch /tmp/xcache
[root@php xcache-3.2.0]# chmod 777 /tmp/xcache 
[root@php xcache-3.2.0]# cp -r htdocs/ /var/www/benet/xcache
[root@php xcache-3.2.0]# scp -rp /var/www/benet/xcache/ [email protected]:/var/www/benet/                 //复制xcache网站目录到php和httpd网站根目录下
[root@php ~]# vim /etc/php.ini
[xcache-common]                 //添加到文件末尾
extension = /usr/local/php5.6/lib/php/extensions/no-debug-zts-20131226//xcache.so
[xcache.admin]
xcache.admin.enable_auth = Off
[xcache]
xcache.shm_scheme ="mmap"
xcache.size=60M
xcache.count =1
xcache.slots =8K
xcache.ttl=0
xcache.gc_interval =0
xcache.var_size=64M
xcache.var_count =1
xcache.var_slots =8K
xcache.var_ttl=0
xcache.var_maxttl=0
xcache.var_gc_interval =300
xcache.test =Off
xcache.readonly_protection = Off
xcache.mmap_path ="/tmp/xcache"
xcache.coredump_directory =""
xcache.cacher =On
xcache.stat=On
xcache.optimizer =Off
[xcache.coverager]
xcache.coverager =On
xcache.coveragedump_directory =""
[root@php ~]# systemctl restart php-fpm

访问httpd的xcache虚拟目录,验证(ab压力测试后):http://192.168.1.10/xcache

你可能感兴趣的:(linux,linux,运维,centos)