提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、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的管理界面中,点击 Repository → Blob Stores → Create blob store → Type 选 File → 输入 Name 和 Path → Soft Quota 不勾选 → Save
*PS:
这里是用于创建内网源缓存/存储的空间,
Name是该空间名称,
Path是存储路径,
Soft Quota 是用与限制该空间可用/剩余大小
同个 Blob Store 可以提供多个源共用如apt、pip、conda,但迁移或导出时无法区分这块空间是属于什么源的文件,所以生产环境建议按规范命名创建和使用*
2、Repositories
在Nexus的管理界面中,点击 Repository → Repositories → Create 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 上拉取镜像,那就真的挂了,恢复成本极高!!!