5566中文字幕一区二区电影_国产精品亚洲一区二区三区_亚洲精品国产精品乱码不99按摩 _国产精品美女久久久久av爽李琼_久久亚洲综合色一区二区三区_疯狂蹂躏欧美一区二区精品_日韩h在线观看_亚洲欧美日韩中文视频_国产精品日韩欧美综合_中日韩av电影

您的位置:首頁 > 要聞 > 正文

世界動(dòng)態(tài):【免費(fèi)架構(gòu)】Heroku 不免費(fèi)了,何去何從之 Keycloak 的容器化部署之路

前情提要

好幾年前,我 fork 了一個(gè)項(xiàng)目(https://github.com/Jeff-Tian/keycloak-heroku)并做了一些修改,將 Keycloak 適配到了 Heroku 的免費(fèi) Dyno 上,并添加了一鍵部署按鈕。但是,如《Free Arch: Bye-bye to Heroku》所述,Heroku 不再免費(fèi)。現(xiàn)在這個(gè)倉庫,仍然可以一鍵部署到 Heroku 上,但是,可能產(chǎn)生費(fèi)用。做為免費(fèi)架構(gòu)的擁躉,我必須找一個(gè)替代方案。

如果你看過我前面的文章,沒錯(cuò),是熟悉的味道:《免費(fèi)架構(gòu):Heroku 不免費(fèi)了,何去何從之 eggjs 的容器化部署之路》。


(資料圖片僅供參考)

本文將參考上文,對(duì) jeff-tian/keycloak-heroku 項(xiàng)目做一個(gè)改造,將它部署到 Okteto。

在線演示

原來的 Heroku 站點(diǎn)是: https://keycloak.jiwai.win ,本來這個(gè)站點(diǎn)可以一直訪問,Heroku 取消免費(fèi)之后,我就將 Free Dyno 改成了最便宜的共享 Dyno,一個(gè)月 5 美元,但是每月有訪問限額。如今只在月初可以訪問,這個(gè)額度一旦用完就訪問不了了。

替代方案部署在 Okteto,域名是: https://keycloak-jeff-tian.cloud.okteto.net/。

容器化

要部署到 Okteto 以及任何一個(gè) k8s 集群,第一步是需要將應(yīng)用容器化。我看了一下,原來我已經(jīng)將 keycloak-heroku 項(xiàng)目容器化了,只是一直沒有部署到 k8s 環(huán)境里。

本地運(yùn)行

之前容器化后,只在本地以 docker compose up的方式運(yùn)行,然后打開 http://localhost:8080 。

如今要部署到集群,正好可以重用。

Dockerfile

項(xiàng)目里已經(jīng)寫好了 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"]

打包腳本

要容器化打包,可以寫個(gè)腳本來完成:

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"

注意它接收一個(gè)參數(shù),用來做容器的標(biāo)記:

SOPS

由于要將項(xiàng)目跑起來,需要一些秘密數(shù)據(jù),想將它們納入代碼管理,但又不想明文展示出來,那就可以利用 SOPS 了。詳情可以參考上文《免費(fèi)架構(gòu):Heroku 不免費(fèi)了,何去何從之 eggjs 的容器化部署之路》,以及《加密 Kubernetes 集群中的敏感信息》。

配置 GitHub Action Secrets

參考上文,在最終的 CICD 腳本中需要用到一些密碼數(shù)據(jù):

配置 CICD 流水線先準(zhǔn)備一些 k8s 聲明文件

詳見項(xiàng)目的 k8s 文件夾,有 secrets.yaml、deployments.yaml、service.yaml 以及 kustomization.yaml 文件。

準(zhǔn)備 github workflow

這個(gè)文件內(nèi)容如下:

# 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 }}

這個(gè)流水線的效果如下圖:

完成: 部署到 Okteto

部署到 Okteto 后:

打開自動(dòng)分配的網(wǎng)址:

總結(jié)

耶!我們又重新?lián)碛辛藢儆谧约旱拿赓M(fèi)的 Keycloak 實(shí)例!

關(guān)鍵詞:

