网站Logo 欢迎来到我的博客

LNMP架构

zhang
172
2024-05-25

LNMP架构

常见架构

网站架构 搭配
lnmp linux+nginx+mysql+php
lnmt linux+nginx+mysql+tomcat(java)
lnm? linux+nginx+mysql+??(python、go)

LNMP部署

  • 环境准备
主机名 IP 服务
web01 10.0.0.7/172.16.1.7 部署mysql、nginx、php
db01 10.0.0.51/172.16.1.51 安装mysql

web01部署mysql数据库

  • 数据库安装
#mariadb-server 安装
yum -y install mariadb-server
#开启服务
systemctl enable mariadb
systemctl start mariadb
#检查服务与端口
ss -lntup | grep mysql
ps -ef | grep mysql
  • 数据库安装配置(SQL语句实现)
#仅仅刚安装的时候运行.仅首次运行即可.
mysql_secure_installation  
用于设置root密码,清理用户和清理临时库.
Enter current password for root (enter for none):回车

Set root password? [Y/n]  Y设置密码

New password:  输入密码
Re-enter new password:  再次输入
Password updated successfully!
Reloading privilege tables..
 ... Success!

Remove anonymous users? [Y/n]  Y  删除数据库中的匿名用户(没有用户名的用户,容易导致安全问题)

Disallow root login remotely? [Y/n] Y  是否禁止root远程登录

Remove test database and access to it? [Y/n] Y 是否删除test测试用的数据库

Reload privilege tables now? [Y/n]  Y 是否更新权限信息表
  • 登录数据库
mysql -uroot -p1
参数:
-u <用户名>
-p <密码>

数据库基本概念

  • 库:database
  • 表:table
  • 字段:列
  • 记录:行

数据库基本操作

查看有那些数据库?
show databases;
查看数据库中有那些表
show tables from mysql;
查看数据库中有哪些用户
select user,host from mysql.user;
  • 演示

创建库
create database blog;
创建用户
grant all on blog.* to 'blog'@'localhost' identified by 'blog';  (本地登录)
#'blog'@'172.16.1.%' 表明允许172.16.1.0的网段登录,数据库中需要用%表示全部
grant all on blog.* to   'blog'@'172.16.1.%'  identified by 'blog';  (远程登录)
  • 创建库效果展示

  • 创建本地登录用户与远程登录用户效果展示

drop user 'wp'@'172.16.1.%';
删除用户重新添加用户后,需要执行更新用户权限信息的指令.
grant all on wordpress.* to 'wp'@'172.16.1.%' identified by '1';
更新权限信息
flush privielges; 

web01安装PHP

  • 安装
#检查是否有PHP
rpm -qa php-fpm
rpm -ql php-fpm
#安装PHP
yum -y install php php-bcmath php-cli php-common php-devel php-embedded php-fpm php-gd php-intl php-mbstring php-mysqlnd php-opcache php-pdo   php-process php-xml php-json
#开机自启动
systemctl enable --now php-fpm.service
systemctl status php.fpm.service
  • vim /etc/php-fpm.d/www.conf 修改php配置文件的进程用户更改为nginx
    更改监听本地与端口为127.0.0.1:9000
#修改后查看
egrep -n '^(user|group|listen) =' /etc/php-fpm.d/www.conf
24:user = nginx
26:group = nginx
38:listen = 127.0.0.1:9000
  • 检查语法与重启php服务
php-fpm -t
systemctl reload php-fpm.service

配置nginx源
安装nginx
  • Nginx配置站点目录
server {
  listen 80;
  server_name blog.zmx.cn;
  root /app/code/blog;
  error_log /var/log/nginx/blog-error.log notice;
  access_log /var/log/nginx/blog-access.log main;
location / {
 index index.php ;
}  
location ~*\.php$ {
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 include fastcgi_params;
}
}
  • 检查nginx页面,php页面、数据库是否正常
