-
NAS Docker-compose 方式私有化部署 minio,Nginx Proxy Manager 反向代理, 自建 S3 对象存储 (含两个坑的解决方案和思源笔记配置)
2024-03-19 23:27NAS 上 docker 布署,还是可以参考一下
-
NAS Docker-compose 方式私有化部署 minio,Nginx Proxy Manager 反向代理, 自建 S3 对象存储 (含两个坑的解决方案和思源笔记配置)
2024-03-19 23:17是的,群晖自带的反向代理,没有这个问题,但是 ssl 证书,三个月换一次,太麻烦,还是 npm 自动续签,比较方便。
-
NAS Docker-compose 方式私有化部署 minio,Nginx Proxy Manager 反向代理, 自建 S3 对象存储 (含两个坑的解决方案和思源笔记配置)
2024-03-19 22:54接坑二(1):
坑二:(第 2 部分)
反向代理后面的域名解析到 127.0.0.1
可以在 docker-compose 中增加 dns 记录解决
extra_hosts: api.example.com : 127.0.0.1 # 自行修改服务域名 s3.example.com : 127.0.0.1 # 自行修改服务域名
解决容器内部无法访问到 99 端口的问题
家庭网络环境中,路由器会转发端口
例如:
A 路由器外部公网端口:99 #运营商限制不能使用 80 没办法只能用 99 代替
B 反向代理端口:80/443
C 主机端口:9080 # 详见 docker-compose 的配置
D 容器内部端口:9000访问的传递是 A->B->C->D
在容器内部,无法使用 99 端口
这就需要将容器服务端口与外部端口统一使用 ":99"
综上修改后的 docker-compos.yml 如下:
version: "3.7" services: minio: image: minio/minio container_name: minio command: server --address ":99" --console-address ":9090" /data # 指定服务端口和管理端口 ports: - 9080:99 # :前面的自行定义,服务端口:API: http://IP:9080 - 9090:9090 # :前面的自行定义,管理端口:http://IP:9090 extra_hosts: api.example.com : 127.0.0.1 # 自行修改服务域名 s3.example.com : 127.0.0.1 # 自行修改服务域名 volumes: - ./data:/data # 数据目录 - ./config:/root/.minio # TLS 密钥和证书存放在 ./config/certs environment: - MINIO_ROOT_USER=admin # 用户名,自行修改 - MINIO_ROOT_PASSWORD=password # 密码,自行修改 - MINIO_SERVER_URL=https://api.example.com:99 # 自行修改成自已的域名# 反向代理的服务域名,用于文件分享外部url,":99" 是反向代理后公网访问端口 - MINIO_BROWSER_REDIRECT_URL=https://s3.example.com:99 # 自行修改成自已的域名# 反向代理的登录域名,":99" 是反向代理后公网访问端口 - MINIO_STS_DURATION=168h # 文件分享外部url 最大时长 7天,超过7天无效,永久分享的方法:Buckets(存储块)Access Policy设为 public,链接文件名后面“?及以后的代码”删除。比较危险,通过Buckets路径,可以看到所有文件的目录。 restart: unless-stopped # 总是重启容器
运行容器:
docker-compose up -d
完美解决
------------完毕------------
-
NAS Docker-compose 方式私有化部署 minio,Nginx Proxy Manager 反向代理, 自建 S3 对象存储 (含两个坑的解决方案和思源笔记配置)
2024-03-19 22:49坑二:(第 1 部分)
2、共享文件外部域分享,显示为内部域 IP(127.0.0.1:端口)(大坑)
经阅读官方文档:https://www.minio.org.cn/docs/minio/linux/integrations/setup-nginx-proxy-with-minio.html
对于个人的私有化布署,不太友好,官方文档也没说清楚
(1)需要设置两个变量:
您还必须为 MinIO 部署设置以下环境变量:
将 MINIO_SERVER_URL 设置为MinIO服务器的代理主机FQDN( https://minio.example.net ) 将 MINIO_BROWSER_REDIRECT_URL 设置为代理主机的 FQDN (https://example.net/minio/ui)
(2)修改 docker-compose.yml 内容如下:
version: "3.7" services: minio: image: minio/minio container_name: minio command: server --address ":9000" --console-address ":9090" /data # 指定服务端口和管理端口 ports: - 9080:9000 # :前面的自行定义,服务端口:API: http://IP:9080 - 9090:9090 # :前面的自行定义,管理端口:http://IP:9090 volumes: - ./data:/data # 数据目录 - ./config:/root/.minio # TLS 密钥和证书存放在 ./config/certs environment: - MINIO_ROOT_USER=admin # 用户名,自行修改 - MINIO_ROOT_PASSWORD=password # 密码,自行修改 - MINIO_SERVER_URL=https://api.example.com:99 # 自行修改成自已的域名# 反向代理的服务域名,用于文件分享外部url,":99" 是反向代理后公网访问端口 - MINIO_BROWSER_REDIRECT_URL=https://s3.example.com:99 # 自行修改成自已的域名# 反向代理的登录域名,":99" 是反向代理后公网访问端口 restart: unless-stopped # 总是重启容器
(3)运行容器:
docker-compose up -d
(4)无法登录管理页面
(5)找原因
官网 Issues 上这类问题很多
大多数并没有给我带来帮助:https://github.com/minio/minio/issues?q=MINIO_ROOT_USER
有一篇提问提到这个问题:
minio 启动后,会主动验证~ MINIO_SERVER_URL=https://api.example.com:99 ~的可通性
面临两个问题:
A.反向代理后方,无证书
B.反向代理后方,内部如何域名解析到 127.0.0.1对于个人单机单点的私有化布署,不太友好,官方文档也没说清楚
最终还是在官方文档上找到了方法
先解决证书问题:
官方文档详见:https://www.minio.org.cn/docs/minio/linux/operations/network-encryption.html
使用 MinIO 的 certgen 工具来生成自签名的 TLS 证书的方法,详见:https://www.cnblogs.com/hahaha111122222/p/15984957.html
下载地址:https://github.com/minio/certgen/releases/tag/v0.0.2
下载 certgen-windows-amd64.exe 放到任意文件夹,例如:.\desktop\1
certgen -ca -host “主机 IP,minio 容器运行 IP,两个域名,hostname”
实际执行的生成证书的命令:./certgen-windows-amd64.exe -ca -host "127.0.0.1,192.168.30.2,172.18.0.22,api.example.com,s3.example.com,minio"
显示:
2022/03/09 14:10:58 写道 public.crt
2022/03/09 14:10:58 写道 private.key
如图:解释一下 ip 和域名:
127.0.0.1 主机环回地址
192.168.30.2 主机 IP
172.18.0.22 容器内 IP
api.example.com 服务域名
s3.example.com 管理域我
Minio 主机名复制 public.crt private.key 到 主机的./config 映射目录下
-
NAS Docker-compose 方式私有化部署 minio,Nginx Proxy Manager 反向代理, 自建 S3 对象存储 (含两个坑的解决方案和思源笔记配置)
2024-03-19 22:45接主帖继续
详解两个坑的解决方案
坑一:Nginx Proxy Manager 无法反向代理
官网 Issues 上这类问题很多:https://github.com/NginxProxyManager/nginx-proxy-manager/issues?q=minio
具体解方法:详见官方文档:https://www.minio.org.cn/docs/minio/linux/integrations/setup-nginx-proxy-with-minio.html
(1)api 服务端反向代理配置如下:
注意:
Scheme* 要改成 https 如果没有放置 TLS 证书请用 http
Forward Hostname / IP* minio 是容器的名称
Forward Port * 99 是容器的内部端口,注意区分,不是映射到主机的端口 9080# Allow special characters in headers ignore_invalid_headers off; # Allow any size file to be uploaded. # Set to a value such as 1000m; to restrict file size to a specific value client_max_body_size 0; # Disable buffering proxy_buffering off; proxy_request_buffering off; location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_connect_timeout 300; # Default is HTTP/1, keepalive is only enabled in HTTP/1.1 proxy_http_version 1.1; proxy_set_header Connection ""; chunked_transfer_encoding off; proxy_pass https://minio:99; }
注意:
https://minio:99**# 要改成 https (如果没有放置 TLS 证书请用 http),99 是容器内部端口**管理端服务端反向代理配置如下:
注意:
Scheme* 要改成 https 如果没有放置 TLS 证书请用 httpForward Hostname /lP* minio 是容器的名称转发端口 * 9090 是容器的内部端口**
复制下列代码:
location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-NginX-Proxy true; # This is necessary to pass the correct IP to be hashed real_ip_header X-Real-IP; proxy_connect_timeout 300; # To support websockets in MinIO versions released after January 2023 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # Some environments may encounter CORS errors (Kubernetes + Nginx Ingress) # Uncomment the following line to set the Origin request to an empty string # proxy_set_header Origin ''; chunked_transfer_encoding off; proxy_pass https://minio:9090; }
注意:
https://minio:9090 # 要改成 https (如果没有放置 TLS 证书请用 http),9090 是容器内部端口如果不加这段代码,会出现如下情况(坑点,原因不明)
会一直打圈,不能显示列表