LNMP架构的搭建
Posted liangyuxing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LNMP架构的搭建相关的知识,希望对你有一定的参考价值。
第9章 LNMP架构的搭建
9.1 什么是LNMP
9.1.1 LNMP的组成
- L????????????????linux
- N????????????????nginx:实现静态的服务处理
- M????????????????mysql/mariadb:实现数据的共享的存储
- P????????????????php:实现动态的服务处理
9.2 LNMP的架构原理
9.2.1 LNMP图示讲解
9.2.2 文字进行讲解
- 用户将动态请求发送给web服务器,web服务器中的服务nginx没有办法进行处理
- nginx会通过fastcgi_pass通过接口fastcgi将数据发送给php服务中的php-fpm来进行处理
- php会查看是否可以处理,如果可以则进行处理,并且将信息处理成nginx可以识别的html代码
- php如果不可以进行处理,会将信息解释成数据库可以识别的语言发送给数据库,让数据库进行处理
9.3 实现web和php的连接
9.3.1 安装php服务
9.3.1.1 解决yum软件包的冲突问题
yum remove php-mysql php php-fpm php-common
9.3.1.2 准备yum软件扩展的信息
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
9.3.1.3 开始安装php服务
yum install -y php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb
9.3.2 编辑配置文件
[root@web01 conf.d] # cat /etc/nginx/conf.d/blog.conf
server {
listen 80;
server_name blog.oldboy.com;
client_max_body_size 10m;
location / {
root /html/blog;
index index.html index.htm;
}
location ~ .php$ {
root /html/blog;
fastcgi_pass 127.0.0.1:9000;????????????????9000是php-fpm的端口
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;????????????????解析变量
}
}
- $document_root:????????????????????????????指定你要找寻的站点目录
- $fastcgi_script_name????????????????????????指定你要找的站点目录资源
9.3.3 创建站点目录,并且创建要测试的资源信息
mkdir -p /html/blog/????????????????创建站点目录
?
touch test_phpinfo.php????????????????创建资源信息
<?php
phpinfo();
?>
9.3.4 修改成php服务可以存储的用户
[root@web01 conf.d] # vim /etc/php-fpm.d/www.conf
1 ; Start a new pool named ‘www‘.
2 [www]
3
4 ; Unix user/group of processes
5 ; Note: The user is mandatory. If the group is not set, the default user‘s group
6 ; will be used.
7 ; RPM: apache Choosed to be able to access some dir as httpd
8 user = www
9 ; RPM: Keep a group allowed to write in log dir.
10 group = www
9.3.5 启动php-fpm服务
systemctl start php-fpm.service
systemctl enable php-fpm.service
?
9.3.6 查看是否连接成功
9.4 实现php和mysql的连接
9.4.1 安装mysql
9.4.1.1 mysql服务的安装
yum install mariadb-server mariadb -y
9.4.1.2 启动mysql服务
systemctl start mariadb.service
systemctl enable mariadb.service
9.4.2 连接mysql
9.4.2.1 进入mysql
[root@web01 ~] # mysql
Welcome to the MariaDB monitor. Commands end with ; or g.
Your MariaDB connection id is 191
Server version: 5.5.64-MariaDB MariaDB Server
?
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
?
Type ‘help;‘ or ‘h‘ for help. Type ‘c‘ to clear the current input statement.
?
MariaDB [(none)]>????????????????看见这个信息就是进入了mysql
9.4.2.2 mysql的一些基本操作
show databases;????????????????????????????????????????查看数据库
use mysql????????????????????????????????????????????使用某个数据库
show tables????????????????????????????????????????????查看表的信息
create database 数据库????????????????????????????????????创建数据库
drop database 数据库????????????????????????????????????删除数据库
select user,host from mysql.user;????????????????????????????查看某个表的信息
delete from mysql.user where name=xx????????????????????????删除指定的name数据
mysqladmin -uroot password ‘oldboy123‘????????????????????设置root的密码
mysqldump -uroot -poldboy123 -A > /tmp/aa.sql????????????????将所有的数据库进行备份
mysql -uroot -poldboy123 < /tmp/aa,sql????????????????????????将库还原到数据库里面
9.4.3 数据库启动失败的几个原因
查看tmp目录是不是1777权限
查看配置文件是不是在/etc/my.cnf
9.4.4 创建站点目录和资源信息
cd /html/blog????????????????切换站点目录
?
vim test_mysql.php????????????编辑测试文件
<?php
$servername = "localhost";
$username = "root";
$password = "oldboy123";
//$link_id=mysql_connect(‘主机名‘,‘用户‘,‘密码‘);
//mysql -u用户 -p密码 -h 主机
$conn = mysqli_connect($servername, $username, $password);
if ($conn) {
echo "mysql successful by root ! ";
}else{
die("Connection failed: " . mysqli_connect_error());
}
?>
9.4.5 查看是否成功
9.5 实现搭建动态的网站
9.5.1 申请域名信息
9.5.2 网站需要的代码包
https://cn.wordpress.org/download/????????????wordpress(blog)
9.5.3 编辑配置文件
[root@web01 conf.d] # cat /etc/nginx/conf.d/blog.conf
server {
listen 80;
server_name blog.oldboy.com;
client_max_body_size 10m;
location / {
root /html/blog;
index index.php index.html index.htm;
}
location ~ .php$ {
root /html/blog;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
9.5.4 创建站点目录和将代码文件放入里面
[root@web01 conf.d] # cd /html/blog/
?
[root@web01 blog] # ll
total 204
-rw-r--r-- 1 www www 420 Dec 1 2017 index.php
-rw-r--r-- 1 www www 19935 Oct 15 17:06 license.txt
-rw-r--r-- 1 www www 7005 Oct 15 17:07 readme.html
-rw-r--r-- 1 root root 428 Nov 11 23:25 test_mysql.php
-rw-r--r-- 1 www www 6919 Jan 12 2019 wp-activate.php
drwxr-xr-x 9 www www 4096 Oct 15 17:00 wp-admin
-rw-r--r-- 1 www www 369 Dec 1 2017 wp-blog-header.php
-rw-r--r-- 1 www www 2283 Jan 21 2019 wp-comments-post.php
-rw-r--r-- 1 www www 2973 Nov 12 11:13 wp-config.php
-rw-r--r-- 1 www www 2776 Oct 15 17:07 wp-config-sample.php
drwxr-xr-x 6 www www 84 Nov 12 10:57 wp-content
-rw-r--r-- 1 www www 3847 Jan 9 2019 wp-cron.php
drwxr-xr-x 20 www www 8192 Oct 15 17:07 wp-includes
-rw-r--r-- 1 www www 2502 Jan 16 2019 wp-links-opml.php
-rw-r--r-- 1 www www 3306 Dec 1 2017 wp-load.php
-rw-r--r-- 1 www www 39551 Jun 10 21:34 wp-login.php
[root@web01 blog] #
9.5.5 第一次连接的测试
9.5.5.1 现在就开始
9.5.5.2 发现需要进行数据库连接,首先进入数据库连接
9.5.6 创建数据库用户权限
9.5.6.1 创建数据库
create database wordpress
9.5.6.2 创建并授权用户信息,并且添加密码
grant all on wordpress.* to ‘wordpress‘@‘localhost‘ identified by ‘oldboy123‘;
9.5.7 再次连接
9.5.7.1 数据库连接成功以后,在次点击提交查看状况
9.5.7.2 真实的代码文件
[root@web01 blog] # cat wp-config.php
<?php
/**
* WordPress基础配置文件。
*
* 这个文件被安装程序用于自动生成wp-config.php配置文件,
* 您可以不使用网站,您需要手动复制这个文件,
* 并重命名为"wp-config.php",然后填入相关信息。
*
* 本文件包含以下配置选项:
*
* * MySQL设置
* * 密钥
* * 数据库表名前缀
* * ABSPATH
*
* @link https://codex.wordpress.org/zh-cn:%E7%BC%96%E8%BE%91_wp-config.php
*
* @package WordPress
*/
?
// ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //
/** WordPress数据库的名称 */
define( ‘DB_NAME‘, ‘wordpress‘ );
?
/** MySQL数据库用户名 */
define( ‘DB_USER‘, ‘wordpress‘ );
?
/** MySQL数据库密码 */
define( ‘DB_PASSWORD‘, ‘oldboy123‘ );
?
/** MySQL主机 */
define( ‘DB_HOST‘, ‘172.16.1.51‘ );
?
/** 创建数据表时默认的文字编码 */
define( ‘DB_CHARSET‘, ‘utf8mb4‘ );
?
/** 数据库整理类型。如不确定请勿更改 */
define( ‘DB_COLLATE‘, ‘‘ );
?
/**#@+
* 身份认证密钥与盐。
*
* 修改为任意独一无二的字串!
* 或者直接访问{@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org密钥生成服务}
* 任何修改都会导致所有cookies失效,所有用户将必须重新登录。
*
* @since 2.6.0
*/
define( ‘AUTH_KEY‘, ‘ oZ$<2[Ngf&r0UZ9(a.iz,LNROA~ON$|S>R+94r#BFk3Hvz*9oVj:F.7*KL5qJ6Q‘ );
define( ‘SECURE_AUTH_KEY‘, ‘!/:02gSG&sb-w61U@f#%+erC://`O,qFe]lXGfXc<rjt@Z%Ev~^rR}{7o<rY%G%e‘ );
define( ‘LOGGED_IN_KEY‘, ‘+>),x;J0>9:I|rN,/=vSd3V0z%sTE~W2l*D!fj/jR_|f5jIV3C&?FgrhT8CiYm/M‘ );
define( ‘NONCE_KEY‘, ‘Y8$FE|UT(?`76Uy:@EHi5gJ&U<uyQl,]kq/0^u40%t/d^ >`>7rz~Tp7Ue]8vgSd‘ );
define( ‘AUTH_SALT‘, ‘pI)Pe30w)9k>w~vn7c?C:S1A5Q#Y1<J@OBI*clB7ilK:vx9[r3o3erh/pw3||<Lh‘ );
define( ‘SECURE_AUTH_SALT‘, ‘zA!%g1`8&yH`d|M,ix:h)R_x1x-^^=fP*QI+C_$MWtqPA9u=D<!KlYZ,kh 3JPp6‘ );
define( ‘LOGGED_IN_SALT‘, ‘z- OgDNXu6DOxX}|0VPae.gbK(XqIV*:mM# =b]UP%f`2U|S]0dK$]NN]MM0[*N9‘ );
define( ‘NONCE_SALT‘, ‘H|bg,FwOJ|yqtkHN:4EtJ*_$+bnUM67/Ny<#mLjfbOZl7:gW&^Q<ELSs64?rMR1q‘ );
?
/**#@-*/
?
/**
* WordPress数据表前缀。
*
* 如果您有在同一数据库内安装多个WordPress的需求,请为每个WordPress设置
* 不同的数据表前缀。前缀名只能为数字、字母加下划线。
*/
$table_prefix = ‘wp_‘;
?
/**
* 开发者专用:WordPress调试模式。
*
* 将这个值改为true,WordPress将显示所有用于开发的提示。
* 强烈建议插件开发者在开发环境中启用WP_DEBUG。
*
* 要获取其他能用于调试的信息,请访问Codex。
*
* @link https://codex.wordpress.org/Debugging_in_WordPress
*/
define(‘WP_DEBUG‘, false);
?
/* 好了!请不要再继续编辑。请保存本文件。使用愉快! */
?
/** WordPress目录的绝对路径。 */
if ( ! defined( ‘ABSPATH‘ ) ) {
????define( ‘ABSPATH‘, dirname( __FILE__ ) . ‘/‘ );
}
?
/** 设置WordPress变量和包含文件。 */
require_once( ABSPATH . ‘wp-settings.php‘ );
?
[root@web01 blog] #
9.5.7.3 上一步点击现在就安装(下一步安装wordpress)
9.5.8 搭建成功
9.6.1 图片上传失败
9.6.1.1 失败的问题
问题的原因:这种上传不上去是因为客户将数据给了web服务器,会进行身份的转换,由于是动态的请求需要将信息抛给php处理,php在存储的时候由于自己本身的属主和属组是apache,而用户上传的数据是root权限是没有办法进行存储的
9.6.1.1.1 第一种解决办法,给站点目录及其存储数据的目录加入写入权限
chmod o+x /html/blog/wp-content
9.6.1.1.2 第二种解决办法,给站点目录设置成apache属主
chown -R apache. /html/blog/
9.6.1.1.3 第三种解决办法,将动态服务php的属组和静态服务nginx的属组权限一致
2????[www]
3????
4????; Unix user/group of processes
5????; Note: The user is mandatory. If the group is not set, the default user‘s group
6????; will be used.
7????; RPM: apache Choosed to be able to access some dir as httpd
8????user = www????????????????????将属主修改成www
9????; RPM: Keep a group allowed to write in log dir.
10????group = www????????????????????将属组修改成www
?
9.6.2 大于1M的主题上传失败
9.6.2.1 失败的问题
9.6.2.1.1 解决问题
[root@web01 conf.d] # cat /etc/nginx/conf.d/blog.conf
server {
listen 80;
server_name blog.oldboy.com;
client_max_body_size 10m; ????????????????????设置大小为10M
location / {
root /html/blog;
index index.php index.html index.htm;
}
location ~ .php$ {
root /html/blog;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
9.6.2.1.2 查看是否成功
9.6.3 大于2M的图片上传失败
9.6.3.1 失败的问题
9.6.3.1.1 解决问题
vim /etc/php.ini
779 upload_max_filesize = 10M????????????????指定最大上传文件大小限制
656 post_max_size = 10M????????????????????请求主体最大尺寸
802 max_execution_time = 300????????????????执行上传数据操作最大执行时间
9.6.3.1.2 查看是否成功
9.7 实现数据库的迁移
9.7.1 数据库迁移的意义
- 实现了数据的共享存储和一致性
- 磁盘空间的限制性
9.7.2 数据库迁移的步骤
9.7.2.1 在数据库服务器安装mariadb服务,并且将root用户的密码设置成oldboy123
yum install -y mariadb mariadb-server????????????????安装数据库
systemctl start mariadb.service????????????????????启动数据库
mysqladmin -uroot password ‘oldboy123‘????????????设置密码
?
9.7.2.2 在本地web服务器将数据库的信息进行备份,并且保存在tmp目录下面,并且发送到数据库服务器上
mysqldump -uroot -poldboy123 -A >/tmp/mysql_backup.sql????????????备份数据库
?
rsync -avz /tmp/mysql_backup.sql 172.16.1.51:/tmp????????????????将数据进行传输
9.7.2.3 在数据库服务器将远程传送过来的数据还原到数据库里面
mysql -uroot -poldboy123 < /tmp/mysql_backup.sql
9.7.2.4 实现远程数据库可以进行连接
9.7.2.4.1 修改用户连接的信息,允许172.16.1.0网段可以进行连接
mysql -uroot -p123456 -e "grant all on wordpress.* to ‘wordpress‘@‘172.16.1.%‘ identified by ‘oldboy123‘;"
9.7.2.4.2 修改代码信息进行连接
[root@web01 ~] # cat /html/blog/wp-config.php
<?php
?
define( ‘DB_NAME‘, ‘wordpress‘ );
?
/** MySQL数据库用户名 */
define( ‘DB_USER‘, ‘wordpress‘ );
?
/** MySQL数据库密码 */
define( ‘DB_PASSWORD‘, ‘oldboy123‘ );
?
/** MySQL主机 */
define( ‘DB_HOST‘, ‘172.16.1.51‘ );????????????改成远程的数据库服务器内网IP
9.7.3 常见的数据库迁移以后的问题
9.7.3.1 网站数据库连接不上排错问题
1) 检查连接数据库代码文件配置是否正确
mysql -uwordpress -poldboy123 -h172.16.1.51
2) 修改数据库用户信息
方法一: 允许用户使用 wordpres@‘web01‘ 连接
grant all on wordpress.* to ‘wordpress‘@‘web01‘ identified by ‘oldboy123‘;
方法二: 关闭数据库反向解析操作(跳过反向解析过程)????
delete from mysql.user where user=‘wordpress‘ and host=‘web01‘; 删除表信息
flush privileges;
vim /etc/my.cnf
[mysqld]
skip-name-resolve
重启数据库服务
?
9.8 实现web和存储服务的连接
9.8.1 存储目录确定
9.8.1.1 复制图片的地址找到你要存储的目录路径
9.8.1.2 找到存储的路径
9.8.1.3 存储目录确定
[root@web01 yum.repos.d] # cd /html/blog/wp-content/uploads????????????????????已经找见
You have new mail in /var/spool/mail/root
[root@web01 uploads] # ll
total 0
drwxr-xr-x 3 www www 16 Nov 17 22:04 2019
[root@web01 uploads] #
9.8.2 将存储目录里面的数据迁移出来
[root@web01 uploads] # mv /html/blog/wp-content/uploads/* /tmp
9.8.3 确认存储服务部署完毕
[root@web01 uploads] # showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data/zhihu 172.16.1.0/24
/data/blog 172.16.1.0/24
/data/bbs 172.16.1.0/24
[root@web01 uploads] #
9.8.4 web服务进行挂载操作
[root@web01 uploads] # mount -t nfs 172.16.1.31:/data/blog /html/blog/wp-content/uploads
9.8.5 还原以前的数据
[root@web01 uploads] # mv /tmp/* /html/blog/wp-content/uploads/
以上是关于LNMP架构的搭建的主要内容,如果未能解决你的问题,请参考以下文章