BlueXIII's Blog

热爱技术,持续学习

0%

官网

磁盘

1
2
3
4
5
vi /etc/fstab
UUID=c51eb23b-195c-4061-92a9-3fad812cc12f /data ext4 defaults,nodelalloc,noatime 0 2
mkdir /data
mount -a
mount -t ext4

Swap

1
2
3
4
5
6
7
8
echo "vm.swappiness = 0">> /etc/sysctl.conf
swapoff -a && swapon -a
sysctl -p

vi /etc/fstab # 注释掉swap一行
swapoff -a

free # 验证

ntp

1
2
3
4
yum install ntp ntpdate -y
systemctl start ntpd.service
systemctl enable ntpd.service
ntpstat

操作系统优化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
cat /sys/kernel/mm/transparent_hugepage/enabled


cat /sys/block/vdc/queue/scheduler
cat /sys/block/vdd/queue/scheduler

udevadm info --name=/dev/vdc | grep ID_SERIAL
udevadm info --name=/dev/vdd | grep ID_SERIAL

cpupower frequency-info --policy

-----------------

tuned-adm list
mkdir /etc/tuned/balanced-tidb-optimal/
vi /etc/tuned/balanced-tidb-optimal/tuned.conf
[main]
include=balanced

[cpu]
governor=performance

[vm]
transparent_hugepages=never

[disk]
devices_udev_regex=(ID_SERIAL=vos-5ef7r1pv)|(ID_SERIAL=vos-od1sacxs)
elevator=noop

tuned-adm profile balanced-tidb-optimal



echo "fs.file-max = 1000000">> /etc/sysctl.conf
echo "net.core.somaxconn = 32768">> /etc/sysctl.conf
echo "net.ipv4.tcp_tw_recycle = 0">> /etc/sysctl.conf
echo "net.ipv4.tcp_syncookies = 0">> /etc/sysctl.conf
echo "vm.overcommit_memory = 1">> /etc/sysctl.conf
sysctl -p

cat << EOF >>/etc/security/limits.conf
tidb soft nofile 1000000
tidb hard nofile 1000000
tidb soft stack 32768
tidb hard stack 32768
EOF

# 禁用透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

# 安装numactl
yum install numactl -y

# 安装irqbalance
yum install irqbalance -y
systemctl enable irqbalance && systemctl start irqbalance

ssh互信

1
2
3
ssh-copy-id root@10.193.50.17
ssh-copy-id root@10.193.50.18
ssh-copy-id root@10.193.50.19

TiUP

1
2
3
4
5
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
which tiup
tiup cluster
tiup update --self && tiup update cluster
tiup --binary cluster
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
tiup cluster template > topology.yaml
vi topology.yaml

global:
user: "tidb"
ssh_port: 22
deploy_dir: "/data/tidb-deploy"
data_dir: "/data/tidb-data"

pd_servers:
- host: 10.193.50.17
- host: 10.193.50.18
- host: 10.193.50.19

tidb_servers:
- host: 10.193.50.17
- host: 10.193.50.18
- host: 10.193.50.19

tikv_servers:
- host: 10.193.50.17
- host: 10.193.50.18
- host: 10.193.50.19

monitoring_servers:
- host: 10.193.50.17

grafana_servers:
- host: 10.193.50.17

alertmanager_servers:
- host: 10.193.50.17

tiup cluster check ./topology.yaml --user root
tiup cluster check ./topology.yaml --apply --user root

tiup cluster deploy tidb-eip v5.3.0 ./topology.yaml --user root

HaProxy

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
yum install haproxy -y

vi /etc/haproxy/haproxy.cfg

global # 全局配置。
log 127.0.0.1 local2 # 定义全局的 syslog 服务器,最多可以定义两个。
chroot /var/lib/haproxy # 更改当前目录并为启动进程设置超级用户权限,从而提高安全性。
pidfile /var/run/haproxy.pid # 将 HAProxy 进程的 PID 写入 pidfile。
maxconn 4096 # 单个 HAProxy 进程可接受的最大并发连接数,等价于命令行参数 "-n"。
# nbthread 48 # 最大线程数。线程数的上限与 CPU 数量相同。
user haproxy # 同 UID 参数。
group haproxy # 同 GID 参数,建议使用专用用户组。
daemon # 让 HAProxy 以守护进程的方式工作于后台,等同于命令行参数“-D”的功能。当然,也可以在命令行中用“-db”参数将其禁用。
stats socket /var/lib/haproxy/stats # 统计信息保存位置。

