Windows 上 Git SSH 私钥要不要设置密码?
最近我重新整理了一下自己电脑上的 Git SSH 配置,顺手也想清楚了一个以前一直有点纠结的问题: 私钥到底要不要设置密码? 不设密码,git pull、git push 都很顺手; 设了密码,VSCode 或 IDEA 里又经常弹窗让输入,挺烦。 ...
最近我重新整理了一下自己电脑上的 Git SSH 配置,顺手也想清楚了一个以前一直有点纠结的问题: 私钥到底要不要设置密码? 不设密码,git pull、git push 都很顺手; 设了密码,VSCode 或 IDEA 里又经常弹窗让输入,挺烦。 ...
这篇文章和使用 GitHub Actions 不同的是: 代码托管在 GitHub 私有仓库 CI/CD 在自己服务器执行 不想使用 GitHub Actions 分钟数 比 Jenkins / GitLab 更轻量 另一篇文章 : GitHub Actions + Hugo 构建 + rsync/SSH 部署到服务器 ...
由于本博客之前还是手动部署,忍受一段时间后实在受不了了,还是开启了 CI/CD 日子~ 目标 实现: 1 本地写文章 → git push 到 GitHub → GitHub Actions 自动构建 Hugo → rsync 部署到服务器 ...
安装 MOX 参考: 使用 Docker 部署 Mox Mail 邮局 在 Linux 上使用 Docker 部署 Mox 邮件服务器时,很多人会遇到: 1 DANE is inactive because MX records are not DNSSEC-signed. 但多数情况下,并不是域名没开启 DNSSEC,而是: Mox 使用的 DNS 解析器没有真正进行 DNSSEC 验证。 ...
这篇文章是对 https://mp.weixin.qq.com/s/ih6hhTPTAgfT0L6MLObmqA 的学习,主要是针对 RocketMQ 积压大量消息的场景,分享一些排查思路和解决方案。 ...
本篇文章以MinIO作为文件服务端,其他基于S3协议的文件服务也一样。 通过接口返回文件地址给前端时,可以结合 S3 的预签名 URL 或 STS(临时凭证) 来实现安全访问。 核心思路 接口返回的文件地址不直接暴露 MinIO 存储路径。 在返回文件地址前,通过后端生成 预签名 URL 或 动态临时凭证。 前端使用该地址访问文件,确保文件访问受到权限和时间限制。 实现方法 1:基于预签名 URL 1.1 后端生成预签名 URL 使用 MinIO 提供的 SDK,在接口中动态生成带有时间限制的预签名 URL,并返回给前端。 Java 示例代码: 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 import io.minio.MinioClient; import io.minio.GetPresignedObjectUrlArgs; import io.minio.http.Method; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class FileController { private final MinioClient minioClient; public FileController() { this.minioClient = MinioClient.builder() .endpoint("https://your-minio-server.com") .credentials("ACCESS_KEY", "SECRET_KEY") .build(); } @GetMapping("/api/getFileUrl") public String getFileUrl(@RequestParam String bucketName, @RequestParam String objectName) { try { // 生成预签名 URL(有效期 1 小时) String url = minioClient.getPresignedObjectUrl( GetPresignedObjectUrlArgs.builder() .method(Method.GET) .bucket(bucketName) .object(objectName) .expiry(60 * 60) // 有效期:1小时 .build() ); return url; } catch (Exception e) { e.printStackTrace(); return "Error generating URL"; } } } 1.2 接口返回示例 前端调用 /api/getFileUrl,后端返回: ...
当执行 docker login xxx.xxx.xxx 命令后,Docker 客户端会尝试登录到指定的镜像仓库 xxx.xxx.xxx,并提示输入用户名和密码(如果该仓库需要身份验证)。成功登录后,Docker 会将登录凭证存储在本地(通常在 ~/.docker/config.json 文件中),以便后续操作(如拉取镜像或推送镜像)可以自动使用这些凭证。 对拉取镜像的具体变化 执行 docker login xxx.xxx.xxx 后,拉取镜像时的变化取决于以下几个方面: 访问私有镜像 如果 xxx.xxx.xxx 是一个私有镜像仓库,并且之前没有登录,那么在登录之前尝试拉取该仓库中的私有镜像会失败(通常会收到 unauthorized: authentication required 的错误)。登录成功后,可以拉取该仓库中有权限访问的私有镜像。例如: 1 docker pull xxx.xxx.xxx/my-private-image:latest 在登录后,Docker 会使用存储的凭证自动完成身份验证,拉取过程会顺利进行。 加速镜像拉取(如果它是镜像代理) 如果 xxx.xxx.xxx 是一个镜像加速服务(类似于国内的镜像源,如阿里云、DaoCloud 等),登录后可能会影响从该仓库拉取镜像的速度。许多加速服务会代理 Docker Hub 的官方镜像,登录后可以通过该服务更快地下载镜像。例如: 1 docker pull xxx.xxx.xxx/library/ubuntu:latest 这里假设 xxx.xxx.xxx 代理了 Docker Hub 的 ubuntu 镜像,拉取速度可能会比直接从 registry-1.docker.io(Docker Hub 默认地址)更快,具体取决于网络环境和该服务的性能。 无变化的情况 如果登录后仍然拉取的是其他仓库的镜像(例如默认的 Docker Hub 镜像 ubuntu:latest),并且没有配置 xxx.xxx.xxx 作为镜像源,那么拉取镜像的行为不会有任何变化。登录仅对 xxx.xxx.xxx 仓库的操作生效。 拉取镜像的行为 在默认情况下,如果执行: 1 docker pull ubuntu:latest Docker 会从官方镜像仓库(即 Docker Hub,地址为 registry-1.docker.io)拉取 ubuntu:latest 镜像,而不是从 xxx.xxx.xxx 拉取。原因如下: ...
在 Nginx 中,如果客户端请求的域名未在 server_name 指定的配置中匹配,Nginx 仍然会将请求转发到默认的 server 块。为了防止非 server_name 配置的域名访问,可以使用以下几种方法: 方法 1:使用默认 server 块拦截未匹配的域名 在 Nginx 配置文件中(通常是 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/default.conf),添加一个默认的 server 块,只允许 server_name 明确配置的域名访问,其他所有未匹配的域名都返回 444(直接断开连接)。 1 2 3 4 5 6 7 server { listen 80 default_server; listen [::]:80 default_server; server_name _; return 444; } 解释 listen 80 default_server;:表示该 server 块是默认的服务器,所有未匹配的请求都会进入这里。 server_name _;:这个 _ 是一个通配符,表示未匹配的任何域名都会进入该 server 块。 return 444;:返回 444 状态码,直接断开连接,不给客户端任何响应,提高安全性。 方法 2:使用 if 语句在特定 server 块中拦截 如果不想使用默认 server 块,也可以在你的业务 server 块中检查 Host 头,拒绝非指定域名的访问。 1 2 3 4 5 6 7 8 9 10 11 12 server { listen 80; server_name example.com www.example.com; if ($host !~* ^(example\.com|www\.example\.com)$) { return 403; } location / { proxy_pass http://127.0.0.1:8080; } } 解释 if ($host !~* ^(example\.com|www\.example\.com)$):检查 Host 头,如果不符合 example.com 或 www.example.com,则返回 403 Forbidden。 return 403;:拒绝访问。 ⚠️ 注意:Nginx 官方不推荐 if 语句用于控制访问,但在简单场景下可以使用。 ...
生产环境对于文件服务,尤其是对外提供访问的场景,需要注意以下几点,以防止伪装文件被解析执行等安全风险,从而被黑产利用上传恶意文件,如上传 html 作为钓鱼、菠菜、跳转 进行传播,利用你的域名当作跳板,导致域名封、通报、用户上当受骗等问题。 ...
创建数据和配置目录 1 2 mkdir -p /opt/minio/{data,config,init} cd /opt/minio 创建docker-compose.yml 注意: 此配置中 minio 的环境变量不能设置MINIO_SERVER_URL(文章末尾会有说明),除非服务器做了 FQDN,否则会出现webui页面登录不上的情况,即报错{"message":"invalid Login"},但可配置MINIO_BROWSER_REDIRECT_URL做webui的重定向。 以下的镜像是minio最后一个带web控制台的版本,如果需要最新版本请参考Minio官方文档。 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 version: "3.8" services: minio: image: minio/minio:RELEASE.2025-04-22T22-12-26Z container_name: minio restart: unless-stopped # 对外端口:9000(S3 API) 9001(Console) ports: - "9000:9000" - "9001:9001" # 数据和配置持久化 volumes: - ./data:/data - ./config:/root/.minio # 生产建议:用 .env 管理账号密码 environment: # 管理员账号密码(必须设置;不建议用默认值) MINIO_ROOT_USER: ${MINIO_ROOT_USER} MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD} # 可选:设置对外显示的访问地址 # 未做 FQDN 不要设置 # MINIO_DOMAIN=example.com # 服务器地址,未做 FQDN 不要设置 # MINIO_SERVER_URL=http://example.com # 控制台地址,仅设置 重定向 控制台地址 # MINIO_BROWSER_REDIRECT_URL: "https://console.example.com" # 启动命令 command: server /data --console-address ":9001" # 健康检查:MinIO 自带 health endpoint healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 10s timeout: 5s retries: 5 配置 .env 1 2 MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=Password_123! 启动 在 docker-compose.yml 所在目录运行: ...