文件服務器-docker-Minio分布式+nginx負載均衡+反向代理+nginx圖片剪切(一站式)


一、 分布式部署minio :拒絕花里胡哨 已封裝的minio--image:registry.cn-hangzhou.aliyuncs.com/yyzhan_images/docker-minio:2020-12-14
編寫docker-compose 我起了四個minio對應四個docker容器 訪問:宿主機:端口

version: '3.7'
 services:
minio1:
image: minio/minio:RELEASE.2020-11-13T20-10-18Z
volumes:
- /storage/minio/data1-1:/data1                            # /storage/minio/data1-1 要掛載的宿主機文件絕對路徑
- /storage/minio/data1-2:/data2
ports:
- "9000:9000"                                        #冒號前是宿主機開放端口 后是docker容器內端口 此配置目的是將docker容器端口映射到宿主機上 這樣就能訪問了。  
environment:
MINIO_ACCESS_KEY: *****                                 #minio賬號設置
MINIO_SECRET_KEY: ***********                              #minio賬號密碼設置
command: server http://minio{1...4}/data{1...2}                        #定義訪問url
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] 
interval: 30s
timeout: 20s
retries: 3
 
minio2:
image: minio/minio:RELEASE.2020-11-13T20-10-18Z
volumes:
- /storage/minio/data2-1:/data1
- /storage/minio/data2-2:/data2
ports:
- "9001:9000"
environment:
MINIO_ACCESS_KEY: *****
MINIO_SECRET_KEY: ***********
command: server http://minio{1...4}/data{1...2}
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
 
minio3:
image: minio/minio:RELEASE.2020-11-13T20-10-18Z
ports:
- /storage/minio/data3-1:/data1
- /storage/minio/data3-2:/data2
ports:
- "9002:9000"
environment:
MINIO_ACCESS_KEY: *****
MINIO_SECRET_KEY: ***********
command: server http://minio{1...4}/data{1...2}
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
 
minio4:
image: minio/minio:RELEASE.2020-11-13T20-10-18Z
volumes:
- /storage/minio/data4-1:/data1
- /storage/minio/data4-2:/data2
ports:
- "9003:9000"
environment:
MINIO_ACCESS_KEY: *****
MINIO_SECRET_KEY: ***********
command: server http://minio{1...4}/data{1...2}
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3

volumes:
data1-1:
data1-2:
data2-1:
data2-2:
data3-1:
data3-2:
data4-1:
data4-2:

PS:使用docker-compose構建命令如下
docker-compose up -d 如果報錯沒有此命令
yum -y install docker-compose

完成后如下效果--自個可以上傳點圖片啥的

在這里插入圖片描述
如此分布式minio就部署好了,如需要擴展請參照官方文檔

二、
nginx部署我的方式是編寫dockerfile自個構建自個需要的nginx環境 內容如下
ps:已封裝鏡像路徑:registry.cn-hangzhou.aliyuncs.com/yyzhan_images/minio_nginx:2020-12-14

#第一行先定義基礎鏡像,表示當前鏡像文件是基於哪個進行編輯的.
FROM centos:centos7.9.2009

#指定鏡像維護者的信息.
MAINTAINER @自在拉基 helpdesk81@outlook.com

#除了安裝編譯nginx的依賴的安裝包外,還可以將一些常用的命令工具也安裝上
#類似於這樣的安裝命令(或者經常改動相對較小的命令)應該盡量往前寫,這樣在多次編譯時就不會重復執行了(因為默認會使用緩嫿,從而提升編譯效猿
#順帶將centos的yum源改成阿里雲癭
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup && curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo && sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo && yum makecache && yum update -y  
RUN yum -y install gcc gcc-c++ make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel gd gd-devel vim wget unzip zip libxslt-dev libexif-devel
#下載軟件包並解壓
RUN wget https://github.com/linsongze/ngx_http_image_filter_module/archive/master.zip  #最新的剪切插件
RUN unzip master.zip                                                                                                            #最新的剪切插件
RUN wget http://nginx.org/download/nginx-1.16.1.tar.gz
RUN tar zxf nginx-1.16.1.tar.gz
# 創建nginx 用戶yum方式安裝無需做此步驟,因為默認yum安裝會自動創建nginx用戶,咱們下面指令以nginx用戶運行,因此我們需要在鏡像中創廣nginx用戶"
RUN useradd -M -s /sbin/nologin nginx
#切換工作目錄
WORKDIR nginx-1.16.1
#編譯安裝nginx
RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --add-module=/ngx_http_image_filter_module-master --with-http_ssl_module      #將最新的插件編譯安裝進去編譯的路徑很關鍵等下docker run啟動容器的時候需要用到要特別注意
RUN make && make install
#將access.log日志重定向到docker的標准輸兿將error.log日志重定向到docker標准錯誤,這樣docker logs 的時候就可以看到日志了⾿
RUN ln -sf /dev/stdout /usr/local/nginx/logs/access.log && ln -sf /dev/stderr /usr/local/nginx/logs/error.log