defaults # 默认配置。
log global # 日志继承全局配置段的设置。
retries 2 # 向上游服务器尝试连接的最大次数,超过此值便认为后端服务器不可用。
timeout connect 2s # HAProxy 与后端服务器连接超时时间。如果在同一个局域网内,可设置成较短的时间。
timeout client 30000s # 客户端与 HAProxy 连接后,数据传输完毕,即非活动连接的超时时间。
timeout server 30000s # 服务器端非活动连接的超时时间。

listen admin_stats # frontend 和 backend 的组合体,此监控组的名称可按需进行自定义。
bind 0.0.0.0:8080 # 监听端口。
mode http # 监控运行的模式,此处为 `http` 模式。
option httplog # 开始启用记录 HTTP 请求的日志功能。
maxconn 10 # 最大并发连接数。
stats refresh 30s # 每隔 30 秒自动刷新监控页面。
stats uri /haproxy # 监控页面的 URL。
stats realm HAProxy # 监控页面的提示信息。
stats auth admin:pingcap123 # 监控页面的用户和密码,可设置多个用户名。
stats hide-version # 隐藏监控页面上的 HAProxy 版本信息。
stats admin if TRUE # 手工启用或禁用后端服务器(HAProxy 1.4.9 及之后版本开始支持)。

listen tidb-cluster # 配置 database 负载均衡。
bind 0.0.0.0:3390 # 浮动 IP 和 监听端口。
mode tcp # HAProxy 要使用第 4 层的传输层。
balance leastconn # 连接数最少的服务器优先接收连接。`leastconn` 建议用于长会话服务,例如 LDAP、SQL、TSE 等,而不是短会话协议,如 HTTP。该算法是动态的,对于启动慢的服务器,服务器权重会在运行中作调整。
server tidb-1 10.193.50.17:4000 check inter 2000 rise 2 fall 3 # 检测 4000 端口,检测频率为每 2000 毫秒一次。如果 2 次检测为成功,则认为服务器可用;如果 3 次检测为失败,则认为服务器不可用。
server tidb-2 10.193.50.18:4000 check inter 2000 rise 2 fall 3
server tidb-3 10.193.50.19:4000 check inter 2000 rise 2 fall 3


haproxy -f /etc/haproxy/haproxy.cfg
systemctl enable haproxy
systemctl start haproxy

启动

1
2
3
tiup cluster list
tiup cluster display tidb-eip
tiup cluster start tidb-eip

验证

PD

http://10.193.50.17:2379/dashboard

Grafana

http://10.193.50.17:3000

MySQL

mysql -uroot -p -h10.193.50.17 -P3390
select tidb_version()\G

Setuptool

官网

教程

https://www.escapelife.site/posts/fc616494.html
https://pycharm.iswbm.com/
https://zhuanlan.zhihu.com/p/276461821

打egg包

1
python setup.py bdist_egg

安装

1
2
python setup.py install
python setup.py develop

pyinstaller

官网

教程

参考文档

scrapyd

安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
pip install scrapyd

vi /etc/scrapyd/scrapyd.conf
[scrapyd]
eggs_dir = /data/scrapyd/eggs
logs_dir = /data/scrapyd/logs
items_dir = /data/scrapyd/items
jobs_to_keep = 100
dbs_dir = /data/scrapyd/dbs
max_proc = 0
max_proc_per_cpu = 10
finished_to_keep = 100
poll_interval = 5.0
bind_address = 0.0.0.0
http_port = 6800
debug = off
runner = scrapyd.runner
application = scrapyd.app.application
launcher = scrapyd.launcher.Launcher
webroot = scrapyd.website.Root

[services]
schedule.json = scrapyd.webservice.Schedule
cancel.json = scrapyd.webservice.Cancel
addversion.json = scrapyd.webservice.AddVersion
listprojects.json = scrapyd.webservice.ListProjects
listversions.json = scrapyd.webservice.ListVersions
listspiders.json = scrapyd.webservice.ListSpiders
delproject.json = scrapyd.webservice.DeleteProject
delversion.json = scrapyd.webservice.DeleteVersion
listjobs.json = scrapyd.webservice.ListJobs
daemonstatus.json = scrapyd.webservice.DaemonStatus


