1、前言
最近项目需要搭建 maven 私服,方便管理后期团队成员使用上传自己的包,因此决定使用 nexus 来搭建私服,搭建好的 nexus 地址。
2、准备工作
阿里云服务器 ECS 一台 1 核 CPU 2G 内存 (注意:最低为 2G,否则运行报错)
3、开始安装
3.1 安装 java
java 的安装网上的文章好多,不过我是自己写的 shell 文件安装的,如下:
#!/bin/bash
# jdk install
# 请将下载的 jdk-xxx-linux-xxx.tar.gz 包与此脚本放置到同一目录
# 授予此脚本可执行权限 (chmod +x install_jdk.sh)
# 在终端执行此脚本开始安装 (./ 文件名)
# 注意:不可有多个版本的 jdk 包!
# 为了使配置的环境变量生效,安装完成后你应该重新登陆。
jvmpath=/usr/local/java
# 不存在
if [! -d “$jvmpath”]; then
echo “ 正在创建 $jvmpath 目录 ”
sudo mkdir $jvmpath
echo “ 目录 $jvmpath 创建成功 ”
fi
jdkfile=$(ls | grep jdk-*-linux-*.gz)
jdkdirname=”jdk1.8.0_201″
if [! -f “$jdkfile”]; then
echo “ 正在下载 jdk 请稍等 …”
wget –no-cookies –no-check-certificate –header “Cookie: oraclelicense=accept-securebackup-cookie” “https://download.oracle.com/otn-pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/jdk-8u201-linux-x64.tar.gz”
fi
jdkfile=$(ls | grep jdk-*-linux-*.gz)
if [-f “$jdkfile”]; then
sudo tar -zxvf $jdkfile -C /usr/local/java/
echo “ 安装 JDK 成功 ”
echo “ 配置环境变量 ”
mv ~/.bashrc ~/.bashrc.backup.java
cat ~/.bashrc.backup.java >> ~/.bashrc
echo “PATH=\”$PATH:$jvmpath/$jdkdirname/bin\”” >> ~/.bashrc
echo “JAVA_HOME=$jvmpath/$jdkdirname” >> ~/.bashrc
echo “CLASSPATH=.:%JAVA_HOME%/lib/dt.jar:%JAVA_HOME%/lib/tools.jar” >> ~/.bashrc
source ~/.bashrc
echo “ 配置环境成功 ”
echo “ 测试是否安装成功 ”
java -version
echo “ 安装成功 ”
fi
执行该 shell 文件,如下所示:
3.2 安装 maven
maven 安装我也是自己写的 shell 文件,如果你们不想用我的可以到网上找文章看看吧,下面是我的 shell 文件:
#!/bin/bash
# maven install
mvnpath=/usr/local/maven
# 不存在
if [! -d “$mvnpath”]; then
echo “ 正在创建 $mvnpath 目录 ”
sudo mkdir $mvnpath
echo “ 目录 $mvnpath 创建成功 ”
fi
#apache-maven-3.6
echo “ 正在下载 maven 安装包,请稍等 …”
wget –no-cookies –no-check-certificate –header “Cookie: oraclelicense=accept-securebackup-cookie” “http://211.162.31.136/files/71480000031E20AE/mirrors.hust.edu.cn/apache/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz”
mvnfile=$(ls | grep apache*maven-*.gz)
if [-f “$mvnfile”]; then
#这个名字其实就是 mvn .tar.gz 解压之后的文件夹的名字
mvndirname=”apache-maven-3.6.0″
#不能加 用 ’zxvf’ 加了 z 就创建了包里面的 apace* 文件夹,而我们只要把 apace* 文件夹下的文件全部解压到 mvnpath 里面就好
tar zxvf $mvnfile -C $mvnpath
echo “ 安装 maven 成功 ”
echo “ 配置环境变量 ”
mv ~/.bashrc ~/.bashrc.backup.mvn
cat ~/.bashrc.backup.mvn >> ~/.bashrc
echo “PATH=\”$PATH:$mvnpath/$mvndirname/bin\”” >> ~/.bashrc
echo “MAVEN_HOME=$mvnpath/$mvndirname” >> ~/.bashrc
source ~/.bashrc
echo “ 配置环境成功 ”
echo “ 测试是否安装成功 ”
mvn -v
echo “ 安装成功 ”
else
echo “ 没有找到 maven 文件 ”
fi
执行该 shell 文件,如下所示:
3.3 安装 nexus
nexus 虽然我也是使用 shell 文件安装,但有些配置我们还是要手动设置,下面是安装 shell 文件:
#!/bin/bash
#判断是否是 roo 用户
if [$(id -u) != “0” ]; then
echo “Error:You must be root to run this script”
fi
# 每次使用只需修改自定义内容即可
#自定义用户名和组
Group_Name=”nexus”
User_Name=”nexus”
# 自定义 nginx 变量
Install_Path=”/usr/local/nexus”
Version=”nexus-3.15.0-01″
Package_Type=”.tar.gz”
Package=$Version$Package_Type
# 创建 /usr/local/nexus 目录
#mkdir /usr/local/nexus
if [-e $Install_Path]
then
echo ” $Install_Path 目录已经存在.”
echo ” $Install_Path Directory Already Exists.”
else
echo ” $Install_Path 目录正在创建.”
mkdir $Install_Path
fi
# 下载 nexus 文件
Setup_path=”/root/”
cd $Setup_path
wget https://sonatype-download.global.ssl.fastly.net/repository/repositoryManager/3/nexus-3.15.0-01-unix.tar.gz
Group_User(){
egrep “^$Group_Name” /etc/group >& /dev/null
if [$? -ne 0]
then
echo “nexus 用户组正在添加.”
groupadd $Group_Name
else
echo ” The $Group_Name user group already exists.”
echo “nexus 用户组已经添加.”
fi
# 判断 nexus 用户是否存在
egrep “^$User_Name” /etc/passwd >& /dev/null
if [$? -ne 0]
then
echo “nexus 用户正在添加.”
useradd -g $Group_Name $User_Name
else
echo “nexus 用户已经添加.”
echo ” The $User_Name user already exists.”
fi
}
Group_User
# 设置 /usr/local/nexus 目录所属组和用户是 nexus
chown -R nexus:nexus $Install_Path
# 判断文件是否存在
if [-e $Setup_path$Version$Package_Type]
then
echo “$Package The Package exists.”
else
echo “$Package The package does not exist.”
fi
cd $Setup_path
# 解压 nexus 包到 /usr/local/nexus
tar -zxvf $Package -C $Install_Path
echo ‘ 设置环境变量 ’
mv ~/.bashrc ~/.bashrc.backup.nexus
cat ~/.bashrc.backup.nexus >> ~/.bashrc
echo “NEXUS_HOME=$Install_Path/$Version” >> ~/.bashrc
echo “PATH=\”$PATH:$NEXUS_HOME/bin\”” >> ~/.bashrc
# 切换 nexus 用户
su nexus
echo ‘ 接下来配置:1、vim bin/nexus.rc run_as_user=”nexus”‘
安装完成之后,我们到 /usr/local/nexus/nexus-3.15.0-01/bin 目录下修改 nexus 文件
# 设置本地 jdk 目录
INSTALL4J_JAVA_HOME_OVERRIDE=”/usr/local/java/jdk1.8.0_201″
接着,我们相同目录下 nexus.rc 文件,如下
# 指定用户是 nexus 而不是 root,如果是 root 会出现警告!
run_as_user=”nexus”
好了,这样就安装好了,我们访问下网站,注意默认端口是 8081,账号:admin,密码:admin123
3.4 免费申请阿里云 SSL 证书
购买成功之后,配置好域名,我这里的域名是: nexus.awbeci.com,设置好之后等待审核,审核成功之后选择 nginx 版本并下载证书
下载完成之后是个.zip 的压缩包,我们上传到服务器上,使用下面命令:
scp your-cert.zip root@your-server-ip:/your-server-directory
上传成功之后我们等待下一步操作。
3.5 安装 nginx 并代理 nexus 8081 端口,同时配置 https 访问
因为访问网站的时候端口是 8081,所以想要使用 80 端口访问的话,我们就用 nginx 80 端口代理 8081,同时设置 https 访问
安装 nginx 我们还是通过 shell 文件来安装,如下
#!/bin/bash
#判断是否是 roo 用户
if [$(id -u) != “0” ]; then
echo “Error:You must be root to run this script”
fi
# 每次使用只需修改自定义内容即可
#自定义用户名和组
Group_Name=”nginx”
User_Name=”nginx”
# 自定义 nginx 变量
Install_Path=”/usr/local/nginx”
Package_Type=”.tar.gz”
Version=”nginx-1.15.8″
Package=$Version$Package_Type
Setup_path=”/root/”
RPM=”nginx”
# 创建 /usr/local/nginx 目录
#mkdir /usr/local/nginx
if [-e $Install_Path]
then
echo ” $Install_Path 目录已经存在.”
echo ” $Install_Path Directory Already Exists.”
else
echo ” $Install_Path 目录正在创建.”
mkdir $Install_Path
fi
# 下载 nginx 文件
cd $Setup_path
wget http://nginx.org/download/nginx-1.15.8.tar.gz
# 安装依赖关系
yum group install “Development Tools” “Server Platform Deveopment”
yum install -y curl openssl-devel pcre-devel
Group_User(){
egrep “^$Group_Name” /etc/group >& /dev/null
if [$? -ne 0]
then
echo “nginx 用户组正在添加.”
groupadd $Group_Name
else
echo ” The $Group_Name user group already exists.”
echo “nginx 用户组已经添加.”
fi
# 判断 nginx 用户是否存在
egrep “^$User_Name” /etc/passwd >& /dev/null
if [$? -ne 0]
then
echo “nginx 用户正在添加.”
useradd -g $Group_Name $User_Name
else
echo “nginx 用户已经添加.”
echo ” The $User_Name user already exists.”
fi
}
Group_User
# 判断文件是否存在
if [-e $Setup_path$Version$Package_Type]
then
echo “$Package The Package exists.”
else
echo “$Package The package does not exist.”
fi
# 编译安装 nginx
cd $Setup_path
# 解压 nginx 包到 /usr/local/nginx
tar -zxvf $Package -C $Install_Path
cd $Install_Path
cd $Version
configure_opts=(
–prefix=$Install_Path
–user=nginx
–group=nginx
–with-http_ssl_module
–with-http_flv_module
–with-http_stub_status_module
–with-http_gzip_static_module
)
./configure ${configure_opts[@]}
if [[$? -eq 0]]
then
make && make install
else
echo “ 编译失败,请重新编译 ” && exit 1
fi
# 添加 Nginx 命令到环境变量
cat >/etc/profile.d/nginx.sh <<EOF
export PATH=/usr/local/nginx/sbin/:$PATH
EOF
source /etc/profile
# 启动服务
/usr/local/nginx/sbin/nginx
ss -tnlp | grep nginx
安装成功后,我们把一步上传的证书.zip 复制到 /root 文件夹下,并解压缩,如下:
# 创建 ssl 文件夹
mkdir -p /usr/local/nginx/cert
# 把上一步的.zip 证书解压并复制到 ssl 文件夹下
unzip /root/your-cert-package.zip
# 解压之后应该是两个文件.pem 和.key
# 复制.crt 和.key 文件到 ssl 目录下
cp your-cert.crt your-cert.key /usr/local/nginx/cert
设置好之后,接下来我们配置 /usr/local/nginx/conf/nginx.conf 文件,如下所示:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
client_max_body_size 100m;
client_header_timeout 1m;
client_body_timeout 1m;
proxy_connect_timeout 18000; ## 修改成半个小时
proxy_send_timeout 18000;
proxy_read_timeout 18000;
#log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘
# ‘$status $body_bytes_sent “$http_referer” ‘
# ‘”$http_user_agent” “$http_x_forwarded_for”‘;
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name nexus.awbeci.com;
return 301 https://nexus.awbeci.com$request_uri;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://127.0.0.1:8081; #代理 8081 端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
}
}
# HTTPS server
#
server {
listen 443 ssl;
server_name nexus.awbeci.com;
ssl_certificate /usr/local/nginx/cert/nexus.awbeci.com.pem;
ssl_certificate_key /usr/local/nginx/cert/nexus.awbeci.com.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:8081; #代理 8081 端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
}
}
}
这样就成功的配置好了,现在我们重启下 nginx,并访问 nexus.awbeci.com 网站看看
# 重启 nginx
/usr/local/nginx/sbin/nginx -s reload
4、开始使用 Nexus
4.1 Nexus 介绍
这里有一篇文章写得非常好,大家可以看看,我就不特别详细的写介绍了,主要还是告诉你们怎么结合项目使用。
4.2 创建 Blob Stores
4.3 创建 User
4.4 创建阿里云的代理仓库
然后再 public 组里面将这个 aliyun-proxy 仓库加入,排在 maven-central 之前即可
4.5 创建 Host 仓库 策略是 release
4.6 创建 Host 仓库 策略是 snapshots
创建好之后我们再来 Public 设置下优先顺序,把刚才加的两个仓库放到 aliyun-proxy 前面
创建完仓库预览
4.7 配置本地 maven settings.xml
提示:两种配置方法,一种是直接配置 maven 目录下的 conf 下的 settings.xml 文件,另外一种是复制该文件到用户目录下的.m2 目录,两种方法配置效果是一样的,看个人喜好了,加载顺序是.m2 下的 settings.xml 目录接着是 maven config 目录下的 settings.xml,配置文件如下:
<?xml version=”1.0″ encoding=”UTF-8″?>
<settings xmlns=”http://maven.apache.org/SETTINGS/1.0.0″
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd”>
<pluginGroups>
</pluginGroups>
<proxies>
</proxies>
<servers>
<!– 这里配置我们刚才创建的 user 用户所对应的 releases–>
<server>
<id>releases</id>
<username>user</username>
<password>123456</password>
</server>
<!– 这里配置我们刚才创建的 user 用户所对应的 Snapshots–>
<server>
<id>Snapshots</id>
<username>user</username>
<password>123456</password>
</server>
</servers>
<mirrors>
<!– <mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror> –>
<!– 这里配置我们线上的 public 仓库就好 –>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>https://nexus.awbeci.com/repository/maven-public/</url>
</mirror>
</mirrors>
<profiles>
</profiles>
<activeProfiles>
<activeProfile>dev</activeProfile>
</activeProfiles>
</settings>
4.8 配置要上传到 nexus 项目 pom.xml 文件
<packaging>jar</packaging>
<distributionManagement>
<!– 配置线上 releases 仓库地址,只要是正式版本都会上传到该地址(注意要和 settings.xml 文件里面的配置名称相同)–>
<repository>
<id>releases</id>
<url>https://nexus.awbeci.com/repository/awbeci/</url>
</repository>
<!– 配置线上 Snapshots 仓库地址,只要是快照版本都会上传到该地址(注意要和 settings.xml 文件里面的配置名称相同)–>
<snapshotRepository>
<id>Snapshots</id>
<url>https://nexus.awbeci.com/repository/awbeci-snapshots/</url>
</snapshotRepository>
</distributionManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
<executions>
<execution>
<id>deploy</id>
<phase>deploy</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
4.9 编辑并发布 jar 包
mvn clean && mvn deploy -DskipTests=true
执行完成后,我们到线上看看是否上传成功
可以看到不管是 release 版本还是 snapshot 版本都上传并发布成功
4.10 测试发布的包
自己新建一个 maven 项目,然后引入我们刚才发布的 release 包
<dependency>
<groupId>com.awbeci</groupId>
<artifactId>awbeci-core</artifactId>
<version>1.0.8-SNAPSHOT</version>
</dependency>
执行该代码,如下所示:
测试成功!!!
4.10 上传第三方包
有两种方式,一种是命令
mvn deploy:deploy-file \
-DgroupId=<group-id> \
-DartifactId=<artifact-id> \
-Dversion=<version> \
-Dpackaging=<type-of-packaging> \
-Dfile=<path-to-file> \
-DrepositoryId=<server-id-settings.xml> \
-Durl=<url-of-the-repository-to-deploy>
另外一种是使用 Nexus 上传
两种方式结果都是一样,就看你偏向哪种了。
5、总结
1)服务器内存刚开始配置是 1CPU 1G 内存,nexus start 运行之后报错,升级服务器为 2G 内存之后就没问题了
2)nexus 默认是 8081 端口,我们可以修改文件 /usr/local/nexus/nexus-3.15.0-01/etc/nexus-default.properties
## DO NOT EDIT – CUSTOMIZATIONS BELONG IN $data-dir/etc/nexus.properties
##
# Jetty section
# 设置成自己想要的端口
application-port=8081
application-host=0.0.0.0
nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-requestlog.xml
nexus-context-path=/
# Nexus section
nexus-edition=nexus-pro-edition
nexus-features=\
nexus-pro-feature
值得注意的是不能把端口直接改成 80,这样你就不能启动 nexus,所以我们是通过 nginx 80 端口代理 8081 端口了。
3)nexus 配置内存是在 /usr/local/nexus/nexus-3.15.0-01/bin/nexus.vmoptions
-Xms1200M
-Xmx1200M
-XX:MaxDirectMemorySize=2G
-XX:+UnlockDiagnosticVMOptions
-XX:+UnsyncloadClass
-XX:+LogVMOutput
-XX:LogFile=../sonatype-work/nexus3/log/jvm.log
-XX:-OmitStackTraceInFastThrow
-Djava.net.preferIPv4Stack=true
-Dkaraf.home=.
-Dkaraf.base=.
-Dkaraf.etc=etc/karaf
-Djava.util.logging.config.file=etc/karaf/java.util.logging.properties
-Dkaraf.data=../sonatype-work/nexus3
-Djava.io.tmpdir=../sonatype-work/nexus3/tmp
-Dkaraf.startLocalConsole=false
4)最好自己创建 nexus 用户,不要使用 root 用户启动 nexus 否则会出现警告
WARNING: ************************************************************
WARNING: Detected execution as “root” user. This is NOT recommended!
WARNING: ************************************************************
Starting nexus
6、引用
Maven 私服 Nexus3.x 环境构建操作记录
Nexus 3.x Linux 环境搭建(手把手)排坑之旅
Centos7.3 安装 nexus-3.14.0-04
搭建 nexus3 版的 maven 私服 (Centos7 环境)
Gitlab+Nexus Maven 部署
Linux 使用 Nexus3.x 搭建 Maven 私服指南
maven 私服 nexus3.x 搭建与使用
centos7 搭建 nexus maven 私服
centos7 搭建 nexus maven 私服
Maven Nexus
Nexus 私有仓库搭建与 Maven 集成
Nexus max file descriptors
maven 私服 nexus3.x 环境配置
搭建 Maven 私服 -Nexus