文章目录
LNMP应用环境
1. LNMP介绍
大约在2010年以前,互联网公司最常用的经典web服务环境组合就是LAMP(Linux、Apache、MySQL、PHP),近几年随着nginx web服务的逐渐流行,又出现了新的web服务环境组合---LNMP或者LEMP,其中LNMP全称为Linux、nginx、mysql、PHP等首字母的缩写,二LEMP中的e也表示nginx,它是取自nginx名字发音(enginex)现在LNMP已逐渐成为国内大中型互联网公司网站的主流组合环境,因此,我们必须熟练掌握LNMP的环境的搭建,优化以及维护的方法才行。
2. LNMP组合工作流程
在深入学习LNMP组合之前,有必要先来了解LNMP环境组合的基本原理,也就是它们之间是怎么相互调度的?
动态页面,静态页面
-
静态:nginx可以处理(要啥给啥),浏览器解析
- 如果用户访问的是小图片直接访问nginx就可以了或者访问到服务器nginx处理好了给用户发过去(静态要就给走个流量)
-
动态(服务器端解析).php .php5
- 发布博客,nginx不能做就找PHP,PHP将博文内容写到数据库,要看就从数据库读
- 用户的请求过来,静态的nginx自己处理,动态的通过fastcgi_pass给fastcgi处理动态的软件
- 判断如果是以.php .php5结尾的就找php5解析
- 解析完之后根据代码读取数据库内容或者向数据库写内容
- nginx区分动静态资源
- 抓取动态资源,动态资源一般以.php或.php5结尾的,如果是这样结尾的就交给fastcgi
- 交给fastcgi_pass 127.0.0.1:9000;端口
- php-fpm.conf管理php-fpm进程(最多最少配置多少)
- php.ini 配置解析.php .php5文件的内容
- PHP需要放到最后安装(注意,因为PHP安装要用到mysql)
1. nginx安装
- 上文已经安装过了,看以前的博客
2. mysql 安装
- yum/rmp 安装
- 特点是安全、速度快、但是没法定制安装,入门新手常用这种方法
- 二进制安装(绿色软件 解压即用) ##因为数据库安装时间较长
- 解压软件简单配置后就可以使用,不用安装,速度较快,专业dba喜欢这种方式,软件名如:mysql-5.5.32-Linux2.6-x86_64.tar.gz
- 源码软件结合yum/rpm来安装
- 把源码软件制作成符合要求的rpm,放到yum仓库中,然后通过yum来安装。结合了上面1和3的优点,即安装快速,可任意定制参数,但是也需要具备更深能力的人员才行,本书结尾有rpm定制包的内容介绍。
- 我们选择二进制包下载,解压即用
- mysql软件下载地址信息: www.mysql.com mirrors.sohu.com
- mysql软件下载完毕后,查看mysql解压后目录文件大小
1. 讲解安装mysql步骤
-
步骤
1) 下载解压mysql二进制软件包 tar xf mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz 2) 添加mysql程序运行时的管理用户 useradd -s /sbin/nologin -M mysql 3) 将mysql解压后的程序包搬家到程序目录下,并进行重命名 mkdir -p /application/ mv /server/tools/mysql-5.6.34-*-x86_64 /application/mysql-5.6.34 4) 为mysql服务程序创建软链接 ln -s /application/mysql-5.6.34/ /application/mysql 5) 让mysql用户管理 /application/mysql/ chown -R mysql.mysql /application/mysql/ ll /application/mysql/ ##查看目录用户 6) 初始化数据库 #1. 确认软件安装在哪里 #--basedir #2. 确认数据存放在哪里 #--datadir #3. 确认MySQL使用的用户谁? #--user /application/mysql/scripts/mysql_install_db --basedir=/application/mysql --datadir=/application/mysql/data --user=mysql 7) 两个ok数据库就安装成功 8) 如果遇到无法在/tmp中写入,就查看/tmp的权限 ll -d /tmp/ chmod 1777 /tmp/ 9) 复制启动脚本 授权 cp /application/mysql/support-files/mysql.server /etc/init.d/mysqld chmod +x /etc/init.d/mysqld 10) 修改启动脚本 和 mysql命令中的路径 sed -i 's#/usr/local/mysql#/application/mysql#g' /application/mysql/bin/mysqld_safe /etc/init.d/mysqld 11) 复制默认的配置文件 \cp /application/mysql/support-files/my-default.cnf /etc/my.cnf /etc/init.d/mysqld start 至此,mysql数据库安装与启动完成;可以检测进程和服务端口,确认mysql服务是否启动正确
To start mysqld at boot time you have to copy support-files/mysql.server to the right place for your system mysql启动脚本 默认放在support-files/mysql.server 记得给MySQL设置个密码 PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! To do so, start the server, then issue the following commands: /application/mysql/bin/mysqladmin -u root password 'new-password' /application/mysql/bin/mysqladmin -u root -h web01 password 'new-password'
故障 1. /tmp 权限 2. 主机名解析 hosts解析 #ping 主机名 3. 一步一步执行
2. 讲解管理mysql数据库
-
管理
1) 进入与退出mysql数据库方法: /application/mysql/bin/mysql ============================================= 扩展知识:登录数据库命令简化方法 echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile source /etc/profile which mysql ============================================= 退出数据库时,尽量不要用ctrl+c进行退出mysql 用ctrl+d进行退出 2) 设置mysql服务开机自启动 ####11.加入开机自启动 chkconfig --add mysqld chkconfig mysqld on 3) 设置mysql数据库登录用户名与密码 ####12.给MySQL root用户设置密码 /application/mysql/bin/mysqladmin -u root password 'oldboy123' mysql -uroot -poldboy123 数据库基础操作(数据库框架)
show databases; <--- 查询默认的数据库信息 create database oldboy; <---创建新的数据库 drop database oldboy; <---删除存在的数据库 use mysql; <--- 表示选择使用一个数据库,相当于cd进入一个数据库 show tables; <---查看数据库中表信息 select database(); <--- 表示查看当前所在数据库,类似于pwd命令的功能 select user(); <--- 查看当前登录数据库的用户,类似于whoami命令 并且mysql还可以限制指定用户可以从哪里进行连接登录数据库 select * from user\G; <---查看user表中所有信息,并且纵行显示 select user,host from user; ---查看user表中指定信息,并且横行显示 select user,host from mysql.user; ---查看可以登录mysql数据库的目录,以及都可以从哪里进行管理mysql数据库(重要) grant all on *.* to user@'host' identified by 'oldboy123'; ---创建用户,授权所有权限 grant all on wordpress.* to 'wordpress@172.161.1.0/255.255.255.0' identifiend by '123456'; 授权所有权限,wordpress数据库所有权限 给wordpress用户 可以在172.16.1.0/255.255.255.0 网段登录数据库 这个用户的密码123456;##可以在PHP部署完在做 grant all on *.* to Old_Boy@'localhost' identified by 'oldboy123'; ---创建用户(大写用户) drop user 'user'@'host'; flush privileges; --- 刷新权限 初级 添加删除系列 #创建数据库 create database wordpress; #删除数据库 drop database wordpress;
数据库基础框架 1. 数据库 test mysql 2. 表格 用户 1. 查看都有什么数据库 2. 查看都有什么用户 3. 添加用户
3. php安装
1. 讲解安装PHP步骤
-
安装
1) 解决PHP软件的依赖关系 yum install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel -y yum install freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel libxslt-devel -y rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel yum install -y zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel libiconv软件安装---字符集转换库(默认可以不进行安装了) mkdir -p /home/oldboy/tools cd /home/oldboy/tools #wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz tar zxf libiconv-1.14.tar.gz cd libiconv-1.14 ./configure --prefix=/usr/local/libiconv make make install cd ../ ##php相关扩展库 ***epel(和PHP相关的加密的东西) #wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo yum -y install libmcrypt-devel mhash mcrypt rpm -qa libmcrypt-devel mhash mcrypt
2) 下载解压PHP软件 cd /server/tools/ tar xf php-5.5.32.tar.gz cd php-5.5.32 ./configure \ --prefix=/application/php-5.5.32 \ --with-mysql=mysqlnd \ --with-pdo-mysql=mysqlnd \ --with-iconv-dir=/usr/local/libiconv \ --with-freetype-dir \ --with-jpeg-dir \ --with-png-dir \ --with-zlib \ --with-libxml-dir=/usr \ --enable-xml \ --disable-rpath \ --enable-bcmath \ --enable-shmop \ --enable-sysvsem \ --enable-inline-optimization \ --with-curl \ --enable-mbregex \ --enable-fpm \ --enable-mbstring \ --with-mcrypt \ --with-gd \ --enable-gd-native-ttf \ --with-openssl \ --with-mhash \ --enable-pcntl \ --enable-sockets \ --with-xmlrpc \ --enable-soap \ --enable-short-tags \ --enable-static \ --with-xsl \ --with-fpm-user=www \ --with-fpm-group=www \ --enable-ftp \ --enable-opcache=no 说明:LNMP架构部署时,如果mysql服务和web服务不在一台主机上,php配置参数需要进行调整 --with-mysql=/application/mysql/ => --with-mysql=mysqlnd ========================================================================== PHP扩展参数:(配置没有问题可以省略以下配置参数,以下参数和PHP优化有关) --with-curlwrappers \ --enable-zip \ --enable-zend-multibyte \ ========================================================================= #Generating files #configure: creating ./config.status #creating main/internal_functions.c #creating main/internal_functions_cli.c #+--------------------------------------------------------------------+ #| License: | #| This software is subject to the PHP License, available in this | #| distribution in the file LICENSE. By continuing this installation | #| process, you are bound by the terms of this license agreement. | #| If you do not agree with the terms of this license, you must abort | #| the installation process at this point. | #+--------------------------------------------------------------------+ # #Thank you for using PHP. ##防错(以下信息可以不进行配置了,但是不添加一般会报错) ln -s /application/mysql/lib/libmysqlclient.so.18 /usr/lib64/ touch ext/phar/phar.phar make make install 了解FastCGI
3) PHP软件程序创建软链接 ln -s /application/php-5.5.32/ /application/php
4) 配置php解析文件/配置php-fpm配置文件 cd /home/oldboy/tools/php-5.5.32 ll php.ini* -rw-r--r--. 1 1001 1001 69236 2016-02-02 21:33 php.ini-development -rw-r--r--. 1 1001 1001 69266 2016-02-02 21:33 php.ini-production (php.ini-developments是开发人员调试用配置文件,php.ini-production是生产常见所有配置文件) cp php.ini-production /application/php/lib/php.ini php.ini-production 与 php.ini-development 文件区别关系对比 扩展:文件比较命令 diff zdiff vimdiff windows上的文件比较 cd /application/php/etc/ cp php-fpm.conf.default php-fpm.conf # 编译安装PHP时,若配置未正确指定PHP进程用户信息,可以修改PHP文件进行调整 sed -i 's#user = www#user = nginx#g;s#group = www#group = nginx#g' /application/php-5.5.32/etc/php-fpm.conf
5) 启动php-fpm程序 /application/php/sbin/php-fpm lsof -i :9000 <--- 确认php 9000端口是否正确启动 ps -ef|grep php-fpm
4. wordpress博客站点部署配置
- 直接下载安装包(wget -P /下载目录 url ##指定下载目录)
-
修改nginx配置文件,使nginx程序与php程序建立联系
vim extra/blog.conf server { listen 80; server_name blog.etiantian.org; location / { root html/blog; index index.html index.htm; <-- 需要注意编辑修改默认首页文件 index index.php index.html index.htm; } location ~* .*\.(php|php5)?$ { root html/blog; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } } 说明:利用nginx的location区块实现动态请求与静态请求的分别处理
-
编辑nginx与php连通性测试文件,并进行测试
echo '<?php phpinfo(); ?>' >/application/nginx/html/blog/test_info.php 测试站点 curl http://blog.etiantian.org/index.html <-- 静态请求站点文件信息测试 curl http://blog.etiantian.org/test_info.php <-- 动态请求站点文件信息测试 说明:当php服务停止时,9000端口信息消失,即停止PHP错误报502错误 linux系统测试完毕后,建议利用浏览器进行最终测试,测试效果更明显些
-
编辑php与mysql连通性测试文件,并进行测试
a. 创建数据库 mysql -uroot -poldboy123; show databases; <--- 查看当前数据库信息 create database wordpress; b. 添加用户信息 grant all on wordpress.* to 'wordpress'@'localhost' indentified by 'oldboy123'; grant all on wordpress.* to 'wordpress'@'172.16.1.%' indentified by 'oldboy123'; flush privileges; drop user wordpress@'172.16.1.8'; <--- 删除用户信息 select user,host from mysql.user; <--- 查看用户信息 mysql -uwordpress -p123456 <--- 测试创建的用户连接 show databases; <--- 查看当前数据库信息 # 利用mysql命令进行指定用户登录测试 /application/mysql/bin/mysql -uwordpress -poldboy123 c. 测试php与数据库连通性 vim test_mysql.php <?php //$link_id=mysql_connect('主机名','用户','密码'); //mysql -u用户 -p密码 -h 主机 $link_id=mysql_connect('localhost','wordpress','oldboy123') or mysql_error(); if($link_id){ echo "mysql successful by oldboy !\n"; }else{ echo mysql_error(); } ?> curl blog.etiantian.org/test_mysql.php <-- 测试php与数据库的连通性
-
下载部署wordpress博客程序(https://cn.wordpress.org/ 英文官网:https://www.wordpress.org/ )
wget https://cn.wordpress.org/wordpress-4.5.1-zh_CN.tar.gz tar xf wordpress-4.5.1-zh_CN.tar.gz mv wordpress/* /application/nginx/html/blog/ chown -R www.www /application/nginx/html/blog/ 注意:确认hosts文件进行了解析 浏览器页面进行wordpress部署 vim wp-config.php 可以修改wordpress上的数据库连接参数信息
5. wordpress博客站点数据库迁移
-
重复上面创建数据库的步骤
-
迁移数据库:利用数据库备份命令
1) 备份数据库数据库信息 mysqldump -uroot -poldboy123 --all-databases >/tmp/bak.sql ll /tmp/bak.sql -h scp /tmp/bak.sql 172.16.1.51:/tmp/ 2) 恢复数据库数据库信息 ##db01 mysql -uroot -poldboy123 </tmp/bak.sql ###db01添加新的用户 grant all on wordpress.* to wordpress@'172.16.1.0/255.255.255.0' identified by 'oldboy123'; flush privileges; mysql -uwordpress -poldboy123 -h 172.16.1.51 3) 数据库迁移完毕,修改网站连接数据库的配置文件 mysql -uwordpress -poldboy123 -h 172.16.1.51 <-- 修改配置文件之前,先测试网站web服务器与迁移后的数据库连通性 vim wp-config.php <-- 修改wordpress上的数据库连接参数信息 /** MySQL主机 */ define('DB_HOST','172.16.1.51') <-- 修改连接的主机信息,将localhost修改为172.16.1.51 说明:web服务器数据库此时可以关闭了 4)停止nginx服务器上MySQL服务
6. 进行数据迁移到NFS共享服务器
-
先将原有目录中数据移出
cd /application/nginx/html/blog/wp-content/uploads mkdir /tmp/wordpress_backup -p mv ./* /tmp/wordpress_backup/
-
NFS服务器上配置创建共享目录
vim /etc/exports /data 172.16.1.0/24(rw,sync,all_squash) showmount -e 172.16.1.31 mount -t nfs 172.16.1.31:/data /mnt/ showmount -e 172.16.1.31 mount -t nfs 172.16.1.31:/data/ ./uploads/ mv /tmp/wordpress_backup/* ./
7. 博客网站进行部署:
-
部署
01:现在博客网站代码信息 https://cn.wordpress.org/ 02:部署安装wordpress代码信息 03:初始化wordpress程序 04:创建wordpress博客
8. 搭建网站流程:
-
流程
blog bbs www ## 第一个里程碑:要有网站代码(向开发人员要) tar xf wordpress-4.7.3-zh_CN.tar.gz ## 第二个里程碑:进入到代码程序目录中,将代码信息移动到站点目录下 mv ./* /application/nginx/html/blog/ ## 第三个里程碑:修改站点目录权限 chown -R www.www /application/nginx/html/blog/ ## 第四个里程碑:进行网站初始化 create database wordpress; grant all on wordpress.* to 'wordpress'@'172.16.1.%' identified by 'oldboy123'; grant all on wordpress.* to 'wordpress'@'localhost' identified by 'oldboy123'; flush privileges;
9. 练习
-
练习
1、数据库迁移到db01上面,web01数据库关闭。 2、实现WordPress博客程序URL静态化 3、把wordpress用户上传目录挂载到nfs上面 find html/blog -mmin -5
-
预习
01: wordpress网站搭建过程 02:数据库迁移过程 03:web服务器和nfs服务建立连接过程 04: nginx反向代理+keepalived