nohup scrapyd>scrapyd.log 2>&1 &

open http://10.211.55.101:6800

# scrapyd服务器提前安装依赖
pip install -r requirements.txt

HTTP API

1
2
3
4
5
6
7
8
9
10
11
12
curl http://10.211.55.101:6800/daemonstatus.json
curl http://10.211.55.101:6800/addversion.json -F project=hydrabot -F version=1.0.0 -F egg=@hydrabot.egg
curl http://10.211.55.101:6800/schedule.json -d project=hydrabot -d spider=teacher -d task_id=1 -d entry_id=3070
curl http://10.211.55.101:6800/cancel.json -d project=hydrabot -d job=6487ec79947edab326d6db28a2d86S11e8247444

curl http://10.211.55.101:6800/listprojects.json
curl http://10.211.55.101:6800/listversions.json?project=hydrabot
curl http://10.211.55.101:6800/listspiders.json?project=hydrabot
curl http://10.211.55.101:6800/listjobs.json?project=hydrabot

curl http://10.211.55.101:6800/delversion.json -d project=hydrabot -d version=1.0.0
curl http://10.211.55.101:6800/delproject.json -d project=hydrabot

scrapyd-client

本机安装

pip3 install scrapyd-deploy
pip3 install scrapyd-client

scrapyd-deploy -h

配置scrapy.cfg

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[settings]
default = settings.default

[deploy:node5]
url = http://10.194.99.5:6800/
project = hydrabot

[deploy:node6]
url = http://10.194.99.6:6800/
project = hydrabot

[deploy:node7]
url = http://10.194.99.7:6800/
project = hydrabot

[deploy:node8]
url = http://10.194.99.8:6800/
project = hydrabot

CLI

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 部署到一个节点
scrapyd-deploy node8

# 部署到全部节点
scrapyd-deploy -a

# 列出工程
scrapyd-client -t http://10.194.99.8:6800 projects

# 查看计划任务
scrapyd-client -t http://10.194.99.8:6800 schedule -p hydrabot \istic

# 列出爬虫
scrapyd-client -t http://10.194.99.8:6800 spiders -p hydrabot

参考文档

测试

1
2
3
4
5
6
7
8
cd /Users/bluexiii/Documents/code/evayinfo/agric/agric_pf
php artisan gatewayworker start

cd /Users/bluexiii/Documents/code/evayinfo/agric/agric_pf/storage/logs
tail -f laravel.log

cd /Users/bluexiii/Documents/code/playground/python-playground/socket_test
python full_duplex_client.py

报文拼接

首尾

起始 1字节 eb
结束 1字节 d7

控制域

功能码 6bit 01 000001
长度 10bit 4+34=38 0000100110

二进制 00000100 00100110
十六进制 04 26

发送接收序列

发送序列 2字节 00 01
接收序列 2字节 00 01

响应报文

EB 08 0C 00 01 00 01 8A EC AA 56 3C 82 9C 34 D7
EB 30 08 00 00 00 00 61 D3 DB FC D7 时间: 61d3dd97 1641274775 2022-01-04 13:39:35

测试报文

登录

硬件版本号(2字节) 硬件版本号 1 00 01
固件版本号(4字节) 固件版本号 20 00 01
唯一序列号(8字节) 8A EC AA 56 3C 82 9C 34
CCID(20 Byte) 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41

eb 04 26 00 01 00 01 00 01 00 00 00 14 8a ec aa 56 3c 82 9c 34 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 d7
eb080c000100018aecaa563c829c34d7
eb30080000000061d406a6d7

心跳

功能码 6bit 04 001000
长度 10bit 4+0=4 0000000100
0010000000000100 2004

eb 20 04 00 01 00 01 d7

重启

功能码 6bit 08 000100
长度 10bit 4+0=4 0000000100
0001000000000100 10 04

eb 10 04 00 01 00 01 d7

LORA传感器数据上传 32 0x20

传感器ID (4字节) 45 6F 00 22
时间戳(4字节) 61 d3 dd 97
数据条数 (1字节) 02
测量值1编号 (2字节) 00 01
测量值1 (4字节) 00 00 00 01
测量值2编号 (2字节) 00 02
测量值2 (4字节) 00 00 00 02

