使用Nginx搭建轻量化Maven私服
首先要说,这是一个轻量化方案,存在不完美。最周全的方案,是使用nexus oss。
发现nexus的管理成本很大,就从网上找了一些资料,总结出这个方案。
这个方案的有点在于,快速、组件轻量化,因此适用于公司或个人进行小型系统开发。
避免了nexus一系列不必要的环境搭建、配置、用户管理的成本。不完美的地方最后说,读完整篇文章更容易理解。
一、 安装准备
- Linux服务器(使用的更多);
- Maven 3;
- Nginx;
- 一个Maven项目(用于测试);
二、 搭建Maven服务器,调整settings.xml配置
设置服务器本地路径
<localRepository>/home/maven/MavenRepository</localRepository>
注:仅当本服务器兼具本机打包,也接收其他客户端mvn deploy,则应该将此路径与后面提到的发布路径统一设置;
搭建Nginx服务器,添加alias,指向Repository路径:
a. 编辑nginx/conf/nginx.conf文件,添加如下(注意,红色路径的结尾一定都要有斜杠,坑了我好长时间),重启nginx服务,访问http://serverip:port/mingya_erp_maven/(这里结尾也要有斜杠),就能够看到目录了,只不过还是个空目录:
location /mingya_erp_maven/ {
alias /home/maven/mingya_erp_maven/;
autoindex on;
client_max_body_size 300M;
}
image.png
b. 配置pom.xml,标识我们的私有仓库。id是pom中对该仓库的标识,随便叫,还是要助于路径结尾的斜杠不能丢
image.png分别添加repositories和pluginRepositories,这样开发人员拿到这个项目,就可以完全从私服中获取所需的jar包了(前提是要上传jar包到私服,后面会说如何上传)
...
<repositories>
<repository>
<id>mingya_erp_repository</id>
<url>http://192.168.64.189:8088/mingya_erp_maven</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>mingya_erp_repository</id>
<url>http://192.168.64.189:8088/mingya_erp_maven</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
</pluginRepository>
</pluginRepositories>
...
c. 配置发布配置,将构建结果发布至私服,首先需要添加构建地址
image.png 还需要有wagon插件,负责scp上传
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh</artifactId>
<version>2.10</version>
</extension>
</extensions>
image.png
说道最后,scp必须配置用户名、密码,如果卸载pom.xml中,自然没有安全可言,在哪里配置的用户名密码呢?
在开发人员(负责发布的)的本地setting.xml中,配置server,设置用户名,密码
...
<server>
<id>mingya_erp_repository</id>
<username>maven</username>
<password>123456Aa</password>
</server>
...
image.png
至此,使用mvn deploy 即可上传构建至私服
但私服中只有构建结果,构建所需的依赖包,比如spring-mvc,能否也保存下来,这样开发人员就可以直接从私服上获取了不是?
d.手工上传系统依赖的构建
到这里,就是这个方案的不足之处了,因为Nginx本身只起到Htttp服务器的作用,没有办法同步中央仓库,使得私服总是少很多依赖的构建。我是把本地仓库拷贝到私服上。这样,当前项目就可以直接通过私服完成开发了。不过一旦引入新的依赖,我还要手工上传。
nexus就是后话了~