第1章 部署LNMP架构步骤

1.1 ①部署Linux系统(OK)

基本优化完成(ip地址设置 yum源更新 字符集设置)

安全优化完成(iptables关闭 selinux关闭 /tmp/ 1777)

1.2 ②部署nginx网站服务

A.安装软件依赖包

B.创建进程管理用户

C.下载nginx软件,进行编译安装(编译安装三步曲)

D.创建软链接文件

E.编写nginx配置文件

F.启动nginx服务

G.编写hosts解析文件,进行浏览器访问测试

第2章 ③部署mysql数据库服务(web服务器)

2.1 软件部署过程

A.下载mysql软件

mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz

B.二进制包方式安装mysql数据库软件

2.1.1 a.解压二进制包软件

cd /server/tools tar xf mysql-5.6.-linux-glibc2.-x86_64.tar.gz

2.1.2 b.创建mysql虚拟用户

useradd -s /sbin/nologin -M mysql

2.1.3 c.将解压后的二进制包放置到程序目录中

 cd /server/tools

 mv mysql-5.6.-linux-glibc2.-x86_64 /application/mysql-5.6.

 ln -s /application/mysql-5.6./ /application/mysql

2.1.4 c.要对mysql数据存储目录data进行授权

chown -R mysql.mysql /application/mysql/data #这里也可以直接让用户直接管理mysql目录 ll /application/mysql/data/

2.1.5 e.初始化数据库服务

/application/mysql/scripts/mysql_install_db --basedir=/application/mysql --datadir=/application/mysql/data --user=mysql echo $?

提示:如何判定以上初始化命令执行成功

01.确认返回值

02.确认命令执行输出内容中,必须存在两个OK

03.通过数据库初始化操作,在data目录中创建出默认数据库信息和相关表信息

其中,查看初始化输出的内容

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.server到系统启动目录

2.1.6 f.将启动脚本文件复制到启动目录中并授权

cp -a /application/mysql/support-files/mysql.server /etc/init.d/mysqld

chmod +x /etc/init.d/mysqld

注意mysql相关文件:启动脚本/etc/init.d/mysqld  启动命令/application/mysql/bin/mysqld_safe

因为两文件中都存在mysql安装默认路径/usr/local/mysql,故这里进行同时修改,如下

2.1.7 g.修改启动脚本和mysql命令中的路径

sed -i 's#/usr/local/mysql#/application/mysql#g' /application/mysql/bin/mysqld_safe /etc/init.d/mysqld

2.1.8 h.复制mysql默认的服务配置文件

cp /application/mysql/support-files/my-default.cnf /etc/my.cnf

说明:mysql默认配置文件保存位置support-files/my-default.cnf,但my-default.cnf不能在mysql目录下配置,更改为/etc/my.cnf使系统能够识别mysql配置信息,且原有/etc/my.cnf与安装版本不同

2.1.9 i.启动mysql服务

 /etc/init.d/mysqld start

 Starting MySQL.... SUCCESS!

 netstat -lntup|grep mysql

 tcp             :::          :::*             LISTEN      /mysqld

说明:至此mysql数据库安装完成,可以检测进程和服务端口,确认服务是否启动正确

2.2 mysql管理讲解

2.2.1 01.进入与退出mysql数据库方法

/application/mysql/bin/mysql

退出数据库时,尽量不要用ctrl+c进行退出mysql ,使用ctrl+d进行退出

2.2.2 02.设置全局变量,便于登录数据库

 echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile

 source /etc/profile

 which mysql

a.查看数据库信息

 mysql> show databases;

 +--------------------+

 | Database           |

 +--------------------+

 | information_schema |

 | mysql              |

 | performance_schema |

 | test               |

 +--------------------+

  rows in set (0.13 sec)

b.查看数据表信息(二维表)

 mysql> use mysql;   #因为表属于库,故此处要具体到使用某一个数据库进行查看

 Reading table information for completion of table and column names

 You can turn off this feature to get a quicker startup with -A

 Database changed

 mysql> show tables;   #显示信息

2.2.3 03.设置mysql服务开机自启动

加入开机自启动

chkconfig --add mysqld chkconfig mysqld on

2.2.4 04.设置mysql数据库登录用户名与密码

给MySQL root用户设置密码

 /application/mysql/bin/mysqladmin -u root password 'oldboy123'   #本地设定密码,提示可忽略

 mysql -u root -poldboy123

 /application/mysql/bin/mysqladmin -u root -h web01 password 'oldboy123'   #远端设定密码,择其一

