Write the Code. Change the World.

分类目录
8月 09

一个项目,一般不仅有 mysql 数据库,还会有 redis、mongodb 等数据库。那 下边记录下 laravel 中配置和使用 mongodb。

准备

安装 mongdb 和 mongdb 扩展

# 最快最简单的安装方式
pecl install mongodb

# 在 php.ini 中配置 mongodb

# 先找到 php.ini 的位置
php -i | grep php.ini

# 开始配置
vim php.ini
# 加入 extension=mongodb.so

# 重启
/etc/init.d/php-fpm restart

# 看看扩展
php -m |grep mongodb

项目中

https://github.com/jenssegers/laravel-mongodb

composer require jenssegers/mongodb

在 config/database.php 的 connections 中配置

        'mongodb' => [
            'driver' => 'mongodb',
            'host' => env('MONGO_DB_HOST', '127.0.0.1'),
            'port' => env('MONGO_DB_PORT', 27017),
            'database' => env('MONGO_DB_DATABASE', 'homestead'),
            'username' => env('MONGO_DB_USERNAME', 'homestead'),
            'password' => env('MONGO_DB_PASSWORD', 'secret'),
            'options' => [
                'database' => env('MONGO_DB_AUTHENTICATION_DATABASE', 'admin'), // required with Mongo 3+
            ],
        ]

        # 或
        'mongodb' => [
            'driver' => 'mongodb',
            'dsn' => env('MONGO_DB_DSN'),
            'database' => env('MONGO_DB_DATABASE', 'homestead'),
        ],

在 .env 中进行 MONGO_DB_DSN 和 MONGO_DB_DATABASE 配置。

使用

这里,我既使用 mysql, 也使用 mongodb。并且都使用 ORM。 mysql 是默认驱动方式。

php artisan make:model Moment

### 编辑 App\Models\Moment ,如下
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Jenssegers\Mongodb\Eloquent\Model;

class Moment extends Model
{
    use HasFactory;

    // 驱动
    protected $connection = 'mongodb';

   // 表
    protected $collection = 'detail.idc';
}

用 tinker 试试:

php artisan tinker;

use App\Models\Moment;
Moment::first();

参考

https://www.bubaijun.com/page.php?id=230

5月 12

当你的的 nginx 中设置 Content-Security-Policy,就有可能会遇到: script in the following Content Security Policy directive: "script-src * 'unsafe-inline'"

Content-Security-Policy 策略

最快的解决办法,注释掉 Content-Security-Policy,并重启 nginx

vim xxx.conf

../../sbin/nginx -s reload

参考这里

https://www.cnblogs.com/Hwangzhiyoung/p/9146740.html

12月 03

校准时间

有些时候,特别是虚拟机,跑着跑着,可能就不准了。校准时间就有必要了。

使用 ntpdate

这里使用 ntpdate 来纠正数据

# centos
yum install ntpdate

# ubuntu
apt-get install ntpdate

# 开始纠正
ntpdate -u ntp.api.bz

如果发现时间和上海时间相差 8 个小时,时区问题请解决,再执行上边的命令。

vim /etc/profile

G

# 调到末尾,加入下边的命令
export TZ='CST-8'

# 使得环境变量生效,再执行上边的命令纠正时区
source /etc/profile

如果经常纠正可以加入定时任务

参考

https://time.is/

https://www.cnblogs.com/luchuangao/p/7795293.html

https://blog.csdn.net/wblinux/article/details/81981328

https://blog.csdn.net/qq_27664167/article/details/80921327

https://www.cnblogs.com/st-jun/p/7737188.html

9月 12

这里的关键点:
1. redis 异步队列。
2. 多项目。

面对上边这种情况,怎么处理呢。如果不处理又会出现什么现象呢。

因为我们使用 supervisord 进行常驻队列侦听。如果不指定对应的 queue,多项目就会出现串的情况。这个是就可以用 queue 来处理该问题了。

