阅读视图

发现新文章,点击刷新页面。

20张图的保姆级教程,记录使用Verdaccio在Ubuntu服务器上搭建Npm私服

某些情况下,我们的一些npm包,需要发布到npm上,但是,又不太适合设置成公开的。尽管npm提供了私密包的服务,但是要收钱的,因此,Verdaccio就应运而生了

什么是Verdaccio

简单来说,Verdaccio 是一个轻量级、开源的私有 npm 仓库管理器,就是“自己搭建的 npm 私服”。

核心作用如下:

  1. 替代公共 npm 仓库:你可以把公司内部的私有包、不想公开的代码包发布到这个私服上,只有团队内部能访问;
  2. 可灵活管控权限配置(比如谁能发布 / 下载包)、离线使用,解决公共 npm 访问不稳定、私有代码泄露的问题。

Verdaccio本质是Node.js编写的轻量服务,部署简单,不用依赖复杂的数据库,开箱即用,是中小型团队搭建私有 npm仓库的首选。

0.png

官网:www.verdaccio.org/

搭建记录

乌班图22和node20版本

首先,笔者的服务器是乌班图22,同时node也有是20版本,如下

1.png

笔者查询了一下,node20版本适合6版本的Verdaccio,就直接下载最新版本安装了

全局安装Verdaccio

Ubuntu下加--unsafe-perm避免权限报错

npm install -g verdaccio --unsafe-perm

然后,查看版本号

verdaccio -v
2.png

创建Verdaccio工作目录,并授权

# 创建verdaccio工作目录
mkdir -p /opt/verdaccio/{conf,storage,plugins}

# 授权操作权限
chmod -R 775 /opt/verdaccio
3.png

创建Verdaccio默认配置文件并且编辑

# 进入对应目录
cd /opt/verdaccio/conf/

# 创建配置文件
touch config.yaml

# 查看一下
ls
4.png

然后写入配置

cat > /opt/verdaccio/conf/config.yaml << 'EOF'
# Verdaccio核心配置
storage: /opt/verdaccio/storage
plugins: /opt/verdaccio/plugins

# 日志配置
logs:
  - { type: stdout, format: pretty, level: http }

# 安全配置
security:
  api:
    legacy: false
    jwt:
      sign:
        expiresIn: 29d
  web:
    sign:
      expiresIn: 7d

# 认证配置(密码文件自动生成)
auth:
  htpasswd:
    file: /opt/verdaccio/conf/htpasswd
    max_users: 100

# 上游源,当自己的npm没这个包的时候,往上游找
uplinks:
  npmjs:
    url: https://registry.npmmirror.com/  # 淘宝源
    # url: https://registry.npmjs.org/     # 官方源
    cache: true

# 包权限规则
packages:
  '@*/*':
    access: $all
    publish: $authenticated
    proxy: npmjs
  '**':
    access: $all
    publish: $authenticated
    proxy: npmjs

# 监听所有IP,允许外网访问
listen: 0.0.0.0:4873

# WebUI 配置
web:
  title: 私有NPM仓库
EOF
5.png

顺手给点权限

6.png

启动Verdaccio

verdaccio --config /opt/verdaccio/conf/config.yaml
7.png

输出日志解读如下

日志内容 含义 是否需要处理
root 权限警告 提示不要用 root 运行(安全建议) 可选处理(不影响功能)
logs 配置已废弃 6.x 版本把 logs 字段改名为 log 可选修改(不影响启动)
config file 加载成功 配置文件识别正常 ✅ 无需处理
http address - http://0.0.0.0:4873/ 服务监听在 4873 端口 ✅ 启动成功

防火墙放开4873端口

注意,如果是云服务器,也要在安全组里面放开4873端口

ufw allow 4873/tcp

ufw status

8.png

先通过ip端口方式访问看看

果然是能访问到了,只不过现在仓库是空的

9.png

配置https证书

首先,自然是买了云服务器,就要买对应的https证书,笔者的证书买过了,如下

root@iv-ydy912e3nkay8n6x7ufo:/etc/nginx/certs# ls
ashuai.site.key  ashuai.site.pem

然后到对应目录,修改config.yaml文件,主要是如下修改

# 配置 HTTPS 监听 4873 端口
listen:
  - https://0.0.0.0:4873

# HTTPS 证书配置(用自已有的证书路径)
https:
  key: /etc/nginx/certs/ashuai.site.key    # 私钥
  cert: /etc/nginx/certs/ashuai.site.pem   # 公钥

# 公共 URL(必填,末尾带端口和斜杠)
public_url: https://ashuai.site:4873/

完整配置

# Verdaccio核心配置
storage: /opt/verdaccio/storage
plugins: /opt/verdaccio/plugins

