通过Nexus私服代理外网仓库提供给内网使用
Nexus设置代理仓库
前言
内网开发,拉取依赖库比较麻烦,通过Nexus私服代理外网仓库提供给内网使用。Nexus仓库分为
proxy
,代理仓库用于代理远程的公共仓库;hosted
,宿主仓库部署自己的jar到这个类型的仓库,包括releases和snapshot两部分;group
,仓库组用来合并多个hosted/proxy仓库,通常我们配置自己的maven连接仓库组。
安装
官网下载解压运行nexus.exe程序即可,默认访问地址为http://localhost:8081/
。
默认登录密码如图所示,修改登录密码。
设置匿名访问为打开,用户无需登录即可拉取资源。
设置Http代理
设置代理使Nexus能拉取外网仓库资源。
设置角色和用户
新建用户角色,添加文件上传菜单权限,Maven仓库的view权限,设置后能在页面和通过mvn命令上传Jar包。
新增用户,选择刚刚新建的角色。
新增Pypi仓库
创建仓库,选择pypi(proxy)类型,Remote storage设置为阿里源https://mirrors.aliyun.com/pypi
,或清华大学源https://pypi.tuna.tsinghua.edu.cn
,或中科大源https://mirrors.ustc.edu.cn/pypi/web
。
创建仓库,选择pypi(group)类型,Member repositories设置刚刚新建的proxy类型仓库。
查看pypi-public仓库的url为http://10.122.10.20:8081/repository/pypi-public/
,使用时需要添加/simple
,否则无法拉取资源,全称为http://10.122.10.20:8081/repository/pypi-public/simple
。
Python设置私服仓库,新建%APPDATA%\pip\pip.ini
文件,设置内容如下:
[global]
index-url = http://10.122.10.20:8081/repository/pypi-public/simple
trusted-host = 10.122.10.20
或者直接通过pip install --trusted-host [10.122.10.20](http://10.122.10.20/) -i http://10.122.10.20:8081/repository/pypi-public/simple flask
命令拉取资源。
新增Npm仓库
创建仓库,选择npm(proxy)类型,Remote storage设置为阿里源https://registry.npmmirror.com
。
创建仓库,选择npm(group)类型,Member repositories设置刚刚新建的proxy类型仓库。
npm设置私服仓库命令如下:
npm config get registry
npm config set registry http://10.122.10.20:8081/repository/npm-public/
npm config delete registry
npm install react
新增Docker仓库
创建仓库,选择docker(proxy)类型,Remote storage设置为自行搭建的Docker镜像站点https://docker.lideyu.top
。
创建仓库,选择docker(group)类型,设置单独的Http端口为8082,Member repositories设置刚刚新建的proxy类型仓库。
Nexus打开Docker Bearer Token Realm配置,否则使用docker login命令会提示Error response from daemon: login attempt to http://xxx.xxx.xxx.xxx:xxxx/v2/ failed with status: 401 Unauthorized
异常。
Docker设置私服仓库,通过vim /etc/docker/daemon.json
修改配置文件。
{
"insecure-registries":["10.122.10.20:8082"],
"registry-mirrors":["http://10.122.10.20:8082"],
"ipv6":false,
"debug":true
}
Docker常用命令如下:
# 重新加载某个服务的配置文件
systemctl daemon-reload
# 重启Docker服务
systemctl restart docker
# 查看Docker服务状态
systemctl status docker
# 查看Docker日期
journalctl -u docker
# 登录Docker镜像,登录之后才能拉取镜像
docker login 10.122.10.20:8082
# 拉取镜像,可以省略私服地址
docker pull bash
docker pull 10.122.10.20:8082/python
# 查看Docker已经拉取的镜像
docker images
# 搜索Docker镜像,必须带私服地址,否则无法搜索到镜像
docker search bash
docker search 10.122.10.20:8082/phpmyadmin
# 移除镜像
docker rmi phpmyadmin
# 移除带bash的镜像
docker rmi -f $(docker images bash* -q | sort | uniq)
# 可用Docker镜像地址:
# https://docker.lideyu.top/
# https://docker.rainbond.cc/
新增Maven仓库
Nexus默认带maven-central、maven-releases、maven-snapshots、maven-public四个仓库,修改仓库,maven(proxy)类型的maven-central,Remote storage设置为阿里源https://maven.aliyun.com/repository/public
。
Java使用私服配置如下,使用maven(group)类型的maven-public仓库:
<!-- Java项目工程pom.xml添加如下配置 -->
<!-- 设置Maven仓库为私服 -->
<repositories>
<repository>
<id>Nexus-repos</id>
<name>Nexus Repository</name>
<url>http://10.122.10.20:8081/repository/maven-public/</url>
</repository>
</repositories>
<!-- 设置Maven插件仓库为私服 -->
<pluginRepositories>
<pluginRepository>
<id>Nexus-plugin-repos</id>
<name>Nexus pluginRepositories</name>
<url>http://10.122.10.20:8081/repository/maven-public/</url>
</pluginRepository>
</pluginRepositories>
<!-- 或者Maven的setting配置文件添加如下配置 -->
<mirrors>
<mirror>
<id>Nexus-repos</id>
<name>Nexus Repository</name>
<url>http://10.122.10.20:8081/repository/maven-public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
Maven 3.8.1开始禁止对http仓库的访问,修改Idea的Maven配置文件支持对http仓库的访问,Idea自带Maven插件配置文件地址为C:\Program Files\JetBrains\IntelliJ IDEA 2023.2.5\plugins\maven\lib\maven3\conf\settings.xml
,注释mirrors中的mirror部分即可。
<mirrors>
<!--
<mirror>
<id>maven-default-http-blocker</id>
<mirrorOf>external:http:*</mirrorOf>
<name>Pseudo repository to mirror external repositories initially using HTTP.</name>
<url>http://0.0.0.0/</url>
<blocked>true</blocked>
</mirror>
-->
</mirrors>
Nexus界面上可以手动上传release和hosted的包,但是无法手动上传snapshots的包,在release仓库上传snapshots的包会报错。
手动上传Jar包命令如下,支持上传snapshots的包,Windows上需要用双引号包裹参数:
.\mvn.cmd deploy:deploy-file "-DgroupId=com.dcits.luna" "-DartifactId=nbl-mcs-business-repository" "-Dversion=1.0.0-dev-6-SNAPSHOT" "-Dpackaging=jar" "-Dfile=D:\Repository\com\dcits\luna\nbl-mcs-business-repository\1.0.0-dev-6-SNAPSHOT\nbl-mcs-business-repository-1.0.0-dev-6-SNAPSHOT.jar" "-Durl=http://10.122.10.20:8081/repository/maven-snapshots/" "-DrepositoryId=nexus-snapshots"
.\mvn.cmd deploy:deploy-file "-DgroupId=com.dcits.lcdp.comet" "-DartifactId=comet-dao-api" "-Dversion=4.0.1" "-Dpackaging=jar" "-Dfile=D:\Repository\com\dcits\lcdp\comet\comet-dao-api\4.0.1\comet-dao-api-4.0.1.jar" "-Durl=http://10.122.10.20:8081/repository/maven-releases/" "-DrepositoryId=nexus-releases"
.\mvn.cmd deploy:deploy-file "-DgroupId=com.dcits.lcdp.comet" "-DartifactId=comet-dao" "-Dversion=4.0.1" "-Dpackaging=pom" "-Dfile=D:\Repository\com\dcits\lcdp\comet\comet-dao\4.0.1\comet-dao-4.0.1.pom" "-Durl=http://10.122.10.20:8081/repository/maven-releases/" "-DrepositoryId=nexus-releases"
-DrepositoryId 指的是maven settings.xml中的server id一致,server是配置Nexus的用户和密码。
<servers>
<server>
<id>nexus-snapshots</id>
<username>Shenma</username>
<password>xxxxxx</password>
</server>
<server>
<id>nexus-releases</id>
<username>Shenma</username>
<password>xxxxxx</password>
</server>
</servers>
批量上传可以单独新建一个hosted类型的仓库,Version policy选择Mixed,则可以同时上传release和snapshots的资源。如果Windows安装了Git,还可以通过Git bash执行脚本批量上传Jar包到Nexus。
#!/bin/bash
# 将此脚本复制并运行在包含待上传文件的仓库目录下
# 脚本会排除上传自身以及其他特定文件
# 获取命令行参数
while getopts ":r:u:p:" opt; do
case $opt in
r) REPO_URL="$OPTARG" # 设置远程仓库URL
;;
u) USERNAME="$OPTARG" # 设置用户名
;;
p) PASSWORD="$OPTARG" # 设置密码
;;
esac
done
# 查找当前目录及其子目录下的所有普通文件,但不包括脚本本身和其他Maven元数据文件
# find . -type f -not -path './mavenimport\.sh*' -not -path '*/\.*' -not -path '*/\^archetype-catalog\.xml*' -not -path '*/\^maven-metadata-local*\.xml' -not -path '*/\^maven-metadata-deployment*\.xml' |
# 只匹配jar文件和pom文件
find . -type f -path '*/*.jar' -or -path '*/*.pom' -or -path '*/*.sha1' |
# 删除路径中的起始点'./'
sed "s|^\./||" |
# 使用curl命令将找到的文件逐个上传到Nexus仓库
xargs -I '{}' curl -u "$USERNAME:$PASSWORD" -X PUT -v -T {} ${REPO_URL}{} ;
# 测试打印所有匹配的路径
# xargs -I '{}' echo {} ;
# Windows上,右键Git bash here上传命令
# ./mavenimport.sh -u Shenma -p sm@147 -r http://10.122.10.20:8081/repository/maven-mixed/
新增Yum仓库
创建仓库,选择yum(proxy)类型,Remote storage设置为阿里源https://mirrors.aliyun.com/centos/
,目前还不需要切换到Vault仓库。
由于Centos系统已经停止维护,官方仓库安装软件包已经切换到Vault仓库,像网易163源、清华源都是同步的官方仓库,所以Remote storage也可设置为https://mirrors.163.com/centos-vault/
、https://mirrors.tuna.tsinghua.edu.cn/centos-vault/
。
创建仓库,选择yum(group)类型,Member repositories设置刚刚新建的proxy类型仓库。
修改Centos系统私有源步骤如下:
# 放在/etc/yum.repos.d目录下,先将原来目录下的文件备份到其他地方
cd /etc/yum.repos.d
mkdir bak
mv * bak
# 新建或者复制仓库文件
vim Nexus.repo
# 创建缓存
yum clean all
yum makecache
# 安装常见库
yum install net-tools
yum install vim
yum install lrzsz
yum install telnet
yum install lsof
新建私有源配置文件Nexus.repo内容如下,一般只需要第一节base即可:
[base]
name=Nexus Repository base
baseurl=http://10.122.10.20:8081/repository/yum-public/$releasever/os/$basearch/
enabled=1
gpgcheck=0
[updates]
name=Nexus Repository updates
baseurl=http://10.122.10.20:8081/repository/yum-public/$releasever/updates/$basearch/
enabled=1
gpgcheck=0
[extras]
name=Nexus Repository extras
baseurl=http://10.122.10.20:8081/repository/yum-public/$releasever/extras/$basearch/
enabled=1
gpgcheck=0
[base-vault]
name=Nexus Repository base
baseurl=http://10.122.10.20:8081/repository/yum-public/7.9.2009/os/$basearch/
enabled=1
gpgcheck=0
[updates-vault]
name=Nexus Repository updates
baseurl=http://10.122.10.20:8081/repository/yum-public/7.9.2009/updates/$basearch/
enabled=1
gpgcheck=0
[extras-vault]
name=Nexus Repository extras
baseurl=http://10.122.10.20:8081/repository/yum-public/7.9.2009/extras/$basearch/
enabled=1
gpgcheck=0
其中,$releasever
指当前系统的发行版本,通过rpm -qi centos-release
命令查看,Version:7
就是当前系统的发行版本。
$basearch
指系统硬件架构(CPU指令集),通过arch
命令查看,x86_64说明这台设备系统是64位的。
内网安装Docker,依赖比较多,新建yum(proxy)类型仓库,Remote storage设置为清华源https://mirrors.tuna.tsinghua.edu.cn/docker-ce
,参考官方https://download.docker.com/linux/centos/docker-ce.repo
私有源配置文件,新建Nexus-Docker-Ce
,内容如下:
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=http://10.122.10.20:8081/repository/yum-public/linux/centos/$releasever/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=http://10.122.10.20:8081/repository/yum-public/linux/centos/gpg
[docker-ce-stable-debuginfo]
name=Docker CE Stable - Debuginfo $basearch
baseurl=http://10.122.10.20:8081/repository/yum-public/linux/centos/$releasever/debug-$basearch/stable
enabled=0
gpgcheck=1
gpgkey=http://10.122.10.20:8081/repository/yum-public/linux/centos/gpg
[docker-ce-stable-source]
name=Docker CE Stable - Sources
baseurl=http://10.122.10.20:8081/repository/yum-public/linux/centos/$releasever/source/stable
enabled=0
gpgcheck=1
gpgkey=http://10.122.10.20:8081/repository/yum-public/linux/centos/gpg
[docker-ce-test]
name=Docker CE Test - $basearch
baseurl=http://10.122.10.20:8081/repository/yum-public/linux/centos/$releasever/$basearch/test
enabled=0
gpgcheck=1
gpgkey=http://10.122.10.20:8081/repository/yum-public/linux/centos/gpg
[docker-ce-test-debuginfo]
name=Docker CE Test - Debuginfo $basearch
baseurl=http://10.122.10.20:8081/repository/yum-public/linux/centos/$releasever/debug-$basearch/test
enabled=0
gpgcheck=1
gpgkey=http://10.122.10.20:8081/repository/yum-public/linux/centos/gpg
[docker-ce-test-source]
name=Docker CE Test - Sources
baseurl=http://10.122.10.20:8081/repository/yum-public/linux/centos/$releasever/source/test
enabled=0
gpgcheck=1
gpgkey=http://10.122.10.20:8081/repository/yum-public/linux/centos/gpg
[docker-ce-nightly]
name=Docker CE Nightly - $basearch
baseurl=http://10.122.10.20:8081/repository/yum-public/linux/centos/$releasever/$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=http://10.122.10.20:8081/repository/yum-public/linux/centos/gpg
[docker-ce-nightly-debuginfo]
name=Docker CE Nightly - Debuginfo $basearch
baseurl=http://10.122.10.20:8081/repository/yum-public/linux/centos/$releasever/debug-$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=http://10.122.10.20:8081/repository/yum-public/linux/centos/gpg
[docker-ce-nightly-source]
name=Docker CE Nightly - Sources
baseurl=http://10.122.10.20:8081/repository/yum-public/linux/centos/$releasever/source/nightly
enabled=0
gpgcheck=1
gpgkey=http://10.122.10.20:8081/repository/yum-public/linux/centos/gpg
执行yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
安装Docker。