You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					156 lines
				
				7.1 KiB
			
		
		
			
		
	
	
					156 lines
				
				7.1 KiB
			| 
											2 years ago
										 | = nexus | ||
|  | == nexus 私服工作原理 | ||
|  | image::9999-appendix/nexus/002.png[,100%] | ||
|  | 
 | ||
|  | == 配置 maven 仓库 | ||
|  | 阿里云提供了大量的仓库镜像,可参见: https://developer.aliyun.com/mvn/guide | ||
|  | [%header,cols="3,1,1,5"] | ||
|  | |=== | ||
|  | | Name                                | Type    | Format  | Remote Repository URL | ||
|  | | proxy-maven-aliyun-public           | proxy   | maven2  | https://maven.aliyun.com/repository/public/ | ||
|  | | proxy-maven-aliyun-google           | proxy   | maven2  | https://maven.aliyun.com/repository/google/ | ||
|  | | proxy-maven-aliyun-gradle-plugin    | proxy   | maven2  | https://maven.aliyun.com/repository/gradle-plugin/ | ||
|  | | proxy-maven-aliyun-spring           | proxy   | maven2  | https://maven.aliyun.com/repository/spring/ | ||
|  | | proxy-maven-aliyun-spring-plugin    | proxy   | maven2  | https://maven.aliyun.com/repository/spring-plugin/ | ||
|  | | proxy-maven-aliyun-grails-core      | proxy   | maven2  | https://maven.aliyun.com/repository/grails-core/ | ||
|  | | proxy-maven-aliyun-apache-snapshots | proxy   | maven2  | https://maven.aliyun.com/repository/apache-snapshots/ | ||
|  | |=== | ||
|  | 
 | ||
|  | TIP:: 可通过以下脚本自动创建上述代理仓库,避免手工处理的繁琐。 | ||
|  | 
 | ||
|  | 下载: link:resources/files/9999-appendix/docker/nexus/repository/repository.zip[repository.zip] 文件, | ||
|  | 假设文件下载到: ~/Downloads 文件夹下. | ||
|  | 
 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | # 进入下载文件夹 | ||
|  | cd ~/Downloads/ | ||
|  | 
 | ||
|  | # 解压 repository.zip | ||
|  | unzip repository.zip | ||
|  | 
 | ||
|  | # 进入到解压后的文件夹 | ||
|  | cd repository | ||
|  | 
 | ||
|  | # 构建 maven 仓库, 假设 nexus 仓库地址为: localhost:8000 | ||
|  | curl -X POST http://124.222.99.204:8000/service/rest/v1/repositories/maven/proxy -H "Content-Type: application/json" --user "admin:admin" --data @./maven/aliyun-apache-snapshots.json | ||
|  | curl -X POST http://124.222.99.204:8000/service/rest/v1/repositories/maven/proxy -H "Content-Type: application/json" --user "admin:admin" --data @./maven/aliyun-google.json | ||
|  | curl -X POST http://124.222.99.204:8000/service/rest/v1/repositories/maven/proxy -H "Content-Type: application/json" --user "admin:admin" --data @./maven/aliyun-gradle-plugin.json | ||
|  | curl -X POST http://124.222.99.204:8000/service/rest/v1/repositories/maven/proxy -H "Content-Type: application/json" --user "admin:admin" --data @./maven/aliyun-grails-core.json | ||
|  | curl -X POST http://124.222.99.204:8000/service/rest/v1/repositories/maven/proxy -H "Content-Type: application/json" --user "admin:admin" --data @./maven/aliyun-public.json | ||
|  | curl -X POST http://124.222.99.204:8000/service/rest/v1/repositories/maven/proxy -H "Content-Type: application/json" --user "admin:admin" --data @./maven/aliyun-spring.json | ||
|  | curl -X POST http://124.222.99.204:8000/service/rest/v1/repositories/maven/proxy -H "Content-Type: application/json" --user "admin:admin" --data @./maven/aliyun-spring-plugin.json | ||
|  | 
 | ||
|  | # 更新 maven-public | ||
|  | curl -X PUT http://124.222.99.204:8000/service/rest/v1/repositories/maven/group/maven-public -H "Content-Type: application/json" --user "admin:admin" --data @./maven/group-public.json | ||
|  | 
 | ||
|  | # 构建 npm 仓库 | ||
|  | curl -X POST http://124.222.99.204:8000/service/rest/v1/repositories/npm/hosted -H "Content-Type: application/json" --user "admin:admin" --data @./npm/npm-releases.json | ||
|  | curl -X POST http://124.222.99.204:8000/service/rest/v1/repositories/npm/proxy -H "Content-Type: application/json" --user "admin:admin" --data @./npm/npmjs.json | ||
|  | curl -X POST http://124.222.99.204:8000/service/rest/v1/repositories/npm/proxy -H "Content-Type: application/json" --user "admin:admin" --data @./npm/npmmirror.json | ||
|  | curl -X POST http://124.222.99.204:8000/service/rest/v1/repositories/npm/proxy -H "Content-Type: application/json" --user "admin:admin" --data @./npm/taobao.json | ||
|  | 
 | ||
