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