六.安装mariadb数据库 db01
[root@db01 ~]$ yum install mariadb-server mariadb -y 启动Mariadb数据库, 并加入开机启动 [root@db01 ~]$ systemctl start mariadb [root@db01 ~]$ systemctl enable mariadb #检查 [root@db01 ~]$lsof -i :3306 [root@db01 ~]$ps -ef|grep mariadb [root@db01 blog]$ mysql #直接进去 给Mariadb配置登陆密码,并设置新密码进行登录数据库 [root@db01 ~]$ mysqladmin -uroot password oldboy123 [root@db01 ~]$ mysql -uroot -poldboy123 [root@db01 ~]$ mysqladmin -uroot -poldboy123 password oldboy #有密码更改密码 #登录MySQL,删除无用的用户 drop user root@'::1'; delete from mysql.user where user=''; delete from mysql.user where host='db01'; delete from mysql.user where host='127.0.0.1'; grant all on *.* to root@'172.16.1.%' identified by 'oldboy123'; select user,host from mysql.user; flush privileges;
#php测试,配置hosts文件 #Nginx连接Fastcgi服务器配置如下 [root@web01 blog]$cat /etc/nginx/conf.d/01_blog.conf server { listen 80; server_name blog.yunwei.com; root /data/blog; index index.php index.html; 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; } } 在/data目录下创建test_php.php文件 [root@web01 ~]$ mkdir /data/blog -p [root@web01 ~]$ cat /data/blog/test_php.php [root@web01 ~]$ chown -R www.www /data/blog #浏览器测试 http://blog.yunwei.com//test_php.php #mariadb测试 [root@web01 ~]$ cat /data/blog/test_mysql.php [root@web01 ~]$ chown -R www.www /data/blog #浏览器测试 http://blog.yunwei.com/test_mysql.php
扩展:企业级应用实战案例:科学授权站点目录权限和属组方法 #(1)生产授权方案(新手可不用): [root@web01 blog]# chown -R root.root /data/blog [root@web01 blog]# mkdir -p /data/blog/uploads [root@web01 blog]# chown -R www.www /data/blog/uploads #此目录可能没有。 [root@web01 blog]# ll wp-content/ plugins ##blog增加功能 root.root themes ##blog主题皮肤 root.root uploads ##上传目录www.www #(2)LNMP企业级核心安全优化思想: chown -R www.www /data/blog/uploads/ #安全隐患很大。 #黑客会放Webshell.php木马到/data/blog/upload/来遍历文件插入广告 或者提权root。 #执行放的webshell,http://xx/upload/webshell.php ##轮询站点, 改所有站点文件,嵌入它的广告 #网站安全防护露点: 对外:http,https(控制这里),没办法白名单。 对内:ssh(禁止对外访问),可以白名单。 # (3)#针对80端口安全防护限制: 1.php程序控制,上传的程序扩展名不能是.php,.sh等等 2.访问/data/blog/upload/(*.php return 403) location /upload/ \.php$ { return 403 } 3.挂载NFS mount,noexec,nosuid 4.通过架构,限制动态请求方法 location /upload/ 禁止GET,不能浏览。 解决方法:动静分离 动态:location /upload/ 禁止GET,不能浏览。 静态:没有PHP环境 location /upload/ 5.配置waf防火墙或者开发第三方安全模块(比如还可以控制sql语句执行等) 6.永远确保站点权限最优 #工作启动Nginx脚本:start_nginx.sh chown -R root.root /data/blog chown -R www.www /data/blog/uploads #启动前做站点目录,权限和用户做检查。 #检测:权限、用户和组不对,自测、报警。。省略检测脚本100行。提供思路 systemctl reload nginx # (4) 因blog需要使用数据库, 所以需要建立blog数据库,并授予指定权限 [root@web01 ~]# mysql -uroot -poldboy123 mysql> create database blog; mysql> exit;
企业级应用实战案例:采用异地db01.yunwei.com方式访问数据库,而不是本机localhost
#db01上操作 MariaDB [(none)]> create database blog; #创建blog数据库 MariaDB [(none)]> show databases; #查看 MariaDB [(none)]> grant insert,delete,update,select,create,alter on blog.* to blog@'172.16.1.%' identified by 'oldboy123'; #MariaDB [(none)]> grant all privileges on blog.* to blog@'172.16.1.%' identified by 'oldboy123';#创建用户密码并 授权。 MariaDB [(none)]> flush privileges; Query OK, 0 rows affected (0.00 sec) ##### all privileges为所有权限: 本次科学权限:select,delete,insert,update,create,alter 工作中生产线应该:select,delete,insert,update 针对数据内容 create,alter 表结构,库结构。 #一定一定由DBA或运维控制。 企业故障案例: 表结构被开发修改了,导致运维背锅。 最终比对备份的表结构和上线数据库表结构,发现开发改了表结构。 解决办法:收回select,delete,insert,update以外的权限由DBA控制。 #测试 [root@db01 blog]# mysql -ublog -poldboy123 -h172.16.1.51 MariaDB [(none)]> #修改/etc/hosts为如下 [root@web01 blog]# grep db01 /etc/hosts 172.16.1.51 db01 db01.yunwei.com #db01.yunwei.com为连 接数据库的域名。
#部署WordPress博客 5) 通过浏览器访问http://blog.yunwei.com/, 并部署该产品 数据库名blog 账户名blog 密码oldboy123 数据库主机db01.yunwei.com 表前缀oldboy_ 部署知乎软件Wecenter 知乎产品官方:https://www.wecenter.com/downloads/ 配置Nginx虚拟主机站点,域名为zh.yunwei.com [root@web01 ~]# cat /etc/nginx/conf.d/02_zh.conf server { listen 80; server_name zh.yunwei.com; root /data/zh; index index.php index.html; 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服务 [root@web01 ~]# nginx -t [root@web01 ~]# systemctl reload nginx 下载Wecenter产品,部署并授权 [root@web01 ~]# cd /server/tools [root@web01 tools]# rz #回车上传知乎软件 [root@web01 tools]# unzip WeCenter_3-6-0.zip -d /data/zh [root@web01 tools]# chown -R www.www /data/zh/ #部署完需要 优化目录权限 #db01上操作 wecenter产品也需要使用数据库, 所以需要手动建立数据库 [root@db01 tools]# mysql -uroot -poldboy123 #登陆数据库 MariaDB [(none)]> create database zh; #创建zh数据库 MariaDB [(none)]> grant all on zh.* to zh@'localhost' identified by 'oldboy123'; #先给全部,安装后,在给下面的权限,不然安装出错 MariaDB [(none)]> grant select,insert,update,delete on zh.* to 'zh'@'172.16.1.%' identified by 'oldboy123'; #异地 数据库用户,只授权增删改查。 MariaDB [(none)]> flush privileges; MariaDB [(none)]> quit 通过浏览器访问zh.yunwei.com,并通过网页配置,最终结果 产品优化 #权限优化 chown -R root.root /data/zh chown -R www.www /data/zh/uploads /data/zh/cache/ /data/zh/tmp/ #限制目录下php被访问 location ~* /(?:uploads|cache|tmp)/.*\.php$ { deny all; } #前后台分离(独立后台服务器) <==生产场景方案 #动静分离(独立静态服务器) <==生产场景方案
拆分静态资源至独立存储服务器NFS
#为什么拆分静态资源至独立存储服务器 当后端的web节点出现多台时,会导致用户上传的图片、视频附件等内容仅上传至一台web服务器,那么其他的web服务器则无法访问到该图片。 #新增一台nfs存储解决了什么问题 1.保证了多台web节点静态资源一致。 2.有效节省多台web节点的存储空间。 3.统一管理静态资源,便于后期推送至CDN进行静态资源加速 快速扩展一台web节点环境规划 nfs服务端,操作步骤如下 useradd -u1111 www -s /sbin/nologin -M 安装并配置nfs [前面已配置] [root@nfs01 ~]# rpm -qa nfs-utils nfs-utils-1.3.0-0.68.el7.x86_64 [root@nfs01 ~]# yum install nfs-utils -y [root@nfs01 ~]# cat /etc/exports /data/blog 172.16.1.0/24(rw,sync,all_squash,anonuid=1111,anongid=1111) /data/zh 172.16.1.0/24(rw,sync,all_squash,anonuid=1111,anongid=1111) [root@nfs01 ~]# systemctl reload nfs 创建共享目录,并进行授权 useradd -u 1111 -s /sbin/nologin -M [root@nfs01 ~]# mkdir /data/{blog,zh} -p [root@nfs01 ~]# chown -R www.www /data/ 启动nfs服务,并加入开机自启 [root@nfs01 ~]# systemctl restart rpcbind nfs [root@nfs01 ~]# systemctl enable rpcbind nfs web01节点安装nfs,然后使用showmount查看服务端共享的资源 [root@web01 ~]# yum install nfs-utils -y [root@web01 ~]# showmount -e 172.16.1.31 Export list for 172.16.1.31: /data/zh 172.16.1.0/24 /data/blog 172.16.1.0/24 如何查找blog静态资源存放的位置 浏览器->右键->检查->Network->选择左上角的Select按钮->点击对应的图 片,然后能获取到对应的url地址,如下 http://blog.yunwei.com/wp-content/uploads/2021/07/ 备份web01服务器上blog的静态资源,因为该服务器上的资源资源最全 [root@web01 blog]# scp -rp /data/blog/wp-content/uploads/* root@172.16.1.31:/data/blog/wp-content/uploads web01客户端执行挂载操作 [root@web01 blog]# mount -t nfs 172.16.1.31:/data/blog/wp-content/uploads /data/blog/wp-content/uploads/ [root@web01 blog]# df -h 将挂载信息加入开机自启 [root@web01 blog]# tail -1 /etc/fstab 172.16.1.31:/data/blog/wp-content/uploads /data/blog/wp-content/uploads nfs defaults 0 0 172.16.1.31:/data/zh/uploads /data/zh/uploads nfs defaults 0 0 [root@web01 blog]# umount 172.16.1.31:/data/blog/wp-content/uploads [root@web01 blog]# df -h|grep uploads [root@web01 blog]# mount -a [root@web01 blog]# df -h ###fstab延迟启动nfs [root@web01 blog]# systemctl list-unit-files|grep remote-fs remote-fs.target disabled [root@web01 blog]# systemctl enable remote-fs.target [root@web01 blog]# systemctl list-unit-files|grep remote-fs remote-fs.target enabled web02 web02客户端直接挂载nfs即可 [root@web02 zh]# mount -t nfs 172.16.1.31:/data/blog/wp-content/uploads /data/blog/wp-content/uploads/ [root@web02 zh]# df -h 将挂载信息加入开机自启 [root@web02 zh]# vi /etc/fstab 172.16.1.31:/data/blog/wp-content/uploads /data/blog/wp-content/uploads nfs defaults 0 0 172.16.1.31:/data/zh/uploads /data/zh/uploads nfs defaults 0 0 [root@web02 zh]# umount /data/blog/wp-content/uploads [root@web02 zh]# df -h|grep uploads [root@web02 zh]# mount -a [root@web02 zh]# df -h ###fstab延迟启动nfs [root@web01 zh]# systemctl list-unit-files|grep remote-fs remote-fs.target disabled [root@web01 zh]# systemctl enable remote-fs.target [root@web01 zh]# systemctl list-unit-files|grep remote-fs remote-fs.target enabled 定时任务(web01,web02)备份到backup #web01,web02配置rsync密码文件 echo 'oldboy123' > /etc/rsync.password chmod 600 /etc/rsync.password ll /etc/rsync.password [root@web01 /]# cat /server/scripts/bak.sh #!/bin/bash backup=/backup Path="$backup/$(hostname -i)" [ -f $Path ]||mkdir -p $Path if [ $(date +%w) -eq 2 ];then date="$(date +%F -d "-1day")_week1" else date="$(date +%F -d "-1day")" fi #备份 cd $Path &&\ tar zcfh conf_${date}.tar.gz /var/spool/cron/root /server/scripts /etc 2>/dev/null tar zcf www_${date}.tar.gz /data --exclude=/data/blog/wp-content/uploads --exclude=/data/zh/uploads 2>/dev/null tar zcf logs_${date}.tar.gz /var/log/nginx 2>/dev/null #获取原始指纹 find $Path -type f -name "*_${date}.tar.gz"|xargs md5sum >$Path/$(hostname -i)_${date}.flag #推送 rsync -az $backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password #删除7天前的数据 find $backup/ -type f -name "*.tar.gz" -mtime +7|xargs rm -f #检查nfs01的sersync,检查backup的rsync。 #定时任务 #bak 01 00 * * * /bin/sh /server/scripts/bak.sh &>/dev/null #db01 sqlbak [root@db01 ~]# cat /server/scripts/sqlbak.sh backup=/backup Path="$backup/$(hostname -i)" [ -f $Path ]||mkdir -p $Path if [ $(date +%w) -eq 2 ];then date="$(date +%F -d "-1day")_week1" else date="$(date +%F -d "-1day")" fi #备份 cd $Path &&\ /usr/bin/mysqldump -uroot -poldboy123 -A -B |gzip > allsql_${date}.sql.gz #获取原始指纹 find $Path -type f -name "*_${date}.sql.gz"|xargs md5sum >$Path/$(hostname -i)_${date}.sql.flag #推送 rsync -az $backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password #删除7天前的数据 find $backup/ -type f -name "*.tar.gz" -mtime +7|xargs rm -f [root@db01 ~]# #定时任务 #sqlbak 01 00 * * * /bin/sh /server/scripts/sqlbak.sh &>/dev/null #backup服务器要配置定时删除日志脚本,此处忽略
解决会话共享,安装redis
yum install epel-release -y yum install redis -y sed -i '/^bind/c bind 127.0.0.1 172.16.1.51' /etc/redis.conf grep "^bind" /etc/redis.conf systemctl start redis systemctl enable redis systemctl status redis #查看服务状态 systemctl stop redis #停止服务 systemctl restart redis #重启服务 ps -ef | grep redis #查看reids服务信息 systemctl enable redis #redis开机启动 ##### cd /etc/opt/remi/php74 修改php.ini session.save_handler = redis session.save_path = "tcp://172.16.1.51:6379" cd /etc/opt/remi/php74/php-fpm.d/www.conf 注释 ;php_value[session.save_handler] = files ;php_value[session.save_path] = /var/opt/remi/php74/lib/php/session systemctl restart php74-php-fpm.service