当前位置: 首页 > news >正文

私有仓库搭建

目前市面上比较常见的私有仓库搭建方法为:

  • 通过 Sinopia 或 verdaccio 搭建(Sinopia 已经停止维护,verdaccio 是 Fork 自 Sinopia,基本上大同小异),其优点是搭建简单,不需要其他服务。
  • 通过 cnpm 搭建,需要数据库服务,后期也支持了 redis 缓存(当 redis 设置了密码,访问好像有些问题),目前用的人最多,cnpm 推荐的是用 docker 作为容器。
  • 基于github私有库来搭建npm私有库,搭建简单管理方便,只需要维护github私有库,不需要本地搭建服务器、数据库等。
    1. 但是需要在package.json设置private为true(为了保证不小心发布到npm官方库)
    2. 安装之后,想要更新,只能重新npm install xxx;
    3. 发布的时候不能使用npm的相关命令,比如npm version patch、npm publish;
    4. 有时候拉取都比较慢,有时容易失败

npm及私有npm的工作原理?

当我们使用npm install去安装一个模块时,会先检查node_modules目录中是否已经存在这个模块,如果没有便会向远程仓库查询。

npm提供了一个模块信息查询服务,通过访问

registry.npmjs.org/packaename/version

就可以查到某个发布在npm模块上的具体信息以及下载地址,下载并解压到本地完成安装。
在这里插入图片描述
那如果我们搭建了私有的npm
使用 npm install 命令安装包时,NPM 将首先检查是否可以从私有注册表获取所需的包。如果私有注册表配置为代理公共注册表,且包不存在于私有注册表中,它还可以从公共注册表中拉取包。
在这里插入图片描述

verdaccio

Verdaccio 是一个轻量级、易于配置的开源私有 NPM 仓库解决方案,非常适合用于内部团队的包管理。下面是使用 Verdaccio 搭建私有 NPM 仓库的步骤。

安装 Verdaccio

  1. 安装 Node.js
    确保你已经安装了 Node.js。Verdaccio 要求 Node.js 的版本至少是 10.x。

  2. 安装 Verdaccio
    使用 npm 安装 Verdaccio:

    npm install -g verdaccio
    
  3. 运行 Verdaccio
    安装完成后,运行 Verdaccio:

    verdaccio
    

    默认情况下,Verdaccio 会在 http://localhost:4873 上运行。
    在这里插入图片描述

配置 Verdaccio

  1. 配置文件
    Verdaccio 会在首次运行时创建一个默认的配置文件 ~/.config/verdaccio/config.yaml。你可以编辑这个文件来调整设置,如端口、权限、存储路径等。
    文档: https://verdaccio.org/zh-cn/docs/configuration/
    • 全部配置

      # #号后面是注释
      # 所有包的缓存目录
      storage: ./storage
      # 插件目录
      plugins: ./plugins#开启web 服务,能够通过web 访问
      web:# WebUI is enabled as default, if you want disable it, just uncomment this line#enable: falsetitle: Verdaccio
      #验证信息
      auth:htpasswd:#  用户信息存储目录file: ./htpasswd# Maximum amount of users allowed to register, defaults to "+inf".# You can set this to -1 to disable registration.#max_users: 1000# a list of other known repositories we can talk to
      #公有仓库配置
      uplinks:npmjs:url: https://registry.npmjs.org/packages:'@*/*':# scoped packagesaccess: $allpublish: $authenticated#代理 表示没有的仓库会去这个npmjs 里面去找 ,#npmjs 又指向  https://registry.npmjs.org/ ,就是上面的 uplinks 配置proxy: npmjs'**':# 三种身份,所有人,匿名用户,认证(登陆)用户# "$all", "$anonymous", "$authenticated"#是否可访问所需要的权限access: $all#发布package 的权限publish: $authenticated# 如果package 不存在,就向代理的上游服务发起请求proxy: npmjs# To use `npm audit` uncomment the following section
      middlewares:audit:enabled: true
      # 监听的端口,IP,重点,不配置这个,只能本机能访问
      listen: 0.0.0.0:4873
      # log settings
      logs:- {type: stdout, format: pretty, level: http}#- {type: file, path: verdaccio.log, level: info}
      
    • Verdaccio 允许你通过修改 config.yaml 中的 authpackages 部分来配置访问控制和权限:

      auth:htpasswd:file: ./htpasswdmax_users: 1000packages:'@*/*':access: $authenticatedpublish: $authenticatedproxy: npmjs'**':access: $authenticatedpublish: $authenticatedproxy: npmjs
      

      这样配置后,只有经过认证的用户才能访问和发布包。

