一、Verdaccio说明 Unity 自定义PackageManager服务器,解决外网访问Package的问题,使用Verdaccio解决
服务器配置 | Verdaccio
二、安装相关程序 1. 老的办法已经失效 1 2 3 4 5 6 7 8 9 10 # 安装NodeJs curl -sL https://rpm.nodesource.com/setup_16.x | bash - yum install nodejs # 检查 nodejs -v npm -v # 如果检查正确,继续安装verdaccio npm install --global verdaccio
安装过程中,如果是CentOS7,则在安装NodeJs18的时候,会有不兼容的问题,这里的使用了NodeJs16的版本
详情参考:
NodeJS 18 revert to building on CentOS 7, RHEL 7, Ubuntu Bionic 18.04, other other LTS distros · Issue #43246 · nodejs/node (github.com)
继续在 centos7 中使用 nodejs18 · Issue #64 · luckyyyyy/blog (github.com)
2. Update 2023-11安装方法 老的安装可能会有问题:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ================================================================================ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ================================================================================ SCRIPT DEPRECATION WARNING This script, located at https://deb.nodesource.com/setup_X, used to install Node.js is deprecated now and will eventually be made inactive. Please visit the NodeSource distributions Github and follow the instructions to migrate your repo. https://github.com/nodesource/distributions The NodeSource Node.js Linux distributions GitHub repository contains information about which versions of Node.js and which Linux distributions are supported and how to install it. https://github.com/nodesource/distributions SCRIPT DEPRECATION WARNING ================================================================================ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ================================================================================ TO AVOID THIS WAIT MIGRATE THE SCRIPT Continuing in 60 seconds (press Ctrl-C to abort) ...
具体参考 https://github.com/ddev/ddev/issues/5363
所以最安全的办法还是直接手动安装 在 https://nodejs.org/en/about/previous-releases 中找到16版本
1 2 3 4 5 6 7 8 9 10 11 12 wget https://nodejs.org/dist/v16.13.2/node-v16.13.2-linux-x64.tar.xz # 解压 # xz 找不到命令需要执行 yum install xz.x86_64 -y xz -d node-v16.13.2-linux-x64.tar.xz # 如果是Tar # tar xvf node-v16.13.2-linux-x64.tar # 移到文件夹 mv node-v16.13.2-linux-x64 /usr/local/nodejs
1 2 3 4 5 6 7 8 9 10 11 # 添加下面内容到环境配置里 vi /etc/profile # 添加环境变量 export PATH=$PATH:'/usr/local/nodejs/bin' # 重新加载 source /etc/profile # 查看是否配置正确 node -v
如果没有问题,则表示NodeJs安装成功
三、相关配置 verdaccio
运行并不需要root,并且在启动的时候会明确提示不要使用root,可以新建一个专门的用户如upm
用于运行verdaccio
说明:这里必须不使用root,不然可能会有各种各样的问题
所以先添加一个专门的服务器用户
1 2 3 4 5 6 sudo useradd -m upm sudo passwd upm # 如果已经在root,则把刚下面的verdaccio目录移动到新的用户目录下面 # /home/upm/verdaccio # 从这里启动
然后再在当前新用户下面进行测试
1 2 3 4 5 6 7 8 9 # 直接在终端运行 verdaccio # 会出现当前配置的信息 warn --- config file - /home/upm/.config/verdaccio/config.yaml info --- "crypt" algorithm is deprecated consider switch to "bcrypt". Read more: https://github.com/verdaccio/monorepo/pull/580 info --- plugin successfully loaded: verdaccio-htpasswd info --- plugin successfully loaded: verdaccio-audit warn --- http address - http://0.0.0.0:4873/ - verdaccio/5.21.1
可以打开配置文件,进行一些配置
1 vim /home/upm/.config/verdaccio/config.yaml
找到listen
配置,打开listen
和0.0.0.0:4873
表示接受所有IP的访问(可根据自己需求配置)
1 2 3 4 5 6 7 8 # 打开IP和端口配置 listen: # - localhost:4873 # default value # - http://localhost:4873 # same thing - 0.0.0.0:4873 # listen on all addresses (INADDR_ANY) # - https://example.org:4873 # if you want to use https # - "[::1]:4873" # ipv6 # - unix:/tmp/verdaccio.sock # unix socket
同时在云服务器的防火墙配置中打开
1 2 应用类型 来源 协议 端口 策略 备注 自定义 0.0.0.0/0 TCP 4873 允许 verdaccio服务
同时,可将配置文件中的max_body_size
设置成100M
具体见:Configuration File | Verdaccio
此时,直接运行
然后在浏览器中打开
将会看到verdaccio主页面
四、客户端添加用户 在服务器运行verdaccio的时候,在客户端终端 中,添加用户
1 2 3 4 5 6 7 8 npm adduser --registry http://your-ip:4873/ Username: caidog Password: Email: (this IS public) xxx@qq.com Logged in as meta on http://your-ip:4873/.
然后再检查登录
1 2 3 4 5 npm login --registry http://your-ip:4873 # 输入用户名密码 # 输入邮箱,可与注册不一样 Logged in as caidog on http://your-ip:4873/.
可以在配置文件中设置最大用户数量max_users
,如果设置为-1,则表示不让注册
1 2 3 4 5 6 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: 5
五、pm2安装 退出 ssh 远程登陆,verdaccio就会停止运行,因此我们使用 forever 或者 pm2 启动
注意:Pm2也要在新的非root账号下启动,不然也可能会有各种问题
目前使用pm2,主要原因是:好看漂亮,功能强大
直接使用pm2运行
1 pm2 start `which verdaccio`
则看到以下输出
1 2 3 4 5 6 7 8 9 10 11 12 [upm@VM-24-16-centos /]$ pm2 start `which verdaccio` [PM2] Spawning PM2 daemon with pm2_home=/home/upm/.pm2 [PM2] PM2 Successfully daemonized [PM2] Starting /usr/bin/verdaccio in fork_mode (1 instance) [PM2] Done. ┌─────┬──────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐ │ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │ ├─────┼──────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤ │ 0 │ verdaccio │ default │ N/A │ fork │ 17827 │ 0s │ 0 │ online │ 0% │ 10.9mb │ upm │ disabled │ └─────┴──────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
网页打开http://your-ip:4873
看是否正常
同时,也可以用
去查看Log位置等配置,方便对错误进行调试,到此,服务器部分解决完毕
六、客户端发布插件 基本要求 你可以参考Package下面这些Unity自带的包格式,基本有以下要求
package以文件夹的形式管理
脚本建议按照Editor和Runtime进行分类
package里所有的脚本都需要有一个程序集定义文件Assembly Definition
程序集之间的引用关系必须正确
根目录必须要有一个package.json文件
创建方法 官方文档介绍
Unity - Manual: Assembly definitions (unity3d.com)
基本上就只需要给Editor和Runtime两个文件夹的脚本添加程序集就够了
(1)因为Editor的脚本应该是只在编辑器下生效的,所以我们需要将平台改为只勾选Editor,否则有可能在打包时出错
(2)一些Editor的脚本会引用Runtime的脚本,所以需要对Editor的程序集定义文件引用Runtime的程序集定义文件
(3)如果你的插件引用了其他插件,也需要添加其他插件的程序集引用
(4)在插件根目录创建package.json
文件,打开之后,填写包名,版本号,引用的其他package等
全部完成之后上传即可
上传发布 打开PowerShell或者Cmd,如果没有用户,先创建一个用户
1 2 3 npm adduser --registry http://ip:端口 # 输入用户名,密码,邮箱后创建成功
如果有用户,则可以直接登录
1 npm login --registry http://ip:端口
接下来进入到package路径
1 2 3 cd "D:\xxx\xxx" 或者 cd /d d:\xx\xx
使用指令发布
1 npm publish --registry http://ip:端口
每次发布的时候,都要修改版本号,否则会失败
然后在网页上就可以看到当前发布的Package了
七、包的使用方法 在要使用包的项目中,修改项目的manifest.json文件,注册你的服务器地址
打开根目录,找到Packages文件夹下的manifest.json
,在dependencies上方加入以下代码
1 2 3 4 5 6 7 8 9 "scopedRegistries": [ { "name": "CaidogFramework", "url": "http://ip:端口/", "scopes": [ "注册的包名前缀如com.caidog", ] } ],
其中name
就是给自定义一个名字
scopes
表示包名的前缀,一般来说表示所有者(根据情况统一发布标准),如所有的包都按com.caidog.xxx
发布,则这里就是com.caidog
重新回到项目,打开菜单PackageManager,新版本的Unity还可以在这筛选是Unity的包还是自定义服务器的包
八、nginx配置 如果要配置域名跳转,则需要对nginx进行配置
nginx配置文件一般在/etc/nginx/nginx.conf
新加一个80端口的新域名跳转,同时增加最大包Size限制的配置client_max_body_size
1 2 3 4 5 6 7 8 9 10 11 12 13 server{ listen 80; server_name upm.xxx.com; index index.php index.html index.htm; # 注意这里一定要加一个限制,不然在使用域名发布包的时候会碰到MaxSize的限制 client_max_body_size 100M; location / { proxy_pass http://127.0.0.1:4873; # 转发到verdaccio proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
之后
1 2 sudo nginx -t # 检查配置是否正确 sudo systemctl reload nginx # 重新加载配置
九、一些技巧说明 服务器管理 服务器可以使用Docker进行安装verdaccio,这样会让服务器轻量级一些
同时,可以为UPM单独创建一个服务器的用户,用于运行verdaccio
版本管理 一般来说,对于一个通用的包,我们获取的时候他可能是Version 1.2.3
类似,但我们在修改之后,放到自己的服务器上的时候,如果再修改版本号,可能导致更新的时候,找不到原来的版本号,所以一般来说,我们可以在最后位使用多位版本号X1000,比如第一次修改,则版本号定义为1.2.3001
,第二次修改定义版本号为1.2.3002,如果我们更新了整个包的大版本,比如现在更新为
Version 1.2.4,则我们在合并到当前修改版本后, 可以在
1.2.4的基础上再上升级,比如
1.2.4001`
这样处理会为以后版本升级提供一些方便,仅供参考
用户管理 一般一个公司或者一个小组可以使用同一个用户,在注册用户后,再在配置文件中限制用户注册,或者在配置文件中再配置用户权限等,比如可以让程序进行发布,但是对于美术来说,不让他使用发布功能。
包名处理 包名为了区分,可能增加自己公司或者小组名或者其它的前缀,比如com.xxx.packageName
,或者在前面增加下划线等前缀
(1)用于区分自定义包
(2)区分所有者
九、引用参考 Unity 自定义PackageManager服务器 - 知乎 (zhihu.com)
使用高大上的pm2代替forever部署nodejs项目 - 简书 (jianshu.com)
(47条消息) 私有NPM库Verdaccio的使用手册_棋子大叔的博客-CSDN博客_verdaccio 用户管理
企业私有 NPM 搭建及使用 - 知乎 (zhihu.com)
CentOS8 安装Node.js最新版 | 一只大菜狗 (cai.dog)
Unity - Manual: Assembly definitions (unity3d.com)