Typora 使用自定义 Node 脚本上传图片到 MinIO 图床上
脚本
1 | /* |
在该脚本目录下执行npm intsall minio
配置
在脚本中配置 MinIO 服务端的配置项
在 Typora 进行如下配置

该脚本支持
- 自动创建 bucket
- 多文件批量上传
1 | /* |
在该脚本目录下执行npm intsall minio
在脚本中配置 MinIO 服务端的配置项
在 Typora 进行如下配置

该脚本支持
导出主库全部数据
mysqldump -A -F --single-transaction --master-data=1 > /tmp/full.sql
-A: 导出全部数据
-F: 同参数–flush-logs, dump 前生成新的 bin log 日志
–master-data=1:参数会在 sql 中打印出 binlog 的信息
例如:CHANGE MASTER TO MASTER_LOG_FILE='binlog.000248', MASTER_LOG_POS=156;
当指定为 2 时,改行为注释的情况,为 1 时不注释
这时就相当于改变了从主库读取 binlog 的文件和位置信息,
之后将导出的数据导入从库
mysql -p < /tmp/full.sql
耐心的等待
完成后查看从节点的信息:
show slave status;
主要看 Master_Log_File 和 Read_Master_Log_Pos 的数据是否和上面的一致
此时再开启主从同步
start slave ;
完成;
查看信息
使用 choose 标签
1 | <choose> |
或者
1 | <choose> |
按照晚上的教程,配置了
JAVA_TOOL_OPTIONS=”-Dsun.jnu.encoding=UTF-8 -Dfile.encoding=UTF-8”
和 LANG=C.UTF-8
这些都没有解决问题
主要问题是主节点配置连接从节点的账号 jenkins 没有初始化环境变量
查看从节点的系统信息,可以看到 file.encoding 是 ASNI 编码
解决办法就是新建一个用户使用 -d 指定 home 目录,
useradd -d /home/jenkins jenkins
目的是为了生成 .bashrc .bash_logout .bash_profile 三个文件,将这 3 个文件拷贝到 Jenkins 的home 目录下并授权, 就解决了
再去看从节点的 file.encoding 已经变成 UTF-8 了
使用 @ConfigurationProperties(prefix = "xxxx") 注解配置类
在 Nacos 配置中心里修改相应的配置会自动的刷新属性(配置类上不需要注解 @RefreshScope)
还可以通过发送 POST 请求手动刷新 /actuator/refresh 配置
修改保存后会发现日志打印出如下内容:
1 | 2021-09-29 01:02:22.081 INFO [etc-gateway,,] 2664 --- [xxx_6101] c.a.n.client.config.impl.ClientWorker : [fixed-xxxx_6101] [polling-resp] config changed. dataId=etc-gateway.yaml, group=DEFAULT_GROUP |
这里记录我遇到的坑:
控制台打印:
1 | 2021-09-29 01:06:18.896 INFO [etc-gateway,,] 3640 --- [xxx_6101] c.a.nacos.client.config.impl.CacheData : [fixed-xxx_6101] [notify-context] dataId=etc-gateway.yaml, group=DEFAULT_GROUP, md5=4c20b06be83314e17467d3f41d821094 |
这里说明没有正确读到 application.name
在 bootstrap.yml 配置文件里正确配置
1 | spring: |
即可
我这里 bootstrap.yml 配置时多个项目公用的,可以配置环境变量 -Dspring.application.name=etc-gateway
配置 https:
1 | listen 80 ssl; |
正常情况下使用 80 和 443 端口实现 http 自动跳转 https 的话配置:
1 | server { |
如果不是正常的端口的话,注释掉上面的 rewrite 配置,新增如下配置即可
error_page 497 301 https://$http_host$request_uri;
1 | stream { |
stream 放到和 http 同一级
别忘了开启防火墙端口
firewall-cmd --zone=public --add-port=45672/tcp --permanentfirewall-cmd --reload
如果提示错误 unknown directive "stream"
则需要加载相应的模块
在 nginx.conf 配置
1 | load_module /usr/lib64/nginx/modules/ngx_stream_module.so; |
这里是我用的包
Modules
使用源码编译包
地址 :https://nginx.org/en/download.html
docker run -it -v /tmp/nginx-1.18.0/:/data centos:7.4.1708 bash
1 | yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel |
1 | yum groupinstall 'Development Tools' |
1 | ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream |
然后直接拷贝编译好的 nginx 二进制文件用就行
如果反向代理的域名是动态域名,当解析发生变化后,Nginx 不会重新解析(只在启动或 reload 时解析一次域名)
解决方式
将域名改为变量形式,Nginx 才会按照 resolver 的 valid 时间定期重新解析
1 | stream { |
Nginx 的 resolver 不是定时主动轮询,而是按需触发 + 缓存过期机制:
有新请求进来 → 检查 DNS 缓存是否过期(valid=10s)→ 已过期则重新查询 → 建立连接
没有请求进来,Nginx 永远不会主动发 DNS 查询。 valid=10s 只是缓存有效期,不是轮询间隔。
验证方法
手动模拟 UDP 请求触发解析:
终端:抓包tcpdump -i any port 53
客户端: 连接
如果 IP 变化后希望尽快生效,将 valid 调小(如 valid=5s),确保每次请求间隔超过该值即可。
加入注解 @RequestPart
@RequestParam("file") @RequestPart("file") MultipartFile multipartFile