使用 Verdaccio

  1. 添加用户
    如果你想要管理用户登录,可以通过命令行添加用户:

    npm adduser --registry http://localhost:4873
    

    这将创建一个用户,并将其信息存储在 Verdaccio 的用户数据库中。
    在这里插入图片描述

  2. 登录到私有注册表

    npm login --registry=http://your-private-registry-url/
    
  3. 发布包

    • 配置你的 package.json 中的 publishConfig 字段指向 Verdaccio 的 URL:

      "publishConfig": {"registry": "http://localhost:4873"
      }
      

      文档:https://docs.npmjs.com/cli/v8/using-npm/registry#how-can-i-prevent-my-package-from-being-published-in-the-official-registry在这里插入图片描述

    • 或者设置 .npmrc 文件
      在 npm 中更改注册表地址有几种不同的方法,可以根据需求选择适合的方法:
      1. 永久更改注册表地址
      如果您希望所有的 npm 命令都默认使用特定的注册表,您可以通过 npm 配置来设置:

       ```bashnpm config set registry https://example.com/```这将更新您的用户级 npm 配置文件(通常在用户主目录的 `.npmrc` 文件中)。2. **为单个项目设置注册表地址**如果只想为某个特定项目设置注册表地址,可以在项目根目录下创建或修改 `.npmrc` 文件,并添加以下内容:```bashregistry=https://example.com/```这样设置后,只有在该项目目录下运行的 npm 命令会使用这个注册表地址。
      
    • 使用 npm 发布包:

      npm publish
      // 更新版本
      npm version patch
      
    • 再次发布之前要先进行更新版本,否则会失败

           // 更新版本npm version patch
      
  4. 撤销

    npm unpublish 命令用于从 npm 注册表中删除已发布的包。这个命令非常有用,但也应谨慎使用,因为它会影响到依赖该包的任何人或任何项目。以下是命令的格式和详细解释:

    格式

    npm unpublish [<@scope>/]<pkg>@<version>
    

    解释

    • <@scope>/: 可选项。如果你的包是发布在一个作用域下(通常是组织或团队的命名空间),你需要包含这个作用域。作用域名称前面加上 @ 符号,并与包名通过 / 分隔。

    • <pkg>: 必需项。这是你想要取消发布的包的名称。

    • <version>: 必需项。这是你想要取消发布的包的具体版本号。提供版本号是必须的,因为 npm unpublish 默认不允许删除整个包,只能删除指定版本。

    使用示例

    假设你有一个名为 example-package 的包,版本 1.0.1,并且这个包是在作用域 @mycompany 下:

    npm unpublish @mycompany/example-package@1.0.1
    

    如果你的包没有使用作用域,命令如下:

    npm unpublish example-package@1.0.1
    
  5. 安装包

    • 使用命令行参数指定 Verdaccio 的 URL 来安装包:
      npm install <package-name> --registry http://localhost:4873
      

优点与缺点

优点

  • 易于安装和配置:快速搭建,简单易用。
  • 轻量级:非常适合小团队和个人使用。
  • 支持插件:可以通过插件扩展功能。

缺点

  • 缩放性:对于非常大的企业或高负载环境,可能不够强大。
  • 高级特性缺乏:相比于一些商业解决方案,如 Artifactory 或 Nexus,功能上可能有所欠缺。

Verdaccio 是一个非常实用的工具,对于希望快速搭建私有 NPM 仓库的小团队或个人开发者来说,它提供了一个成本低且维护简单的解决方案。