# 日志配置
log:
  - { type: stdout, format: pretty, level: http }

# 安全配置
security:
  api:
    legacy: false
    jwt:
      sign:
        expiresIn: 29d
  web:
    sign:
      expiresIn: 7d

# 认证配置(密码文件自动生成)
auth:
  htpasswd:
    file: /opt/verdaccio/conf/htpasswd
    max_users: 100

# 上游源,当自己的npm没这个包的时候,往上游找
uplinks:
  npmjs:
    url: https://registry.npmmirror.com/  # 淘宝源
    # url: https://registry.npmjs.org/     # 官方源
    cache: true

# 包权限规则
packages:
  '@*/*':
    access: $all
    publish: $authenticated
    proxy: npmjs
  '**':
    access: $all
    publish: $authenticated
    proxy: npmjs

# 配置 HTTPS 监听 4873 端口
listen:
  - https://0.0.0.0:4873

# HTTPS 证书配置(用自已有的证书路径)
https:
  key: /etc/nginx/certs/ashuai.site.key    # 私钥
  cert: /etc/nginx/certs/ashuai.site.pem   # 公钥

# 公共 URL(必填,末尾带端口和斜杠)
public_url: https://ashuai.site:4873/

# WebUI 配置
web:
  title: 私有NPM仓库

注意,如果是普通用户,也要授权一下,笔者是root用户,无妨

chmod 644 /etc/nginx/certs/ashuai.site.key
chmod 644 /etc/nginx/certs/ashuai.site.pem

用https的方式进行访问

先停掉原先的服务

10.png

然后,用pm2进行管理私服npm(强烈推荐)

这里使用pm2启动私服npm(顺手命名为private-npm)

pm2 start verdaccio --name "private-npm" -- --config /opt/verdaccio/conf/config.yaml

然后查看一下状态

pm2 list

如下图

11.png

当然,大家也可以设置为开机自启动,这里不赘述

然后,就可以通过域名+端口的形式进行访问了

12.png

至此,私服npm就搭建成功了(当然,目前还没有包)

接下来,我们简单演示一下使用

私服npm创建用户名和密码,可用于公司同事用户登录

我们知道npm都有对应的账号,所以,我们需要在服务器上,创建对应用户名和密码

首先,安装工具apache2-utils

Apache 提供的一个用于管理 .htpasswd 用户认证文件的工具(常被 Verdaccio、Nginx 等借用)

sudo apt update
sudo apt install apache2-utils

创建新用户,假设名字叫做admin

sudo htpasswd -B -C 10 -c /opt/verdaccio/conf/htpasswd admin

系统会提示我们输入并确认密码,之后就会生成 /opt/verdaccio/conf/htpasswd 文件。

这个时候,用户名和密码都有了,我们后续就可以登录了

root@iv-ydy912e3nkay8n6x7ufo:/opt/verdaccio/conf# ls
config.yaml  htpasswd

顺手查看一下htpasswd,输出安装路径

root@iv-ydy912e3nkay8n6x7ufo:~# which htpasswd
/usr/bin/htpasswd

使用nrm管理源,并登录

这里笔者建议,使用nrm管理一下源,如下,全局安装一下

13.png

添加源自己的私有源,起个名字,叫做self-npm

C:\Users\lss13>nrm add self-npm https://ashuai.site:4873/
SUCCESS  Add registry self-npm success, run nrm use self-npm command to use self-npm registry.

使用自己的源

C:\Users\lss13>nrm use self-npm
SUCCESS  The registry has been changed to 'self-npm'.

使用服务器上,创建的用户名和密码,登录自己的源,再查看当前登录的是谁

14.png

在自己的源里面发布一个测试包

因为,我们先前已经登录过了,现在只需要创建一个包,并直接发布到私服npm上即可

创建如下

15.png

然后,发包

16.png

当然,我们可以在package.json里面写一些我们的信息啥的,不赘述

由上图可以看到发布成功了,接下来,我们到服务器上看看

17.png

到目前为止,我们发布成功了

再创建一个项目,下载使用我们刚刚发布的包

下载

18.png

打开node_modules文件夹看看,有的

19.png

至此,基本搭建完成、可正常发布公司私有包,下载公司私有包.

剩下的,就是一些自由的设置操作了,当然,私服都是在内网,笔者为了给大家呈现效果,特地部署在公网上了,后续会关掉

收益......

A good memory is better than a bad pen. Record it ...

使用Trae SOLO模式开发一个视频提取文字并总结归纳的工具——附线上预览地址

前言

本文记录使用Trae SOLO模式开发一个视频提取文字并总结归纳的工具

