docker镜像本地中转上传到服务器

由于服务器网络原因,不能真的下载docker镜像,通过把docker镜像下载到本地,再传到服务器
以nginx为例:

镜像拉到本地

1
docker pull nginx

镜像保存为tar文件

1
docker save -o nginx.tar nginx:latest

上传服务器

1
rz #nginx.tar文件到服务器

加载tar文件

1
docker load -i nginx.tar

运行镜像

1
docker run -it -d -p 80:80 nginx:latest --restart always

mongo-shake使用

下载文件

1
wget "http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/196977/jp_ja/1608863913991/mongo-shake-v2.4.16.tar.gz" -O mongoshake.tar.gz

解压

1
tar zxvf mongoshake.tar.gz && mkdir mongoshake && mv mongo-shake-v2.4.16 mongoshake && cd mongoshake/mongo-shake-v2.4.16

配置

1
2
3
4
5
6
7
8
9
10
vi collector.conf
# 源mongodb地址
mongo_urls = mongodb://mongoshake:mongoshake@172.18.67.252:27117/admin?connect=direct
# 目录mongodb地址
tunnel.address = mongodb://user:password@127.0.0.1:27017/dbName?connect=direct
# 模式
# 同步模式,all表示全量+增量同步,full表示全量同步,incr表示增量同步。
sync_mode = full
# 指定库和集合,不要加引号,多个分号分隔
filter.namespace.white = db1.col1;db2.col2

执行

1
./collector.linux -conf=collector.conf -verbose

mongodb用户权限

源数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use admin
db.createUser({
user: "mongoshake",
roles: [
{
role: "read",
db: "local"
},
{
role: "readWrite",
db: "mongoshake"
},
{
role: "read",
db: "config"
},
{
role: "readAnyDatabase",
db: "admin"
}
]
})

目标数据库

1
2
3
4
5
6
7
8
9
10
use dbName
db.createUser({
user: "dbUser",
roles: [
{
role: "readWrite",
db: "dbName"
}
]
});

完整说明

https://help.aliyun.com/zh/mongodb/user-guide/use-mongoshake-to-implement-one-way-synchronization-between-apsaradb-for-mongodb-replica-set-instances

centos安装mongodb

以centos安装mongodb4.2为例

添加yum源

创建repo/etc/yum.repos.d/mongodb-org-4.2.repo,内容为

1
2
3
4
5
6
[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/7Server/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc

安装mongodb

1
sudo yum install -y mongodb-org

启动mongodb

1
sudo systemctl start mongod

开机运行mongodb

1
sudo systemctl enable mongod

创建用户

1
2
3
mongo 
use admin
db.createUser({user: 'root', pwd: 'root', roles: ['readWriteAnyDatabase','root']})

修改配置开启认证

1
2
3
4
vi /etc/mongod.conf
# 添加
security:
authorization: enabled

验证登录

1
2
mongosh -u root --authenticationDatabase admin
# 输入密码

开启oplog

1
2
3
4
vi /etc/mongod.conf
# 添加
security:
authorization: enabled
1
2
3
4
5
6
mongo
use admin
# 开启
rs.initiate()
# 验证
rs:PRIMARY>

jenkins远程触发构建

jenkins远程触发构建的方法介绍

方式一

设置API Token,其它Basic Auth调用任务构建,此方式适用于脚本调用和代码调用

设置API Token

指定用户->用户页面->设置->API Token

curl调用

1
2
3
4
# jobName就是点进jenkins任务页面,地址栏url里的
curl http://hostname/jobName/build -u userName:APIToken
# 带参数
curl http://hostname/jobName/buildWithParameters -u userName:APIToken

方式二

使用Build Authorization Token Root插件,适合webhook之类的

  • 安装Build Authorization Token Root插件
  • 设置API Token
  • job页面,勾选“触发远程构建 (例如,使用脚本)”,身份验证令牌中填入API Token

直接浏览器输入测试:

1
2
http://hostname/buildByToken/build?job=jobName&token=APIToken
http://hostname/buildByToken/buildWithParameters?job=jobName&token=APIToken

elasticsearch分页大于10000条数据限制修改

elasticsearch采用from+size分页时,数据量大于1W会报错

1
Result window is too large, from + size must be less than or equal to: [10000] but was [100001]

解决方法

1
2
3
4
# 所有索引
curl -X PUT -H 'Content-Type: application/json' 172.24.0.171:9200/_all/_settings -d '{ "index.max_result_window" :"100000"}'
# 指定product_order索引
curl -X PUT -H 'Content-Type: application/json' 172.24.0.171:9200/product_order/_settings -d '{ "index.max_result_window" :"100000"}'

实现网站变灰

css实现网站变灰

1
2
3
4
5
6
7
8
9
10
html {
-webkit-filter: grayscale(100%);
-moz-filter: grayscale(100%);
-ms-filter: grayscale(100%);
-o-filter: grayscale(100%);
filter: grayscale(100%);
-webkit-filter: gray;
filter: gray;
filter: progid:dximagetransform.microsoft.basicimage(grayscale=1) /*ie*/
}

springboot跨域设置

springboot提供了两种跨域方式

  • 实现WebMvcConfigurer接口的addCorsMappings方法
  • FilterRegistrationBean添加CorsFilter

方式一

1
2
3
4
5
6
7
8
9
10
11
12
13
@Configuration
public class WebConfig implements WebMvcConfigurer {

@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedMethods("*")
.allowCredentials(true)
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.maxAge(3600);
}

}