服务器Linux搭建NPM私有仓库-verdaccio

创建opt文件夹

liunx文件夹都有自己的用途,可以看这篇Linux 系统目录结构

mkdir opt
安装verdaccio
docker pull verdaccio/verdaccio
创建项目结构和文件

执行以下命令

mkdir -p opt/{plugins,config,storage}

生成以下目录结构

-opt-docker-compose.yml   #docker-compose 配置文件-plugins              -config-config.yaml      #verdaccio 配置文件-storage
编辑 docker-compose 配置文件
version: '3.4'services:verdaccio:image: verdaccio/verdacciocontainer_name: "verdaccio"networks:- node-networkenvironment:# VERDACCIO 服务端口- VERDACCIO_PORT=3005# 当前登录 linux 服务器的用户名- VERDACCIO_USER_NAME="root" ports:# 宿主和容器的端口- "3005:3005"volumes:- "./storage:/verdaccio/storage"- "./config:/verdaccio/conf"- "./plugins:/verdaccio/plugins"
networks:node-network:driver: bridge

下面是对每一行配置的详细解释:

version: '3.4'
  • 版本: 这一行指定了 docker-compose 文件使用的版本是 3.4。每个版本的 docker-compose 支持特定的功能集合。
services:
  • 服务: 开始定义一个或多个服务的部分,每个服务将对应一个容器。
  verdaccio:
  • verdaccio 服务: 这里定义了一个名为 verdaccio 的服务。
    image: verdaccio/verdaccio
  • 镜像: 为 verdaccio 服务指定使用 verdaccio/verdaccio 镜像,这是一个预构建的 Docker 镜像,可从 Docker Hub 获取。
    container_name: "verdaccio"
  • 容器名称: 设置这个容器运行时的名称为 “verdaccio”。
    networks:- node-network
  • 网络: 将该服务连接到名为 node-network 的网络。
    environment:
  • 环境变量: 开始定义环境变量的部分。
      # VERDACCIO 服务端口- VERDACCIO_PORT=3005
  • 环境变量: 设置环境变量 VERDACCIO_PORT3005,这通常用于指定应用监听的端口。
      # 当前登录 linux 服务器的用户名- VERDACCIO_USER_NAME="root"
  • 环境变量: 设置环境变量 VERDACCIO_USER_NAME 为 “root”,这可以用于应用中需要引用服务器用户的场景。
    ports:# 宿主和容器的端口- "3005:3005"
  • 端口映射: 将容器内的端口 3005 映射到宿主机的端口 3005 上,使得外部可以通过宿主机的端口访问服务。
    volumes:- "./storage:/verdaccio/storage"- "./config:/verdaccio/conf"- "./plugins:/verdaccio/plugins"
  • 卷挂载:
    • ./storage:/verdaccio/storage:将宿主机上当前目录下的 storage 目录挂载到容器的 /verdaccio/storage 目录,用于数据持久化。
    • ./config:/verdaccio/conf:将宿主机上当前目录下的 config 目录挂载到容器的 /verdaccio/conf 目录,用于配置文件的持久化。
    • ./plugins:/verdaccio/plugins:将宿主机上当前目录下的 plugins 目录挂载到容器的 /verdaccio/plugins 目录,用于插件的持久化。
networks:node-network:driver: bridge
  • 网络定义:
    • node-network: 这里定义了一个名为 node-network 的网络。
    • 驱动: 使用 bridge 驱动,这是 Docker 默认的网络类型,适用于同一宿主机上的容器间通信。

整体来看,这个 docker-compose.yml 文件配置了一个单服务的应用,使用了网络、环境变量、端口映射和卷挂载来确保 verdaccio 正常运行并且是配置化和持久化的。

