Free Arch: 将 IdentityServer 部署到 Okteto
来源:    时间:2022-12-19 16:44:59
最终成果

部署了一个免费的 IdentityServer 实例: https://id6-jeff-tian.cloud.okteto.net/


(资料图)

相关代码提交

一共 3 个,以这个为主:

https://github.com/Jeff-Tian/IdentityServer/commit/b40e6c6f8e4193ef459ab558a102f84442b3cede

前情提要

早在《身份验证哪家强?Identity Server 初体验》中,就部署了一个免费的 IdentityServer 实例,托管在 Azure 上: https://id6.azurewebsites.net/。

后来,我宣称 Free Arch 要狡兔三窟,多处部署:《Free Arch: 狡兔三窟,多处部署》。今天,就来给 IdentityServer 这个实例,添加一个分身,从此不局限于 Azure 平台。就详述一下部署将它部署到 Okteto 的步骤。由于采用了 OAM,不需要太多工作,就能参考前文,将它部署到 Napptive 等任何 Kubernetes 集群里。

第一步,容器化

这是一个 ASP.NET Core 项目,从官方的开源仓库 fork 过来后做了一些魔改,源代码在: https://github.com/Jeff-Tian/IdentityServer。其 Dockerfile 如下:

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS baseWORKDIR /appEXPOSE 5000EXPOSE 5001FROM mcr.microsoft.com/dotnet/sdk:6.0 AS buildWORKDIR /srcCOPY . .RUN dotnet restore "hosts/main/Host.Main.csproj"RUN dotnet build hosts/main/Host.Main.csproj -c Release -o /app/buildFROM build AS publishRUN dotnet publish hosts/main/Host.Main.csproj -c Release -o /app/publishFROM base AS finalWORKDIR /appCOPY --from=publish /app/publish .ENTRYPOINT ["dotnet", "Host.Main.dll"]

第二步,构建镜像并上传至 Docker Registry

为了能够自动在 github actions 的 cicd 过程中自动进行这一步,我们把手动执行的命令放在一个文件里: .github/ci.sh。这一步的提交见:

https://github.com/Jeff-Tian/IdentityServer/commit/3db4235f5e091cda1d2752a8f61df5a9fddbd2b4。

docker build -t jefftian/id6 .docker imagesdocker run --network host -e CI=true -d -p 127.0.0.1:5000:5000 --name id6 jefftian/id6docker ps | grep -q id6docker ps -aqf "name=id6"docker push jefftian/id6docker logs $(docker ps -aqf "name=id6$")curl localhost:5000 || docker logs $(docker ps -aqf "name=id6$")docker kill id6 || echo "id6 killed"docker rm id6 || echo "id6 removed"

第三步,准备数据库

本 IdentityServer 使用了 PostgreSQL 数据库。如何拥有一个免费的 PostgreSQL 数据库服务?如果喜欢自己部署,仍然可以利用 Okteto,参考:《Free Arch: 在 Okteto 上部署 backstage (第一部分: PostgreSQL)》。

当然,也可以使用别人部署好的免费 PostgreSQL 服务,比如 app.nhost.io 提供的服务就不错。

为了验证数据库连接正常,本 IdenityServer 只是连接了数据库,并且执行了一个空的 EF Migration,在本地使用 docker compose 验证了成功执行了 Migration:

这个 docker compose 文件如下:

version: "3"services:postgres:image: "postgres"ports:- "5432:5432"environment:POSTGRES_DB: id6POSTGRES_USER: postgresPOSTGRES_PASSWORD: nopwdvolumes:- pg:/var/lib/postgresql/dataadminer:image: library/adminer:latestrestart: alwaysports:- 7777:8080volumes:pg: ~

由于依赖了数据库,在本地运行本 IdentityServer 实例,需要:

docker compose up -ddotnet run --project hosts/main/Host.Main.csproj

最终部署后,它会在线上的数据库里也创建出一个 __EFMigrationHistory 表,如果是使用了 app.nhost.io 的服务,可以使用其提供的 Hasura 验证:

第四步,加密敏感信息

