kong+Verdaccio+ldap(docker)

需求

使用Kong来代理Verdaccio,实现直接通过域名+path的方式来访问,并且Verdaccio使用ldap来管理

前提

Kong+ldap已部署好,并且也部署好了Kong Dashboard 。(后面有需求再写关于Kong代理的各种设置)

搭建过程

思路:为了实现数据安全,保证高可用性,先正常启动一遍Verdaccio,把需要挂载的目录docker cp 到本地先,移除之前的容器,通过挂载目录的方式再已启动一遍,通过修改外部的配置文件+重启容器来实现我们需要的功能

–第一次启动容器

docker run -d --name verdaccio -p 4873:4873 --restart always  verdaccio/verdaccio

然后我是把/verdaccio这个目录下的3个文件都复制出来(conf当的是配置文件,plugins是插件,storage上传的包)
在这里插入图片描述
然后rm掉容器,通过挂载的方式再启动一遍

docker run -d \
--name verdaccio \
--network host \
--restart always \
--volume /sfere/verdaccio/conf:/verdaccio/conf \
--volume /sfere/verdaccio/plugins:/verdaccio/plugins \
--volume /sfere/verdaccio/storage:/verdaccio/storage \
verdaccio/verdaccio
  1. 首先先实现与ldap的集成
    Verdaccio是有现成的插件可以用的,npm库里面直接可以找到,这边直接贴上url
    https://www.npmjs.com/package/verdaccio-ldap
    按照官方给的文档,我们先进入到容器中安装ldap的插件

    npm install verdaccio-ldap
    

    注意:
    下载好直接,需要再运行下 命令npm i 把依赖包都下载下来,这个官方文档上没说,如果不下载的话,在加载ldap插件的时候Verdaccio会报错,找不到很多模块,一个个去下肯定不现实

    接下来修改Verdaccio配置文件(config.yaml)中的 auth部分
    在这里插入图片描述
    到这一步,与ldap的集成是可以了,等Kong的代理设置好之后一起验证

  2. 设置Kong的代理
    其实在设置Kong的代理的时候,难点不是在于如何去设置server和route,而是代理会导致Verdaccio本身很多请求路径的改变,导致很多资源not found(我的Kong改过端口,监听8090)
    在这里插入图片描述
    在这里插入图片描述
    路由中勾选丢弃Path

    然后这时候你访问你Verdaccio的地址,界面都出不来,然后你F12打开会看到很多静态资源找不到。一般正常时候的做法,会为这些静态资源再去做路由,但是Verdaccio比较特殊,你即使为它做了所需的所有路由,有些关键api它还是会找不到。最后参考https://github.com/verdaccio/verdaccio/issues/1112 ,在Verdaccio的配置文件中直接固定好请求的前半部部分,同时注意,我在配置文件中额外加了一段配置 max_body_size: 1000mb ,这个是控制npm 上传包时候的大小,如果不添加,默认值是很小的,上传的时候超过限额会报错。
    在这里插入图片描述
    然后配置文件剩下的部分(上游地址,上传下载权限等)根据情况自定义吧。这时候你再保存配置文件,重启Verdaccio的容器,在日志中可以发现,已加载ldap插件,而且可以正常访问web页面,使用ldap账户登陆
    在这里插入图片描述

  3. 测试上传下载
    切换到本地PC机上,打开类cmd工具,设置默认仓库地址,先试试npm login,这时候可以使用-d参数,打印出过程 .登陆账密和邮箱,然后使用npm whoami 验证是否登陆成功

    npm set registry https://xx.xxx.com:8090/npm
    npm login -d
    npm whoami -d
    

    在这里插入图片描述
    接下来测试上传代码 npm publish
    如果按照我一样,是把Verdaccio中那3个目录都挂载出来的挂,是会报错的,提示找不到你上传的包,具体可以参考下面的url
    https://github.com/verdaccio/verdaccio/issues/483
    这个问题也折腾了我好久,百度半天都没用,还是在项目中的问题提交处找到一个类似情况,查比较偏的问题还是建议大家多google和逛github。其实就是 存储包的 storage 权限问题导致的,为了方便我就直接777了

    chmod -R 777 storage 
    

    这时候再publish就没问题了

    然后第二个坑的来了,npm install 下载我们刚刚上传的包。如果你的项目比较大,那肯定会报错 “504 Gateway Time-out”
    在这里插入图片描述
    这个问题其实百一下就知道了,是nginx的默认限制太小,导致的
    参考url:https://www.cnblogs.com/youn/p/5345506.html

    那我们直接去改kong里面nginx的配置即可

    vi /usr/local/kong/nginx-kong.conf
    

    在这里插入图片描述
    重载nginx

    /usr/local/openresty/nginx/sbin/nginx  -s reload -p /usr/local/kong -c nginx.conf
    

    最后就可以正常下载了。整个流程就打通了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值