2.3 常用命令参数说明

 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 *.* to Old_Boy@'localhost' identified by 'oldboy123'; #<-创建用户(大写用户)
drop user 'user'@'host'; #<-删除用户及用户关联库
flush privileges; #<-刷新权限
初级 添加删除系列
create database wordpress; #<-创建数据库
drop database wordpress; #<-删除数据库

第3章 ④部署PHP动态解析服务

01.配置LNMP架构步骤

A.配置nginx配置文件

B.配置mysql数据库信息(SQL语句)

C.配置wordpress博客网站

02.架构服务器串联

a.数据库数据信息迁移(web服务器上的mysql数据迁移到10.0.0.51数据库服务器上)

b.将本地存储数据挂载到NFS共享存储服务器里(共享存储用户上传的数据信息)

3.1 PHP软件安装步骤

3.1.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

# zlib压缩有关软件 libxml2字符集有关软件 libjpeg图片有关软件等

说明:由于libiconv-devel无法进行yum安装,故使用编译如下

3.1.1.1  libiconv-devel软件安装--字符集转换库

#和字符集转换的相关软件

 mkdir -p /server/tools

 cd /server/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 ../

#和数据加密有关的三个软件

 #wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo   #更改epel源

 yum -y install libmcrypt-devel mhash mcrypt

 rpm -qa libmcrypt-devel mhash mcrypt

说明:此软件在centOS6.8之后,系统已经自带此软件功能,可以不进行安装

编译好的软件卸载方法:删除安装后的程序目录

FPM:rpm包制作软件---把编译后的程序目录进行打包,通过fpm指定rpm解压前要先安装哪些软件

自动化部署必备技能—定制化RPM包:http://blog.oldboyedu.com/autodeploy-rpm/

3.2 下载解压PHP软件

 cd /server/tools/
tar xf php-5.5..tar.gz
cd php-5.5. ./configure \
--prefix=/application/php-5.5. \ #指定php软件安装位置
--with-mysql=/application/mysql \ #指定mysql软件安装位置 mysqlnd数据库服务没有安装在本地服务器上参数(web服务器视情况而定)
--with-pdo-mysql=mysqlnd \ #定义接口pdo
--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 \ #fpm要与wrapper程序对接,用户需一致
--with-fpm-group=www \
--enable-ftp \
--enable-opcache=no

说明:LNMP架构部署时,如果mysql服务和web服务不在一台主机上,php配置参数需要进行调整

--with-mysql=/application/mysql/  =>  --with-mysql=mysqlnd

3.2.1 防错步骤

 ln -s /application/mysql/lib/libmysqlclient.so.  /usr/lib64/

 touch ext/phar/phar.phar   #创建软链接生成目录

 make

 make install

说明:此时/application下会生成程序文件信息

3.3 PHP软件程序创建软链接

ln -s /application/php-5.5./ /application/php

3.4 配置php解析文件/配置php-fpm配置文件

php服务拥有两个配置文件

01.php.ini

 cd /server/tools/php-5.5.

 ll php.ini*

 -rw-r--r--.     -- : php.ini-development   #开发人员调试用配置文件

 -rw-r--r--.     -- : php.ini-production    #生产常见所有配置文件

说明:文件比较命令vimdiff php.ini-development php.ini-production

php.ini-production 与 php.ini-development 文件区别关系对比:

①  生产文件:不会输出太多日志信息

②  开发文件:会输出大量程序测试日志信息

cp php.ini-production /application/php/lib/php.ini 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   #忽略此步骤

3.5 启动php服务

/application/php/sbin/php-fpm lsof -i : #<-确认php 9000端口是否正确启动 ps -ef|grep php-fpm

第4章 wordpress博客站点部署配置

4.1 01.修改nginx配置文件,使nginx程序与php程序建立联系(fastcgi)

 vim extra/blog.conf

 server {

         listen       ;

         server_name  blog.etiantian.org;

         location / {

                     root   html/blog;

                     index  index.php index.html index.htm;          <--需要注意编辑修改默认首页文件  index  index.php index.html index.htm;

         }

         location ~* .*\.(php|php5)?$ {   #以php|php5结尾的动态资源访问文件交给php处理

                     root html/blog;

                     fastcgi_pass  127.0.0.1:;   #使用127.0.0./24本地网段建立互联

                     fastcgi_index index.php;

                     include fastcgi.conf;

         }

 }

说明:利用nginx的location区块实现动态请求与静态请求的分别处理;让nginx服务具有动态请求解析功能  location ~* .*\.(php|php5)?$  修改后==> location ~* (php|php5)$

