Yii2 – Mongodb的安装和配置 mongo

mongodb官方安装文档:https://www.mongodb.com/download-center

下面是centos环境安装mongodb3.2的步骤

1.

sudo rpm --import https://www.mongodb.org/static/pgp/server-3.2.asc
touch /etc/yum.repos.d/mongodb-org-3.2.repo
vim /etc/yum.repos.d/mongodb-org-3.2.repo  
添加内容如下:  
[mongodb-org-3.2]  
name=MongoDB Repository  
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/  
gpgcheck=1  
enabled=1

 

sudo yum install -y mongodb-org

2. vim /etc/selinux/config

SELINUX=disabled

3. mongodb 安装完成,可以启动mongodb了

sudo service mongod start

当然,我上面配置的是一个简单的mongodb,没有配置复制集和分片

安全ip连接设置:vim /etc/mongod.conf

net:
  port: 27017
  bindIp: 127.0.0.1

port代表开放的访问端口,bindIp这个是一个安全ip配置,允许那些ip连接mongodb,如果设置成bind_ip = 0.0.0.0,代表任意ip,建议只写连接的ip,如果是本机,就填写127.0.0.1即可。

这个是一个安全设置,线上系统一定要注意,iptables设置,只允许部分ip访问该端口,其他的pass掉,而且mongodb也要设置。

另外,对于线上系统,最好是使用账号密码的方式连接,进一步增强安全性。

 

4.安装mongodb的php扩展 ext-mongodb

注意:Fecshop 支持php7,需要安装ext-mongodb扩展,注意,这是两个扩展,ext-mongo扩展只能在php5中使用, ext-mongodb可以在php5和php7中使用,php7不能使用ext-mongo扩展。

 