功能码 6bit 32 100000
长度 10bit 4+21=25 0000011001
1000000000011001 80 19

eb 80 19 00 01 00 01 45 6f 00 22 61 d3 dd 97 02 00 01 00 00 00 01 00 02 00 00 00 02 d7
eb 10 04 00 01 00 01 d7

参考文档

服务器

  • 10.194.98.4
  • 10.194.98.5
  • 10.194.98.6

Elasticsearch部署

RPM方式

1
2
rpm -ivh jdk-8u311-linux-x64.rpm
rpm -ivh elasticsearch-6.8.20.rpm

配置

vi /etc/elasticsearch/elasticsearch.yml

1
2
3
4
5
6
7
8
9
10
11
cluster.name: elan-cluster
node.name: node-04
path.data: /data/elasticsearch/data
path.logs: /data/elasticsearch/logs
network.host: 10.194.98.4
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.194.98.4", "10.194.98.5", "10.194.98.6"]
discovery.zen.minimum_master_nodes: 2
bootstrap.memory_lock: true
http.cors.enabled: true
http.cors.allow-origin: "*"

启动

1
2
3
4
5
systemctl enable elasticsearch
systemctl start elasticsearch

systemctl daemon-reload
systemctl restart elasticsearch

IK分词插件

https://github.com/medcl/elasticsearch-analysis-ik

1
2
3
4
cd /usr/share/elasticsearch/plugins
mkdir ik && cd ik
cp ~/pkg/elasticsearch-analysis-ik-6.8.20.zip /usr/share/elasticsearch/plugins/ik
unzip elasticsearch-analysis-ik-6.8.20.zip

评分插件

自研插件,无下载地址
mkdir elasticSearch-plugin-score

测试

http://10.194.98.4:9200
http://10.194.98.4:9200/_cat/nodes?pretty
http://10.194.98.4:9200/_cat/plugins

Kibana部署

RPM方式

1
rpm -ivh kibana-6.8.20-x86_64.rpm

配置

vi /etc/kibana/kibana.yml

启动

1
2
3
systemctl enable kibana
systemctl start kibana
systemctl restart kibana

测试

http://10.194.98.4:5601

优化

memory_lock

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vi /etc/elasticsearch/elasticsearch.yml
bootstrap.memory_lock: true

ulimit -l unlimited

vi /etc/security/limits.conf
elasticsearch - nofile 65535

vi /etc/systemd/system/elasticsearch.service.d/elasticsearch.conf
[Service]
LimitMEMLOCK=infinity
LimitNPROC=4096
LimitNOFILE=65536

vi /etc/sysconfig/elasticsearch
MAX_OPEN_FILES=65535
MAX_LOCKED_MEMORY=unlimited

禁用自平衡

1
2
3
4
5
6
gateway.expected_nodes: 3
gateway.recover_after_nodes: 3
#禁用集群新创建索引分配
cluster.routing.allocation.enable: false
#禁用集群自动平衡
cluster.routing.rebalance.enable: false

监控

1
2
3
4
5
6
GET /_cat
GET /_cat/indices?v
GET /_cat/health?v
GET /_cluster/health?level=indices&pretty
GET /_cat/nodes?v&h=id,port,v,m,fdp,mc,mcs,sc,sm,qcm,fm,im,siwm,svmm&pretty=true
GET /_cat/allocation?v&h=shards,disk.indices,disk.used,disk.avail

参考文档

主机

索引梳理

名称 UUID Lucene 文档 储存空间
ci_thesis OJeVZnhkSJiMTNw0TmViuA 24503853 84 GB
cnki-data S8JyLIldR4C3ikH2jq_qUQ 12432339 48.8 GB
elantender vKC7Iv8lQQeO1i3iYCT-PA 307 6.66 MB
elantender2 hfut5RfWSo-2VT8S72ytxw 2564581 58.5 GB
elantender3 XQ-qAY_NSjuYK2b17FUkmg 800 16 MB
ieee-data K3juwXaKQVW-0J72NiJ5Pw 2774971 32.1 GB
lunwen-cn 7bQJ8sE4Tvi5L8aBQvfzeg 12340949 47.3 GB
policies AxRTd-uVQ_q6C4iw9l9soA 472817 13.9 GB
policies_hydrabot EO4sAmmVQ2m_-PyczXOczQ 2099896 92.8 GB
rc_patents2 DBSI6NwEQyaf92Kscl0ciw 25016403 132 GB
springer-data SjopLNkNRXmEQWfGw5B2LA 2416686 29.4 GB