4.2 ⭐02.编辑nginx与php连通性测试文件,并进行测试

测试动态请求是否可以处理前提:

01.必须要有动态资源文件php文件

 cd /application/nginx/html/blog

 vim test_info.php

 <?php

 phpinfo();

 ?>

说明:当php服务停止时,9000端口信息消失,即停止PHP错误报502错误

02.linux系统测试完毕后,建议利用浏览器进行最终测试,测试效果更明显些

客户端测试

curl http://blog.etiantian.org/index.html #<-静态请求站点文件信息测试 curl http://blog.etiantian.org/test_info.php #<-动态请求站点文件信息测试

浏览器测试

blog.etiantian.org #<-静态 blog.etiantian.org/test_info.php #<-动态

4.3 03.编辑php与mysql连通性测试文件,并进行测试

4.3.1 A.创建wordpress博客存储博客数据库

mysql -uroot -poldboy123; show databases; #<-查看当前数据库信息 create database wordpress;

4.3.2 B.创建数据库授权用户

 grant all on wordpress.* to 'wordpress'@'10.0.0.%' identified by 'oldboy123';

 flush privileges;   #刷新mysql的系统权限相关表

 

#授权 所有权限 针对某一个库.表信息(这里即所有) 让哪些用户可以有此权限 允许哪些网段的主机可以连接到数据库上(%即网段,亦可定义具体地址) 定义数据库密码信息

4.3.2.1  查看用户信息

 mysql> select user,host from mysql.user;

 +-----------+-----------+

 | user      | host      |

 +-----------+-----------+

 | wordpress | 10.0..%  |

 | root      | 127.0.0.1 |

 | root      | ::       |

 |           | localhost |

 | root      | localhost |

 |           | web01     |

 | root      | web01     |

 +-----------+-----------+

  rows in set (0.00 sec)

4.3.2.2  其他信息说明

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

4.3.3 C.测试php与数据库连通性

01.编写文件

 cd /application/nginx/html/blog

 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();

                }

    ?>

02.测试

curl blog.etiantian.org/test_mysql.php #<-xshell测试php与数据库的连通性 http://blog.etiantian.org/test_mysql.php #<-浏览器测试

4.4 04.下载部署wordpress博客程序

另外三个网站 bbs www blog

4.4.1 下载wordpress程序进行保存

说明:中文网站https://cn.wordpress.org/ 英文官网https://www.wordpress.org/

cd /server/tools/ wget https://cn.wordpress.org/wordpress-4.7.3-zh_CN.tar.gz

4.4.2 解压程序压缩包,将解压后程序代码复制到站点目录下

