Write the Code. Change the World.

分类目录
8月 25

vim /> 新买的云,状的是centos8系统,使用起来发现文件内中文乱码。这个得解决。

一步一步往下走

查看你的语言是什么

echo $LANG

# 结果
zh_CN.UTF-8

**继续 **

localectl status

# 结果
   System Locale: LANG=en_US.UTF-8
       VC Keymap: us
      X11 Layout: us

发现系统缺少中文包。弄起来。

yum search Chinese

# 结果
Failed to set locale, defaulting to C.UTF-8
Last metadata expiration check: 3:04:20 ago on Thu Aug 25 10:58:01 2022.
========================================== Name & Summary Matched: chinese ===========================================
ibus-table-chinese.noarch : Chinese input tables for IBus
=============================================== Name Matched: chinese ================================================
ibus-table-chinese-array.noarch : Array input methods
ibus-table-chinese-cangjie.noarch : Cangjie based input methods
ibus-table-chinese-cantonese.noarch : Cantonese input methods
ibus-table-chinese-easy.noarch : Easy input method
ibus-table-chinese-erbi.noarch : Erbi input method
ibus-table-chinese-quick.noarch : Quick-to-learn input methods
ibus-table-chinese-scj.noarch : Smart Cangjie
ibus-table-chinese-stroke5.noarch : Stroke 5 input method
ibus-table-chinese-wu.noarch : Wu pronunciation input method
ibus-table-chinese-wubi-haifeng.noarch : Haifeng Wubi input method
ibus-table-chinese-wubi-jidian.noarch : Jidian Wubi 86 input method, JiShuang 6.0
ibus-table-chinese-yong.noarch : YongMa input method
============================================== Summary Matched: chinese ==============================================
autocorr-zh.noarch : Chinese auto-correction rules
langpacks-zh_CN.noarch : Simplified Chinese langpacks meta-package
langpacks-zh_TW.noarch : Traditional Chinese langpacks meta-package
texlive-arphic.noarch : Arphic (Chinese) font packages
wqy-microhei-fonts.noarch : Compact Chinese fonts derived from Droid

那么,就装个中文包。

dnf install langpacks-zh_CN.noarch

修改本地语言环境。

vim /etc/locale.conf

# 填入
LANG=zh_CN.UTF-8

# 使生效
source /etc/locale.conf
11月 09

从零开始,来吧

php 下载地址集:https://www.php.net/downloads

先下载解压 php 包

# 先把文件下到这个目录下来
cd /usr/local/src/php

wget https://www.php.net/distributions/php-7.4.25.tar.gz 

# 提示说 错误: “www.php.net” 的证书不可信 错误: “www.php.net” 的证书使用不安全的算法签名。
# wget 搞不定,我们用 curl 来弄
curl -o php-7.4.25.tar.gz https://www.php.net/distributions/php-7.4.25.tar.gz

# 再解压
tar -xzvf php-7.4.25.tar.gz

安装依赖包

能用 yum 装的就用 yum 装,不行的再源码编译安装

yum -y install gcc gcc-c++

yum -y install sqlite-devel

yum install libxslt-devel

yum install cmake