|  | curl -X POST http://124.222.99.204:8000/service/rest/v1/repositories/npm/group -H "Content-Type: application/json" --user "admin:admin" --data @./npm/npm-public.json | ||
|  | ---- | ||
|  | 
 | ||
|  | == 配置客户端 gradle | ||
|  | [source,groovy] | ||
|  | ---- | ||
|  | repositories { | ||
|  |     maven { | ||
|  |         allowInsecureProtocol = true | ||
|  |         url "http://nexus.sc.io:8000/repository/maven-public/"           <1> | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | publishing{ | ||
|  |     repositories { | ||
|  |         maven { | ||
|  |             allowInsecureProtocol = true | ||
|  |             url = "http://nexus.sc.io:8000/repository/maven-releases/"   <2> | ||
|  |             credentials { | ||
|  |                 username = "admin"                                          <3> | ||
|  |                 password = "admin"                                          <4> | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | } | ||
|  | ---- | ||
|  | <1> jar 包下载的仓库 url | ||
|  | <2> 发布 jar 包时的仓库 url | ||
|  | <3> 发布 jar 包时的登录用户名 | ||
|  | <4> 发布 jar 包时的登录用户密码 | ||
|  | 
 | ||
|  | == 配置 npm 仓库 | ||
|  | [%header,cols="3,1,1,5"] | ||
|  | |=== | ||
|  | | Name                          | Type    | Format  | Remote Repository URL | ||
|  | | npm-public                    | group   | npm     | | ||
|  | | npm-releases                  | hosted  | npm     | | ||
|  | | npm-snapshots                 | hosted  | npm     | | ||
|  | | proxy-npm-npmmirror           | proxy   | npm     | https://registry.npmmirror.com/ | ||
|  | |=== | ||
|  | 
 | ||
|  | == 配置 npm 客户端 | ||
|  | === 当前用户的 npm 配置 | ||
|  | 当前用户的 npm 配置文件位于 ~/.npmrc 文件,通过配置该文件实现对所有项目生效。文件内容如下: | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | # registry URL | ||
|  | registry=http://nexus.sc.io:8000/repository/npm-public/ | ||
|  | 
 | ||
|  | # pnpm 的存储目录 | ||
|  | store-dir=/Users/wangshaoping/.pnpm-store | ||
|  | ---- | ||
|  | 
 | ||
|  | === 单个项目的 npm 配置 | ||
|  | 在每个单独的 node 项目文件下,新建一个名为 .npmrc 的文件, 该文件的配置可以覆盖当前用户的 npm 配置。文件内容如下: | ||
|  | 
 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | # npm 仓库地址, 在 npm install 时使用 | ||
|  | registry=http://nexus.sc.io:8000/repository/npm-public/ | ||
|  | 
 | ||
|  | # 登录 npm 仓库的用户认证信息, 在 npm publish 时使用 | ||
|  | //nexus.sc.io:8000/repository/npm-releases/:_authToken=NpmToken.a0dfe976-168d-342e-a382-7081d6c73edd | ||
|  | #--------------------------------------------- ---------- --------------------------------------------- | ||
|  | #仓库地址 URL                                   认证 key    认证令牌 | ||
|  | ---- | ||
|  | 
 | ||
|  | 上述令牌可通过以下命令获取: | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | # 获取用户名和密码为 admin/admin 的令牌, 如果是其他用户和密码, 请调整响应部分 | ||
|  | curl -X PUT -H "Content-Type:application/json" \ | ||
|  |   -d '{"_id":"org.couchdb.user:admin","name":"admin","password":"admin"}' \ | ||
|  |   http://124.222.99.204:8000/repository/npm-releases/-/user/org.couchdb.user:admin | ||
|  | 
 | ||
|  | # 输出结果 | ||
|  | { | ||
|  |   "rev":"_we_dont_use_revs_any_more", | ||
|  |   "id":"org.couchdb.user:undefined", | ||
|  |   "ok":"true", | ||
|  |   "token":"NpmToken.a0dfe976-168d-342e-a382-7081d6c73edd" | ||
|  | } | ||
|  | ---- | ||
|  | 
 | ||
|  | 如果在执行 npm publish 发生认证错误时,再次执行 curl 并获得 token,将其更新到当前项目目录下的 .npmrc 文件中即可。 | ||
|  | 
 | ||
|  | 
 | ||
|  | == 常见问题解决方法 | ||
|  | === Connect to sonatype-download.global.ssl.fastly.net:443 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | # 如果在运行 nexus 期间出现以下错误: | ||
|  | org.apache.http.conn.ConnectTimeoutException: Connect to sonatype-download.global.ssl.fastly.net:443 [sonatype-download.global.ssl.fastly.net/128.242.245.93] failed: connect timed out | ||
|  | ---- | ||
|  | image::9999-appendix/tools/nexus/001.png[,80%] | ||
|  | 
 | ||
|  | === npm publish 失败 | ||
|  | [source,bash] | ||
|  | ---- | ||
|  | # 当执行 npm publish 出现以下错误: | ||
|  | npm ERR! code E401 | ||
|  | npm ERR! Unable to authenticate, need: BASIC realm="Sonatype Nexus Repository Manager" | ||
|  | ---- | ||
|  | image::9999-appendix/tools/nexus/003.png[,80%] |