nexus 部署与安装

本贴最后更新于 408 天前,其中的信息可能已经沧海桑田

Ubuntun 22.04

安装 Podman4

ubuntu_version='22.04'
key_url="https://provo-mirror.opensuse.org/repositories/devel:/kubic:/libcontainers:/unstable/xUbuntu_${ubuntu_version}/Release.key"
sources_url="https://provo-mirror.opensuse.org/repositories/devel:/kubic:/libcontainers:/unstable/xUbuntu_${ubuntu_version}"

echo "deb $sources_url/ /" | tee /etc/apt/sources.list.d/devel:kubic:libcontainers:unstable.list
curl -fsSL $key_url | gpg --dearmor | tee /etc/apt/trusted.gpg.d/devel_kubic_libcontainers_unstable.gpg > /dev/null
apt update
apt install podman

开机自启动

systemctl enable --now podman-restart podman.socket

容器部署

前置任务

网络部署

podman network create web
podman pod create --net web -p 80:80 -p 443:443 -p 8080:8080 nexus

部署 traefik

创建 acme.json 并正确给予权限

mkdir -p /data/traefik/config
touch /data/traefik/config/acme.json
chmod 0600 /data/traefik/config/acme.json

运行 traefik

podman run --name=traefik -d \
    --replace \
    --restart always \
    --pod nexus \
    --health-cmd="traefik healthcheck --ping" \
    --health-interval=10s \
    --health-timeout=3s \
    --health-retries=3 \
    -v /run/podman/podman.sock:/var/run/docker.sock:z \
    -v /data/traefik/config/acme.json:/config/acme.json:z \
    dockerproxy.com/rapidfort/traefik:v2.9.10 \
    --ping \
    --api.insecure=true \
    --providers.docker=true \
    --entrypoints.web.address=":80" \
    --entrypoints.websecure.address=":443" \
    --entrypoints.web.http.redirections.entryPoint.to=websecure \
    --entrypoints.web.http.redirections.entryPoint.scheme=https \
    --certificatesresolvers.le.acme.email=admin@admin.local \
    --certificatesresolvers.le.acme.storage=/config/acme.json \
    --certificatesresolvers.le.acme.tlschallenge=true

部署 portainer

创建分卷

mkdir -p /data/portainer-data
podman volume create --opt type=bind --opt device=/data/portainer-data portainer-data

部署

podman run --name=portainer -d \
    --replace \
    --restart always \
    --pod nexus \
    --health-cmd="wget --no-check-certificate -O /dev/null --no-verbose --tries=3 --spider --header='Content-Type:application/json' http://127.0.0.1:9000/api/system/status || exit 1" \
    --health-interval=10s \
    --health-timeout=3s \
    --health-retries=3 \
    -v /run/podman/podman.sock:/var/run/docker.sock:z \
    -v portainer-data:/data \
    -l traefik.enable=true \
    -l traefik.http.routers.portainer.rule=Host\(\`portainer.nexus.juminfo.org\`\) \
    -l traefik.http.routers.portainer.entrypoints=web,websecure \
    -l traefik.http.services.portainer.loadbalancer.server.port=9000 \
    -l traefik.http.routers.portainer.tls=true \
    -l traefik.http.routers.portainer.service=portainer \
    --privileged \
    --expose=9000 \
    dockerproxy.com/portainer/portainer-ce:linux-amd64-2.19.1-alpine \
    -H unix:///var/run/docker.sock

部署核心项目

编译打包 nexus

  • 这里添加 rust 的支持
git clone https://github.com/bguerin/nexus-repository-cargo.git
cd nexus-repository-cargo
cat > build.sh <<EOF
builder=$(buildah from docker.io/library/maven:3-jdk-8-alpine)
buildah copy $builder . /nexus-repository-cargo
buildah run --network=host --mount=type=cache,target=/root/.m2 $builder apk add --no-cache git
buildah run --network=host --mount=type=cache,target=/root/.m2 --workingdir /nexus-repository-cargo $builder mvn clean package -PbuildKar

nexus3=$(buildah from docker.io/sonatype/nexus3:3.61.0)
builder_path=$(buildah mount $buidler)
nexus_path=$(buildah mount $nexus3)
cp -av $builder_path/nexus-repository-cargo/target/nexus-repository-cargo-*.kar $nexus_path/opt/sonatype/nexus/deploy/

buildah umount $builder
buildah umount $nexus3

buildah commit $nexus3 docker.io/ssfdust/nexus3-cargo:3.61.0
buildah rm $nexus3
buildah rm $builder
EOF
buildah unshare bash build.sh

部署 nexus

podman run -d --name nexus-server \
    --replace \
    --restart=always \
    --expose=8081 \
    --expose=8085 \
    --pod nexus \
    -l traefik.enable=true \
    -l traefik.http.routers.nexus.rule=Host\(\`nexus-server.juminfo.org\`\) \
    -l traefik.http.routers.nexus.entrypoints=websecure \
    -l traefik.http.services.nexus.loadbalancer.server.port=8081 \
    -l traefik.http.routers.nexus.tls=true \
    -l traefik.http.routers.nexus.service=nexus \
    -l traefik.http.routers.docker.rule=Host\(\`docker-nexus.juminfo.org\`\) \
    -l traefik.http.routers.docker.entrypoints=websecure \
    -l traefik.http.services.docker.loadbalancer.server.port=8085 \
    -l traefik.http.routers.docker.tls=true \
    -l traefik.http.routers.docker.service=docker \
    docker.io/ssfdust/nexus3-cargo:3.61.0

使用

Pypi

需要指定 registrytrusted-host

npm

指定 registry 即可使用

Docker

需要指定 insecure

dnf

需要在 /etc/yum.conf 中的 [main] 模块下添加 sslverify=false

  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    491 引用 • 917 回帖
  • Nexus
    13 引用 • 20 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...