这就是前面提到的主要的提交。再一次使用了 SOPS,对 SOPS 步骤的详细介绍参考《[Free Arch: 在 Okteto 上部署 backstage(第二部分) - Jeff Tian的文章 - 知乎 ](https://zhuanlan.zhihu.com/p/590640020) 》。要使用它,需要在项目根目录添加一个 .sops.yaml文件:

creation_rules:# If assuming roles for another account use "arn+role_arn".# See Advanced usage- path_regex: k8s\/app\/secrets\.yaml$kms: "arn:aws:kms:us-east-1:443862765029:key/b1739688-ec15-407d-895d-d05ca1217a2f"aws_profile: lambda-doc-rotary

在 k8s/app/secrets.yaml添加数据库连接信息:

apiVersion: v1kind: Secretmetadata:name: id6labels:branch: maintype: OpaquestringData:DatabaseHost: xxxDatabasePort: "5432"DatabaseUser: postgresDatabasePassword: yyyDatabaseName: zzz

第五步,添加 k8s 相关的描述文件

这一步,基本上和《[Free Arch: 在 Okteto 上部署 backstage(第二部分) - Jeff Tian的文章 - 知乎](https://zhuanlan.zhihu.com/p/590640020) 》相同。一个显著不同的是在开启 Ingress 这里,这次没有使用自动 Ingress,而是专门添加了一个 Ingress.yaml 描述文件:

apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: id6annotations:dev.okteto.com/generate-host: id6spec:rules:- http:paths:- backend:service:name: id6port:number: 80path: /pathType: ImplementationSpecific

这一点在那篇文章有提及,但这次算是真的补上了这个公开示例。

相比上文,其他的改进点在 deployment.yaml 文件中添加了 replicas,并指定了 2,使得同时有 2 个 pod 运行。

其他文件略过,在此不表。最终需要在 .github/workflows 文件夹下添加一个 cicd 的描述文件:

name: cicdon:push:branches: [ "main" ]pull_request:branches: [ "main" ]schedule:- cron: "0 */12 * * *"jobs:deploy-okteto:runs-on: ubuntu-latestneeds: buildsteps:- uses: actions/checkout@v3- 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&&mkdir ${HOME}/.aws- run: npm i -g k8ss- run: echo -e "machine github.com\n  login ${{secrets.GH_TOKEN}}" > ~/.netrc- 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: 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/app/secrets.yaml --aws-profile lambda-doc-rotary | kubectl apply -f -- run: kubectl apply -k k8s/app&&kubectl rollout restart deploy id6build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- run: echo "${{secrets.DOCKER_PASSWORD}}" | docker login -u "${{secrets.DOCKER_USERNAME}}" --password-stdin- run: sh .github/ci.sh

注意在这个文件里,依赖了多个环境变量,这需要添加在 github 代码仓库的 secrets 里:

第六步,没有第六步了!

提交代码,等待 Actions 跑完:

IdentityServer 的第二个分身上线了!

上一篇:

下一篇:

X 关闭

推荐内容

  • Free Arch: 将 IdentityServer 部署到 Okteto
  • 开山控股:开山国内首台套离心式双介质气体组合机进入高端市场
  • 【聚看点】小期贷借款逾期43年不还会影响征信吗
  • 放心借逾期8个月会上征信吗?
  • 【世界新要闻】V观财报|披露内容与事实不符 金财互联及董秘被出具警示函
  • 当前关注:今日保健品价格表(保健品价格查询)
  • 世界即时看!2023年FRM在哪里报名?有什么样的报名流程?
  • ST新城:土地挂牌交易在铁岭市自然资源交易网,按照土地招拍挂流程,挂牌报价截止时间为12月20日
  • 当前快报:怀孕试用期被辞退如何进行赔偿
  • 环球最资讯丨三维股份: 2022-099+三维控股集团股份有限公司2022年年度业绩预增公告
  • 宝钢股份:公司煤焦采购以大矿长协为主,同时还有进口煤及市场采购
  • 天天关注:【REIT资讯】12.15中证REITs指数将于12月15日正式发布
  • 天天快播:中富通(300560)12月14日主力资金净买入1364.22万元
  • 速读:盈康生命:12月13日融券卖出金额17.59万元,占当日流出金额的0.36%
  • 全球微速讯:上海商场不扫码第一天 客流不升反降?
  • 每日头条!康缘药业:多个独家产品列入指引并积极备货
  • 焦点播报:帮朋友代驾开车遭遇交通事故谁负责
  • 看点:《绝地追击》首曝预告 高至霆演绎武警酷帅有型
  • 世界热议:我乐家居董秘回复:现阶段公司部分产品使用LSB板,但占比不大
  • 楚天高速董秘回复:上市公司股票价格受市场环境等多种因素影响,股价高低并不能实时反映公司价值
  • 当前快报:展望2023年 戴尔科技CTO给CIO们四点新年建议
  • 全球播报:苹果放弃生产“L5级”全自动驾驶汽车 推迟目标推出日期至2026年
  • 山东省庆云县气象局将高温橙色升级为高温红色预警信号
  • 山东省庆云县气象局将高温橙色升级为高温红色预警信号
  • 中科院青藏高原所建成雅鲁藏布江流域多圈层水文监测网
  • 三江源腹地玛沁多措施保障黄河流域生态安全
  • 浙江台州天台县集中隔离点发现2例阳性
  • 天津中小学今日恢复线下教学
  • 北京:社区周边市场供应充足,蔬菜水果十分新鲜
  • 31省份累计报告接种新冠病毒疫苗333177.1万剂次
  • 北京市昌平区两地实施管控措施
  • 一季度北京降尘量同比下降超50% 将加强控制“二次扬尘”
  • 疫情之下 研招“云复试”
  • 每天两次送饭上门 免费社区团餐让900多位老人“吃好饭”
  • 北京房山一褡裢火烧店已至少关联8名感染者 去过请立即报告
  • 内蒙古自治区满洲里市所有居民开展第三轮区域核酸检测
  • 北京昌平发现1名核酸检测阳性人员 行程轨迹公布
  • 上海嘉定一单位厂房发生火灾 火势已被扑灭无人员伤亡
  • 广福日记·8户11人丨最终记:10+1
  • 北京:凌晨补货,量足价稳!昨晚超市空置的货架又被填满了
  • 河南多地取消今年中招体育和理化生实验考试
  • 大藤峡水利枢纽通过挡水验收 今年汛期将开启防洪运用
  • 4月25日12时起 河南终止省级防汛Ⅳ级应急响应
  • 续写春天的故事丨乌兰牧骑续新篇
  • 海报丨坚守,在楼宇方舱
  • 【挑战365天正能量速写画】第146期:90岁奶奶变“刘畊宏女孩”跟跳毽子操
  • 吉林延吉四名外卖小哥一分钟救两命
  • 上海市市场监管局:利用社区团购发“疫情财”,露头就打
  • 新疆阿克苏地区沙雅县发生3.9级地震 震源深度10千米
  • 这个春天,复旦园向阳而生,安然如斯
  • 北京朝阳区部分区域提升管控措施 区域内居民足不出区
  • 强降雨致严重积水 四川内江紧急转移被困人员
  • 山西太原管控区里“蔬菜兄弟”的一天
  • 北京家庭教育主题培育实践启动 发布“理想”主题童书书单
  • (上海战疫录)一线丨凝“新”聚力 上海新阶层人士同心守“沪”
  • 截至2021年底 全国累计报告职业性尘肺病患者91.5万人
  • (上海战疫录)抓获34人!上海警方严厉打击伪造买卖涉疫通行证违法犯罪
  • (上海战疫录)上海26日对封控、管控和防范区人员进行全员核酸筛查
  • 快递小哥手握通行证,却做了志愿者:总有些东西,比钱更重要
  • 湖南新增12例新冠肺炎确诊病例
  • 外国人在上海:德国女摄影师的核酸日常
  • “东北味”核酸检测贴纸“出圈” 网友:太接地气了!
  • 烟台病例基因分型为奥密克戎BA.2.3进化分支 目前国内尚未发现
  • 网友“刷量”赚取注册奖励 被判收益无效
  • 超20万人次观看 广州小提琴家奏响战“疫”乐章
  • 江苏南通崇川区:“志愿红”扛起抗疫担当
  • 辽宁沈阳:加强景区流量控制 有序恢复堂食
  • “越是困难的时候,越要与群众在一起”
  • 天津一按摩店疫情期间擅自违规营业 经营者被行拘
  • 上海“泾聚里”志愿服务车队:有任务,随叫随到
  • “自己得到了帮助,也要尽力帮助他人”
  • 乡村振兴看安徽丨“稻虾共养”让农民走上生态致富路
  • 和时间赛跑,直击上海疫情下的120医疗急救
  • 严厉打击伪造买卖涉疫通行证违法犯罪 上海警方已抓获34人
  • “疫”起守“沪” 上海这群党员教师成为社区抗疫能手
  • 千古河套建良田
  • 江西新增本土“14+116” 南昌市行程卡“摘星”
  • 校友接力为退休教师解燃眉之急:是回报老师的时候了
  • 上海:重型患者196例 危重型患者23例 新增本土死亡病例51例
  • 神舟十三号载人飞船返回舱成功着陆点燃中国西北青少年的“航天梦”
  • 南昌市第十二轮区域核酸检测发现阳性感染者1人
  • 【新闻特写】上海:同心战“疫” 守“沪”有我
  • 四川内江强降雨造成16563人受灾
  • 山东烟台:本轮疫情呈现出明显的空间聚集性 可能已经隐匿传播一段时间
  • 山东烟台病例基因分型为奥密克戎BA.2.3进化分支 目前国内尚未发现
  • 杭州一业主4000字网文记录管控期间的有序和温暖
  • 与女友争吵后将10公斤重电脑椅从15楼扔下 男子获刑
  • 遏制“低俗广告”,亟需提高违法成本
  • 太原全市开展区域核酸检测 未按时参加将被赋黄码
  • 辽宁丹东市区全面实行静态管理
  • 江苏:向抢夺方向盘、霸座等行为“亮剑”
  • 宁夏银川新增1例境外返银核酸检测阳性人员
  • 西宁14名确诊病例已出院
  • 广东新增本土确诊病例3例
  • 广西新增本土无症状感染者1例
  • 北京今日气温继续飙升 明日冷空气到来赶走“假夏天”
  • 山西新增本土确诊病例2例 新增本土无症状感染者5例
  • 河南新增本土确诊病例5例 新增本土无症状感染者18例
  • 哈尔滨市部分区域风险等级调整为中风险
  • 精彩推荐

    Copyright ©  2015-2022 太平洋卫浴网版权所有  备案号:豫ICP备2022016495号-17   联系邮箱:93 96 74 66 9@qq.com