部署Nexus3私有仓库

Posted by Simon Dong on 2018-09-21

使用Docker安装Nexus3

1
2
3
4
5
6
7
# 下载镜像
docker pull sonatype/nexus3
# 创建数据卷
docker volume create nexus
# 启动Docker
docker run -d --restart always -p 12081:8081 --name nexus \
--mount source=nexus,target=/nexus-data sonatype/nexus3

如果需要在容器和主机间复制文件,应采用:

1
2
3
4
5
6
7
8
#先删除已有的容器
docker stop nexus && docker ps -a | grep nexus | awk '{print $1}' | xargs docker rm
#如果要同时删除与容器相关的卷
#docker stop nexus && docker ps -a | grep nexus | awk '{print $1}' | xargs docker rm -v
mkdir -p /var/docker_data/nexus && chmod -R 777 /var/docker_data/nexus
#重新运行docker容器
docker run -d --restart always -p 12081:8081 --name nexus \
--mount source=nexus,target=/nexus-data -v /var/docker_data/nexus:/root \ sonatype/nexus3

经过这样的操作,即可将/var/docker_data/nexus目录映射到容器内部/root目录。

配置Nexus3

修改Nexus3上下文根

使用Docker命令docker exec -it nexus /bin/bash进入容器,执行vi /nexus-data/etc/nexus.properties

1
2
#去掉注释
nexus-context=/nexus

或者仅仅去掉注释,在启动docker容器时加入环境变量-e CONTEXT_PATH=nexus

配置nginx

修改/etc/nginx/nginx.conf,在http块中加入对nexus服务器的转发

1
2
3
4
location /nexus {
include proxy.conf;
proxy_pass http://<server>:12081/nexus;
}

proxy.conf:

1
2
3
4
5
6
7
8
9
10
proxy_redirect          off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 100m;
client_body_buffer_size 128k;
proxy_connect_timeout 90s;
proxy_send_timeout 90s;
proxy_read_timeout 90s;
proxy_buffers 32 4k;

设置Nexus 私有仓库

nexus3的默认用户是admin,密码是admin123,可以通过http://<server/nexus修改密码。

Nexus2 批量导入已有的私有类库(Nexus2 适用)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 共享CI服务器的文件
sudo apt install cifs-utils
mkdir ~/tfs
sudo mount -t cifs -o username=<username>,password=<password> //<server>/<share> ~/tfs

#先删除已有的容器
docker stop nexus && docker ps -a | grep nexus | awk '{print $1}' | xargs docker rm
#如果要同时删除与容器相关的卷
#docker stop nexus && docker ps -a | grep nexus | awk '{print $1}' | xargs docker rm -v
mkdir -p /var/docker_data/nexus && chmod -R 777 /var/docker_data/nexus
#重新运行docker容器
docker run -d --restart always -p 12081:8081 --name nexus \
--mount source=nexus,target=/nexus-data -v /var/docker_data/nexus:/root \ sonatype/nexus3

#复制需要的文件到相应的目录
cp -R ~/tfs/repositories/maven/ecroe /var/docker_data/nexus/

#进入Docker容器
docker exec -it nexus /bin/bash

直接复制到nexus的存储目录
cp -R /root/ /opt/data/nexus/sonatype-work/nexus/storage/<RepoId>/

Nexus3 批量导入

直接使用Http put将文件存放到/repository/\/\, 文件命名为importNexus.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash

# Get command line params
while getopts ":r:u:p:" opt; do
case $opt in
r) REPO_URL="$OPTARG"
;;
u) USERNAME="$OPTARG"
;;
p) PASSWORD="$OPTARG"
;;
esac
done

find . -type f \
-not -path '*/\.*' \
-not -path '*/\^archetype\-catalog\.xml*' \
-not -path '*/\^maven\-metadata\-local*\.xml' \
-not -path '*/\^maven\-metadata\-deployment*\.xml' \
-exec curl -u $USERNAME:$PASSWORD -X PUT -v -T {} $REPO_URL{} \;

在需要导入的Jar的根目录执行:

1
2
3
importNexus -u <username> -p <password> -r <repos_url>
#example
importNexus -u deployer -p password -r http://<server>/nexus/repository/maven-releases/