处理

  1. 修改 supervisord 的配置文件。在 command 中指定一个 queue 。如
command=/alidata/service/php/bin/php /alidata/www/www.mlxiu.com/artisan queue:work redis --queue=test --sleep=3 --tries=3
  1. 在项目中,指定 queue。因为使用的是 laravel 框架。 队列继承 ShouldQueue。 可以在构造函数中指定 queue 即可。
public function __construct($id)
{
     $queueName = config('queue.name');
     if ($queueName) {
         $this->onQueue($queueName);
     }
}

queue.name 是自己额外在 queue.config 中添加的变量。

参考

https://www.cnblogs.com/zgxblog/p/10996112.html

8月 05

有时候,会去查看系统的磁盘空间。这个时候,一些命令就用的着了。

查看磁盘空间

# df 以磁盘分区为单位查看文件系统,可以获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
# `-h` 选项为根据大小适当显示
df -h

显示内容参数说明:

  • Filesystem:文件系统
  • Size: 分区大小
  • Used: 已使用容量
  • Avail: 还可以使用的容量
  • Use%: 已用百分比
  • Mounted on: 挂载点 

查看某个文件夹或文件的大小

# 查看当前文件夹的总大小 `h` 以适当大小显示(比如 M,G 单位)
du -sh

# 查看对应深度的文件大小
du -h --max-depth=1

# 查看某个文件大小
du -h xxx.txt

排序功能就不说了,太多记不住。实用即可。

7月 06

git 存在这样一个场景。曾经的代码用的 https 协议进行上传下载。这个时候,总是要输入用户名和密码。这样好烦好烦的。突然有一天,你想用 ssh 协议了(不用再输密码),这个时候就要切换协议了。下边就说说怎么操作。

没有公私秘钥,要生

# 生,一路回车就好
ssh-keygen -t rsa -C "abcd@mlxiu.com"

cat ~/.ssh/id_rsa.pub

生了后,先要将公钥内容复制出来,设置到你所托管的 ssh 设置相应的地方。比如托管的 gitlab 或 github,都有对应的地方设置。设置好了后,就可以切协议了。

查看切换协议

# 查看
git remote -v

# 切换
git remote set-url origin git@gitlab.xxxxxxx

然后你


git pull origin master git push origin master

就不用再输入账号密码了。

7月 02

linux 下 tree 很好用的。方便查看文件夹以及子文件夹N个子子文件夹里的文件,并很好的展示出来。如下图:

下边来说说怎么使用和操作。

先安装

## centos 
yum install tree

## ubuntu
apt-get install tree

没权限,请加 sudo

再使用

## 帮助
tree --help

## 显示某个文件夹下的(默认当前文件夹)
tree /usr/local 
tree app

## -d 参数,只显示文件夹,不显示文件夹里的内容。如上图

tree -d

## -L n (n表示级数,是 int 类型,且必须)
tree -L 2 # 显示当前目录以及目录下的文件

不仅能展示,还能将展示的结构写到文本里,如:

sudo tree app -d -L 3 > /usr/local/src/tree.txt

# 查看保存的结果
cat /usr/local/src/tree.txt

就这样了。用到这几个就可以了。更多的功能待去揣摩。

7月 01

通常情况下,使用构建的命令就可以关闭对应的服务。可有时候 pid 被删了后,程序逻辑就关闭不了服务了。这个时候,就得用命令来关。

通常方式

laravel 中 swoole 为例

# 停止
php artisan swoole:action stop

# 启动
php artisan swoole:action start

当 pid 文件删除或被改后,就 stop 不了了。

命令方式

# 先查看端口对应的进程 id
netstat -tunlp|grep 9400

### 结果 tcp        0      0 0.0.0.0:9400            0.0.0.0:*               LISTEN      2750/php

# 再 kill 进程 id 就完事了
kill -9 2750

# 查看进程信息 (当然在 kill 之前查看)
ps -ef|grep 2750

参考

https://www.cnblogs.com/moy25/p/8668432.html