5566中文字幕一区二区电影_国产精品亚洲一区二区三区_亚洲精品国产精品乱码不99按摩 _国产精品美女久久久久av爽李琼_久久亚洲综合色一区二区三区_疯狂蹂躏欧美一区二区精品_日韩h在线观看_亚洲欧美日韩中文视频_国产精品日韩欧美综合_中日韩av电影
欧美影院一区二区| 亚洲成人av免费| 欧美裸体bbwbbwbbw| 欧美老肥妇做.爰bbww视频| 欧美日韩精品一区二区三区蜜桃| 日韩三级免费观看| 亚洲h在线观看| 欧美蜜桃一区二区三区| 亚洲乱码一区二区三区在线观看| 日韩av二区在线播放| 精品制服美女丁香| 看电视剧不卡顿的网站| 67194成人在线观看| 国产精品毛片久久久久久| 国产一区二区三区精品欧美日韩一区二区三区 | 国产精品456露脸| 欧美亚州韩日在线看免费版国语版 | 国产成人免费在线观看不卡| 波多野结衣中文字幕一区| 精品国产凹凸成av人网站| 中文字幕欧美日韩一区| 久久精品99国产精品| 精品精品国产高清a毛片牛牛| 麻豆国产欧美日韩综合精品二区 | 丰满少妇久久久久久久| 国产精品伦理在线| 亚洲欧美日本韩国| 欧美另类z0zxhd电影| 亚洲裸体在线观看| 国产一区 二区| 国产精品久久久久久亚洲伦| 国产精品一区一区| 日韩高清电影一区| 亚洲综合在线免费观看| 精品久久久久久无| 成人精品国产免费网站| 日韩经典中文字幕一区| 亚洲欧洲三级电影| 日韩欧美精品在线| 国内精品视频一区二区三区八戒| 亚洲日本va在线观看| 色综合欧美在线| 高清不卡一区二区在线| 夜夜嗨av一区二区三区中文字幕 | 亚洲成在人线免费| 亚洲国产日韩一区二区| 国产欧美一区二区精品久导航 | 免费欧美在线视频| 国产精品不卡一区| 一区二区三区高清在线| 欧美日韩不卡一区二区| 国产精品综合久久| 欧美极品aⅴ影院| 另类小说一区二区三区| 国产一区二区91| 久久精品久久精品| 亚洲日穴在线视频| 91精品国产综合久久久蜜臀图片| 欧美综合在线视频| 欧美xxxxxxxx| 亚洲日本在线a| 日韩vs国产vs欧美| 成人免费毛片嘿嘿连载视频| 色视频成人在线观看免| 欧美一卡二卡三卡四卡| 中文字幕乱码久久午夜不卡| 青青草国产成人av片免费| 精品国产一区二区精华| 欧美高清精品3d| 欧美日韩国产综合视频在线观看 | 亚洲美女精品一区| 亚洲图片欧美综合| 9i看片成人免费高清| 国产九色sp调教91| 国内精品嫩模私拍在线| 经典一区二区三区| 国产一区二区视频在线播放| 午夜av一区二区| 国内精品伊人久久久久影院对白| 国产高清久久久久| 欧美日韩国产另类一区| 中文字幕欧美三区| 中文字幕精品—区二区四季| 久久你懂得1024| 日韩免费高清电影| 欧美高清激情brazzers| 日韩久久精品一区| 亚洲欧洲日产国产综合网| 欧美激情一区二区三区不卡| 久久国产精品无码网站| 粉嫩一区二区三区在线看| 久久综合九色综合97婷婷女人| 亚洲自拍另类综合| 欧美群妇大交群的观看方式| 亚洲免费av高清| 一本一道波多野结衣一区二区 | 欧美最新大片在线看| 欧美激情一区二区三区在线| 欧美日韩精品一区二区| 首页国产欧美久久| 国产亚洲一本大道中文在线| 蜜桃视频一区二区| 最新热久久免费视频| 人人精品人人爱| 中文字幕一区av| 亚瑟在线精品视频| 国产91对白在线观看九色| 91精品午夜视频| 欧美老肥妇做.爰bbww视频| 色一情一伦一子一伦一区| 欧美成人综合网站| 奇米一区二区三区av| 成人性生交大片免费看中文网站| 欧美日韩在线播放一区| 久久久精品人体av艺术| 亚洲欧洲日韩一区二区三区| 日本国产一区二区| 免费成人在线视频观看| 国产欧美精品区一区二区三区| 91在线精品一区二区三区| 久久激情综合网| 日本一区二区成人| 欧美日韩成人激情| 一本色道久久综合亚洲aⅴ蜜桃| 午夜视频在线观看一区二区 | 毛片一区二区三区| 经典三级一区二区| 一区二区三区高清不卡| 精品美女一区二区| 99精品国产热久久91蜜凸| 精品国产乱码久久久久久1区2区| 成人激情免费网站| 国产精品影视在线观看| 精品亚洲国产成人av制服丝袜 | 国产69精品一区二区亚洲孕妇 | 青青青伊人色综合久久| 欧美电影在哪看比较好| 国产亚洲欧美日韩在线一区| 亚洲丶国产丶欧美一区二区三区| 欧美不卡123| 日韩精品一区二区三区视频在线观看| 欧美大胆人体bbbb| 亚洲 欧美综合在线网络| 51精品久久久久久久蜜臀| 国产精品一区免费在线观看| 欧美aaa在线| 色诱视频网站一区| 欧美日韩免费视频| 美女国产一区二区三区| 国内精品免费在线观看| 日韩精品一级二级 | 午夜视频久久久久久| 久久久高清一区二区三区| 在线免费观看成人短视频| 欧美亚洲动漫制服丝袜| 精品久久久久av影院| 精品国产91亚洲一区二区三区婷婷| 日韩你懂的在线观看| 久久久精品蜜桃| 亚洲不卡在线观看| 国产精品麻豆视频| 一本一道久久a久久精品综合蜜臀| 国产一区二区三区在线观看免费视频| 久久99在线观看| 日本一区二区三区四区在线视频 | 欧美国产成人在线| 亚洲一级电影视频| 91精品视频网| 国产精品美女久久久久久久久| 免费观看久久久4p| 久久爱www久久做| 中文字幕欧美日韩一区| 91欧美一区二区| 中文字幕av资源一区| 精品一区二区三区在线观看| 成人欧美一区二区三区| 国产成人免费在线视频| 国产精品亚洲综合一区在线观看| 7777精品伊人久久久大香线蕉最新版 | 色婷婷香蕉在线一区二区| 国产三级精品三级在线专区| 欧美日韩国产精品成人| 日韩av电影天堂| 91网站视频在线观看| 亚洲欧美一区二区不卡| 色呦呦国产精品| 国模套图日韩精品一区二区| 国产麻豆午夜三级精品| 成人免费一区二区三区在线观看| 一本色道久久综合亚洲91| 久久精品一区二区三区不卡牛牛| 国产成人鲁色资源国产91色综| 免费观看30秒视频久久| 中文字幕在线免费不卡| 日韩av中文在线观看| 精品区一区二区| 日韩视频国产视频| 国产精品久久久久精k8| 欧美在线观看视频一区二区| 精品一区二区在线看|