优化

vi /etc/logstash/logstash.yml

1
2
pipeline.batch.size: 1000
pipeline.batch.delay: 500

vi /etc/logstash/jvm.options

1
2
-Xms8g
-Xmx8g

模板1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
input {
elasticsearch {
hosts => "10.20.41.30:9200"
index => "policies_hydrabot"
query => '{"query": {"range": {"createTime": {"gte": "2021-1-1 00:00:00","lt": "2021-10-1 00:00:00"}}}}'
docinfo => true
size => 1000
scroll => "1m"
}
}

filter {
mutate {
remove_field => ["@timestamp", "@version"]
}
}

output {
elasticsearch {
hosts => ["http://10.194.98.4:9200"]
index => "%{[@metadata][_index]}"
document_type => "%{[@metadata][_type]}"
document_id => "%{[@metadata][_id]}"
}
}

模板2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
input {
elasticsearch {
hosts => ["10.20.41.30:9200"]
index => "rc_patents2"
docinfo => true
size => 1000
scroll => "5m"
request_timeout_seconds => 600
socket_timeout_seconds => 600
}
}

output {
elasticsearch {
hosts => ["http://10.194.98.4:9200"]
index => "%{[@metadata][_index]}"
document_type => "%{[@metadata][_type]}"
document_id => "%{[@metadata][_id]}"
}
}

模板3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
input {
elasticsearch {
hosts => ["http://10.194.98.4:9200"]
index => "rc_patents2"
docinfo => true
size => 1000
scroll => "5m"
request_timeout_seconds => 600
socket_timeout_seconds => 600
}
}

output {
csv {
fields => ["applyDate","applyID","applyMan","host","id", "industry_category1_zh", "industry_category2_tag", "industry_category2_zh", "industry_jinan_names", "industry_jinan_tags", "inventor","mainID","openDate", "openID", "ownerAdd", "ownerCode", "path", "proxyCompany","proxyMan","status","summary","ten_power_names", "ten_power_tags", "ten_power_unionNames","title", "type","urlMd5"]
path => "/data/rc_patents2.csv"
}
}

执行

1
/data/logstash-7.15.2/bin/logstash "--path.settings" "/data/logstash-7.15.2/config" -f logstash.conf

分时间查询迁移

policies_hydrabot

分时段查询:

1
2
3
4
5
6
7
8
{"query": {"bool": {"must_not": {"exists": {"field": "createTime"}}}}}  41724 41717
{"query": {"range": {"createTime": {"lt": "2000-1-1 00:00:00"}}}} 1679 1679
{"query": {"range": {"createTime": {"gte": "2000-1-1 00:00:00","lt": "2020-1-1 00:00:00"}}}} 520994 520909 534371 525134
{"query": {"range": {"createTime": {"gte": "2020-1-1 00:00:00","lt": "2021-1-1 00:00:00"}}}} 578494 578452 585849 580347
{"query": {"range": {"createTime": {"gte": "2021-1-1 00:00:00","lt": "2021-10-1 00:00:00"}}}} 711246 711180 726068 715264
{"query": {"range": {"createTime": {"gte": "2021-10-1 00:00:00","lt": "2021-12-1 00:00:00"}}}} 269026 262501
{"query": {"range": {"createTime": {"gte": "2021-12-1 00:00:00"}}}} 67924 67913
{"query": {"range": {"ggsj": {"gt": "1638720000000"}}}}

踩坑

  • jvm.options参数中,将栈内存调到物理内存50%
  • logstash.yml参数中,将batch.size调大,降低请求频次,避免output es被写死
  • 使用7.X的logstash,可以向下兼容6.X的ES
  • 7.X的logstash,可以配置input的timeout参数,避免网络闪断造成的scroll重置,重复插入数据问题
  • 7.X的logstash,可以明显降低output es的lucene缓存占用


title: 国密预研

