LNMP基础架构
LNMP架构作用可以使用架构处理动态网站页面
LAMP架构: Linux系统 apache服务 mysql数据库 php
常见的LNMP架构为
(1) Linux系统 nginx服务 mysql数据库 php
(2) Linux系统 nginx服务 mysql数据库 python
LNMP架构访问流程
分为三种情况
情况一: 静态页面
用户通过浏览器访问网站 nginx服务直接进行处理响应静态页面
情况二:动态页面
当用户通过浏览器进行访问动态页面时 nginx服务收到请求 发现是动态页面请求无法处理时 会通过fastcgi_pass指令调用FostCGI接口 发送出php服务 php_fpm收到会查看是否能够处理这个请求(是否要调用数据库数据).
(1) 能够处理时 会将处理后的信息通过nginx显示给用户
(2) 不能响应时 这时会由wrapper线程通过PHP解析器处理 (转换成数据库能理解的指令) 传输给数据库 数据库处理后在发出响应 php --> nginx --> 用户
Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。
FastCGI接口在Linux下是socket(这个socket可以是文件socket,也可以是ip socket)。
为了调用CGI程序,还需要一个FastCGI的wrapper,这个wrapper绑定在某个固定socket上,如端口或者文件socket。
当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接收到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据发送给客户端。
LNMP架构部署
架构是由Linux
nginx
MySQL
php
组成
第一步安装服务
(1) Linux系统 注意事项:
(1) 系统安全服务是否关闭/优化 (selinux iptables)
(2) 确认系统 /tmp 目录权限是否为1777 (若不是1777 php服务可能会报错)
(2) nginx服务
注意事项:
(1) 更新nginx官方源后进行下载安装 (yum install -y nginx)
MySQL数据库服务
数据库服务使用的是特殊语句 SQL语句
mysqladmin -u[用户名] password “123456” 为指定用户设置进入数据库密码
-u 指定用户
password " " 指定密码
mysql -e flush privileges 不进入MySQL进行刷新数据库内用户信息
数据库命令
flush privileges 刷新数据库内的用户信息
mysql 进入数据库
mysql -uroot -p123456 通过验证用户/密码进入数据库
show databases; 查看MySQL服务所有库信息
use xxxx; 切换到指定表
show tables; 查看库中所有表信息
create database xxx; 创建数据库
select .* from user; 查看指定表的某一行
select [行头] from [数据表]
update 修改数据库表内容信息
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
set 指定列
where 指定行
grant all on xxx.* to 'xxx'@'localhost(ip白名单)' identified by '密码'
设置指定数据库管理用户及权限,密码 放行白名单信息
grant 指定权限
on 指定管理的库
to 指定用户名@白名单
identified by 指定密码
php解析动态访问请求服务
(1) 解决冲突 : yum remove php-mysql php php-fpm php-common
(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
更新yum源之后,新生成的文件信息:
webtatic-archive.repo / webtatic.repo / webtatic-testing.repo
epel.repo.rpmnew / epel-testing.repo
yum clean al
更新缓存
(3) 利用yum安装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
(4) 修改php服务进程管理用户信息(建议修改的用户和nginx worker进程用户一致)
vim /etc/php-fpm.d/www.conf
user = nginx 在第8行进行修改
group = nginx 在第10行进行修改
启动运行php-fpm程序
systemctl start php-fpm
第二步 编写动态页面 测试架构
建立nginx和php的通讯
(1) 编写nginx扩展配置文件
server {
listen 80;
server_name blog.oldboy.com;
location / {
root /html/blog;
index index.php index.html;
}
location ~ \.php$ { 指定匹配 .php结尾访问
root /html/blog; 指定php解析的站点目录
fastcgi_pass 127.0.0.1:9000; 指定php服务地址 : 端口
fastcgi_index index.php; 指定php解析的默认网页文件
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
(将站点目录和网页文件传输信息给PHP服务)
include fastcgi_params; 指定解析变量使php服务识别
}
}
(2) 编写动态网页
vim xxx.php
<? php
phpinfo()
?>
测试页面不用理会其内容
读取服务器信息 显示到网页上
(3) 访问网页查看结果
第3章 部署搭建动态网站
第一步 下载获取动态网站代码
博客网站开源代码: wordpress
--- blog.oldboy.com
代码下载地址: [https://cn.wordpress.org/download/](https://cn.wordpress.org/download/)
论坛网站开源代码: discuz
--- bbs.oldboy.com
代码下载地址:[https://www.discuz.net/thread-3796882-1-1.html](https://www.discuz.net/thread-3796882-1-1.html)
导航网站开源代码: dedecms / phpcms
--- www.oldboy.com
phpcms V9 http://www.phpcms.cn/html/download/phpcms/#content
知乎网站开源代码: wecenter
--- zhihu.oldboy.com
第二步 将代码信息进行上传
(1) 上传代码 进行解压
(2) 修改代码目录属主属组 修改为nginx服务woaker进程用户
chmod -R xxx.xxx 目录
(3) 将原站点目录删除 将有index.html的目录修改为站点目录
(4) 创建管理数据库用户信息
在数据库中输入
grant all on 库名.* to '管理用户'@'白名单IP' identified by '密码';
用户最好和库名一致
select user,host from mysql.user;
查看是否创建成功
(5) 访问动态页面初始化配置
第4章 数据库迁移
(1) 将数据库数据进行备份
mysqldump -uroot -p123456 -A >/tmp/mysql_bak.sql
-A
将数据库所有信息信息打印
(2) 将数据传输到对应远程MySQL服务器上
rsync -avz /tmp/mysql_bak.sql 172.16.1.51:/tmp/
(3) 将备份数据进行还原
mysql -uroot -p123456 </tmp/mysql_bak.sql
将数据输入数据库服务中
(4) 修改web服务器连接数据库地址信息
(1) 对站点目录中连接数据库文件进行修改
(2) 修改数据库 管理库文件用户信息 数据库中输入
grant all on xxx.* to ‘xxx’@‘172.16.1.%’ identified by ‘123456’;
(3) 数据库服务dns反向解析问题处理:
修改/etc/my.cnf
在数据库报错修改地址 [mysqld] 下添加skip-name-resolve
取消反向代理
(5) 访问网站进行测试
数据库备份恢复后, root用户密码失效了
mysql数据库:
备份数据库过程: 所有数据信息转换为 命令信息(SQL语句)
恢复数据库过程: 执行SQL语句 包括但不限于: 创建库 创建表 添加没有信息
正常创建用户用: grant命令 代表: 授权操作 会立即生效
备份恢复时使用: insert 代表: 插入操作 不会立即生效 这时要是使用: flush privileges(刷新权限)
恢复完数据之后 --->mysql -e flush privileges
(刷新权限) --> 识别到root用户的密码信息
phpcmsV9 mysql配置文件
caches/configs/database.php
Discuz x3数据库迁移修改路径
修改数据库配置信息,需要修改几处如下
bbs/config/config_global.php
config/config_global_default.php
config/config_ucenter.php
config/config_ucenter_default.php
uc_server/data/config.inc.php
用编程软件打开修改修改以上几个文件的数据库信息即可。
例如:
$_config['db']['1']['dbuser'] = 'root'; /数据库用户名
$_config['db']['1']['dbpw'] = 'root'; /数据库密码
$_config['db']['1']['dbname'] = 'shepo'; /数据库名
define('UC_DBUSER', 'root'); /Ucenter数据库用户名
define('UC_DBPW', 'root'); /Ucenter数据库密码
define('UC_DBNAME', 'shepo'); /Ucenter数据库名
以上几个都是要修改的,用编程软件打开修改
wordpress数据迁移
实现数据库数据迁移操作
https跳转配置
在后台修改URL为https访问 再把nginx配置文件修改
wordpress数据库配置路径
vim /html/blog/wp-config.php
第5章 网站数据共享存储
将web服务器中的数据进行共享 实现数据同步 统一管理
(1) 找到web服务器上存储网站用户数据信息的目录
(2) 将web服务器上存储目录内数据暂时移动到别的目录
挂载会导致挂载期间无法找到挂载点原有数据 所以要先将数据移走
(3) 进行挂载 挂载到nfs共享存储服务器 nfs存储目录
mount -t nfs 172.16.1.1:/data/xxx /xxx
(4) 将数据进行还原
注意事项
(1) 挂载时注意挂载点数据会被暂时覆盖
(2) web实现共享存储需要有nfs服务
(3) nfs服务器服务是否开启 否则挂载时会卡死
(4) 恢复数据到站点目录时需要注意 nfs默认对root用户进行映射 映射成为nfs默认用户(nfsnobody) 所以无法存储
解决 暂时设置root用户不做映射 数据导回结束后再改回来
第6章 动态网站页面修改域名
动态页面修改域名会涉及到数据库内容信息 只修改配置文件无法做到要求 (页面扩展功能会无法使用)
第一步: 修改配置文件域名信息写入新的域名信息
第二步: 修改网站代码or数据库信息 一般网站后台进行修改
第三步: 做DNS解析 解析到新的域名
第四步: 重启nginx服务
注意 老域名更换时不要直接删除 设置跳转 让用户平滑接受新域名
第7章 网站传输超过1M数据配置方法
在nginx主配置文件内输入
client_max_body_size 100M;
指定传输数据限制最大100M
官方解释:
Syntax: client_max_body_size size;
Default: client_max_body_size 1m;
Context: http, server, location