1.LAMP介绍
Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。本文所介绍的是Linux+Apache+MariaDB+PHP,基于RPM包安装的部署过程。
2.环境描述
操作系统 | IP地址 | 系统环境 | 用途 |
CentOS 7.1 |
172.18.20.10/16 |
最小化安装 | Web服务器 |
CentOS 7.1 | 172.18.20.11/16 | 最小化安装 | Mariadb服务器 |
CentOS 6.7 | 172.18.20.20/16 | 最小化安装 | 私有CA |
CentOS 6.7 | 172.18.20.21/16 | 最小化安装 | DNS服务器 |
WIN 10 |
172.18.20.1/1 | - | 客户端主机 |
为保证环境不出问题,已关闭iptables和selinux
Web服务器 用于提供web服务,php以模块的方式安装在Web服务器上。其中一个虚拟主机用于提供phpMyAdmin,另一个虚拟主机用于提供wordpress。
数据库服务器 用于给web服务器以及其他服务器提供数据存储等相关服务。
私有CA 数字证书认证中心的简称,指发放、管理、废除数字证书的机构,在本文中的作用是给web服务器颁发证书实现https。
DNS服务器 用于提供正向解析和方向解析等相关功能。
客户端主机 主要方便于各种测试。
3.安装部署
3.1 mariadb服务器
yum -y install mariadb-server && systemctl start mariadb.service ##安装并启动mariadb服务 mysqladmin -uroot password '123.com' ## 设置mysql的root用户密码为 123.com
mysql -uroot -p123.com ## 登陆mysql数据库
create database wp_DB; ## 创建wp_DB数据库
GRANT ALL ON wp_DB.* TO 'ch123'@'172.18.20.10' IDENTIFIED BY 'qwer1234'; ## 允许来自172.18.20.10的主机的ch123用户对wp_DB数据做各种操作
FLUSH PRIVILEGES; ## 刷新配置命令
SHOW DATABASES; ## 确定数据库是否已创建成功
SHOW GRANTS FOR 'ch123'@'172.18.20.10'; ## 确认数据库授权是否成功
3.2 DNS服务器
yum -y install bind bind-utils ## 安装bind程序和bind客户端工具 vim /etc/named.rfc1912.zones ## 修改配置文件,添加一个正向解析区域 zone "ch.com." IN { type master; file "ch.com.zone"; }; vim /var/named/ch.com.zone ## 编辑区域配置文件 $TTL 3600 $ORIGIN ch.com. @ IN SOA ns1.ch.com. dnsadmin.ch.com. ( 2016042101 1H 10M 3D 1D ) IN NS ns1 ns1 IN A 172.18.20.21 www IN A 172.18.20.10 web IN CNAME www named-checkconf && systemctl start named.service ## 检查named配置文件,如果没问题则启动named服务 ss -anlp | grep named ## 确保tcp/53号端口是监听状态的 dig -t A www.ch.com @172.18.20.21 ## 测试DNS服务器是否能解析 www.ch.com
3.3 私有CA
(umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096) ## 创建私钥 openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655 ## 生成自签证书 Country Name (2 letter code) [XX]:CN ## 国家名称 State or Province Name (full name) []:Beijing ## 州或省名称 Locality Name (eg, city) [Default City]:Beijing ## 市区名称 Organization Name (eg, company) [Default Company Ltd]:CH ## 组织名称 Organizational Unit Name (eg, section) []:Ops ## 部门名称 Common Name (eg, your name or your server's hostname) []:CA22 ## 主机名称 mkdir -pv /etc/pki/CA/{certs,crl,newcerts} touch /etc/pki/CA/{serial,index.txt} echo 01 > /etc/pki/CA/serial ## 为CA提供所需的目录及文件 openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365 ## 当web服务器将证书请求发过来之后,给web服务器签署证书 scp /etc/pki/CA/certs/httpd.crt root@172.18.20.10:/etc/httpd/ssl ## 将证书文件回传给web服务器
3.4 Web服务器
yum -y install httpd php php-mysql mod_ssl php-xcache ## 安装web程序包、php程序包、php-mysql驱动、ssl模块 vim /etc/resolv.conf ## 修改DNS指向配置文件 nameserver 172.18.20.11 ## 将DNS服务器改为上面配置的DNS服务器地址 vim /etc/httpd/conf/httpd.conf ## 修改httpd主配置文件 <Directory /> AllowOverride none Require all granted ## 改为允许所有主机访问 </Directory> #DocumentRoot "/var/www/html" ## 禁用中心主机 vim /etc/httpd/conf.d/vhost.conf ## 添加一个虚拟主机的配置文件 DirectoryIndex index.php <VirtualHost 172.18.20.10:80> ServerName web.ch.com DocumentRoot "/www/wp" <VirtualHost> mkdir /var/log/wp mkdir -pv /www/wp ## 创建虚拟主机所需目录 httpd -t ## 检查配置文件,如果显示“Syntax OK” 表示配置没有问题 mkdir -pv /etc/httpd/ssl ## 创建一个用来存放ssl证书的目录 (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 4096) ## 生成私钥文件 openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365 ## 生成证书请求,这里主机名一定要填https用到的主机名地址 scp /etc/httpd/ssl/httpd.csr root@172.18.20.20:/tmp/ ## 用可靠的方式将证书请求传输给CA主机 vim /etc/httpd/conf.d/ssl.conf ## 编辑ssl配置文件 <VirtualHost 172.18.20.10:443> DocumentRoot "/www/ph" ServerName web.ch.com:443 SSLCertificateFile /etc/httpd/ssl/httpd.crt ## 指明证书文件存储路径 SSLCertificateKeyFile /etc/httpd/ssl/httpd.key ## 指明私钥文件存储路径 </VirtualHost> mkdir /www/ph ## 创建https所需目录
4.整合测试
vim /www/wp/index.php ## 编写php连接mysql数据库代码 <?php $conn = mysql_connect('172.18.20.11','ch123','qwer1234'); ## 此处填mariadb 授权的用户和密码 if ($conn) echo "OK"; else echo "Failure"; ?> cp /www/wp/index.php /www/ph/ systemctl start httpd.service ## 启动httpd服务器
在客户端将DNS服务器指向为172.18.20.21,然后浏览器上分别输入http://www.ch.com 和 https://web.ch.com 显示ok 则表示测试成功
5.安装网站程序
5.1 wordpress
这里www.ch.com虚拟主机用于提供wordpress;官方下载地址:
cp wordpress-4.3.1-zh_CN.zip /www/wp ## 复制wordpress程序到/www/wp目录下 cp phpMyAdmin-4.4.14.1-all-languages.zip /www/ph ## 复制phpMyAdmind到/www/ph目录下 cd /www/wp/ ## 切换至/www/wp目录下 unzip wordpress-4.3.1-zh_CN.zip ## 执行解压 chown -R root:apache wordpress ## 修改属组为apache用户 chmod -R g+w wordpress ## 给apache组赋予写权限 vim /etc/httpd/conf.d/vhost.conf ## 修改配置 DocumentRoot "/www/wp/wordpress" systemctl reload httpd.service ## 重载配置文件
用客户端浏览器访问www.ch.com,按照说明依次下一步操作即可完成安装,需要注意填数据库信息时,填写的是之前mairadb上配置授权的用户和密码,数据库地址填写数据库服务器地址即可。
5.1 phpMyadmin
web.ch.com虚拟主机用于提供phpMyAdmin;官方下载地址:http://www.phpmyadmin.net/downloads/
cd /www/ph/ ## 切换至/www/ph/目录下 unzip phpMyAdmin-4.4.14.1-all-languages.zip ## 解压缩phpmyadmin chown -R root:apache phpMyAdmin-4.4.14.1-all-languages ## 修改phpmyadmin目录属组为apache chmod -R g+w phpMyAdmin-4.4.14.1-all-languages ## 赋予apache组对phpmyadmin有写操作 ln -s phpMyAdmin-4.4.14.1-all-languages phpadmin ## 对phpmyadmin创建符号链接 yum -y install php-mbstring ## 安装支持中文字符集程序包 cd phpadmin/ ## 切换至phpadmin目录下 cp config.sample.inc.php config.inc.php ## 复制模板配置文件 vim config.inc.php ## 修改配置文件 $cfg['Servers'][$i]['host'] = '172.18.20.11'; ## 将这一项改为mariadb数据库的地址 vim /etc/httpd/conf.d/ssl.conf ## 修改https配置文件中 DocumentRoot "/www/ph/phpadmin" httpd -t ## 检查配置是否正确 systemctl reload httpd.service ## 重载配置文件
用客户端浏览器访问https://web.ch.com 输入用户名密码,就可以访问phpmyadmin了
6.压力测试
6.1 xcache
xcache是一个开源的 opcode 缓存器/优化器,能够提高web服务器上的 PHP 性能. 通过把编译 PHP 后的数据缓冲到共享内存从而避免重复的编译过程, 能够直接使用缓冲区已编译的代码从而提高速度. 通常能够提高页面生成速率2到5倍, 降低服务器负载。
vim /etc/php.d/xcache.ini ## 编辑xcache 配置文件 [xcache-common] extension = xcache.so [xcache.admin] xcache.admin.enable_auth = On xcache.admin.user = "mOo" xcache.admin.pass = "md5 encrypted password" [xcache] xcache.shm_scheme = "mmap" xcache.size = 60M xcache.count = 1 xcache.slots = 8K xcache.ttl = 0 xcache.gc_interval = 0 xcache.var_size = 4M xcache.var_count = 1 xcache.var_slots = 8K
配置详情请参考 http://xcache.lighttpd.net/wiki/XcacheIni
6.2 ab
ab是apache自带的压力测试工具
ab -n 1000 -c 100 http://172.18.20.10/index.php -n 表示请求总数 -c 表示模拟的并行数
测试生成后,各字段的含义
Server Software: Apache/2.4.6 ## 平台版本 Server Hostname: 172.18.20.10 ## 服务器主机名 Server Port: 80 ## 服务器端口 Document Path: /index.php ## 测试页面文档 Document Length: 8920 bytes ## 页面文档大小 Concurrency Level: 100 ## 并发连接数 Time taken for tests: 20.863 seconds ## 整个测试持续的时间 Complete requests: 1000 ## 完成的请求数量 Failed requests: 0 ## 失败的请求数量 Write errors: 0 ## 等待的请求数量 Non-2xx responses: 1000 ## 请求响应数量 Total transferred: 388000 bytes ## 整个场景中的网络传输量 HTML transferred: 0 bytes ## 整个场景中的HTML内容传输量 Requests per second: 47.93 [#/sec] (mean) ## 吞吐率,每秒事务数 ,后面括号中的 mean 表示这是一个平均值 Time per request: 2086.280 [ms] (mean) ## 用户平均请求等待时间,后面括号中的 mean表示这是一个平均值 Time per request: 20.863 [ms] (mean, across all concurrent requests) ## 服务器平均请求处理时间 Transfer rate: 18.16 [Kbytes/sec] received ## 平均每秒网络上的流量 Connection Times (ms) ## 网络上消耗的时间的分解 min mean[+/-sd] median max Connect: 0 3 68.3 0 2138 Processing: 38 2045 1472.0 1393 7854 Waiting: 36 2042 1472.0 1392 7854 Total: 38 2048 1475.9 1393 7854 Percentage of the requests served within a certain time (ms) ## 整个场景中所有请求的响应情况 50% 1393 66% 1654 75% 2247 80% 3000 90% 4529 95% 5331 98% 6420 99% 6750 100% 7854 (longest request)
7.实验中遇到的问题
7.1 时间同步问题
主机之间时间不同步可能会导致配置不生效,所以实验前一定要确保所有主机时间同步,可以先安装yum -y install ntp;然后同步时间服务器 ntpdata NTP_SERVER_IP 。
7.2 配置文件问题
刚才不小心把httpd主配置文件的一行信息不小心删除,然后保存退出了,httpd服务却怎么也起不来,这个时候我才知道备份配置文件的重要性了。所以说,在安装所以的服务程序之后,一定要在配置之前做好配置。
本文出自 “Linux运维之路” 博客,请务必保留此出处http://ch666.blog.51cto.com/10870222/1767901