参考文档

参考书籍

《图解密码技术 第三版》

链接: https://pan.baidu.com/s/1VlIz9uad_PHVB4ikhJzaYg 提取码: k4nw

概念及类比

概念:

  • SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。
  • SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。
  • SM3 消息摘要。可以用MD5作为对比理解。该算法已公开。校验结果为256位。
  • SM4 无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位。

类比:

  • 对称算法(分组密码算法):AES/DES/SM4
  • 非对称算法(公钥密码算法):RSA/SM2
  • 摘要算法(杂凑算法):MD5/SHA-I/SM3

选型

直接使用pigx内置的hutool封装库

BouncyCastle

https://www.bouncycastle.org/

主流密码算法库,包含国密

hutool

https://hutool.cn/docs/#/crypto/%E5%9B%BD%E5%AF%86%E7%AE%97%E6%B3%95%E5%B7%A5%E5%85%B7-SmUtil

基于Bouncy Castle封装
PigX内置hutool及,无需额外引入依赖

GmSSL

http://gmssl.org/docs/java-api.html

只支持国密

java-gm

https://github.com/Hyperledger-TWGC/java-gm

基于Bouncy Castl封装

SM2Java

https://github.com/PopezLotado/SM2Java

基于Bouncy Castl封装

sm-crypto

https://github.com/JuneAndGreen/sm-crypto

前端JS版本

资源

macOS环境手动搭建

参考文档

安装PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 安装
brew search php
brew install php@7.4
brew services start php@7.4

# 添加PATH
echo 'export PATH="/usr/local/opt/php/sbin:$PATH"' >> ~/.zshrc
source ~/.zshrc

# 查看版本
php -v
php-fpm -v

# 启动服务(php-fpm监听9000端口)
brew services run php@7.4

安装Nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
brew install nginx
brew services start nginx
nginx -h

vi /usr/local/etc/nginx/nginx.conf
cd /usr/local/etc/nginx/servers/
vi test.conf
server {
listen 8099;
server_name localhost;
root /home/www/php-project;
rewrite . /index.php;
location / {
index index.php index.html index.htm;
autoindex on;
}
#proxy the php scripts to php-fpm
location ~ \.php$ {
include /usr/local/etc/nginx/fastcgi.conf;
fastcgi_intercept_errors on;
fastcgi_pass 127.0.0.1:9000;
}
}

DEMO

1
2
3
vi index.php
<?php
phpinfo();

直接启动

1
2
3
4
5
# 内置server方式启动
php -S localhost:9000

# 命令行执行
php start.php

MongoDB扩展安装

1
pecl install mongodb

Xdebug安装

参考文档

安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 安装
pecl install xdebug

# 查看PHP配置路径
php --ini

# 修改php.ini
vi /usr/local/etc/php/7.4/php.ini
[xdebug]
xdebug.mode=debug
xdebug.client_host="127.0.0.1"
xdebug.client_port=9001
xdebug.collect_return=On
xdebug.idekey="PHPSTORM"
xdebug.log="/tmp/xdebug.log"

PhpUnit

1
2
3
4
5
6
7
8
9
10
# 安装依赖
composer require phpunit/phpunit

或 vi composer.json
"require-dev" : {
"phpunit/phpunit" : "^8.0"
}

# 生成配置
vendor/bin/phpunit --generate-configuration

jenssegers/mongodb

guzzlehttp/guzzle

Guzzle是一个PHP的HTTP客户端,用来轻而易举地发送请求,并集成到我们的WEB服务上。

pda/pheanstalk

Beanstalkd 是一个高性能,轻量级的分布式内存队列,C 代码,典型的类 Memcached 设计,协议和使用方式都是同样的风格,所以使用过 memcached 的用户会觉得 Beanstalkd 似曾相识。
pheanstalk是一个操作 beanstalkd 的 php 客户端。

predis/predis

predis是php连接redis的操作库

doctrine/dbal

在Laravel中,使用migration作为数据库的版本控制工具,当需要对已存在的数据表作更改,需要额外引入doctrine/dbal扩展

kittinan/php-crc

Calculates CRC checksums for input data

simplesoftwareio/simple-qrcode

Simple QrCode 是基于Bacon/BaconQrCode 开发,适用于Laravel框架的软件包. 我们的目的是让二维码能更加便捷的使用在Laravel框架的项目里

