0x01 目的
- docker运行nexus
- 通过https访问管理页面
- 不额外添加
nginx
作为反向代理 - docker客户端不添加insecure-registry,实现login
0x02 配置
生成证书
没有现成证书的情况
生成新的keystore.jks
1
2
3
4NEXUS_DOMAIN=nexus.xxx.com \
NEXUS_IP_ADDRESS=192.168.11.101 \
PASSWD=admin123; \
keytool -genkeypair -keystore keystore.jks -storepass ${PASSWD} -keypass ${PASSWD} -keyalg RSA -keysize 2048 -validity 5000 -dname "CN=${NEXUS_DOMAIN}, OU=Nexus, O=Nexus, L=Beijing, ST=Beijing, C=CN" -ext "SAN=IP:${NEXUS_IP_ADDRESS}" -ext "BC=ca:true"已有https证书的情况
将证书导出成pkcs12
格式1
openssl pkcs12 -export -out keystore.pkcs12 -inkey server.key -in server.crt
从
keystore.pkcs12
生成keystore.jks
1
keytool -export -alias 1 -keystore /nexus-data/keystore.jks -file /nexus-data/keystore.cer -storepass password
准备配置文件
修改
nexus-default.properties
配置文件
在文件里添加application-port-ssl
属性,可以设置成自己喜欢的端口(避免占用443,之后要预留给docker仓库),并在nexus-args
末尾加上https相关的xml文件位置1
2
3
4
5
6
7
8
9
10
11# Jetty section
# application-port=8081
application-port-ssl=8443
# application-host=0.0.0.0
nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-requestlog.xml,${jetty.etc}/jetty-https.xml
# nexus-context-path=/${NEXUS_CONTEXT}
# nexus-edition=nexus-pro-edition
# nexus-features=\
# nexus-pro-feature
# nexus.clustered=false修改
jetty-https.xml
文件
修改sslContextFactory
节点,修改默认密码为生成证书指定的密码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<New id="sslContextFactory" class="org.eclipse.jetty.util.ssl. SslContextFactory$Server">
<Set name="KeyStorePath"><Property name="ssl.etc"/>/keystore. jks</Set>
<Set name="KeyStorePassword">password</Set>
<Set name="KeyManagerPassword">password</Set>
<Set name="TrustStorePath"><Property name="ssl.etc"/>/ keystore.jks</Set>
<Set name="TrustStorePassword">password</Set>
<Set name="EndpointIdentificationAlgorithm"></Set>
<Set name="NeedClientAuth"><Property name="jetty.ssl. needClientAuth" default="false"/></Set>
<Set name="WantClientAuth"><Property name="jetty.ssl. wantClientAuth" default="false"/></Set>
<Set name="IncludeProtocols">
<Array type="java.lang.String">
<Item>TLSv1.2</Item>
</Array>
</Set>
</New>
启动
nexus-default.properties
文件在data/etc
目录里,会自己生成,替换一下就好
然后把keystore.jks
和jetty-https.xml
文件挂载到对应的位置
1 | docker run --name nexusOSS \ |
nexus首次部署后会生成一个初始密码,位于
/nexus-data/admin.password
文件中
配置私有仓库
新建一个docker-hosted
类型的仓库,然后设置HTTPS端口为443
在realms中把 docker bearer token realm 选为 active
这样配置以后,就可以通过docker login
命令登录了
参考资料
赏
使用支付宝打赏
使用微信打赏
若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏
扫描二维码,分享此文章