[root@web01 /app/code/blog]# cat chk_ngx.html 
 zmx
 [root@web01 /app/code/blog]# cat chk_php.php 
 <?php
 phpinfo();
 ?>
 [root@web01 /app/code/blog]# cat chk_db.php 
 <?php
 //数据库地址
 $db_host='localhost';
 //数据库用户名
 $db_user='blog';
 $db_pass='blog';
 //数据库名字
 $db_name="blog";
 $link_id=mysqli_connect($db_host,$db_user,$db_pass,$db_name);
 if($link_id){
   echo "mysql successful by zmx lidao996!\n" ;
 }else{
 echo "connection failed!\n" ;
 }
 ?>
  • 部署业务代码,修改权限
#下载代码
wget   https://cn.wordpress.org/latest-zh_CN.zip
#解压到家目录
uzip wordpress-6.8.1-zh_CN.zip
#创建存放代码目录
mkdir -p /app/code/blog/
#移动到存放代码的目录下
mv wordpress/*  /app/code/blog/
#修改所有者与所属组为nginx
chown -R nginx.nginx /app/code/blog/
  • 访问站点blog.zhangmianxin.cn以及后台blog.zhangmainxin.cn/wp-admin/

博客文章在数据库的位置
select * from blog.wp_posts\G
非常危险,显示所有列

PHP请求处理过程

PHP文件请求过程详解

#默认访问nginx,
server {
  listen 80;
  server_name blog.zhangmianxin.cn;
  root /app/code/blog;
  error_log /var/log/nginx/blog-error.log notice;
  access_log /var/log/nginx/blog-access.log main;
#如果是以PHP结尾就访问PHP结尾
#将PHP请求交给9000端口
location / {
 index index.php ;
}  
location ~*\.php$ {
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_index index.php;
 #SCRIPT_FILENAME  $document_root$fastcgi_script_name
 #转发的时候加上基本信息告诉php的绝对路径
 #交给php处理,php根据文件的绝对路径读取php文件并解析
 #会根据PHP解释器去解析
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 include fastcgi_params;
}
}

数据库迁移

迁移准备流程

  • 准备db01环境,安装数据库mariadb
  • 将旧的数据库进行备份
  • 将备份的数据导入db01新环境
  • web代码连接数据库
  • 调试测试新环境数据库,没有问题关闭web节点上的数据库

迁移数据

#迁移web01数据库数据到db01上
参数:
mysqldump  数据库迁移指令
--all-databases 或 -A 备份所有库
#两种迁移
#直接写入
mysqldump -uroot -p1 --all-databases >web-db-all.sql
#打包压缩
mysqldump  -uroot -p1 --all-databases |gzip >web-db-all.sql.gz
#检查迁移
ll -h web-db-all.sql 
vim  web-db-all.sql 
#传输该数据库文件到db01上
scp web-db-all.sql.gz root@db01:~
~  发送到家目录

导入数据

  • 导入web01数据库数据库到db01数据库中
#压缩包 zcat zless zgrep
zcat web-db-all.sql.gz|mysql -uroot -p
#不是压缩包
mysql -uroot -p <web.db-all.sql
#重新授权,进入数据库进行,重新加载权限信息
flush privileges;

修改数据库的主机

  • 找关键信息
find -type f | xargs grep -l 'localhost'
  • 修改web01业务代码连接的数据库
  • ./wp-config.php
  • 更改登录连接 localhost-->172.16.1.5
[root@web01 /app/code/blog]# grep DB_ wp-config.php
define( 'DB_NAME', 'blog' );
define( 'DB_USER', 'blog' );
define( 'DB_PASSWORD', 'blog' );
define( 'DB_HOST', '172.16.1.51' );
define( 'DB_CHARSET', 'utf8mb4' );
define( 'DB_COLLATE', '' );

  • 最后关闭web节点上的数据库
  • 测试远程连接是否成功!