Nexus 私服搭建
参考链接:: https://github.com/sonatype/docker-nexus3
Nexus简介
Nexus全称Sonatype Nexus,是Maven仓库管理器,也可以叫Maven的私服。
私服是架设在局域网的一种特殊的远程仓库服务,目的是代理远程仓库及部署第三方构件。当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。
Maven仓库分类:
- 本地仓库
- 远程仓库
远程仓库分为:中央仓库、私服、其他公共仓库。
私服的特性:
- 节省自己的外网带宽:
减少重复请求造成的外网带宽消耗 - 加速Maven构建:
如果项目配置了很多外部远程仓库的时候,构建速度就会大大降低,利用私服,Maven只检查局域网的数据,提高构建的速度。 - 部署第三方构件:
当某些构件无法从外部仓库获得的时候,便可以把这些构件部署到内部仓库(私服)中,供内部maven项目使用。 - 提高稳定性,增强控制:
Internet不稳定的时候,maven构建也会变的不稳定,私服缓存了大量构建,可供暂时连接不到网络时Maven的正常运行。 - 降低中央仓库的负荷:
maven中央仓库被请求的数量是巨大的,使用私服可以避免很多对中央仓库的重复下载,降低中央仓库的压力。
因此我们在实际的项目中通常使用私服来间接访问中央仓库,项目通常不直接访问中央仓库
Nexus常用功能:
- 指定私服的中央地址
- 将自己的Maven项目指定到私服地址
- 从私服下载中央库的项目索引
- 从私服仓库下载依赖组件
- 将第三方项目jar上传到私服供其他项目组使用。
Nexus3安装:
默认情况下,nexus是提供了四个仓储 :
- maven-central 代理中央仓库,从公网下载jar
- maven-release 发布版本内容(即自己公司发行的jar的正式版本)
- maven-snapshots 发布版本内容(即自己公司发行的jar的快照版本)
- maven-public 以上三个仓库的小组
其中Type类型中:
- proxy是代理的远程仓库
- hosted是指本地或者内部项目仓库
- group只是一个仓库组,它包含其他的几个仓库
- Releases是指发行版本(本地或者内部项目)
- Snapshots是指正在构建的版本(本地或者内部项目)
- Central是指中央仓库(远程中央仓库下载的构件放入此处)
安装Docker:
$ vim docker.sh
#!/bin/sh
#install curl
sudo apt-get update && sudo apt-get install -y curl
#install-docker
curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh --mirror Aliyun
sudo systemctl restart docker && sudo systemctl enable docker
sudo usermod -aG docker tuser
$ bash docker.sh
...
If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:
sudo usermod -aG docker your-user
Remember that you will have to log out and back in for this to take effect!
WARNING: Adding a user to the "docker" group will grant the ability to run
s which can be used to obtain root privileges on the
docker host.
Refer to https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface
for more information.
Synchronizing state of docker.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable docker
在Ubuntu 20.04下卸载Docker
卸载Docker之前,删除所有容器、映像、卷和网络,停止所有正在运行的容器并删除所有docker对象:
docker stop $(docker ls -aq)
docker system prune -a --volumes
卸载Docker:
sudo apt purge docker-ce
sudo apt autoremove
卸载完成。
通过Docker安装Nexus:
- 实现nexus管理maven私服
- nexus设置maven仓库
- 默认情况下,nexus是提供了四个仓储
$ sudo docker search nexus #查看可用版本
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
sonatype/nexus3 Sonatype Nexus Repository Manager 3 906
sonatype/nexus Sonatype Nexus 440 [OK]
clearent/nexus 22
sonatype/nexus-iq-server Sonatype Nexus IQ Server 16
bradbeck/nexus-https Dockerized version of Nexus Repo Manager 3 w…
...
$ sudo mkdir -p /qj/nexus && sudo chown -R 200 /qj/nexus #持久性存储需要将主机目录挂载为卷,并且是不可移植的,因为nexus依赖主机上具有正确权限的现有目录。
$ sudo docker run -d -p 8081:8081 --name nexus -v /qj/nexus/:/nexus-data sonatype/nexus3
...
Unable to find image 'sonatype/nexus3:latest' locally
latest: Pulling from sonatype/nexus3
1b8dabac56ed: Pull complete
6500ac87b29f: Pull complete
71d938b2ad90: Pull complete
42de81017ff2: Pull complete
Digest: sha256:93eac6b837c1486af3ee146bfeadaa65b66bd481bd2d744b3c25d36c73261174
Status: Downloaded newer image for sonatype/nexus3:latest
a9218fd93cc2063ce00243edad648d3c87f58a465aae62e663a42b9817d094cb
$ sudo docker ps #查看容器信息
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a9218fd93cc2 sonatype/nexus3 "sh -c ${SONATYPE_DI…" 49 seconds ago Up 47 seconds 0.0.0.0:8081->8081/tcp nexus
测试:
链接: http://192.168.10.232:8081
代理中央仓库:
Repositories/maven-central