提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、Nexus3 安装与初始配置
  • 二、配置内网源(代理)的详细步骤
    • 1、Blob Store
    • 2、Repositories
      • 2.1、apt
      • 2.2、pip
      • 2.3、conda
      • 2.4、docker
  • 三、Nexus权限管理与安全配置
  • 四、代理源的缓存与维护
  • 总结


前言

在内网环境中,公司的服务器无法直接访问外网下载依赖库或软件,这导致安装和更新过程变得复杂。通常,我们会通过二进制安装或使用网络代理来绕过限制,但开网络代理存在较大的安全隐患。为了解决这个问题,搭建一个公司专用的内网源代理是更安全和高效的方案。

Nexus作为一款流行的仓库管理工具,可以在内网环境下通过代理功能缓存和分发外部依赖库,帮助我们避免网络安全风险的同时,提高开发与运维效率。本文将介绍如何部署Nexus,并配置其作为内网代理源的详细步骤。

原理简介:

Nexus的代理功能通过在本地缓存外部库和软件包,将请求从内网转发至外部源,并将结果缓存到内网服务器中。之后,当内网用户再次请求相同资源时,Nexus会直接从本地缓存中提供,避免重复访问外部网络,不仅提高了响应速度,也降低了外网访问带来的安全风险。


一、Nexus3 安装与初始配置

有本地与容器两种部署方式,下面将采取容器方式部署

本地方式部署请参考 Nexus官网

docker 镜像 Nexus3 dockerhub 官网镜像
使用教程 docker-nexus3(github)

启动命令:

docker run -d -p 8082:8081 --name nexus sonatype/nexus3:3.72.0-ubi

测试命令:

curl http://localhost:8082

或浏览器 http://<nexus3_IP>:8082 访问测试

日志命令:

docker logs -f nexus

在浏览器访问 http://<nexus3_IP>:8082 点击 Sign in ,会提示:
Your admin user password is located in
/nexus-data/admin.password on the server.

查看 admin 登录密码:

# 进入容器
docker exec -it nexus bash
# 查看密码
cat /nexus-data/admin.password

通过该账号密码登录并修改密码,勾选 Enable anonymous access (按实际需求选择,这里需匿名下载所以选择 Enable)

PS:
启动要几分钟,启动详细过程可以查看日志。
这里不做数据持久化和数据库拆分,后续将单独开一篇博文讲解。

二、配置内网源(代理)的详细步骤

1、Blob Store

在Nexus的管理界面中,点击 RepositoryBlob StoresCreate blob storeType 选 File → 输入 NamePathSoft Quota 不勾选Save

*PS:
这里是用于创建内网源缓存/存储的空间,
Name是该空间名称,
Path是存储路径,
Soft Quota 是用与限制该空间可用/剩余大小

同个 Blob Store 可以提供多个源共用如apt、pip、conda,但迁移或导出时无法区分这块空间是属于什么源的文件,所以生产环境建议按规范命名创建和使用*

2、Repositories

在Nexus的管理界面中,点击 RepositoryRepositoriesCreate repository → 选择自己需要的源+proxy类型… …
下面就以 apt、pip、conda、docker 几个为例子,搭建Proxy代理源,其他的都大同小异。

下列操作将所有源代理至清华源,docker 源除外。
可访问 清华源官网地址 ,里面包含源的地址和使用方法。

2.1、apt

创建 repository 并选择 apt (proxy) 后:

输入 Name (apt-tuna)
其实就是内网源的仓库名

输入 Distribution (xenial/bionic/focal/jammy)
其实就是描述,填啥都不影响