menthe/aliyun-ueditor

UEditor 是由百度web前端研发部开发所见即所得富文本web编辑器,此包为laravel5的支持,新增多语言配置,可自由部署前端代码

laravel/passport

Passport提供完整的 OAuth2 服务端实现

alibabacloud/client

短信服务(Short Message Service)是阿里云为用户提供的一种通信服务的能力。

jenssegers/agent

laravel-agent 是一个为 Laravel 定制的客户端识别扩展包,基于 Mobile Detect , 提供了非常优雅的接口.

dariuszp/cli-progress-bar

Progress bar for cli apps

overtrue/laravel-wechat

微信 SDK for Laravel / Lumen, 基于 overtrue/wechat

imangazaliev/didom

HTML 解析器

bvtvd/laravel-gateway-worker

GatewayWorker 是基于 Workerman 开发的一个 TCP 长连接框架,实现了单发、群送、广播等长连接必用的接口

fideloper/proxy

如果您的站点位于代理(例如负载均衡器)后面,则您的 Web 应用程序可能存在以下一些问题:
重定向和 PHP 生成的 URL 在其 Web 地址,协议和 / 或端口方面可能不准确。
可能无法为每个用户创建唯一会话,从而导致可能访问不正确的帐户,或者无法让用户完全登录
记录或其他数据收集过程数据可能看起来来自一个位置(代理本身),使您无法区分各个客户端所采取的流量 / 操作。

laravel/tinker

tinker 允许您从交互式 shell 中的命令行与 Laravel 应用程序进行交互

laravelcollective/html

Laravel提供了各种内置的标签,以方便,安全地处理HTML表单。所有 HTML 的主要元素都是可以使用Laravel来产生的。

maatwebsite/excel

Excel 工具包

workerman/workerman

workerman是一款开源高性能PHP应用容器

workerman/mqtt

一个基于workerman的异步mqtt客户端库,可用于接收或者发送mqtt协议的消息

mrgoon/aliyun-sms

阿里云提供的短信服务

overtrue/laravel-pinyin

Laravel 中文转拼音

zircote/swagger-php

接口API的定义

jenssegers/imagehash

图片摘要

MySQL备份

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash
# ##################################################################
# MySQL定时备份
# crontab -e
# 30 01 * * * . $HOME/.bash_profile; cd /data/dump/hydrabot_policy; ./dump_mysql.sh
# ##################################################################

# 环境变量
USERNAME=root
PASSWORD=yourpass
DATABASE=hydrabot_policy_prd
BASE_DIR=/data/dump/hydrabot_policy
DUMP_FILE=$BASE_DIR/hydrabot_policy_prd_`date +%Y%m%d%H%M%S`.sql

# 备份
cd $BASE_DIR
mysqldump -u$USERNAME -p$PASSWORD $DATABASE > $DUMP_FILE

# 压缩dmp
gzip $DUMP_FILE

# 删除旧的dmp
find $BASE_DIR -name "*.sql.gz" -mtime +7 -exec rm {} \;

MongoDB备份

参考

https://stackoverflow.com/questions/24439068/tar-gzip-mongo-dump-like-mysql

1
2
mongodump --host <host-ip> --port 27017 --db <database>  --authenticationDatabase admin --username <username> --password <password> --gzip --archive >  dump_`date "+%Y-%m-%d"`.gz
mongodump --host <host-ip> --port 27017 --db <database> --authenticationDatabase admin --username <username> --password <password> --gzip --archive=mongodump.gz

Shell

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
# ##################################################################
# MongoDB定时备份
# crontab -e
# 30 01 * * * . $HOME/.bash_profile; cd /data/dump/policy_content; ./dump_mongo.sh
# ##################################################################

# 环境变量
DATABASE=hydrabot
COLLECTION=policy_content
BASE_DIR=/data/dump/policy_content
DUMP_FILE=$BASE_DIR/policy_content_`date +%Y%m%d%H%M%S`.gz

# 备份
cd $BASE_DIR
mongodump -d $DATABASE -c $COLLECTION --gzip --archive > $DUMP_FILE

# 删除旧的dmp
find $BASE_DIR -name "*.gz" -mtime +3 -exec rm {} \;