欢迎来到小松鼠的博客

座右铭:了解越少,偏见越多!

Spring Boot中4种文件下载方法的实现

本篇文章介绍Spring Boot中分别返回ResponseEntity<InputStreamResource>ResponseEntity<Resource>ResponseEntity<StreamingResponseBody>HttpServletResponse.getOutputStream()4种文件下载方法的实现。


ycyin大约 5 分钟SpringSpring Boot
在minio中开启https访问以及使用rclone备份minio桶

背景和环境

根据上一篇文章搭建好了Choerodon,启动的Minio文件服务使用docker安装,文件存储在本地属于单点存储,具有数据丢失的风险。现在需要对minio存储的文件进行备份到另外一台机器,通过调研决定使用rclone进行备份。在实际操作中发现rclone需要让minio开启https访问。以下是使用的相关组件及其版本信息:

minio:RELEASE.2020-01-03T19-12-21Z

rclone:v1.51.0

minio开启https

自签证书

#1 生成服务器端私钥
openssl genrsa -out server.key 2048
#2 生成服务器端公钥
openssl rsa -in server.key -pubout -out server.pem

# 生成CA证书
#3 生成 CA 私钥
openssl genrsa -out ca.key 2048
#4
openssl req -new -key ca.key -out ca.csr
#5 生成CA证书
openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt -days 3650

# 生成服务器证书
#6 服务器端需要向 CA 机构申请签名证书,在申请签名证书之前依然是创建自己的 CSR 文件
openssl req -new -key server.key -out server.csr
#7 向自己的 CA 机构申请证书,签名过程需要 CA 的证书和私钥参与,最终颁发一个带有 CA 签名的证书
openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt -d
#8 生成cer文件 使用openssl 进行转换
openssl x509 -in server.crt -out server.cer -outform der -days 3650

ycyin大约 3 分钟云原生miniorclone
在多机Docker环境下部署Choerodon的解决方案

背景

我们的Choerodon部署在测试网段的K8S中,现在需要给另一部门在办公网部署一套Choerodon的敏捷管理模块。 首先为了减少在在Docker中部署与在k8s中部署Choerodon(SpringCloud)微服务项目的差异性,我们选择使用docker-compose来部署,这样微服务之间仍然可以使用服务名进行互相访问。 由于只给了两台8C16G的机器,我们先是将需要存储空间的基础组件(MySQL、Redis和MinIO)部署在其中一台带有1T硬盘机器, 其它Choerodon的微服务使用docker-compose部署在另外一台机器上,这样在docker-compose中只需要为每一个service指定一个相同的type:bridge桥接网络就可以互通了。 但是后来发现,所有的微服务部署在一台机器上内存不够用,需要将两台机器的Docker网络打通进行部署。


ycyin大约 9 分钟云原生DockerChoerodon
Prometheus中Monitor添加对SpringBoot Actuator的Basic认证

背景

一般地,我们使用Prometheus对SpringBoot应用进行监控时,没有做任何认证,监控接口是完全开放的,我们直接访问暴露出来的指标接口http://localhost:8081/actuator/prometheus就可以拿到指标接口,这在某些程度上不安全。。

我们需要给我们的监控指标接口添加一个Base认证。

应用添加Basic认证

我这里是SpringBoot2.3.9版本,在添加spring-boot-starter-actuator和micrometer-registry-prometheus做指标暴露外,还在此基础之上还需要添加spring-boot-starter-security包。


ycyin大约 3 分钟云原生PrometheusSpring Boot
在Nginx的容器镜像中隐藏Nginx的Server响应头

背景

前端应用部署在K8s中,Nginx以容器的方式运行。由于一些安全因素,我们需要将Nginx返回的响应头中Server隐藏掉不让访问者知道我们的服务器信息(包括服务器类型和版本号)。

方案

对于隐藏版本号,我们可以在配置文件中,http区段中插入server_tokens off;后重新载入配置文件即可实现。

对于隐藏服务类型,目前了解到有两种方案:方案一是修改源码,重新编译Nginx;方案二是加载headers-more-nginx-module这个模块。因为我们是在容器中运行的Nginx,所以我们考虑方案二更为简单。


ycyin大约 3 分钟云原生DockerNginx
Grafana中的邮件报警和截图插件grafana-image-enderer

Grafana Image Renderer是一个 Grafana 后端插件,它使用无头浏览器 (Chromium) 将面板和仪表板渲染为 PNG。比如下面的邮件通知,Include image功能则需要这个插件。

本文中的Grafana在Docker容器中运行,用的Grafana7和Grafana8.5的镜像都实验了,如果是二进制本地化安装可能很多经验不适用。

本文将在Grafana的邮件报警通知,Grafana容器中安装grafana-image-renderer插件独立运行grafana-image-renderer插件镜像作为远程服务,遇到的坑这几个方便做个记录。


ycyin大约 5 分钟云原生k8s
2
3
4
5
...
8