我们需要一个ohpm的内部私有仓库,开发推荐使用ohpm-repo。ohpm-repo是一个搭建轻量级的ohpm私仓服务的工具。它与ohpm包管理器兼容,并按需缓存所有依赖项,加速私有网络中的安装。习惯使用docker compose来启动一个仓库了,目前没有现成的容器镜像,不过官方提供了一个Dockerfile文件参考。2.下载ohpm-repo工具包,下载地址:https://developer.huawei.com/consumer/cn/download/ohpm-repo3.Dockerfile文件和重命名的ohpm-repo.zip放在同一目录下。# 使用官方 Node.js 18 镜像FROM node:18COPY ./ohpm-repo.zip /tmp/ohpm-repo.zipRUN mkdir -p /opt/ohpm-repo && \ unzip /tmp/ohpm-repo.zip -d /opt/ohpm-repo && \ rm -f /tmp/ohpm-repo.zip# 修改conf/config.yaml的listen配置,不能用localhost和127.0.0.1,必须使用0.0.0.0RUN if [ -f /opt/ohpm-repo/conf/config.yaml ]; then \ sed -i 's/listen: [^ ]*/listen: 0.0.0.0:8088/g' /opt/ohpm-repo/conf/config.yaml; \ fiENV OHPM_REPO_BIN_DIR="/opt/ohpm-repo/bin"ENV PATH="${OHPM_REPO_BIN_DIR}:${PATH}"# 创建用户,不允许使用root用户来运行ohpm-repo install和ohpm-repo start命令RUN useradd -m myuser && \ chown -R myuser:myuser /opt/ohpm-repo && \ chmod -R 755 /opt/ohpm-repoUSER myuserRUN ohpm-repo installENV OHPM_REPO_DEPLOY_ROOT="/home/myuser/ohpm-repo"CMD ["ohpm-repo", "start"]
docker build -t ohpm-repo:5.4.11 .
我原先在一台相对较新的服务器(RockyLinux 8.10)上build镜像,docker版本为:24.0.0,然后一直build失败,一直卡在useradd这一步,折腾好久,甚至替换为node用户,也无法解决问题。后来在一台CentOS7.9,docker版本为20.10.0的服务器上成功编译。习惯使用docker compose来拉起一个服务,同时我们需要对ohpm-repo做数据持久化(这是一个坑点)version: '3'services: ohpm-repo: image: ohpm-repo:5.4.11 container_name: ohpm-repo restart: unless-stopped # 设置容器重启策略 ports: # 宿主机端口:容器内端口 (8088是ohpm-repo的默认端口) - "8088:8088" volumes: # 挂载配置文件 (Bind Mount) #- ./config.yaml:/opt/ohpm-repo/conf/config.yaml:ro # 挂载数据目录 (Volume) - ./ohpm-repo-data/myuser/ohpm-repo:/home/myuser/ohpm-repo
然而当我docker compose up -d,查看容器一直是restarting状态,日志提示我需要先初始化。原来是我本地挂载的目录是空目录,ohpm-repo无法直接启动,百思不得其解,无奈之下我先临时手动启动docker rundocker run -it -p 8088:8088 ohpm-repo:5.4.11
问了AI说ohpm-repo build的镜像里包含了初始化数据,docker run可以正常运行,但是加了持久化就不行了。我后来只能从这个运行中的容器去docker cp数据到本地,然后修改我的docker compose文件,总共成功运行了。./ohpm-repo-data/myuser/ohpm-repo:/home/myuser/ohpm-repo
新的坑点来了,当我去一台docker版本为18.03.1-ce的服务器上,同样的镜像,同样的初始化目录数据,却一直没法跑起来,仍然提示我需要初始化,当我又回到build镜像报错的那台服务器(docker版本为:24.0.0)却又能顺畅的跑起来,我没有找到具体的原因,只能归根与低版本的docker不匹配。ohpm-repo首次启动时,默认创建一个管理员账号,账号名称:admin,密码:12345Qq!。该账号在首次登录时,需要修改其密码,请修改密码后,重新登录该账号。