讓人做網(wǎng)站需要注意什今日新聞聯(lián)播
參考?docker-compose搭建多主機(jī)分布式minio - 會(huì)bk的魚 - 博客園 (cnblogs.com)
【運(yùn)維】docker-compose安裝minio集群-CSDN博客
Minio 是個(gè)基于 Golang 編寫的開源對(duì)象存儲(chǔ)套件,雖然輕量,卻擁有著不錯(cuò)的性能
中文地址:MinIO | 用于AI的S3 & Kubernetes原生對(duì)象存儲(chǔ)
官網(wǎng)地址:MinIO | High Performance, Kubernetes Native Object Storage
對(duì)象存儲(chǔ)服務(wù)(Object Storage Service,OSS)是一種海量、安全、低成本、高可靠的云存儲(chǔ)服務(wù),適合存放任意類型的文件。容量和處理能力彈性擴(kuò)展,多種存儲(chǔ)類型供選擇,全面優(yōu)化存儲(chǔ)成本。當(dāng)然 Minio 除了直接作為對(duì)象存儲(chǔ)使用,還可以作為云上對(duì)象存儲(chǔ)服務(wù)的網(wǎng)關(guān)層,無縫對(duì)接到 Amazon S3、MicroSoft Azure。
一 準(zhǔn)備工作
1、三臺(tái)機(jī)器? 配置?vim /etc/hosts
192.168.1.244 minio4
192.168.1.243 minio3
192.168.1.242 minio2
驗(yàn)證
查看docker
查看?docker-compose -v
如果沒有則安裝?
sudo yum install docker-compose
二、編寫docker-compose.yml 文件
整體目錄結(jié)構(gòu)如下:
希望 nginx 在243上
有兩個(gè)類型的docker-compose.yml (帶nginx和不帶nginx的),具體如下
1、不帶nginx(242和244)
version: "3"
services:minio:image: quay.io/minio/miniocontainer_name: minio-node2hostname: minio2expose:- "19000"- "19001"environment:- MINIO_ROOT_USER=minio- MINIO_ROOT_PASSWORD=minio@123volumes:- ./data-1:/data1- ./data-2:/data2command: server --console-address ':19001' --address ':19000' http://minio{2...4}/data{1...2}privileged: truehealthcheck:test: ["CMD", "curl", "-f", "http://localhost:19000/minio/health/live"]interval: 30stimeout: 20sretries: 3extra_hosts:- minio2:192.168.1.242- minio3:192.168.1.243- minio4:192.168.1.244restart: alwaysnetwork_mode: host
version: "3"
services:minio:image: quay.io/minio/miniocontainer_name: minio-node4hostname: minio4expose:- "19000"- "19001"environment:- MINIO_ROOT_USER=minio- MINIO_ROOT_PASSWORD=minio@123volumes:- ./data-1:/data1- ./data-2:/data2command: server --console-address ':19001' --address ':19000' http://minio{2...4}/data{1...2}privileged: truehealthcheck:test: ["CMD", "curl", "-f", "http://localhost:19000/minio/health/live"]interval: 30stimeout: 20sretries: 3extra_hosts:- minio2:192.168.1.242- minio3:192.168.1.243- minio4:192.168.1.244restart: alwaysnetwork_mode: host
?2、帶nginx (243)
version: "3"services:minio:image: quay.io/minio/miniocontainer_name: minio-node3hostname: minio3expose:- "19000"- "19001"environment:- MINIO_ROOT_USER=minio- MINIO_ROOT_PASSWORD=minio@123volumes:- /home/minio-data1:/data1- /home/minio-data2:/data2command: server --console-address ':19001' --address ':19000' http://minio{2...4}/data{1...2}privileged: truehealthcheck:test: ["CMD", "curl", "-f", "http://localhost:19000/minio/health/live"]interval: 30stimeout: 20sretries: 3extra_hosts:- minio2:192.168.1.242- minio3:192.168.1.243- minio4:192.168.1.244restart: alwaysnetwork_mode: hostnginx:image: nginx:1.19.2-alpinehostname: nginxvolumes:- /home/dockerinstall/nginx/conf.d/nginx.conf:/etc/nginx/nginx.conf:ro- /home/dockerinstall/nginx/cert/server1.crt:/etc/nginx/ssl/server.crt:ro- /home/dockerinstall/nginx/cert/server1.key:/etc/nginx/ssl/server.key:roports:- "9000:9090"- "9001:9091"- "443:443" # 添加這一行來映射 443 端口extra_hosts:- minio2:192.168.1.242- minio3:192.168.1.243- minio4:192.168.1.244restart: always
這句話是在 Docker Compose 文件中定義的一個(gè)卷 (volume) 映射,用于將宿主機(jī)上的文件或目錄掛載到容器內(nèi)。具體來說,這行代碼的意思是:
volumes:
?- 這個(gè)關(guān)鍵字表示后面跟著的是一個(gè)或多個(gè)卷映射。- ./nginx.conf:/etc/nginx/nginx.conf:ro
?- 這是一個(gè)具體的卷映射配置,其中包含了三個(gè)部分:./nginx.conf
?- 表示宿主機(jī)上的文件路徑,即當(dāng)前目錄下的?nginx.conf
?文件。:/etc/nginx/nginx.conf
?- 表示容器內(nèi)的文件路徑,即將宿主機(jī)上的?nginx.conf
?文件掛載到容器內(nèi)的?/etc/nginx/nginx.conf
?路徑。:ro
?- 表示只讀權(quán)限,意味著掛載到容器內(nèi)的文件只能被讀取而不能被修改。
綜上所述,這行配置的作用是將宿主機(jī)當(dāng)前目錄下的 nginx.conf
文件以只讀的方式掛載到容器內(nèi)的 /etc/nginx/nginx.conf
路徑。這樣做的目的是為了讓容器能夠使用宿主機(jī)提供的 Nginx 配置文件,并且確保容器內(nèi)的進(jìn)程不能修改這個(gè)配置文件。
nginx配置文件如下:
user nginx; # 設(shè)置 Nginx 運(yùn)行的用戶為 "nginx"。
worker_processes auto; # 自動(dòng)確定工作進(jìn)程的數(shù)量,通常是根據(jù) CPU 核心數(shù)來決定。error_log /var/log/nginx/error.log warn; # 將錯(cuò)誤日志記錄到指定路徑,并僅記錄警告及以上級(jí)別的日志。
pid /var/run/nginx.pid; # 指定 Nginx 進(jìn)程 ID 文件的路徑。events {worker_connections 4096; # 設(shè)置每個(gè)工作進(jìn)程的最大并發(fā)連接數(shù)。
}http {include /etc/nginx/mime.types; # 包含 MIME 類型配置文件。default_type application/octet-stream; # 設(shè)置默認(rèn) MIME 類型。log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"'; # 定義訪問日志的格式。access_log /var/log/nginx/access.log main; # 將訪問日志記錄到指定路徑,并采用上面定義的日志格式。sendfile on; # 啟用高效文件傳輸。keepalive_timeout 65; # 設(shè)置保持連接的超時(shí)時(shí)間。upstream adobe { # 定義了一個(gè)名為 "adobe" 的負(fù)載均衡組,包含三個(gè)服務(wù)器。server minio2:19000;server minio3:19000;server minio4:19000;}upstream console { # 定義了一個(gè)名為 "console" 的負(fù)載均衡組,同樣包含三個(gè)服務(wù)器,并使用 ip_hash 進(jìn)行基于 IP 的會(huì)話保持。ip_hash;server minio2:19001;server minio3:19001;server minio4:19001;}# HTTP 服務(wù)器塊,用于重定向 HTTP 到 HTTPSserver {listen 80; # 偵聽80端口,用于將HTTP請(qǐng)求重定向到HTTPS。server_name 192.168.1.24; # 自己的域名。return 301 https://$host$request_uri; # 將HTTP請(qǐng)求重定向到HTTPS。}# HTTPS 服務(wù)器塊server {listen 443 ssl; # 偵聽443端口,用于SSL。listen [::]:443 ssl; # 偵聽 IPv6 地址的443端口,用于SSL。server_name 192.168.1.243; # 自己的域名。ssl_certificate /etc/nginx/ssl/server1.crt; # SSL 證書文件路徑。ssl_certificate_key /etc/nginx/ssl/server1.key; # SSL 私鑰文件路徑。ssl_session_timeout 5m; # SSL 會(huì)話緩存的有效時(shí)間。ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 支持的 SSL/TLS 版本。ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; # 支持的加密套件。ssl_prefer_server_ciphers on; # 優(yōu)先使用服務(wù)器端的加密套件列表。# To allow special characters in headersignore_invalid_headers off; # 允許特殊字符出現(xiàn)在 HTTP 頭中。# Allow any size file to be uploaded.# Set to a value such as 1000m; to restrict file size to a specific valueclient_max_body_size 0; # 允許上傳任意大小的文件。# To disable bufferingproxy_buffering off; # 關(guān)閉代理緩沖。proxy_request_buffering off; # 不對(duì)請(qǐng)求體進(jìn)行緩沖。location / { # 定義根路徑的處理規(guī)則。proxy_set_header Host $http_host; # 設(shè)置 Host 頭。proxy_set_header X-Real-IP $remote_addr; # 設(shè)置客戶端真實(shí) IP。proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 設(shè)置客戶端 IP 列表。proxy_set_header X-Forwarded-Proto $scheme; # 設(shè)置協(xié)議類型。proxy_connect_timeout 300; # 設(shè)置連接超時(shí)時(shí)間。# Default is HTTP/1, keepalive is only enabled in HTTP/1.1proxy_http_version 1.1; # 使用 HTTP/1.1 版本。proxy_set_header Connection ""; # 清空 Connection 頭,避免代理服務(wù)器使用 close 或者 keep-alive。# For WebSocket supportproxy_set_header Upgrade $http_upgrade; # 設(shè)置升級(jí)協(xié)議頭。proxy_set_header Connection "upgrade"; # 設(shè)置連接類型為升級(jí)。chunked_transfer_encoding off; # 禁用分塊傳輸編碼。proxy_pass http://adobe; # 指定代理目標(biāo)。}}# HTTPS 服務(wù)器塊 for consoleserver {listen 443 ssl; # 偵聽443端口,用于SSL。listen [::]:443 ssl; # 偵聽 IPv6 地址的443端口,用于SSL。server_name 192.168.1.243; # 自己的域名。ssl_certificate /etc/nginx/ssl/server1.crt; # SSL 證書文件路徑。ssl_certificate_key /etc/nginx/ssl/server1.key; # SSL 私鑰文件路徑。ssl_session_timeout 5m; # SSL 會(huì)話緩存的有效時(shí)間。ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 支持的 SSL/TLS 版本。ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; # 支持的加密套件。ssl_prefer_server_ciphers on; # 優(yōu)先使用服務(wù)器端的加密套件列表。# To allow special characters in headersignore_invalid_headers off; # 允許特殊字符出現(xiàn)在 HTTP 頭中。# Allow any size file to be uploaded.# Set to a value such as 1000m; to restrict file size to a specific valueclient_max_body_size 0; # 允許上傳任意大小的文件。# To disable bufferingproxy_buffering off; # 關(guān)閉代理緩沖。proxy_request_buffering off; # 不對(duì)請(qǐng)求體進(jìn)行緩沖。location / { # 定義根路徑的處理規(guī)則。proxy_set_header Host $http_host; # 設(shè)置 Host 頭。proxy_set_header X-Real-IP $remote_addr; # 設(shè)置客戶端真實(shí) IP。proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 設(shè)置客戶端 IP 列表。proxy_set_header X-Forwarded-Proto $scheme; # 設(shè)置協(xié)議類型。proxy_set_header X-NginX-Proxy true; # 設(shè)置代理標(biāo)志。# This is necessary to pass the correct IP to be hashedreal_ip_header X-Real-IP; # 設(shè)置用于 IP 哈希的頭部。proxy_connect_timeout 300; # 設(shè)置連接超時(shí)時(shí)間。# For WebSocket supportproxy_set_header Upgrade $http_upgrade; # 設(shè)置升級(jí)協(xié)議頭。proxy_set_header Connection "upgrade"; # 設(shè)置連接類型為升級(jí)。chunked_transfer_encoding off; # 禁用分塊傳輸編碼。proxy_pass http://console; # 指定代理目標(biāo)。}}
}
解釋和說明:
-
Global Configuration (全局配置):
- 設(shè)置了運(yùn)行 Nginx 的用戶、錯(cuò)誤日志的位置、PID 文件的位置等基本配置項(xiàng)。
-
Events Block (事件塊):
- 設(shè)置了每個(gè)工作進(jìn)程的最大并發(fā)連接數(shù)。
-
HTTP Configuration (HTTP 配置):
- 包含了 MIME 類型配置文件。
- 定義了訪問日志的格式。
- 啟用了高效文件傳輸。
- 設(shè)置了保持連接的超時(shí)時(shí)間。
-
Upstream Blocks (上游配置):
- 定義了兩個(gè)負(fù)載均衡組?
adobe
?和?console
,分別包含三個(gè)服務(wù)器,并為?console
?組啟用了基于 IP 的會(huì)話保持。
- 定義了兩個(gè)負(fù)載均衡組?
-
Server Blocks (服務(wù)器配置):
- HTTP 重定向到 HTTPS:
- 偵聽80端口,并將所有HTTP請(qǐng)求重定向到HTTPS。
- HTTPS 服務(wù)器塊:
- 偵聽443端口,用于SSL,并啟用了 SSL 證書和密鑰,以及 SSL 會(huì)話緩存、協(xié)議版本和加密套件等配置。
- 兩個(gè)服務(wù)器塊分別代理到?
adobe
?和?console
?上游組,并支持 WebSocket。
- HTTP 重定向到 HTTPS:
通過以上配置,Nginx 將能夠支持 HTTPS,并將 HTTP 請(qǐng)求重定向到 HTTPS,同時(shí)代理到不同的后端服務(wù)。
分別在242,243,244上創(chuàng)建目錄和上傳相關(guān)配置文件
然后分別啟動(dòng)
docker-compose up -d
參考:sudo yum install tree 安裝tree命令? ?sudo yum install lrzsz 安裝rz命令
-----------------------------------------------
安裝完畢 登錄驗(yàn)證
http 登錄 用戶名 minio 密碼 minio@123
https登錄 未成功 需要重新生產(chǎn)ssl文件
在本地修改
openssl x509 -req -in server1.csr -CA rootca.crt -CAkey rootca.key -CAcreateserial -out server2.crt -days 36500 -extensions req_ext -extfile ssl.conf
openssl rsa -in server1.key -out server1_rsa.key
輸入密碼123456
mv server1_rsa.key server1.key
?
docker-compose stop
重新啟動(dòng)
docker-compose up -d