编辑 verdaccio 配置文件
storage: /verdaccio/storage
auth:htpasswd:file: /verdaccio/conf/htpasswd
uplinks:npmjs:url: https://registry.npmjs.org/server2:url: https://registry.npm.taobao.org/
packages:'@*/*':access: $allpublish: $authenticatedproxy: npmjs server2'**':# 这里如果不设置在使用 npm i xxx、 npm publish 时将会提示包不存在,为了方便这里直接设置上如下两行access: $allpublish: $authenticatedproxy: npmjs
logs:- {type: stdout, format: pretty, level: http}
listen:# 这个端口务必对应上- 0.0.0.0:3005
启动容器
docker-compose up -d --build

在浏览器打开 服务器网址:端口(3005) 将会出现如下页面
在这里插入图片描述

可能的报错

npm版本太低
这个是因为本地npm 版本太低导致的, https://github.com/verdaccio/verdaccio/issues/3413
在这里插入图片描述
本地添加用户报错 500
查看日志

 error--- the user hehe could not being added. Error: EACCES: permission denied, open '/verdaccio/conf/htpasswd'

在这里插入图片描述
是因为Verdaccio在容器中以非根用户(uid=10001)的身份运行,要授权
因为当前的目录结构为

-opt-docker-compose.yml   #docker-compose 配置文件-plugins              -config-config.yaml      #verdaccio 配置文件-storage

所以先进入opt文件夹,从报错来看是/verdaccio/conf/htpasswd没有权限
因为./config:/verdaccio/conf:将宿主机上当前目录下的 config 目录挂载到容器的 /verdaccio/conf 目录,用于配置文件的持久化。
执行一下操作就可以解决

chown -R 10001:65533 ./config/

CNPM

要使用 cnpm(中国国内镜像版本的 npm)来搭建私有 NPM 仓库,我们主要会使用到 cnpmjs.org,这是一个开源的私有 NPM 服务解决方案,支持 npm 的所有功能。cnpm 本身主要是为了优化在中国大陆访问 npm 的速度,而 cnpmjs.org 提供了完整的私有库服务。

安装和配置 cnpmjs.org

下面是基于 cnpmjs.org 搭建私有 NPM 仓库的步骤:

  1. 环境要求

    • 需要 Node.js 环境,确保你的系统上已安装 Node.js。
    • 安装 MySQL 或其他数据库,因为 cnpmjs.org 需要数据库来存储数据。
  2. 安装 cnpmjs.org

    • 使用 npm 安装 cnpmjs.org
      npm install -g cnpmjs.org
      
  3. 配置数据库

    • cnpmjs.org 默认使用 SQLite,但对于生产环境,推荐使用 MySQL。
    • 创建一个 MySQL 数据库并配置到 cnpmjs.org 的配置文件中。可以从 cnpmjs.org 的 GitHub 仓库 下载默认的 config.js 文件,然后修改数据库设置部分。
  4. 启动服务

    • 启动 cnpmjs.org 服务:
      cnpmjs.org start --admins='admin:admin@example.com' --config=config.js
      
    • 其中 admins 是管理员账号的设置,可以根据实际情况调整。
  5. 使用 cnpm

    • 安装 cnpm(如果尚未安装):
      npm install -g cnpm --registry=https://registry.npmmirror.com
      
    • 配置 cnpm 使用你的私有仓库:
      cnpm set registry http://localhost:7001
      

发布和安装包

  • 发布包:使用 cnpm publish 发布你的 npm 包。
  • 安装包:使用 cnpm install <package-name> 来安装包。

优点与缺点

优点

  • 完全控制:私有部署意味着你拥有对仓库的完全控制。
  • 扩展性:相比于简单的 Verdaccio,cnpmjs.org 支持更多的定制和扩展功能。
  • 适合中国用户cnpm 的设置和优化适合中国国内用户,网络连接更快、更稳定。

缺点

  • 维护成本:需要自行维护服务器和数据库。
  • 配置复杂:相比直接使用 npm 或 Verdaccio,配置和管理稍显复杂。
  • 资源消耗:相对于轻量级的方案,cnpmjs.org 可能会占用更多的系统资源。