线上地址:ashuai.site:24680/

需求场景表述

  • 笔者是前端开发,但是对产品经理的知识了解不多,所以想学习产品经理的知识,问之前的产品同事要了一份视频课程,无奈课程时长起步一个多小时,如果一点点开,或者快进看,也是效率略低。

  • 因此,笔者想开发一个工具,能够一键提取视频中的内容文字,并把内容文字交给大模型,由大模型总结摘要

  • 这样我就可以快速学习产品经理的知识,而不是浪费时间在看视频上

首先,我需要做技术框架选型,限定为react+vite+ts+antd+tailwindcss

篇幅原因,把内容文字交给大模型,由大模型总结摘要这一步,笔者没有再solo

同质化调用大模型api的文章,可以参考笔者先前的文章:《效能工具(十)之接入deepseek实现AI学习PDF文档读后感文件批量生成功能》

Trae的SOLO模式开发

1. 基于用户需求,生成对应文档

笔者把上述需求,告知Trae 以后,Trae自动帮我生成一个文档,规划好,它需要做的事情,并且允许我调整这个规划文档,如下:

1.png
  • 如果我觉得规划文档冗余,或者缺少东西,可以修修改改
  • 这一步,很像项目经理提出需求后,产品提供的需求拆解文档(包含技术开发要点)

2. 让其按照文档,进行开工

让其按照文档,进行开工,Trae SOLO会自动在命令行执行相关命令,然后在右侧生成对应代码

2.png

然后,安装各种依赖

4.png

3. 产物变更

当Trae SOLO完毕以后,会提供一个产物汇总,我们可以查看变更,这样能够具体看出来,Trae帮我们写了那些代码

5.png

然后,我们查看一下终端

4. 启动项目跑起来,浏览器看效果

默认运行在5173端口上

6.png

看看浏览器的效果,发现了一个小bug

7.png

5. 告知修复antd的属性弃用的bug

这里可以截图,或者文字输入,把浏览器的bug粘贴,告知Trae,如下

8.png

然后,Trae会进行思考,并定位到问题代码,自动修复

9.png

这样的话,基本的样子就出来了,接下来,需要我进行人工介入

6. 视频提取文字,技术拆解

视频提取文字,分为这几个步骤

  1. 把视频中的音频剥离出来——使用fluent-ffmpeg这个包
  2. 把音频转成文字——使用whisper-node这个包

fluent-ffmpeg需要下载ffmepg这个工具的本地

whisper-node下载tiny微小版模型就行了

接下来,我需要 Windows 平台,下载ffmepg

参考这篇文章:blog.csdn.net/Natsuago/ar…

最终,笔者把ffmpeg安装好了,如下

10.png

7. 发现还得写后端

fluent-ffmpeg和whisper-node需要后端服务,才方便运行,所以,我和Trae沟通后,它又帮我继续创建后端代码

11.png

8. 针对于高风险的命令会暂停并提示用户

比如删除文件操作,Trae会停下来solo,然后询问用户是否这样操作,这样还是不错的,防止AI编程误删一些重要的文件

12.png

9. 若是方向错误,告知可纠正

  • 实际上,涉及到视频转文本的功能,还是python生态更加合适
  • 笔者一开始,让其使用nodejs生态写后端,而后,solo也发现了并推荐改成python生态
  • 笔者点击同意,选择让其把后端代码改成python生态
  • 然后trae也很清晰地理解了需求
  • 进行了重构
  • 重构过程中,可能也会出现一些报错,也需要人工介入,但是这并不Trae的问题,而是所有AI编程的问题

和人沟通,有什么问题,和AI沟通也会有

有时候,锅不在AI,而在我们,因为我们没有清晰地表达明白需求

10. 来回solo最终得到结果成品

在来回的solo交流中,最终,实现了笔者想要的效果

工具成品

技术栈介绍

注意,以下这总结文档,也是solo出来,我再修改的

介绍图片.png

效果图

效果图.gif

线上地址(不包含后端)

地址:ashuai.site:24680/

服务器内存容量吃紧,就不部署后端了,大家可以自己拉取代码,自己本机跑起来

github仓库代码

地址:github.com/shuirongshu…

注意,若是生产环境,高可用,笔者还是建议,使用云服务商的付费接口

原因主要有两点:

1.开源模型的识别准确率、2.服务器维护成本

总结Trae SOLO模式

  • Trae SOLO模式就是我们开发者化身项目经理角色
  • Trea SOLO化身产品经理写文档、加程序员写代码角色
  • 我们开发者,主要是进行把控、管控、调整
  • 从而让开发出来的项目,符合预期

整体用下来,还是能够提升很大的开发效率的

❌