tar xf wordpress-4.7.-zh_CN.tar.gz mv wordpress/* /application/nginx/html/blog/

4.4.3 对站点目录进行授权

chown -R www.www /application/nginx/html/blog/

注意:统一目录下内容nginx用户管理,因为ps -ef|grep nginx显示nginx管理的用户是www。通过网站访问是以www用户,不修改则为root用户,用户没有写入权限

4.4.4 进行访问blog网站,完成初始化操作

连接数据库配置

数据库名:指定数据存储到哪一个数据库当中,如存储到wordpress数据库中

用户名:以什么用户身份管理wordpress数据库[不建议root权限过大]

密码:-

数据库主机:指定数据库所在的服务器地址信息[当nginx与数据库在同一台服务器上时,可以使用localhost]

表前缀:标识相应表属于哪一个数据库

注意:配置完数据连接信息后,浏览网页页面进行会自动生成WordPress基础配置文件,即/application/nginx/html/blog/ wp-config.php,此文件定义数据库连接配置参数选项。

第5章 wordpress博客站点数据库迁移(架构服务器串联)

5.1 迁移数据库:利用数据库备份命令(web服务器上的mysql数据迁移到数据库服务器上)

5.1.1 01.备份数据库中数据信息

 /application/mysql/bin/mysqldump -uroot -poldboy123 --all-databases >/tmp/bak.sql   #警告:在命令行界面使用密码可能不安全

 ll /tmp/bak.sql -h

 scp /tmp/bak.sql 172.16.1.51:/tmp/

5.1.2 02.将备份数据传送到10.0.0.51服务器上,进行恢复

[root@web01 ~]# rsync -avz /tmp/bak.sql 172.16.1.51:/tmp/ [root@db01 ~]# ll /tmp

5.1.3 03.mysql服务器快速部署mysql过程

 [root@db01 ~]# mkdir -p /server/tools   #上传mysql压缩包
[root@db01 ~]# vim /server/scripts/mysql_conf.sh #解压mysql压缩包 cd /server/tools tar xf mysql-5.6.-linux-glibc2.-x86_64.tar.gz mkdir -p /application #将解压后的二进制包放置到程序目录中 mv mysql-5.6.-linux-glibc2.-x86_64 /application/mysql-5.6. ln -s /application/mysql-5.6./ /application/mysql #创建mysql虚拟用户 useradd -s /sbin/nologin -M mysql #对mysql数据存储目录进行授权 chown -R mysql.mysql /application/mysql/data #复制mysql默认的服务配置文件 cp /application/mysql/support-files/my-default.cnf /etc/my.cnf #初始化数据库服务 /application/mysql/scripts/mysql_install_db --basedir=/application/mysql --datadir=/application/mysql/data --user=mysql #将启动脚本文件复制到启动目录中 \cp -a /application/mysql/support-files/mysql.server /etc/init.d/mysqld #修改启动脚本和mysql命令中的路径 sed -i 's#/usr/local/mysql#/application/mysql#g' /application/mysql/bin/mysqld_safe /etc/init.d/mysqld #启动mysql服务 /etc/init.d/mysqld start
[root@db01 ~]# sh /server/scripts/mysql_conf.sh

5.1.3.1  数据恢复功能

[root@db01 ~]# /application/mysql/bin/mysqladmin -uroot password #mysql数据库设置密码 [root@db01 ~]# /application/mysql/bin/mysql -u root -poldboy123 </tmp/bak.sql

5.1.4 04.进行测试(在web01服务器上进行远程登录数据库)

启动数据库并查看数据库信息

/application/mysql/bin/mysql -u wordpress -poldboy123 -h 10.0.0.51#<--修改配置文件之前,先测试网站web服务器与迁移后的数据库连通性 show databases;

注意:页面出现"建立数据库连接时出错"

原因:服务停止;连接时出现问题

5.1.5 05.数据库迁移完毕,修改web服务php连接数据配置文件信息

 cd /application/nginx/html/blog
vim wp-config.php #<--修改wordpress上的数据库连接参数信息 /** MySQL主机 */ define('DB_HOST', '10.0.0.51'); #<--修改连接的主机信息,将localhost修改为10.0.0.

说明:web服务器数据库此时可以关闭了

5.2 将本地存储数据挂载到NFS共享存储服务器上(共享存储用户上传的数据信息)

5.2.1 A.确认本地数据存储路径信息

01.通过查看网页图片属性信息进行确认路径

02.通过find查看数据存储路径信息

find . -type f -mmin -1

03.通过inotify软件进行监控

html/blog