使用 cnpmjs.org 搭建私有 NPM 仓库是一种有效的方式,特别是对于需要高度定制化和控制的大型团队或企业。这种方法提供了良好的性能和可扩展性,但也需要相应的技术支持来维护和管理。

GitHub Packages

使用 GitHub Packages 创建私有 NPM 库允许你将 NPM 包直接存储在 GitHub 上,利用 GitHub 提供的版本控制和协作功能,以及包管理的便利性。这是一个集成度高、配置简单的方案,适合已经使用 GitHub 进行源代码管理的团队。以下是详细的步骤说明:

步骤概览

  1. 启用 GitHub Packages

    • GitHub Packages 通常默认在所有账户上启用。
  2. 创建或选择一个 GitHub 仓库

    • 使用一个现有的 GitHub 仓库或创建一个新仓库用于托管你的私有 NPM 包。
  3. 生成 Personal Access Token

    • 在 GitHub 上生成一个访问令牌(Personal Access Token, PAT),确保它包含对 Packages 的适当权限。
  4. 配置 NPM 使用 GitHub Packages

    • 在你的项目中配置 .npmrc 文件以使用 GitHub 的 NPM 仓库。
  5. 发布 NPM 包

    • 将你的 NPM 包发布到 GitHub Packages。
  6. 安装和使用包

    • 通过 GitHub Packages 安装和使用你的 NPM 包。

详细步骤

1. 启用 GitHub Packages
  • 此服务通常已为 GitHub 用户启用。如果未启用,你可能需要联系 GitHub 支持。
2. 创建或选择一个仓库
  • 直接在 GitHub 上创建一个新的仓库或选择一个已有仓库。私有包必须存储在私有仓库中。
3. 生成 Personal Access Token
  • 在 GitHub 网站上,点击你的头像 > Settings > Developer settings > Personal access tokens > Generate new token。
  • 选择 write:packages 用于上传包,read:packages 用于下载包。确保也选择了 repo 权限,这对私有仓库是必需的。
4. 配置 NPM 使用 GitHub Packages
  • 在你的项目根目录下创建 .npmrc 文件,加入以下内容(替换 OWNER 为你的 GitHub 用户名或组织名):
    registry=https://npm.pkg.github.com/OWNER
    
  • 在你的用户主目录下的 .npmrc 文件中配置 PAT:
    //npm.pkg.github.com/:_authToken=YOUR_TOKEN
    
5. 发布 NPM 包
  • 修改你的 package.json 文件中的 name 属性,以确保它是 @owner/repo 形式,其中 owner 是你的 GitHub 用户或组织名,repo 是仓库名。
  • 确保你已登录到 NPM(使用命令 npm login),然后运行:
    npm publish
    
6. 安装和使用包
  • 确保 .npmrc 文件配置正确。然后你可以像使用其他 NPM 包一样安装和使用这些包:
    npm install @owner/package-name
    

优点与缺点

优点

  • 集成:紧密集成于 GitHub,简化了源代码和包管理的流程。
  • 安全性:利用 GitHub 的安全设置,可以细粒度控制包的访问权限。
  • 方便的版本控制和协作:利用 GitHub 强大的版本控制和协作特性。

缺点

  • 成本:对于私有仓库和私有包,需要 GitHub 的付费账户。
  • 依赖性:依赖 GitHub 的在线服务,如果 GitHub 服务中断,可能会影响到包的访问。
  • 配置和使用限制:虽然相对简单,但对于不熟悉 GitHub 的用户来说可能需要一定的学习曲线。

这些步骤总结了如何通过 GitHub Packages 设置和管理私有 NPM 库,希望对你的项目或团队有所帮

参考文档
https://verdaccio.org/zh-cn/docs/configuration/#storage
https://juejin.cn/post/7096701542408912933
https://auan.cn/internet/2010.html
https://juejin.cn/post/7063032346206797860

相关文章:

私有仓库搭建

目前市面上比较常见的私有仓库搭建方法为&#xff1a; 通过 Sinopia 或 verdaccio 搭建&#xff08;Sinopia 已经停止维护&#xff0c;verdaccio 是 Fork 自 Sinopia&#xff0c;基本上大同小异&#xff09;&#xff0c;其优点是搭建简单&#xff0c;不需要其他服务。通过 cnp…...

