DevOps/SREjava

Docker 安装 Nexus3,并配置 Nginx 反向代理

2019-10-15  本文已影响0人  6ea566508d0d

常用数据仓库简介

目前,市面上支持 Docker 镜像存储的主流数据仓库主要有以下 4 种:

这里,我们将选用 Nexus3 作为数据仓库,因为 Nexus3 支持非常多的仓库类型,例如:mavendockeryumaptnpmrubygemspypi

在 Nexus3 支持 3 种 Docker 仓库:


安装 Nexus3,配置 Docker 仓库

这里,我们将采用 Docker 的形式安装 Nexu3,这样可以减少很多不必要的麻烦,并且也方便以后的迁移工作
步骤大致如下:

  1. 创建并赋权相应的数据挂载目录
  2. 安装 Nexus3,并配置 Docker 仓库
  1. 创建并赋权相应的数据挂载目录

    mkdir -p /opt/nexus/nexus-data && chmod 777 /opt/nexus/nexus-data
    

    注:虽然官方完档中,挂载文件夹赋予的权限是 200,但经过测试,权限只给 200 是会出现问题的,所以,我们直接赋予 777 的权限,从而避免一些不必要的麻烦

  2. 安装 Nexus3,并配置 Docker 仓库

代理仓库(docker-proxy)


image.png

聚合仓库(docker-group)


image.png

使用 Nginx 反向代理

由于,三种仓库支持的功能都不太完美:

故使用 Nginx 进行代理:通过请求方式的不同,代理到不同的仓库,从而实现仓库操作上的统一,具体配置如下:

upstream nexus_website {
    server 120.79.176.192:9999;
}
upstream nexus_docker_hosted {
    server 120.79.176.192:10086;
}
upstream nexus_docker_group {
    server 120.79.176.192:10000;
}

server {
    listen 80;
    server_name registry.cn-shenzhen.idukelu.com;
    access_log /var/log/nginx/registry.cn-shenzhen.sekorm.com.log main;
        
    # disable any limits to avoid HTTP 413 for large image uploads
    client_max_body_size 0;
    # required to avoid HTTP 411: see Issue #1486 (https://github.com/docker/docker/issues/1486)
    chunked_transfer_encoding on;
    # 设置默认使用推送代理
    set $upstream "nexus_docker_hosted";
    # 当请求是GET,也就是拉取镜像的时候,这里改为拉取代理,如此便解决了拉取和推送的端口统一
    if ( $request_method ~* 'GET') {
        set $upstream "nexus_docker_group";
    }
    # 只有本地仓库才支持搜索,所以将搜索请求转发到本地仓库,否则出现500报错
    if ($request_uri ~ '/search') {
        set $upstream "nexus_docker_hosted"; 
    }  
    index index.html index.htm index.php;
    location / {
            proxy_pass http://$upstream;
            proxy_set_header Host $host;
            proxy_connect_timeout 3600;
            proxy_send_timeout 3600;
            proxy_read_timeout 3600;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_buffering off;
            proxy_request_buffering off;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto http;
    }
}

server {
    listen 80;
    server_name repo.idukelu.com;
    access_log /var/log/nginx/repo.sekorm.com.log main;
    index index.html index.htm index.php;
    location / {
            proxy_pass http://nexus_website;
            proxy_set_header Host $host;
            client_max_body_size 512m;
            proxy_connect_timeout 3600;
            proxy_send_timeout 3600;
            proxy_read_timeout 3600;
            proxy_buffering off;
            proxy_request_buffering off;
    }
}

到这里,基本上就完成了 Nexus3 的搭建工作和 Nginx 的代理工作

参考:
https://help.sonatype.com/repomanager3
https://github.com/docker/docker-registry
https://zhang.ge/5139.html

上一篇下一篇

猜你喜欢

热点阅读