好几年前,我 fork 了一个项目(https://github.com/Jeff-Tian/keycloak-heroku)并做了一些修改,将 Keycloak 适配到了 Heroku 的免费 Dyno 上,并添加了一键部署按钮。但是,如《Free Arch: Bye-bye to Heroku》所述,Heroku 不再免费。现在这个仓库,仍然可以一键部署到 Heroku 上,但是,可能产生费用。做为免费架构的拥趸,我必须找一个替代方案。
(资料图)
如果你看过我前面的文章,没错,是熟悉的味道:《免费架构:Heroku 不免费了,何去何从之 eggjs 的容器化部署之路》。
本文将参考上文,对 jeff-tian/keycloak-heroku 项目做一个改造,将它部署到 Okteto。
在线演示原来的 Heroku 站点是: https://keycloak.jiwai.win ,本来这个站点可以一直访问,Heroku 取消免费之后,我就将 Free Dyno 改成了最便宜的共享 Dyno,一个月 5 美元,但是每月有访问限额。如今只在月初可以访问,这个额度一旦用完就访问不了了。
替代方案部署在 Okteto,域名是: https://keycloak-jeff-tian.cloud.okteto.net/。
容器化要部署到 Okteto 以及任何一个 k8s 集群,第一步是需要将应用容器化。我看了一下,原来我已经将 keycloak-heroku 项目容器化了,只是一直没有部署到 k8s 环境里。
本地运行之前容器化后,只在本地以 docker compose up的方式运行,然后打开 http://localhost:8080 。
如今要部署到集群,正好可以重用。
Dockerfile项目里已经写好了 Dockerfile,只是文件名叫 Dockerfile.test:
FROM quay.io/keycloak/keycloak:latestCOPY idps/wechat-mobile/keycloak-services-social-weixin.jar \/opt/keycloak/providers/COPY idps/wechat-mobile/templates/realm-identity-provider-weixin-ext.html \/opt/keycloak/themes/base/admin/resources/partialsCOPY idps/wechat-mobile/templates/realm-identity-provider-weixin.html \/opt/keycloak/themes/base/admin/resources/partialsCOPY idps/wecom/keycloak-services-social-wechat-work.jar \/opt/keycloak/providers/COPY idps/wecom/templates/realm-identity-provider-wechat-work.html \/opt/keycloak/themes/base/admin/resources/partialsCOPY idps/wecom/templates/realm-identity-provider-wechat-work-ext.html \/opt/keycloak/themes/base/admin/resources/partialsCMD ["start-dev", "--hostname-strict=false"]打包脚本
要容器化打包,可以写个脚本来完成:
docker build -f Dockerfile.test -t jefftian/keycloak:"$1" .docker imagesdocker run --network host -e CI=true -d -p 127.0.0.1:8080:8080 --name keycloak:"$1" jefftian/keycloakdocker ps | grep -q keycloakdocker ps -aqf "name=keycloak$"docker push jefftian/keycloak:"$1"docker logs $(docker ps -aqf name=keycloak$)curl localhost:8080 || docker logs $(docker ps -aqf name=keycloak$)docker kill keycloak || echo "keycloak killed"docker rm keycloak || echo "keycloak removed"
注意它接收一个参数,用来做容器的标记:
SOPS由于要将项目跑起来,需要一些秘密数据,想将它们纳入代码管理,但又不想明文展示出来,那就可以利用 SOPS 了。详情可以参考上文《免费架构:Heroku 不免费了,何去何从之 eggjs 的容器化部署之路》,以及《加密 Kubernetes 集群中的敏感信息》。
配置 GitHub Action Secrets参考上文,在最终的 CICD 脚本中需要用到一些密码数据:
配置 CICD 流水线先准备一些 k8s 声明文件详见项目的 k8s 文件夹,有 secrets.yaml、deployments.yaml、service.yaml 以及 kustomization.yaml 文件。
准备 github workflow这个文件内容如下:
# This workflow will do a clean installation of node dependencies, build the source code and run tests across different versions of node# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actionsname: CICDon:push:branches: [ master ]pull_request:branches: [ master ]schedule:- cron: "0 */12 * * *"jobs:build-docker-image:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- run: echo "${{secrets.DOCKER_PASSWORD}}" | docker login -u "${{secrets.DOCKER_USERNAME}}" --password-stdin- run: git_hash=$(git rev-parse ${{ github.sha }})- run: sh .github/dockerize.sh ${{ github.sha }}deploy-okteto:runs-on: ubuntu-latestneeds: build-docker-imagesteps:- uses: actions/checkout@v3- run: mkdir ${HOME}/.aws- run: echo -e "[lambda-doc-rotary]\naws_access_key_id = ${{secrets.AWS_ACCESS_KEY}}\naws_secret_access_key = ${{secrets.AWS_SECRET_KEY}}\n" > ~/.aws/config- run: wget https://github.com/mozilla/sops/releases/download/v3.7.3/sops-v3.7.3.linux.amd64- run: sudo cp sops-v3.7.3.linux.amd64 /usr/local/bin/sops- run: sudo chmod +x /usr/local/bin/sops- run: curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl- run: chmod +x ./kubectl- run: sudo mv ./kubectl /usr/local/bin/kubectl- run: mkdir ${HOME}/.kube- run: npm i -g k8ss- run: echo -e "machine github.com\n login ${{secrets.GH_TOKEN}}" > ~/.netrc- run: git clone https://github.com/Jeff-Tian/k8s-config.git ${HOME}/k8s-config- run: k8ss switch --cluster=okteto --namespace=jeff-tian- run: sops -d k8s/secrets.yaml --aws-profile lambda-doc-rotary | kubectl apply -f -- run: kubectl apply -k k8s- run: kubectl set image deployment keycloak keycloak=jefftian/keycloak:${{ github.sha }}
这个流水线的效果如下图:
完成: 部署到 Okteto部署到 Okteto 后:
打开自动分配的网址:
总结耶!我们又重新拥有了属于自己的免费的 Keycloak 实例!
标签:
前情提要好几年前,我fork了一个项目(https: github com Jeff-Tian keycloak-heroku)并做了一些修改,将Key
1、明教第一代教主是方腊,宋朝时方腊在浙东起事、震动天下,虽然最终殉难身死,却终是轰轰烈烈的干了一番事业。2、明教是金庸
(经济)加拿大央行宣布维持基准利率不变,加息,基准利率,货币政策,加拿大银行,加拿大央行,通货膨胀率
1、不是成语。2、不管三七二十一[bùguǎnsānqīèrshíyī]【解释】:不顾一切,不问是非情由
1、似乎是没有的。2、只能自己慢慢攒钱或者充值金卡兑换成金币。本文到此分享完毕,希望对大家有所帮助。
天娱数科3月8日在互动平台表示,公司持续关注ChatGPT0动态,公司「MetaSurfing-元享智能云平台」具备接
步骤:1、填写《营业性射击场审批登记表》。2、射击运动场四邻图,平面图。3、申请单位枪弹管理制度及书面请示。4、枪弹库结构图及说明。5、枪
为庆祝“三八”国际妇女节,漯河市召陵区开展了系列活动。3月7日上午,召陵区妇联举行“三八”国际劳动妇女节表彰大会。隆重表彰33名召陵区...
1、蒸发皿是可用于蒸发浓缩溶液的器皿。2、可在三脚架上直接加热,也可用石棉网、水浴等间接加热,加热时,可用玻璃棒搅拌。文
1、单位同意报考证明要具备以下几点:文本中间位置打上:同意报考证明2、写上自己的基本信息:姓名、性别、身份证号、工作时间
1、安徽梅泽建筑工程有限责任公司于2018年07月02日成立。2、法定代表人张有志,公司经营范围包括:建筑工程、市政
1、行程单是《航空运输电子客票行程单》由国家税务总局监制并按照纳入税务机关发票管理,机票行程单正式上线是旅客购买国内航空
2023宜昌马拉松经过哪些地方?比赛线路如下:马拉松线路:和平公园(起点)→沿江大道→中建之星(地面道路通行)→沿江大道→柏临河路路口(左折返
1、进入手机设置,方式有点击手机功能键,也可以在手机找到一个如图的设置图标。点击进入手机设置;2、在设置里有很多选项,可能新手会看晕,
夜色中,走进芝罘区环山路139号院,咖啡、茶室、日料、西餐、川菜琳琅满目。随意走进一家主题餐厅,纯工业风的装修,桌椅板凳、茶碟杯筷独具一
1、朝鲜领导人金正日一生一共七次访华。2、分别是在2000年、2001年、2004年、2006年、2010年、2010年
1、不同性别肌酐正常上限不同。2、一般女性的肌酐正常上限约为90-110微摩尔 升,男性约为110-130微摩尔 升。3
全球首个浸没式液冷储能电站在广东投入运行
邓小可准备去爱琴海旅游,此时沈画约见了她,隔天邓小可坐上了飞往爱琴海的飞机,此时郑海潮忽然出现,当场向邓小可说对不起,邓小可原谅了郑
双鸭山市气象台发布暴雪蓝色预警【IV级 一般】【2023-03-07】
1、噬月玄帝,单机游戏《古剑奇谭:琴心剑魄今何在》角色之一。2、本是狼妖,修行已久,却极少与人打交道。3、被道渊真人镇压
1、倒八板是个民间乐曲呀。2、《倒八板》是《老六板》的变体,它将《老六板》的尾部加以变化发展,并作为乐曲的开始,故名《
不仅仅是你Twitter出现故障,这不是一个好兆头。至于出了什么问题,当时还不得而知,但看起来人们在美国东部时间上午
1、第一步:在浏览器搜索火车票官网,然后点击“铁路客服服务中心”;2、第二步:进入这个app之后点击“购票”;3、第三步:然后会出现一个...
(本文为钛媒体Pro(专业版)用户专享)「钛媒体Pro周报」通过钛媒体TMTBase全球一级市场数据库,汇总国内外一周投
1、葱切段,姜切片备用,做好鲫鱼池。2、炸鱼。锅里倒一点花生油,一定要有一点,不然就变成炸鱼了。油热了,放入两三片姜,在
3月7日,隔夜SHIBOR报1 4360%,上涨20 50个基点;7天SHIBOR报1 8730%,上涨5 70个基点;3个月SHIBOR报2 4760%,上涨
除了越来越多关于睡眠障碍和认知障碍的证据外,新的研究还发现睡眠障碍的三种衡量标准与10年内患痴呆症的风险之间存在重要
1、 。文章到此就分享结束,希望对大家有所帮助。
欢迎观看本篇文章,小升来为大家解答以上问题。现在有什么游戏好玩,国内现在哪些游戏比较好玩很多人还不知道,现在让我们一起来
Copyright © 2015-2022 时代服装网版权所有 备案号: 联系邮箱: 514 676 113@qq.com