axios设置 responseType为 “stream“流式获取后端数据

使用前景&#xff1a; 工作过程中遇到了后端接口响应过慢&#xff0c;前端界面一致loading的情况&#xff0c;这个时候可以尝试采用将Axios的responseType参数被设置为stream类型实现。 stream介绍&#xff1a; stream类型意味着你希望服务器响应的数据以Node.js流&#xff…...

Apache POI(使用Java读写Excel表格数据)

1.Apache POI简介 Apache POI是一个开源的Java库&#xff0c;用于操作Microsoft Office格式的文件。它支持各种Office文档的读写功能&#xff0c;包括Word文档、Excel电子表格、PowerPoint演示文稿、Outlook电子邮件等。Apache POI提供了一组API&#xff0c;使得Java开发者能够…...

golang中只用定义不用初始化的类型规律总结

在go语言的开发中&#xff0c;有很多的内置类型是我们只需要定义而不需要初始化的&#xff0c; 如上文中提到的bytes.Buffer&#xff0c; strings.Builder。 其实在go语言中官方给我们定义的很多的类型都只需要定义&#xff0c;不需要初始化。 他们都有2个共同的规律&#xff…...

数据库之PostgreSQL详解

一、PostgreSQL介绍 PostgreSQL是一个功能强大的 开源 的关系型数据库。底层基于C实现。 PostgreSQL的开源协议和Linux内核版本的开源协议是一样的。。BDS协议&#xff0c;这个协议基本和MIT开源协议一样&#xff0c;说人话&#xff0c;就是你可以对PostgreSQL进行一些封装&a…...

找出链表倒数第k个元素-链表题

LCR 140. 训练计划 II - 力扣&#xff08;LeetCode&#xff09; 快慢指针。快指针臂慢指针快cnt个元素到最后&#xff1b; class Solution { public:ListNode* trainingPlan(ListNode* head, int cnt) {struct ListNode* quick head;struct ListNode* slow head;for(int i …...

ssm629基于SSM的二手交易平台设计与开发+jsp【已测试】

前言&#xff1a;&#x1f469;‍&#x1f4bb; 计算机行业的同仁们&#xff0c;大家好&#xff01;作为专注于Java领域多年的开发者&#xff0c;我非常理解实践案例的重要性。以下是一些我认为有助于提升你们技能的资源&#xff1a; &#x1f469;‍&#x1f4bb; SpringBoot…...

【Unity】资源管理与热更 YooAsset+HybridCLR

1 前言 Unity资源管理与热更新该用什么方法&#xff1f;当然是YooAssetHybridCLR了&#xff0c;YooAsset负责资源管理与热更&#xff0c;HybridCLR负责支持代码热更。 但这里我就不自己讲了&#xff0c;我会提供相关学习链接&#xff08;前人栽树我躺平&#xff09;。 2 学习链…...

PDF批量加水印 与 去除水印实践

本文主要目标是尝试去除水印&#xff0c;但是为了准备测试数据&#xff0c;我们需要先准备好有水印的pdf测试文件。 注意&#xff1a;本文的去水印只针对文字悬浮图片悬浮两种特殊情况&#xff0c;即使是这两种情况也不代表一定都可以去除水印。 文章目录 批量添加透明图片水印…...

【MySQL】服务器配置和管理

本文使用的MySQL版本是8.0 MySQL服务器介绍 MySQL服务器通常说的是mysqld程序。 mysqld 是 MySQL 数据库服务器的核心程序&#xff0c;负责处理客户端的请求、管理数据库和执行数据库操作。管理员可以通过配置文件和各种工具来管理和监控 mysqld 服务器的运行 官方文档&…...

限流定义、算法、实施方案