4.1安装php的ext-mongodb扩展(兼容php7,fecshop需要安装ext-mongodb扩展,而不是ext-mongo扩展,ext-mongo只能在php5中使用,ext-mongodb可以在php5,php7,VVMH中使用,这里只安装ext-mongodb扩展

https://pecl.php.net/package/mongodb下载mongodb的安装包,我的安装步骤如下:

wget https://pecl.php.net/get/mongodb-1.2.5.tgz
tar zxvf mongodb-1.2.5.tgz
cd mongodb-1.2.5
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

*php.ini中加入:

extension=mongodb.so

 

重启php

对于mongodb的GUI,不要使用rockmongo了,现在有更好的工具:

你可以使用 RoboMongo GUI工具连接mongodb,下载地址 , 因为mongodb默认设置无密码,只允许127.0.0.1登录, 因此,可以使用RoboMongo的ssh方式登录,填写您的主机的ssh信息即可登录。(robomongo支持很多方式连接mongodb)

5.安装yii2-mongodb的扩展(如果您在安装fecshop,下面的步骤不需要操作)

插件地址:https://github.com/yiisoft/yii2-mongodb

在yii2的根目录下面运行:(已经安装composer)

composer require --prefer-dist yiisoft/yii2-mongodb

完成后,mongodb的yii2扩展安装完成

6.配置

'mongodb' => [
            'class' => 'yii\mongodb\Connection',
      //'class' => 'backend\models\core\mongodb\Mconnection',
      # 有账户的配置
            //'dsn' => 'mongodb://demofancyecommerce:fdaVBDFS#fdfdtyg423DF23#$@localhost:27017/demofancyecommerce',
      # 无账户的配置
      'dsn' => 'mongodb://127.0.0.1:27017/market',
      //'dsn' => 'mongodb://10.10.10.252:10001/erp,mongodb://10.10.10.252:10002/erp,mongodb://10.10.10.252:10004/erp?replicaSet=terry&readPreference=primaryPreferred',
      
        ],

然后就可以在yii2中使用mongodb了

yii2 – redis 配置

  1. 安装redis, 下面是2.8,注意,redis版本一定要高,2.2.7一下的版本是不行的,不支持php-redis,建议安装2.8+的版本
wget http://download.redis.io/releases/redis-3.2.9.tar.gz  
tar xzf redis-3.2.9.tar.gz  
cd redis-3.2.9  
make

2.6.14 这个版本有点老,大家可去找新的redis下载

cd src  
cp redis-server /usr/local/bin/  
cp redis-cli /usr/local/bin/

 

mkdir /etc/redis  
mkdir /var/redis  
mkdir /var/redis/6379

 

cd ..  
cp utils/redis_init_script /etc/init.d/redis_6379  
cp redis.conf /etc/redis/6379.conf

 

/etc/init.d/redis_6379 start

vim /etc/redis/6379.conf ,找到如下的代码部分,修改

daemonize to yes  
pidfile to /var/run/redis_6379.pid  
logfile to /var/log/redis_6379.log  
dir to /var/redis/6379  
maxmemory 268435456

maxmemory 这里设置的是256mb,您可以按照您的配置自己设置。

设置开机启动:vim /etc/rc.d/rc.local,添加下面的代码

/etc/init.d/redis_6379 start

1.2 (可选操作)对于redis的磁盘存储

redis有几种内存的数据同步到磁盘的操作,详细可以参看文章:https://www.cnblogs.com/datang6777/p/7056272.html

我们选择的是:Append-only file, vim /etc/redis/6379.conf

appendonly yes      #启用aof持久化方式

appendfsync everysec     #每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐

auto-aof-rewrite-percentage 200   #自动的bgrewriteaof,aof文件的大小超过基准百分之多少后触发bgrewriteaof。默认这个值设置为100,意味着当前aof是基准大小的两倍的时候触发bgrewriteaof。把它设置为0可以禁用自动触发的功能。
auto-aof-rewrite-min-size 128mb     #当前aof文件大于多少字节后才触发。避免在aof较小的时候无谓行为。默认大小为64mb。

#  然后就是触发检查的主逻辑,serverCron时间事件中每次都会检查现有状态和参数来判断是否需要启动bgrewriteaof。
#  如果aof文件增长百分率growth大于auto_aofrewrite_perc,则自动的触发后一个bgrewriteaof。

保存,重启redis

/etc/init.d/redis_6379 stop
/etc/init.d/redis_6379 start

 

2.安装redis的扩展。

yum install git
git clone git://github.com/owlient/phpredis
cd phpredis
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

如果上述出现报错,可以尝试用另外一个源:

git clone git://github.com/nicolasff/phpredis

php.ini中添加:

extension=redis.so

 

3.yii2 redis扩展的安装,以及配置:

在配置好的yii2根目录下面执行(您已经安装了composer)

composer require --prefer-dist yiisoft/yii2-redis

等待片刻就可以安装好yii2 的 redis 扩展

 

4.yii2中redis的配置

首先基于安全考虑,我们需要给redis设置密码,除非,您的redis端口关闭。

vim /etc/redis/6379.conf

找到行,把前面#去掉,后面加redis的密码

requirepass  rds423fsadD

重启redis就可以了。

/etc/init.d/redis_6379 stop  
/etc/init.d/redis_6379 start

这样redis密码验证就有了。

yii2的配置如下:

'redis' => [
            'class' => 'yii\redis\Connection',
            'hostname' => '127.0.0.1',
            'port' => 6379,
            'database' => 1,
      //'unixSocket' => '/var/run/redis/redis.sock',
      'password'  => 'rds423fsadD',
      // 'unixsocket' => '/var/run/redis/redis.sock',
    //	'unixSocket' => '/tmp/redis.sock',
        ],

重启redis , 这里  yii2就配置好redis了

5.redis的使用:刷新缓存:

[root@E3-1230v2-829 catalog]# redis-cli  
127.0.0.1:6379> auth rds!23v3cv3#ds  
OK  
127.0.0.1:6379> flushall  
OK  
127.0.0.1:6379>

redis-cli flushall  会报错(需要按照上面的步骤登录)

 

6.带有密码的redis,定时脚本清空缓存:

新建/www/script/redis_reflush_all.sh,添加如下内容

/usr/local/bin/redis-cli -a 'rds!2016!FDR' flushall

添加到cron中,   crontab -e,添加如下内容,保存

30 18 * * *  /bin/bash  /www/web/intosmile.com/shell/flushall.sh

就会定时清空redis的内容了

 

7. yii2中配置session 和 cache 使用redis

<?php
return [
    'components' => [
       
    'session' => [
      //'class' => 'yii\mongodb\Session',
      'class' => 'yii\redis\Session',
      //'db' => 'mongodb',
      //'sessionCollection' => 'session',
      'timeout' => 6000,
    ],
    
    'cache' => [
            'class' => 'yii\redis\Cache',
      //'class' => 'yii\caching\FileCache',  
      'keyPrefix' => 'rediscache-##$fdas5ygjD',
        ],

这样cache 就可以使用redis 了。

Yii2 – 使用数据库(DB – Mysql) Log

调试程序的时候,我们可以加入exit断点进行输出的方式调试程序,这种方式比较的简单快捷,但是有局限性 ,譬如API接口传递数据,如果出现数据没有传递的情况,我们需要查看log,有时候我们想要查看很多的中间值,这样,我们在yii2开发的过程中,就需要用到log。

对于log,有文件的log,文件的log,每次使用需要打开log,这个比较麻烦,对于持续的输出,我们需要使用linux命令tail -f  xxx.log 来查看持续的log.

使用db log,吧log存储到表中,我们可以在后台开启一个log查看过滤的功能,每次执行,直接在后台查看,方便快捷,下面讲述如果在yii2中开启db log

1.加入log组件的配置:

'log' =>[  
            # 追踪级别  
            # 消息跟踪级别  
            # 在开发的时候,通常希望看到每个日志消息来自哪里。这个是能够被实现的,通过配置 log 组件的 yii\log\Dispatcher::traceLevel 属性, 就像下面这样:  
            'traceLevel' => YII_DEBUG ? 3 : 0,  
              
            # 通过 yii\log\Logger 对象,日志消息被保存在一个数组里。为了这个数组的内存消耗, 当数组积累了一定数量的日志消息,日志对象每次都将刷新被记录的消息到 log targets 中。 你可以通过配置 log 组件的 yii\log\Dispatcher::flushInterval 属性来自定义数量  
            'flushInterval' => 1,  
              
            'targets' => [  
                'db' =>[  
                    //'levels' => ['warning'],  
  
                    'categories' => ['appadmin'],  
                    #'class' => 'yii\log\FileTarget',  
                    'class' => 'yii\log\DbTarget',  
                    # 当 yii\log\Logger 对象刷新日志消息到 log targets 的时候,它们并 不能立即获取导出的消息。相反,消息导出仅仅在一个日志目标累积了一定数量的过滤消息的时候才会发生。你可以通过配置 个别的 log targets 的 yii\log\Target::exportInterval 属性来 自定义这个数量,就像下面这样:  
                    'exportInterval' => 1,  
                    # 输出文件  
                    //'logFile' => '@app/runtime/logs/appadmin.log',  
                    'logTable' => '{{%system_log}}',  
                    # 你可以通过配置 yii\log\Target::prefix 的属性来自定义格式,这个属性是一个PHP可调用体返回的自定义消息前缀  
                    //'prefix' => function ($message) {  
                          
                    //  return $message;  
                    //},  
                    # 除了消息前缀以外,日志目标也可以追加一些上下文信息到每组日志消息中。 默认情况下,这些全局的PHP变量的值被包含在:$_GET, $_POST, $_FILES, $_COOKIE,$_SESSION 和 $_SERVER 中。 你可以通过配置 yii\log\Target::logVars 属性适应这个行为,这个属性是你想要通过日志目标包含的全局变量名称。 举个例子,下面的日志目标配置指明了只有 $_SERVER 变量的值将被追加到日志消息中。  
                    # 你可以将 logVars 配置成一个空数组来完全禁止上下文信息包含。或者假如你想要实现你自己提供上下文信息的方式, 你可以重写 yii\log\Target::getContextMessage() 方法。  
                     'logVars' => [],  
                ],  
                /*  
                'file' =>[  
                    'levels' => ['trace'],  
                    'categories' => ['mylog'],  
                    'class' => 'yii\log\FileTarget',  
                    # 当 yii\log\Logger 对象刷新日志消息到 log targets 的时候,它们并 不能立即获取导出的消息。相反,消息导出仅仅在一个日志目标累积了一定数量的过滤消息的时候才会发生。你可以通过配置 个别的 log targets 的 yii\log\Target::exportInterval 属性来 自定义这个数量,就像下面这样:  
                    'exportInterval' => 1,  
                    # 输出文件  
                    'logFile' => '@app/runtime/logs/my.log',  
                    # 你可以通过配置 yii\log\Target::prefix 的属性来自定义格式,这个属性是一个PHP可调用体返回的自定义消息前缀  
                    'prefix' => function ($message) {  
                          
                        return $message;  
                    },  
                    # 除了消息前缀以外,日志目标也可以追加一些上下文信息到每组日志消息中。 默认情况下,这些全局的PHP变量的值被包含在:$_GET, $_POST, $_FILES, $_COOKIE,$_SESSION 和 $_SERVER 中。 你可以通过配置 yii\log\Target::logVars 属性适应这个行为,这个属性是你想要通过日志目标包含的全局变量名称。 举个例子,下面的日志目标配置指明了只有 $_SERVER 变量的值将被追加到日志消息中。  
                    # 你可以将 logVars 配置成一个空数组来完全禁止上下文信息包含。或者假如你想要实现你自己提供上下文信息的方式, 你可以重写 yii\log\Target::getContextMessage() 方法。  
                     'logVars' => [],  
                ],  
                */  
            ],  
        ],

 

对于上面的配置,我们需要看的是targets中的配置,上面配置了两个log,一个是db,一个是file。

他们的共同处:

1.1categories,代表log的类别,类别是为了在使用log的时候进行写入不同的log文件,譬如,我们定义了categories为appadmin,按照下面的方式调用log,会把log 输出到当前的配置

\Yii::info('111111111','appadmin');

1.2.输出:

File Log 配置的是 logFile,log信息写入到配置的这个文件中,这个文件要设置可写

Db Log  配置的是 logTable,这里填写对应的表名

2. 输出

对于文件输出,我们需要新建这个文件,并设置文件为可写

对于db log,我们需要建立表。

上面的配置,需要加入到console config  或者common config中,因为只有加入了配置,console(控制台)主体执行migration脚本,才能找到配置

执行migration脚本:

./yii migrate --migrationPath=@yii/log/migrations/

执行完成后,MySQL中会出来一个system_log的表。

 

3.使用log

\Yii::info('111111111','appadmin');

其中1111111代表输出的log信息

appadmin代表上面配置的类别   categories。

4. 在后台建立表的查看功能,这样就可以通过后台查看log,当然也可以用phpmyadmin查看具体的log,就是有点费劲

 


上面完成了db log  和 file log的配置。