PHP为项目配置单独的进程池

配置示例

基于oneinstack安装包生成的配置文件

php-fpm配置文件

位置/usr/local/php/etc/php/php-fpm.conf

;;;;;;;;;;;;;;;;;;;;;
; FPM Configuration ;
;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;
; Global Options ;
;;;;;;;;;;;;;;;;;;

[global]
pid = run/php-fpm.pid
error_log = log/php-fpm.log
log_level = warning

emergency_restart_threshold = 30
emergency_restart_interval = 60s
process_control_timeout = 5s
daemonize = yes

;;;;;;;;;;;;;;;;;;;;
; Pool Definitions ;
;;;;;;;;;;;;;;;;;;;;

include = /usr/local/php/etc/php-fpm.d/*.conf

线程池配置目录

develop.conf

[develop]
//不同的线程池使用不同的sock文件
//nginx配置文件监听对应的sock
listen = /dev/shm/php-cgi.sock 
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = yangliuan
listen.group = yangliuan
listen.mode = 0666
user = yangliuan
group = yangliuan

pm = dynamic
pm.max_children = 6
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 6
pm.max_requests = 2048
pm.process_idle_timeout = 10s
request_terminate_timeout = 600
request_slowlog_timeout = 0

pm.status_path = /php-fpm_status
slowlog = var/log/slow.log
rlimit_files = 51200
rlimit_core = 0

catch_workers_output = yes
env[HOSTNAME] = yangliuan-TM1707
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

Centos7 升级openssh8.3

参考

通过虚拟机下载提取安装包(有的机房禁止访问外网)

yum install --downloadonly --downloaddir=rpm gcc gcc-c++ glibc make autoconf openssl openssl-devel pcre-devel  pam-devel krb5-devel
cd rpm

rpm -ivh autoconf-2.69-11.el7.noarch.rpm cpp-4.8.5-39.el7.x86_64.rpm gcc-4.8.5-39.el7.x86_64.rpm gcc-c++-4.8.5-39.el7.x86_64.rpm glibc-devel-2.17-307.el7.1.x86_64.rpm glibc-headers-2.17-307.el7.1.x86_64.rpm kernel-headers-3.10.0-1127.18.2.el7.x86_64.rpm keyutils-libs-devel-1.5.8-3.el7.x86_64.rpm libcom_err-devel-1.42.9-17.el7.x86_64.rpm libkadm5-1.15.1-46.el7.x86_64.rpm libselinux-devel-2.5-15.el7.x86_64.rpm libsepol-devel-2.5-10.el7.x86_64.rpm libstdc++-devel-4.8.5-39.el7.x86_64.rpm libverto-devel-0.2.5-4.el7.x86_64.rpm m4-1.4.16-10.el7.x86_64.rpm openssl-devel-1.0.2k-19.el7.x86_64.rpm pam-devel-1.1.8-23.el7.x86_64.rpm pcre-devel-8.32-17.el7.x86_64.rpm zlib-devel-1.2.7-18.el7.x86_64.rpm krb5-devel-1.15.1-46.el7.x86_64.rpm

下载openssh8.3p1 和 openssl-1.1.9.tar.gz

wget -c https://ftp.openssl.org/source/openssl-1.1.1g.tar.gz

wget -c https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/openssh-8.3.tar.gz

解压并编译安装openssl

openssl version #查看当前版本,等升级完对比
OpenSSL 1.0.2k-fips  26 Jan 2017

mv /usr/bin/openssl /usr/bin/openssl_bak #备份
mv /usr/include/openssl /usr/include/openssl_bak #备份

tar -zxvf openssl-1.1.1g.tar.g
cd openssl-1.1.1g/
./config --prefix=/usr/local/ssl -d shared && make && make install

echo $?  #echo $?查看下最后的make install是否有报错,0表示没有问题
0

ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl  #生成软链接
ln -s /usr/local/ssl/include/openssl /usr/include/openssl  #生成软链接

ll /usr/bin/openssl #查看是否生成成功
/usr/bin/openssl -> /usr/local/ssl/bin/openssl

ll /usr/include/openssl -ld #查看是否生成成功
/usr/include/openssl -> /usr/local/ssl/include/openssl

#执行下面命令加载配置
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
/sbin/ldconfig

openssl version #查看确认版本

如果出现openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory

#查找libssl.so.1.1的目录 然后生成软链接
find / -name "libssl.so.1.1"
/usr/local/lib64/libssl.so.1.1

ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/lib64/libcrypto.so.1.1  /usr/lib64/libcrypto.so.1.1

解压并安装openssh

ssh -V #查看ssh版本
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

tar -zxvf openssh-8.3p1.tar.gz
cd openssh-8.3p1
chown -R root.root /root/openssh/openssh-8.3p1 #更改当前目录所属用户和用户组为root

rm -rf /etc/ssh/* #删除原先ssh的配置文件和目录
./configure --prefix=/usr/ --sysconfdir=/etc/ssh  --with-openssl-includes=/usr/local/ssl/include --with-ssl-dir=/usr/local/ssl   --with-zlib   --with-md5-passwords   --with-pam  && make && make install #配置编译安装

#如果遇到权限问题 permission 0640 for xxxx 将报权限问题的目录都设为600
chmod -R 0600 /etc/ssh/ssh_host_ecdsa_key

echo $? #同上
0

#修改sshd配置
vim /etc/sshd_config
PermitRootLogin yes
UseDNS no

#从安装目录cp文件到目标位置
cp -a contrib/redhat/sshd.init /etc/init.d/sshd
cp -a contrib/redhat/sshd.pam /etc/pam.d/sshd.pam
#设置执行权限
chmod +x /etc/init.d/sshd

#添加启动项
chkconfig --add sshd
systemctl enable sshd
#把原先的systemd管理的sshd文件删除或者移走或者删除,不移走的话影响我们重启sshd服务
mv /usr/lib/systemd/system/sshd.service  /tmp/
#设置开机启动
chkconfig sshd on

#重启sshd
systemctl restart sshd.service

#查看sshd是否启动
netstat -lntp

#测试版本
ssh -V
OpenSSH_8.3p1, OpenSSL 1.1.1g  21 Apr 2020

Linux 安装 FFmpeg

参考

Ubuntu

sudo apt install ffmpeg apt包

sudo snap install ffmpeg snap包

ffmpeg -version

Centos8

安装sdl软件包

SDL(Simple DirectMedia Layer)是一个自由的跨平台的多媒体开发包,

适用于 游戏、游戏SDK、演示软件、模拟器、MPEG播放器和其他应用软件

没有sdl包的情况下安装ffmpeg时,dnf会提示缺少libSDL2-2.0.so.0()

https://mirrors.aliyun.com/centos/8/PowerTools/x86_64/os/Packages/SDL2-2.0.10-2.el8.x86_64.rpm

安装rpmfusion仓库

dnf install https://download1.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm 

如果没有rpmfusion这个仓库,安装ffmpeg时dnf会提示找不到匹配

dnf包管理工具安装ffmpeg

dnf install ffmpeg

ffmpeg -version

Centos7

RPM Fusion存储库

参考 How to Install and Use FFmpeg on CentOS 7

#依赖epel存储库,安装epel存储库
sudo yum install epel-release -y
sudo yum update -y

#安装启用RPM Fusion
sudo yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm

#安装ffmpeg 
sudo yum install ffmpeg ffmpeg-devel

#查看版本
ffmpeg -version
ffmpeg version 3.4.8 Copyright (c) 2000-2019 the FFmpeg developers

经测试这个仓库速度很慢

Nux Dextop YUM 存储库

参考 How to Install FFmpeg on CentOS

#依赖epel存储库,安装epel存储库
sudo yum install epel-release -y
sudo yum update -y

#安装Nux Dextop存储库
sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm

#安装ffmpeg
sudo yum install ffmpeg ffmpeg-devel -y

#查看版本
ffmpeg -version
ffmpeg version 2.8.15 Copyright (c) 2000-2018 the FFmpeg developers

经测试这个仓库速度有时候也很慢

源码编译安装ffmpeg

Ubuntu 卸载多余的内核版本

参考

安装包安装卸载方式

  • 1.sudo dpkg –get-selections | grep ‘linux’
  • 2.sudo apt purge + image/headers名称

手动安装卸载方式

  • 1.删除/lib/modules/目录中以内核版本号为名称的目录
  • 2.删除/usr/src/linux/目录中并不需要的内核源码
  • 3.删除/boot目录中启动内核的和内核的映像文件
  • 4.sudo update-grub,更新内核启动列表

Elasticsearch Mapping 和 Setting

Mapping

是定义文档及其包含的字段的存储和索引方式的过程,相当于关系型数据库中定义数据库和表结构的语句

核心数据类型 Core datatypes

  • 字符串(string) : text 和 keyword
  • 数字(numeric): long ,integer ,short byte double float half_float scaled_float
  • 日期(date): date date_nanos (纳秒)
  • 布尔(boolean)
  • 二进制 (Binary)

复杂数据类型 Complex datatypes

  • Object json对象
  • Nested 嵌套类型

Geo 数据类型 (地理位置)

专有数据类型 Specialised datatypes

  • IP IPv4 and IPv6

Range 范围

https://www.elastic.co/guide/en/elasticsearch/reference/current/range.html

数组

在Es中数组不需要专门定义,任何字段都可以包含另个或多个值即数组,数组中的所有制都必须具有相同的数据类型。

多字段 Multi-fileds

为不同的目的以不同的方式为同一字段建立索引

设置多个字段可以使用不同方式索引,使用不同的analyzer

PUT my_index
{
  "mappings": {
    "properties": {
      "city": {
        "type": "text",
        "fields": {
          "raw": { 
            "type":  "keyword"
          }
        }
   },
   "comment": {
        "type": "text",
        "fields": {
          "english_comment": { 
            "type":  "text",
             "analyzer":"english",
             "search_analyzer":"english"
          }
        }
      }
    }
  }
}

Dynamic Mapping 自动创建Mapping

创建index时,不需要定义Mapping,Es根据数据类型自动判断创建类型,优点是方便,缺点是有时后自动创建类型不是你想要的数据类型。

Mapping 字段类型修改机制

1.新增字段

Dynamic 设置为true时,一旦新增字段的文档写入,Mapping也同时被更新

Dynamic 设置为false,Mapping不会被更新,新增字段的数据无法被索引,但是信息会出现在_source中。

Dynamic设置成Strict,文档写入失败

2.已有字段,一旦已经有数据写入,就不再支持修改字段定义

Lucene实现的倒排索引,一旦生成后,就不允许修改

3.如果希望改变字段类型,必须Reindex Api,重建索引,因为如果修改了字段的数据类型,会导致已经索引的数据数据无法被搜索,新增自担不会有这种影响。

PUT movies
{
 "mappings":{
    "_doc":{
      "dynamic":"false"
    }
 }
}

自定义Mapping

1.参考API手册,纯手写

2.为了减少输入的工作量,减少出错概率,可以依靠以下步骤

  • 创建临时的index,写入一些样本数据
  • 通过访问Mapping API获取该临时文件的动态Mapping 定义
  • 修改后使用该配置创建你的索引
  • 删除临时索引

Index Options

四种不同界别的Index Options 配置,可以控制倒排索引记录的内容

  • docs – 记录doc id
  • freqs – 记录doc id 和 term frequencies
  • postions – 记录 doc id / term frequencies /term positon
  • offsets – 记录 doc id / term frequencies /term posistion / character offects

Text类型默认记录postions,其它默认为docs

记录内容越多,占用存储空间越大

null value

设置null_value 属性可以搜索null值

PUT users
{
  "mappings":{
    "properties":{
      "firstName":{
       "type":"text",
       "index":false //不索引该字段
      },
     "bio":{
       "type":"text",
       "index_options":"offsets"
     },
     "mobile":{
       "type":"text",
       "null_value":"NULL"
     }
   }
  }
}

精确值和全文本 Exact values vs Full Text

精确值不需要做分词处理

创建自定义分词器

Elasticsearch CRUD基本操作

文档CRUD

IndexPUT my_index/_doc
{“user”:”mike”,”comment”:”you know for search”}
CreatePUT my_index/_create/1
{“user”:”mike”,”comment”:”you know for search”}
POST my_index/_doc(不指定ID,自动生成)
ReadGET my_index/_doc/1
UpdatePOST my_index/_update/1
{“doc”:{“user”:”mike”,”comment”:”you know, Elasticsearch”}}
DeleteDELETE my_index/_doc/1
  • Type名,约定都用_doc ,相当于RDMBS的表名都叫_doc
  • Create—如果指定的ID已存在,会失败
  • Index—如果ID不存在,创建新的文档。否则,先删除先有的文档,再创建新的文档,版本会增加
  • Update—文档必须已经存在,更新只会对响应字段做增量修改

Bulk API

在单次API调用中执行多个索引编制或删除操作。这样可以减少开销,并可以大大提高索引速度。

支持四种类型操作 Index,Create,Update,Delete

mget

在单次请求中对一个或多个索引进行查询

msearch

在单词API请求中执行多个search

Elasticsearch 基本概念:索引 文档 REST API

ES与关系型数据库相似性对比

RDBMS(以Mysql为例)Elasitcsearch
存储引擎不同的数据分布 Setting
数据库 Schema(Database)文档字段类型 Mapping 相当于关系型数据库的表结构
数据表 Table索引 Index 类型 Type
数据行 Row文档 Document
数据列(字段) Column字段 Fields
DQL(数据查询)DSL
DML(数据操作)DSL

ps:7.0以后一个Index只能创建一个Type,并统一命名为 _doc,相当于一个数据库只能创建一个表

文档

  • Es是面向文档的搜索引擎,文档是所有可搜索数据的最小单位,相当于关系型数据库中的一条记录
  • 文档以json格式存储,json对象由字段组成对应数据类型有:字符串,数值,布尔值,日期,二进制,范围类型
  • 每个文档都有一个Unique ID 你可以自己指定 ID 或者通过Es自动生成

文档元数据

  • _index 文档所属索引名
  • _type 文档所属类型名
  • _id 文档唯一ID
  • _source 文档的原始json数据
  • _version 文档的版本信息
  • _score 相关性打分
  • _all 所有字段的整合信息,已废除

索引

文档的容器,一类文档的结合

  • Index 体现了逻辑空间的概念:每个索引都有自己的Mapping定义,用于定义包含的文档字段名和字段类型
  • Shard 体现了物理空间的概念:索引中的数据分散在Shard上

索引的Mapping和Settings

  • Mapping定义文档字段的类型
  • Setting定义不同的数据分布

索引的不同语义

  • 名词:一个ES集群中,可以创建很多不同的索引
  • 动词:保存一个文档到ES的过程也叫索引(indexing)ES中,创建一个倒排索引的过程
  • 名词:一个B tree索引,一个倒排索引

相关文章

告别类型,迎接无类型