限流定义 1、 时间 &#xff0c; 基于某段时间或某个时间点&#xff0c;即&#xff1a;时间窗口 2、资源&#xff1a; 对可用资源进行限制&#xff1a; QPS/连接数/传输速率/黑白名单等 分布式环境下&#xff0c;主流限流方案&#xff1a; 网关层限流&#xff1a;流量入口Ngi…...

[312. 戳气球] 动态规划寻找转移函数

Problem: 312. 戳气球 文章目录 思路Code 思路 这个哥们写的思路真的很牛逼&#xff0c;转载一下他。 戳气球题解 Code class Solution { public:int maxCoins(vector<int>& nums) {nums.insert(nums.begin(), 1);nums.push_back(1);int n nums.size();vector<v…...

以操作系统和Java的视角看“中断“

引言 fucking-java-concurrency主要解读了在开发过程中常常会遇到的Java并发问题&#xff0c;本文主要总结Java的中断原理和应用。 PS: https://github.com/WeiXiao-Hyy/blog整理了后端开发的知识网络&#xff0c;欢迎Star&#xff01; 操作系统的中断 什么是中断&#xff1…...

【运维】如何在Ubuntu 22上使用Python 3.8的虚拟环境

在Ubuntu 22上使用Python 3.8的虚拟环境安装Ryu是相对简单的。以下是一步一步的指南&#xff1a; https://qq742971636.blog.csdn.net/article/details/139566151 安装Python 3.8&#xff1a; 在Ubuntu 22上&#xff0c;Python 3.8可能不是默认安装的版本。你可以使用以下命令…...

门面模式Api网关(SpringCloudGateway)

1. 前言 当前通过Eureka、Nacos解决了服务注册和服务发现问题&#xff0c;使用Spring Cloud LoadBalance解决了负载均衡的需求&#xff0c;同时借助OpenFeign实现了远程调用。然而&#xff0c;现有的微服务接口都直接对外暴露&#xff0c;容易被外部访问。为保障对外服务的安全…...

玩转Matlab-Simscape(初级)- 09 - 在Simulink中创建曲柄滑块机构的控制模型

** 玩转Matlab-Simscape&#xff08;初级&#xff09;- 09 - 在Simulink中创建曲柄滑块机构的控制模型 ** 目录 玩转Matlab-Simscape&#xff08;初级&#xff09;- 09 - 在Simulink中创建曲柄滑块机构的控制模型 前言一、问题描述二、创建模型2.1 识别机构中的刚体2.2 确定刚…...

手撸一个java网关框架

手写一个简易的Java网关框架涉及到很多方面&#xff0c;但我会提供一个基本的框架概念和代码示例&#xff0c;帮助你理解网关的基本构建。以下是一个简单的Java网关框架的实现&#xff1a; 定义路由&#xff1a;需要一个路由表来映射请求的URL到对应的处理器。 请求处理&#x…...

亮数据代理IP助力高效数据采集

文章目录 &#x1f4d1;前言一、爬虫数据采集痛点二、代理IP解决爬虫痛点2.1 为什么可以2.2 本篇采用的代理IP 四、零代码获取数据4.1 前置背景4.2 亮数据浏览器自动抓取数据4.3 使用步骤&#xff1a; 五、数据集5.1 免费样本5.2 定制数据集 &#x1f324;️个人小结 &#x1f…...

VS2022,DLL1调用lib,lib调用DLL2

DLL1调用lib&#xff0c;lib调用DLL2 问题1&#xff1a;为什么在dll1中需要引入dll2的.lib文件 当你有一个工程&#xff08;dll1&#xff09;调用静态库&#xff08;lib&#xff09;&#xff0c;而静态库&#xff08;lib&#xff09;又调用另一个DLL&#xff08;dll2&#xf…...

Unity Mirror VR联机开发 房间篇

一、需求 在联机时通常有加入房间这个步骤&#xff0c;在mirror示例中也有相应的案例&#xff0c;但是那个比较复杂&#xff0c;我们做教育科普类不需要如此复杂&#xff0c;傻瓜式操作基本就可以了&#xff0c;所以我简化了步骤&#xff0c;省略了点击准备按钮这一步骤&#…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...