#相比COPY指令,ADD指令可以解壓"*.tar.gz"的文乿但如果你的安裝包斿*.zip"文件的話,ADD指令也不好使,得咱們自己使用unzip相關命令自行解壓,索性我上面已經安裝了unzip相關的軟件包
# ADD code.tar.gz /yinzhengjie/softwares/nginx/html


#定義向外暴露的端口號,多個端口用空格做間隔,啟動容器的時便-p"需要使用此端向外端映射.
EXPOSE 80/tcp 443/tcp

#定義前台運行的命乿每個Docker只能有一條,如果定義了多替CMD"指令那么最后一條CMD指令會覆蓋之前的(即只有最后一條CMD被執蟿.
# CMD ["nginx"]
# WORKDIR /root/nginx
# ADD nginx.sh /nginx.sh
# RUN chmod 755 /nginx.sh
#啟動容器執行指令,Dockerfile中添加了一個自定義CMD,需要➕ ᾿g᾿“daemon off᾿
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

PS: 在dockerfile目錄下執行docker image build -t nginx_filter_module:1 . 來打包構建鏡像

nginx_filter_module這個是鏡像名稱:1 1是標簽

三、重點!!!:nginx.conf配置文件(正則耗了我好長時間)這里去掉了花里胡哨留了自個需要的東西

worker_processes 4;
events {
  worker_connections 1024;
}

http {
  include       mime.types;
  #default_type  application/octet-stream;
  sendfile on;
  keepalive_timeout 65;
  proxy_cache_path /usr/local/nginx/conf/cache levels=1:2 keys_zone=minio_cache:100m max_size=10g inactive=5d; #設置緩存 -緩存路徑usr/local/nginx/conf/cache
  #gzip  on;
  upstream minio {
    server 宿主機IP:9000 weight=10;
    server 宿主機IP:9001 weight=10;
    server 宿主機IP:9002 weight=10;
    server 宿主機IP:9003 weight=10;
  }

  server {
    listen 9009;
    server_name localhost;

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
      root html;
    }
    location ~^/files/(.*)\.(?i)(jpg|jpeg|jpg|gif|png)/(\d+)x(\d+) {
      set $w $3;
      set $h $4;
      if ($w != "0") {
        rewrite ^/files/(.*)\.(?i)(jpg|jpeg|jpg|gif|png)/(\d+)x(\d+)$ /$1.$2 break;
      }
      image_filter resize $w $h;
      image_filter_buffer 100M;
      proxy_set_header Authorization '';
      proxy_cache minio_cache;
      proxy_cache_valid  200 206 304 301 302 5d;
      proxy_pass http://minio;
    }

    location ~^/files/(.*)\.(?i)(jpg|jpeg|jpg|gif|png)!(\d+)x(\d+) {
      set $w $3;
      set $h $4;
      if ($w != "0") {
        rewrite ^/files/(.*)\.(?i)(jpg|jpeg|jpg|gif|png)!(\d+)x(\d+)$ /$1.$2 break;
      }
      image_filter resize $w $h;
      image_filter_buffer 100M;
      proxy_set_header Authorization ''; #后端自定義請求頭時需要用到!!
      proxy_cache minio_cache;            #走這個location時緩存數據    
      proxy_cache_valid  200 206 304 301 302 5d;
      proxy_pass http://minio;
    }
    location ~^/files/ {
      proxy_set_header Authorization '';
      proxy_set_header Host $http_host;
      rewrite ^/files/(.*)$ /$1 break;
      proxy_pass http://minio;
    }
#直接訪問/files/eop返回404
    location = /files/eop {
    return 404; 
     }
#直接訪問/files/eop/返回404
    location = /files/eop/ {
    return 404; 
    }

  }

}

