使用Nexus搭建Nuget服务以及生成nuget包遇到的一些坑
前言
可以部署Nuget包的工具有两个:一个是我要推荐的Nexus,另外一个是BaGet。
因为这边还有同事需要使用 Maven,最后考虑使用Nexus兼容 Nuget和Maven。下面介绍Nexus3.60的安装使用以及 Nuget包的生成的一些步骤.
我这边安装Nexus的环境是
CentOS Linux release 7.2.1511
阿里云虚拟服务器 1个CPU + 2G内存 + 40G硬盘
JAVA OpenJDK 1.8.0_382
这里要介绍的是sonatype Nexus, 是一款私有仓库的解决,目前支持多种私有仓库的搭建,比如Maven, yum, npm私有库等等,详情请参考下图:
更多详情可访问官方网站:https://www.sonatype.com/nexus/repository-oss-download
github项目: https://github.com/sonatype/nexus-public
从Nexus 3开始,Nexus已经支持 Docker仓库的创建,Nuxus2 是不支持Docker 镜像仓库的
参考官方安装文档:https://help.sonatype.com/repomanager3/installation
下载 SonarType Nexus 3.60.
大家可以在官网下载 上找最新的下载,如果由于一些原因无法下载可以从该分享上下载
文件名称:nexus-3.60.0-02-unix.tar.gz
链接:https://pan.baidu.com/s/1WVKmnyfLT50U2HC_Gs5Ayw?pwd=g1h1
提取码:g1h1
将该文件传到服务器上即可
安装过程
我这边是使用root账户登录到操作系统
创建用户
出于安全考虑, 建议不要使用管理员身份运行或任何有sudo权限的用户来运行Nexus. 建议创建一个新用户来运行Nexus, 例如nexus
sudo adduser nexus
文件解压缩
将刚刚上传的压缩包文件复制到 /home/nexus 中
执行解压缩指令
解压缩:sudo tar -xvf /home/nexus/nexus-3.60.0-02-unix.tar.gz -C /home/nexus/nexus_Local
切换到nexus_Local文件夹中,然后修改用户文件所有者
sudo chown -R nexus:nexus /home/nexus/nexus_Local
ls -la
查看用户所有者确认是否调整过来
解压缩后nexus_Local文件夹有两个文件夹,分别为:nexus-3.60.0-02
sonatype-work
配置nexus3(重点)
编辑 /home/nexus/nexus_Local/bin/nexus.rc sudo vi /home/nexus/nexus_Local/nexus-3.60.0-02/bin/nexus.rc
将文件内容(设置运行用户) #run_as_user=""
改成 run_as_user="nexus"
ps: 数据默认保存在 /home/nexus/nexus_Local/sonatype-work/nexus3中。上传的文件存在该文件夹下面 blobs/default/content 中,想详细研究的可以自己进里面查看
我这边服务器 cpu和内存较小。直接打开的话无法正常打开,会报内存不够的错误。复盘的时候忘截图了,这个问题还比较严重的,直接导致无法启动。(详细日志查看 /home/nexus/nexus_Local/sonatype-work/nexus3/log中日志)
设置方法如下:
-
编辑
sudo vi /home/nexus/nexus_Local/nexus-3.60.0-02/bin/nexus.vmoptions
-
修改前三行,这三个值不能设置的太小,太小一样会导致内存不够的错误。
-Xms128m
-Xmx512m
-XX:MaxDirectMemorySize=512m
设置服务端口
-
编辑
sudo vi /home/nexus/nexus_Local/nexus-3.60.0-02/etc/nexus-default.properties
-
修改
application-port=8081
将该值设置为需要设置的端口,默认是 8081
设置开机启动的nexus服务
新增一个nexus.service服务
sudo vi /etc/systemd/system/nexus.service
添加如下内容
[Unit]
Description=nexus service
After=network.target
[Service]
Type=forking
LimitNOFILE=65536
User=nexus
Group=nexus
#启动
ExecStart=/home/nexus/nexus_Local/nexus-3.60.0-02/bin/nexus start
#停止
ExecStop=/home/nexus/nexus_Local/nexus-3.60.0-02/bin/nexus stop
#启动用户
User=nexus
Restart=on-abort
[Install]
WantedBy=multi-user.target
刷新服务 sudo systemctl daemon-reload
设置开机启动 sudo systemctl enable nexus.service
启动nexus服务 sudo systemctl start nexus.service
启动完成后,尝试在服务器执行(我这边使用的是默认端口) curl http://127.0.0.1:8081
,有 html
结尾的数据 返回说明配置成功
注意事项
-
配置内存时 将该最大值调整成512m以上,否则无法正常启动
-
将文件夹放置在 启动用户 文件夹下,并且该nexus一定要有owner权限,否则无法正常启动。一定不要放置在root用户下,否则会出现Permission Denied报错,是因为启动用户无该文件夹权限。
端口设置和防火墙
-
注意设置本地端口和防火墙
-
注意云服务器的出入站端口规则设置,否则无法访问
默认密码
配置完成后,正常访问nexus平台,使用浏览器打开平台后,使用admin用户登录,admin用户初始密码保存在/home/nexus/nexus_Local/sonatype-work/nexus3/admin.password
中,直接将该文件中的内容复制出来,然后登录成功后修改admin密码
nuget包生成
下载nuget工具(下载完成后记得在属性可能需要 解除锁定 才能用),然后将该文件复制到 C:\Windows\System32
中或者将该nuget.exe的文件路径设置到环境变量
生成nuget包教程参考这个
建议下载Nuget Package Explorer打包生成nuget包
可以使用命令行生成使用 nuget pack xxx.csproj
或 nuget pack xxx.nuspec
包生成遇到的坑
版本号最多使用三位(例如:1.0.0),并版本号数字不大于1000, 超过会报错,导致可以生成,但下载使用的时候会报错(但该程序包不包含任何与该框架兼容的程序集引用或内容文件)