# 还是要手动安装 oniguruma
请参考:[https://blog.vini123.com/379](https://blog.vini123.com/379)

yum -y install libxml2-devel openssl-devel curl-devel libjpeg-devel libpng-devel libicu-devel freetype-devel openldap-devel openldap openldap-devel

安装 gd库,freetype2,libzip ,请参考:https://blog.vini123.com/378

安装

如果之前没建立其用户组,先建立一个用户组

groupadd nginx
useradd -g nginx -M nginx

参考

https://www.cnblogs.com/alliancehacker/p/12255445.html

https://blog.vini123.com/378

https://blog.vini123.com/303

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

10月 16

服务器时间久了,有可能忘记曾经编译安装的 nginx 和 php 的配置。但是想知道,怎么办呢。

操作一波

nginx

nginx -V

# 输出
nginx version: nginx/1.16.1
built by gcc 8.3.1 20190507 (Red Hat 8.3.1-4) (GCC)
built with OpenSSL 1.1.1f  31 Mar 2020
TLS SNI support enabled
configure arguments: --user=nginx --group=nginx --prefix=/alidata/service/nginx --pid-path=/alidata/service/nginx/run/nginx.pid --with-http_stub_status_module --with-threads --with-file-aio --with-pcre-jit --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_realip_module --with-http_addition_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-stream_realip_module --with-http_slice_module --with-pcre --with-openssl=/usr/local/src/base/1-openssl/openssl-1.1.1f --with-openssl-opt=enable-tls1_3 --add-module=/opt/ngx_brotli/ --add-module=/usr/local/src/nginx/headers-more-nginx-module-0.33

继续阅读

5月 31

不走 nginx 的代理,请求连接 websocket,总需要带上端口号。比如 new WebSocket("wss://www.xxx.com:9958"),通过 nginx 的代理就可以实现这样的请求,比如 new WebSocket("wss://www.xxx.com/wss")

一波操作

vim www.xxx.com.conf

upstream websocket {
    # wss 配置代理到 127.0.0.1:9958
    server 127.0.0.1:9958;
}

server
{
    listen 80;
    server_name xxx.com www.xxx.com;

    return 301 https://www.xxx.com$request_uri;
}

server
{
    listen 443 ssl http2;
    server_name xxx.com www.xxx.com;

    if ($host = 'xxx.com' ){
        return 301 https://www.xxx.com$request_uri;
    }

    ssl_certificate         /service/nginx/conf/ssl/www.xxx.com.pem;
    ssl_certificate_key     /service/nginx/conf/ssl/www.xxx.com.key;

    location /wss {
        # 代理到上边的自定义的地址
        proxy_pass http://websocket;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
    }

    …

重启, nginx。

其实,在 proxy_pass 这里,可以直接设置为 127.0.0.1:9958

还有请求的时候,域名后一定要带上 wss 。

5月 31

Client does not support authentication protocol requested by server; conside 新旧版本密码算法不同引起的错误,只需要设置下密码方式为 mysql_native_password 就可。还是 navicat 做的好,新旧密码都支持。

操作一波

mysql -u root -p

xxxx

use mysql;

show tables;

# 查看已经有的用户
select user, host from user;

# 重新设置下密码,并使之生效
# 之前是 'xxx'@'%' IDENTIFIED BY 'xxxxxx'
'xxx'@'%' IDENTIFIED WITH mysql_native_password BY 'xxxxxx'

flush privileges;
5月 30

使用 redis 客户端是比较有必要的,这个时候就需要远程登录 redis 了。不过,redis 默认是无密码,只允许服务端登录。修改下配置,重启 redis 即可实现想要的目的。

一波操作

修改 redis.conf 文件。

  1. 设置密码。因为密码是在配置文件里的 ,所以尽可能的设置长一点,也不怕忘记哈。

修改 # requirepass foobared 为你自己想要的密码 requirepass Safb0xafNabaf!fEfaWfs@#$a4afsdfw8ay

  1. 设置 protected-modeno

  2. 去掉 bind 或 设置为 bind 0.0.0.0

  3. 重启 redis 。

# 使用 conf 启动 redis
./redis-server redis.conf

# 登录客户端
./redis-cli 

auth 密码

# 查看所有配置
config get *

# 查看单独一个的
config get bind

其他

如果发现重启没啥鬼用,可以直接杀死进程,然后以 conf 启动。

ps -ef | grep redis

kill -9 xxxx

./redis-server redis.conf

还有 dump 文件需要注意,默认是 dump.rdb 文件。

4月 06

nginx 新增模块缺失,

nginx: [emerg] unknown directive “more_clear_headers”

https://blog.csdn.net/chunyuan314/article/details/81737303

安装

https://github.com/openresty/headers-more-nginx-module

cd /usr/local/src

wget https://github.com/openresty/headers-more-nginx-module/archive/v0.33.tar.gz

tar -xzvf v0.33.tar.gz

cd headers-more-nginx-module-0.33

新增模块

# 先准备曾经的配置,找到 configure arguments 后边的配置。

nginx -V

# 找到曾经的包文件
cd /usr /local/src/nginx 

# 再配置后追加 add-module 指向headers-more-nginx-module-0.33

./configure --user=nginx --group=nginx --prefix=/alidata/service/nginx --pid-path=/alidata/service/nginx/run/nginx.pid --with-http_stub_status_module --with-threads --with-file-aio --with-pcre-jit --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_realip_module --with-http_addition_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-stream_realip_module --with-http_slice_module --with-pcre --with-openssl=/usr/local/src/base/1-openssl/openssl-1.1.1f --with-openssl-opt=enable-tls1_3 --add-module=/opt/ngx_brotli/ --add-module=/usr/local/src/nginx/headers-more-nginx-module-0.33

# 再make (千万不要 make install)

make

# 然后复制 nginx 文件覆盖之前安装包里的 nginx 文件,覆盖安装之前 ,先备份一个
nginx stop

cp /alidata/service/nginx/sbin/nginx  /alidata/service/nginx/sbin/nginx.back
cp -r objs/nginx /alidata/service/nginx/sbin/nginx

# 启动
/alidata/service/nginx/sbin/nginx

参考

https://segmentfault.com/a/1190000018418253?utm_source=coffeephp.com

4月 06

官网: https://redis.io/

可参考:
https://blog.vini123.com/107

###

wget http://download.redis.io/releases/redis-5.0.8.tar.gz

tar -xzvf  redis-5.0.8.tar.gz

cd redis-5.0.8

# 安装依赖
yum install tcl

# 继续

make

make test

# 没有问题就安装
make install PREFIX=/alidata/service/redis 

# 配置并启动redis
mkdir /alidata/service/redis/etc/

cp  /usr/local/src/redis/redis-5.0.8/redis.conf /alidata/service/redis/etc/

vim /alidata/service/redis/etc/redis.conf   #编辑redis.conf

daemonize yes   #将此行对应的no改成yes。

# 启动
/alidata/service/redis/bin/redis-server /alidata/service/redis/etc/redis.conf

# 连接 redis
/alidata/service/redis/bin/redis-cli

配置开机自启动

# 开机自启动

cp /usr/local/src/redis/redis-5.0.8/utils/redis_init_script /etc/init.d/redis

vim /etc/init.d/redis

# 然后修改EXEC、REDIS_CLI、CONF对应的值。分别对应服务端位置、客户端位置、配置文件位置。保存,退出。修改后的脚本如下;
# 修改

#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.

### BEGIN INIT INFO
# Provides:     redis_6379
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    Redis data structure server
# Description:          Redis data structure server. See https://redis.io
### END INIT INFO

REDISPORT=6379
EXEC=/alidata/service/redis/bin/redis-server
CLIEXEC=/alidata/service/redis/bin/redis-cli

PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF=/alidata/service/redis/etc/redis.conf

case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $CLIEXEC -p $REDISPORT shutdown
                while [ -x /proc/${PID} ]
                do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
    *)
        echo "Please use start or stop as first argument"
        ;;
esac

执行权限,并开启服务重启自启动

chmod +x /etc/init.d/redis   #执行权限
chkconfig redis on   #系统服务中启动redis服务
chkconfig --list   #系统服务启动列表
/etc/init.d/redis start   #启动redis

安装 php redis 扩展

cd /usr/local/src

mkdir php-redis

cd php-redis

wget http://pecl.php.net/get/redis-5.2.1.tgz

tar -xizvf redis-5.2.1.tgz

cd redis-5.2.1 

# 编译安装
phpize

./configure 

make && make install

# 配置
vim /alidata/service/php/etc/php.ini

在末尾加上 extension=redis.so 保存。

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

# 查看
php -m | grep redis