方式二

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Configuration
public class WebConfig {

@Bean
public FilterRegistrationBean<CorsFilter> corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOriginPattern("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>(new CorsFilter(source));
bean.setName("corsFilter");
return bean;
}

}

区别

分使用场景

假如你用了servletfilter,并filter前提返回了请求结果,用FilterRegistrationBean方式才行,因为此时请求还没到WebMvcConfigurer处理就已经返回了。

没这种情况两者行为一样。

方式三

跨域无非就是在header里写入控制跨域相关的字段信息,自己实现Filter或者Interceptor就行了。

wsl2和Proxifier兼容问题

使用过Proxifier后,发现wsl2出问题了,打开子系统时提示参考的对象类型不支持尝试的操作。,搜了下网上的解决方法是通过下载NoLsp.exe解决

问题链接:https://github.com/microsoft/WSL/issues/4177#issuecomment-597736482,提供的用不了

这个里的可以用,https://github.com/dyingsu/nolsp

下载之后,管理员打开cmd执行命令

1
NoLsp.exe C:\windows\system32\wsl.exe

方法二

管理员身份在CMD执行

1
netsh winsock reset

清理过期日志文件

清理过期日志文件的方法

用find+exec

find找出指定时间的文件,配合exec执行删除

1
2
3
# -mtime 指定文件修改时间
# 如清理2天前的
find log_dir -mtime +2 -type f -name "*.log" -exec rm -rf {} \;

用tmpwatch

使用tmpwatch清理目录,文件最后一次被访问的时间,单位是小时;这个命令只适全整个目录下都是日志的情况

1
2
# 如清理2天前的
tmpwatch -mdfv 48 log_dir

如何查询指定时间范围内的日志

搞代码的都离不开通过查看日志处理问题;服务器上记录的日志都比较大,不会把整个日志文件拿来分析,通常会截取时间范围内的日志来分析问题,介绍几种查询时间范围日志方法。

处理文件肯定是离不开linux三剑客grep、sed、awk的。

演示截取2点到9点的日志

测试日志文件test.log,模拟所有2点到11点日志

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
{"timestamp":"2022-09-27T02:12:59+08:00","level":"debug"}
{"timestamp":"2022-09-27T02:14:42+08:00","level":"debug"}
{"timestamp":"2022-09-27T02:41:03+08:00","level":"debug"}
{"timestamp":"2022-09-27T02:45:59+08:00","level":"debug"}
{"timestamp":"2022-09-27T04:35:31+08:00","level":"debug"}
{"timestamp":"2022-09-27T04:35:31+08:00","level":"error"}
{"timestamp":"2022-09-27T04:35:31+08:00","level":"debug"}
{"timestamp":"2022-09-27T04:38:40+08:00","level":"debug"}
{"timestamp":"2022-09-27T04:49:55+08:00","level":"debug"}
{"timestamp":"2022-09-27T09:21:04+08:00","level":"debug"}
{"timestamp":"2022-09-27T09:21:04+08:00","level":"error"}
{"timestamp":"2022-09-27T09:21:04+08:00","level":"debug"}
{"timestamp":"2022-09-27T09:21:04+08:00","level":"error"}
{"timestamp":"2022-09-27T09:21:04+08:00","level":"debug"}
{"timestamp":"2022-09-27T09:21:19+08:00","level":"debug"}
{"timestamp":"2022-09-27T09:30:30+08:00","level":"debug"}
{"timestamp":"2022-09-27T09:30:35+08:00","level":"debug"}
{"timestamp":"2022-09-27T09:33:46+08:00","level":"debug"}
{"timestamp":"2022-09-27T09:37:02+08:00","level":"debug"}
{"timestamp":"2022-09-27T10:29:54+08:00","level":"debug"}
{"timestamp":"2022-09-27T10:29:59+08:00","level":"debug"}
{"timestamp":"2022-09-27T10:30:02+08:00","level":"debug"}
{"timestamp":"2022-09-27T10:30:03+08:00","level":"debug"}
{"timestamp":"2022-09-27T10:30:43+08:00","level":"debug"}
{"timestamp":"2022-09-27T10:30:44+08:00","level":"debug"}
{"timestamp":"2022-09-27T10:30:45+08:00","level":"debug"}
{"timestamp":"2022-09-27T10:30:46+08:00","level":"debug"}
{"timestamp":"2022-09-27T10:30:48+08:00","level":"debug"}
{"timestamp":"2022-09-27T10:56:22+08:00","level":"debug"}
{"timestamp":"2022-09-27T11:09:36+08:00","level":"debug"}
{"timestamp":"2022-09-27T11:09:41+08:00","level":"debug"}

正则方式

grep不支持范围,awk和sed支持范围,三个都支持正则匹配