5.2.2 B.将已有数据进行迁移备份

 cd /application/nginx/html/blog/wp-content/uploads     #数据库存储目录

 mkdir /tmp/wordpress_backup -p

 mv ./* /tmp/wordpress_backup/

5.2.3 C.将存储目录挂载到nfs共享目录上

 [root@nfs01 ~]# vim /etc/exports

 /backup 172.16.1.0/(rw,sync,all_squash)

 showmount -e 172.16.1.31

 [root@web01 ~]# mount -t nfs 172.16.1.31:/backup /application/nginx/html/blog/wp-content/uploads/

 mv /tmp/wordpress_backup/* /application/nginx/html/blog/wp-content/uploads/

说明:/etc/exports若未设置all_squash,则无法向共享目录中写入数据,需要调整nfs服务配置

01.修改映射参数

vim /etc/exports no_all_squash ==> all_squash

02.修改共享目录为指定默认映射用户-www

#保持web服务器同nfs的用户uid gid一致

usermod -u xxx www groupmod -g xxx www

vim /etc/exports anonuid=xxx,anongid=xxx #<-xxx值: uid及gid

此笔记是本人学习摘记整理而成,此为初稿(尚有诸多不完善之处),原创作品允许转载,转载时请务必以超链接形式标明文章原始出处,作者信息和本声明,否则将追究法律责任。http://www.cnblogs.com/bananaaa/

LNMP架构部署的更多相关文章

  1. 用lnmp架构部署wordpress网站详细步骤

    用lnmp架构部署wordpress网站 ①.下载和上传网站代码 用winscp或者xftp, 或者xshell下执行rz命令进行上传网站的包文件. ②.解压程序代码,并将程序代码保存到站点目录,并进 ...

  2. 《Linux就该这么学》培训笔记_ch20使用LNMP架构部署动态网站环境

    <Linux就该这么学>培训笔记_ch20使用LNMP架构部署动态网站环境 文章最后会post上书本的笔记照片. 文章主要内容: 源码包程序 LNMP动态网站架构 配置Mysql服务 配置 ...

  3. linux运维、架构之路-Lnmp架构部署

    一.Lnmp架构原理 二. Lnmp架构软件安装 1.Nginx安装脚本 #!/bin/bash useradd -s /sbin/nologin -M www mkdir -p /server/to ...

  4. 第20章 使用LNMP架构部署动态网站环境

    章节概述: 本章节将从Linux系统的软件安装方式讲起,带领读者分辨RPM软件包与源码安装的区别.并能够理解它们的优缺点. Nginx是一款相当优秀的用于部署动态网站的服务程序,Nginx具有不错的稳 ...

  5. 原创:LNMP架构部署个人博客网站 禁止转载复制

    nginx编译安装步骤 ①. 检查软件安装的系统环境 cat /etc/redhat-release uname -r ②. 安装nginx的依赖包(pcre-devel openssl-devel) ...

  6. Lnmp架构部署动态网站环境.2019-7-2-1.1

    一.Mysql简介 Mysql数据库: 1.社区版 2.商业版 3.cluster集群 Mysql安装方式 1.编译安装 2.yum/rpm 3.二进制包,直接解压,无需编译 二.Mysql安装部署 ...

  7. Lnmp架构部署动态网站环境.2019-7-3-1.4

    安装wiki开源产品 一.创建数据库 [root@Lnmp bbs]# mysql -uroot -p123456 mysql> create database wiki; #创建wiki数据库 ...

  8. Lnmp架构部署动态网站环境.2019-7-3-1.3

    Php安装 一.安装准备 1.Php依赖包 [root@Lnmp tools]# yum install -y zlib libxml libjpeg freetype libpng gd curl ...

  9. Lnmp架构部署动态网站环境.2019-7-3-1.2

    Nginx安装 一.安装准备 Pcre(Perl Compatible Regular Expressions,兼容正则表达式)安装pcre库是为了使Nginx支持HTTP Rewrite模块. 安装 ...

随机推荐

  1. Gaussian and Truncated Gaussian

    Everybody knows about Gaussian distribution, and Gaussian is very popular in Bayesian world and even ...

  2. vue学习之指令简写以及事件笔记

    1.v-bind:××× 可简写为 :××× 2.v-on:××× 可简写为 @××× 例: v-on:click 可简写为 @click (官网文档介绍) 3.vue处理事件 <!-- 阻止单 ...

  3. ch5-Class 与 Style 绑定(v-bind:class v-bind:style)

    数据绑定一个常见需求是操作元素的 class 列表和它的内联样式. 因为它们都是属性 ,我们可以用v-bind 处理它们:只需要计算出表达式最终的字符串. 不过,字符串拼接麻烦又易错.因此,在 v-b ...

  4. SqlServer和Oracle中一些常用的sql语句9 SQL优化

    --SQL查询优化 尽量避免使用or,not,distinct运算符,简化连接条件 /*Or运算符*/ use db_business go select * from 仓库 where 城市='北京 ...

  5. WPF加载程序集中字符串资源

    WPF资源 WPF资源使用其实的也是resources格式嵌入资源,默认的资源名称为"应用程序名.g.resources",不过WPF资源使用的pack URI来访问资源. 添加图 ...

  6. springboot与thrift集成实现服务端和客户端

    我们这里用一个简单的小功能来演示一下如何使用springboot集成thrift 这个功能是,判断hdfs路径存在. 1.先解决依赖 <dependencies> <dependen ...

  7. OpenGL ES2.0光照

    一.简单光照原理 平行光(正常光) 光照效果=   环境颜色 + 漫反射颜色 + 镜面反射颜色 点光源 光照效果=   环境颜色 + (漫反射颜色 + 镜面反射颜色)× 衰减因子 聚光灯 光照效果= ...

  8. AVPlayer缓存实现

    没有任何工具能适用于所有的场景,在使用AVPlayer的过程中,我们会发现它有很多局限性,比如播放网络音乐时,往往不能控制其内部播放逻辑,比如我们会发现播放时seek会失败,数据加载完毕后不能获取到数 ...

  9. SAP 邮件发送

    1.******************** *调用发送邮件函数 CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1' EXPORTING DOCUMENT_DA ...

  10. <Mastering KVM Virtualization>:第四章 使用libvirt创建你的第一台虚拟机

    在第3章<搭建独立的KVM虚拟化>中,你安装并启动了libvirtd服务.你还引入了帮助你管理虚拟机的libvirt管理工具virt-manager和virsh. 相较于命令行,新用户总是 ...