直接來docker run 本地映射文件想清楚了再docker run
docker run -itd -p 9009:9009 --name Master_minio_nginx -v /storage/minio/location_nginxMinioWeb/image_filter_nginx/:/usr/local/nginx/conf -v /etc/localtime:/etc/localtime:ro nginx_filter_module:1
PS:-v /storage/minio/location_nginxMinioWeb/image_filter_nginx/:/usr/local/nginx/conf
注意!!!
/storage/minio/location_nginxMinioWeb/image_filter_nginx/此路徑與docker容器的/usr/local/nginx/conf是映射關系所以直接將我們編輯完畢的nginx.conf文件存放到宿主機上的 /storage/minio/location_nginxMinioWeb/image_filter_nginx/這個路徑docker 容器啟動的時候才能讀到我們的配置。

補充:部署完畢后啟動docker時會報錯
將這個文件也弄進配置文件目錄下 在nginx.conf文件同級下新建文件mime.types編輯內容如下:

types {
    text/html                                        html htm shtml;
    text/css                                         css;
    text/xml                                         xml;
    image/gif                                        gif;
    image/jpeg                                       jpeg jpg;
    application/javascript                           js;
    application/atom+xml                             atom;
    application/rss+xml                              rss;

    text/mathml                                      mml;
    text/plain                                       txt;
    text/vnd.sun.j2me.app-descriptor                 jad;
    text/vnd.wap.wml                                 wml;
    text/x-component                                 htc;

    image/png                                        png;
    image/svg+xml                                    svg svgz;
    image/tiff                                       tif tiff;
    image/vnd.wap.wbmp                               wbmp;
    image/webp                                       webp;
    image/x-icon                                     ico;
    image/x-jng                                      jng;
    image/x-ms-bmp                                   bmp;

    font/woff                                        woff;
    font/woff2                                       woff2;

    application/java-archive                         jar war ear;
    application/json                                 json;
    application/mac-binhex40                         hqx;
    application/msword                               doc;
    application/pdf                                  pdf;
    application/postscript                           ps eps ai;
    application/rtf                                  rtf;
    application/vnd.apple.mpegurl                    m3u8;
    application/vnd.google-earth.kml+xml             kml;
    application/vnd.google-earth.kmz                 kmz;
    application/vnd.ms-excel                         xls;
    application/vnd.ms-fontobject                    eot;
    application/vnd.ms-powerpoint                    ppt;
    application/vnd.oasis.opendocument.graphics      odg;
    application/vnd.oasis.opendocument.presentation  odp;
    application/vnd.oasis.opendocument.spreadsheet   ods;
    application/vnd.oasis.opendocument.text          odt;
    application/vnd.openxmlformats-officedocument.presentationml.presentation
                                                     pptx;
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
                                                     xlsx;
    application/vnd.openxmlformats-officedocument.wordprocessingml.document
                                                     docx;
    application/vnd.wap.wmlc                         wmlc;
    application/x-7z-compressed                      7z;
    application/x-cocoa                              cco;
    application/x-java-archive-diff                  jardiff;
    application/x-java-jnlp-file                     jnlp;
    application/x-makeself                           run;
    application/x-perl                               pl pm;
    application/x-pilot                              prc pdb;
    application/x-rar-compressed                     rar;
    application/x-redhat-package-manager             rpm;
    application/x-sea                                sea;
    application/x-shockwave-flash                    swf;
    application/x-stuffit                            sit;
    application/x-tcl                                tcl tk;
    application/x-x509-ca-cert                       der pem crt;
    application/x-xpinstall                          xpi;
    application/xhtml+xml                            xhtml;
    application/xspf+xml                             xspf;
    application/zip                                  zip;

    application/octet-stream                         bin exe dll;
    application/octet-stream                         deb;
    application/octet-stream                         dmg;
    application/octet-stream                         iso img;
    application/octet-stream                         msi msp msm;

    audio/midi                                       mid midi kar;
    audio/mpeg                                       mp3;
    audio/ogg                                        ogg;
    audio/x-m4a                                      m4a;
    audio/x-realaudio                                ra;

    video/3gpp                                       3gpp 3gp;
    video/mp2t                                       ts;
    video/mp4                                        mp4;
    video/mpeg                                       mpeg mpg;
    video/quicktime                                  mov;
    video/webm                                       webm;
    video/x-flv                                      flv;
    video/x-m4v                                      m4v;
    video/x-mng                                      mng;
    video/x-ms-asf                                   asx asf;
    video/x-ms-wmv                                   wmv;
    video/x-msvideo                                  avi;
}

wq保存restart即可!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM