部署 npm 私服
和 gitea 类似, github 虽然功能完善简单易用, 但是私有仓库和部分功能收费的 所以一些企业选择使用自己部署 gitea 私服来管理代码, npm 私服也是如此 npmjs.org 虽然也足够好用, 但是私有仓库是收费的, 如果要发布一些非开源的包, 就需要自己搭建 npm 私服
verdaccio
verdaccio 是一个轻量级的 npm 私服, 它可以快速部署, 简单易用, 功能也比较全面, 适合个人和小型团队使用
但是由于 verdaccio 没有提供 docker-compose.yaml
文件, 所以我们需要自己编写 docker-compose.yaml
来启动
1.拉取镜像
sh
# 注意拉取的版本
docker pull verdaccio/verdaccio
2.运行一个临时容器并获得默认的配置文件
sh
docker run -d --name verdaccio_tmp verdaccio/verdaccio
docker cp verdaccio_tmp:/verdaccio ./verdaccio-server
# 停止并删除临时容器
docker stop verdaccio_tmp
docker rm verdaccio_tmp
容器中复制的配置文件如下:
txt
./verdaccio-server/
├── conf
│ └── config.yaml
├── plugins
└── storage
3.编写 docker-compose.yaml
注意要进入 verdaccio-server
目录, 然后编写 docker-compose.yaml
因为配置的路径是相对路径, 所以需要进入 verdaccio-server
目录
yaml
services:
verdaccio:
image: verdaccio/verdaccio
container_name: verdaccio
networks:
- node-network
ports:
- "4873:4873"
volumes:
- "./storage:/verdaccio/storage"
- "./conf:/verdaccio/conf"
- "./plugins:/verdaccio/plugins"
environment:
# 注意部署的域名
- VERDACCIO_PUBLIC_URL=https://verdaccio.example.com
networks:
node-network:
driver: bridge
volumes:
verdaccio:
driver: local
yaml
# 原文件有许多注释, 我删除掉了, 这里只列出关键配置项
# 可以将原来的 config.yaml 备份, 然后修改配置文件即可
# 源码中的默认配置文件: https://github.com/verdaccio/verdaccio/tree/6.x/conf
#
# Read about the best practices
# https://verdaccio.org/docs/best
storage: /verdaccio/storage/data
plugins: /verdaccio/plugins
# https://verdaccio.org/docs/configuration#authentication
auth:
htpasswd:
# 需要自己生成这个文件, 默认是 bcrypt
file: /verdaccio/conf/htpasswd
algorithm: bcrypt
max_users: 1000 # 最多用户数
register: false # 是否允许用户注册
security:
api:
jwt:
sign:
expiresIn: 30d
notBefore: 1
web:
sign:
expiresIn: 7d
# 注意这里: 上行链路的配置, 如果在当前项目中没有找到就到上游仓库拉取
# 我这里配置了 npmjs, tencent, taobao, huawei 四个上游仓库, 具体配置可以参考官方文档
# https://verdaccio.org/docs/configuration#uplinks
uplinks:
npmjs:
url: https://registry.npmjs.org/
tencent:
url: https://mirrors.tencent.com/npm/
taobao:
url: https://registry.npmmirror.com/
huawei:
url: https://repo.huaweicloud.com/repository/npm/
# https://verdaccio.org/docs/configuration#packages
packages:
"@*/*":
access: $authenticated
publish: $authenticated
unpublish: $authenticated
proxy: tencent
"**":
access: $authenticated
publish: $authenticated
unpublish: $authenticated
proxy: tencent
# https://verdaccio.org/docs/configuration#server
server:
keepAliveTimeout: 60
# https://verdaccio.org/docs/configuration#notifications
middlewares:
audit:
enabled: true
# log settings
log:
- { type: stdout, format: pretty, level: trace }
4. 创建账号认证文件 & 设置权限
sh
# 注意这个路径需要和配置文件中 auth -> htpasswd -> file 的值一样
# 如果配置的是 file: /verdaccio/storage/htpasswd
# 那就应该执行 touch storage/htpasswd
# 注意需要给予这个文件权限, 否则会写入失败, 导致无法注册
cd verdaccio-server
touch conf/htpasswd
chomd 777 conf/htpasswd
# 注意启动之前需要给 storage 也设置权限
chmod -R 777 storage
全部操作没有问题后, 目录结构应该是这样的:
sh
./verdaccio-server/
├── conf
│ ├── config.yaml
│ └── htpasswd
├── docker-compose.yaml
├── plugins
└── storage
└── data
5 directories, 3 files
5.启动服务
sh
# 启动服务
docker-compose up -d
# 监控日志输出
docker-compose logs -f
6.客户端注册账号并测试登录
sh
npm adduser --registry http://your.verdaccio.com/
# 按照提示输入账号密码和邮箱
# 打开浏览器访问 http://your.verdaccio.com/
# 登录成功后, 可以看到自己的账号信息
注意常见问题
htpasswd
文件没有写入权限, 会导致无法注册
sh
chmod 777 conf/htpasswd
storage
目录没有写入权限, 会导致无法发布 npm 包
sh
chmod -R 777 storage
输入密码/邮箱的时候一直显示转圈
txt
不用管他正常输入即可, 输入后回车提交
部署其他语音包管理工具的私服
- rust 的 crates.io 私服
- PHP 的 packagist 私服
- python 的 pypi 私服