使用 Docker 安装 Nexus 并启用 HTTPS

Nexus Repository Manager 是一个强大的工具,用于管理软件组件,支持多种格式,包括 Maven、npm 和 Docker 镜像等。本文将介绍如何使用 Docker 安装 Nexus,并通过 HTTPS 启用安全访问。

1. 环境准备

在开始安装之前,请确保你已经安装了 Docker 和 Docker Compose。可以通过如下命令确认:

docker --version
docker-compose --version

2. 创建 Docker Compose 配置

为了简化 Nexus 的安装,使用 docker-compose 是一个好方法。创建一个新的目录,例如 nexus, 然后在该目录下创建一个 docker-compose.yml 文件。

version: '3'
services:
  nexus:
    image: sonatype/nexus3:latest
    container_name: nexus
    ports:
      - "8081:8081"
      - "8443:8443"  # HTTPS 端口
    volumes:
      - nexus-data:/nexus-data
    restart: always

volumes:
  nexus-data:

3. 启动 Nexus

nexus 目录下,运行以下命令启动 Nexus:

docker-compose up -d

启动过程可能需要一点时间,你可以通过以下命令查看 Nexus 日志,确保它已成功启动:

docker logs -f nexus

4. 配置 HTTPS

默认情况下,Nexus 使用 HTTP 提供服务。为了启用 HTTPS,需要生成 SSL 证书。这里我们使用自签名证书作为示例。可以使用 OpenSSL 生成证书:

mkdir certs
cd certs
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout nexus.key -out nexus.crt

在生成过程中,会提示你输入一些信息。确保证书的 Common Name (CN) 对应你的域名或 IP 地址。

5. 更新 Nexus 配置

将生成的证书文件复制到 Nexus 容器中。首先,使用以下命令进入容器:

docker exec -it nexus bash

然后将证书复制到适当位置(例如 /nexus-data/certs 目录)并更改 Nexus 配置:

mkdir /nexus-data/certs
exit  # 退出容器

docker cp certs/nexus.crt nexus:/nexus-data/certs/
docker cp certs/nexus.key nexus:/nexus-data/certs/

接下来,更新 nexus.properties 文件以启用 HTTPS。你需要编辑:

docker exec -it nexus vi /nexus-data/nexus.properties

将以下内容添加到文件中:

nexus.https.port=8443
nexus.https.enabled=true
nexus.https.cert.path=/nexus-data/certs/nexus.crt
nexus.https.key.path=/nexus-data/certs/nexus.key

6. 重启 Nexus

保存文件后,重启 Nexus 容器使配置生效:

docker-compose down
docker-compose up -d

7. 访问 Nexus

现在你可以通过 HTTPS 访问 Nexus。打开浏览器,访问 https://<YOUR_DOMAIN_OR_IP>:8443。注意,由于使用了自签名证书,浏览器可能会提示安全警告,你需要手动添加例外。

类图示例

运行 Nexus 的 Docker 服务可以表示为一个简单的类图:

classDiagram
    class Docker {
        +start()
        +stop()
    }
    class Nexus {
        +start()
        +stop()
    }

    Docker "1" -- "1" Nexus : deploy

结论

通过 Docker 安装 Nexus,并启用 HTTPS 确保了数据传输的安全性。在生产环境中使用时,建议购买并使用受信任的 SSL 证书。希望本文能为你安装和配置 Nexus 提供帮助,祝你在软件管理方面一切顺利!