输入 Proxy → Remote storage (https://mirrors.tuna.tsinghua.edu.cn/)
其实就是代理源的URL

选择 Stoage → Blob store (自己创建的Blob store)
其实就是使用存储空间

点击 Create repository 创建成功

测试(Ubuntu20系统):
点击 copy 复制内网源URL,修改ubuntu源

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo vim /etc/apt/sources.list

# 内容替换如下
deb http://<nexus3_IP>:8082/repository/apt-tuna/ubuntu/ focal main restricted universe multiverse
deb http://<nexus3_IP>:8082/repository/apt-tuna/ubuntu/ focal-updates main restricted universe multiverse
deb http://<nexus3_IP>:8082/repository/apt-tuna/ubuntu/ focal-backports main restricted universe multiverse
deb http://<nexus3_IP>:8082/repository/apt-tuna/ubuntu/ focal-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ focal universe

# 保存后测试
sudo apt update
sudo apt install -y tree

若能安装则成功配置,否则请检查代理地址,内网源地址,是否正确,nexus机是否能访问清华源地址。

PS:Ubuntu16、18 版本都能正常使用,但 20 需要给内网源添加个 https 证书,22能 update 但不能 install(后续debug出来会单独开篇博文更新)

2.2、pip

创建 repository 并选择 pypi (proxy) 后:

输入 Name (pypi-tuna)
其实就是内网源的仓库名

输入 Proxy → Remote storage (https://mirrors.tuna.tsinghua.edu.cn/)
其实就是代理源的URL

选择 Stoage → Blob store (自己创建的Blob store)
其实就是使用存储空间

点击 Create repository 创建成功

测试(Ubuntu20系统):
点击 copy 复制内网源URL,pip下载测试

pip install -i http://<nexus3_IP>:8082/repository/pypi-tuna/simple --trusted-host <nexus3_IP>:8082 soundfile

若是下的库比较大,报超时错那命令该为如下:

pip install --default-timeout=9999 -i http://<nexus3_IP>:8082/repository/pypi-tuna/simple --trusted-host <nexus3_IP>:8082 soundfile

若能安装则成功配置,否则请检查代理地址,内网源地址,是否正确,nexus机是否能访问清华源地址。

PS:pip库是只有 nexus下好了,本地才能下,如果要安装的库特别大,网速不是很快的情况下,建议多下几次或更改pip超时时间和nginx代理超时时间(若有)

2.3、conda

创建 repository 并选择 conda (proxy) 后:

输入 Name (conda-tuna)
其实就是内网源的仓库名

输入 Proxy → Remote storage (https://mirrors.tuna.tsinghua.edu.cn/)
其实就是代理源的URL

选择 Stoage → Blob store (自己创建的Blob store)
其实就是使用存储空间

点击 Create repository 创建成功

测试(Ubuntu20系统):
点击 copy 复制内网源URL,安装好conda后,测试

#生成~/.condarc用户配置文件
conda config --set show_channel_urls yes

#替换为如下内容
channels:
  - http://<nexus3_IP>:8082/repository/conda-tuan/anaconda/cloud/menpo
  - http://<nexus3_IP>:8082/repository/conda-tuan/anaconda/cloud/bioconda/
  - http://<nexus3_IP>:8082/repository/conda-tuan/anaconda/cloud/msys2/
  - http://<nexus3_IP>:8082/repository/conda-tuan/anaconda/cloud/conda-forge/
  - http://<nexus3_IP>:8082/repository/conda-tuan/anaconda/pkgs/free/
  - http://<nexus3_IP>:8082/repository/conda-tuan/anaconda/pkgs/main/
show_channel_urls: true

default_channels:
  - http://<nexus3_IP>:8082/repository/conda-tuan/anaconda/pkgs/main
  - http://<nexus3_IP>:8082/repository/conda-tuan/anaconda/pkgs/r
  - http://<nexus3_IP>:8082/repository/conda-tuan/anaconda/pkgs/msys2

custom_channels:
  conda-forge: http://<nexus3_IP>:8082/repository/conda-tuan/anaconda/cloud
  msys2: http://<nexus3_IP>:8082/repository/conda-tuan/anaconda/cloud
  bioconda: http://<nexus3_IP>:8082/repository/conda-tuan/anaconda/cloud
  menpo: http://<nexus3_IP>:8082/repository/conda-tuan/anaconda/cloud
  pytorch: http://<nexus3_IP>:8082/repository/conda-tuan/anaconda/cloud
  pytorch-lts: http://<nexus3_IP>:8082/repository/conda-tuan/anaconda/cloud
  simpleitk: http://<nexus3_IP>:8082/repository/conda-tuan/anaconda/cloud
  deepmodeling: http://<nexus3_IP>:8082/repository/conda-tuan/anaconda/cloud/

#清除索引缓存
conda clean -i
#运行测试
conda create -n myenv2 numpy pandas pypdf2
source activate myenv2
source deactivate myenv2

若能运行虚拟环境则成功配置,否则请检查代理地址,内网源地址,是否正确,nexus机是否能访问清华源地址。

PS:这个源也是,一般下载的会特别大,网速不是很快的情况下,建议多下几次或更改超时时间和nginx代理超时时间(若有)

2.4、docker

和上面不一样,docker proxy不能直接使用,得单独配置host和proxy和组,比较复杂,后面再更新。。。。

三、Nexus权限管理与安全配置

创建用户与角色:根据公司内不同部门或项目的需求,在"Nexus Security"中创建对应的用户和角色,分配访问权限。可以为不同的仓库和操作(如上传、下载)设置精细的权限控制。

启用身份验证:配置LDAP或其他身份验证方式,以确保只有授权人员能够访问Nexus仓库。

限制外网访问:通过防火墙或Nexus的配置,限制Nexus服务器只能访问指定的外部源,进一步提升安全性。


四、代理源的缓存与维护

定期清理缓存:根据项目需求,定期清理旧的或未使用的包缓存,避免占用过多磁盘空间。(配了quota或全部磁盘就给nexus用的话就不用管)

监控与日志:通过Nexus的日志功能和监控工具,检查代理仓库的状态,确保没有过多的404或缓存失效的问题。

定期更新外部源:确保代理仓库的外部源地址是最新的,有时外部源会更改地址或更新配置,需及时同步。


总结

nexus 结合 LDAP + RBAC 角色,无论是作为代理源加速下载还是内网上传源,都是很好用的。
但有一点注意的是,若nexus部署在 k8s 上, k8s 的容器镜像绝对!一定!千万!不能只存放到nexus上,当k8s自身挂了,在 k8s 上部署的 nexus 也有可能会挂了,其他容器服务重启恢复时无法从 nexus 上拉取镜像,那就真的挂了,恢复成本极高!!!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