标签: devops

Keycloak Realm VS Keycloak 客户端

我最近正在研究用于 SSO 的 Keycloak 6.0.1,以对组织中的多个应用程序进行身份验证。我对客户和领域之间的区别感到困惑。

如果我要为 SSO 管理 5 个不同的应用程序,那么我是否必须创建 5 个不同的客户端或 5 个不同的领域?

如果我说我必须在 1 个领域下创建 5 个不同的客户端,那么我可以为同一领域的不同客户端执行不同的身份验证流程吗?

keycloak devops

19
推荐指数
2
解决办法
1万
查看次数

nginx在X-RateLimit-Remaining标头中设置limit_req的剩余计数

我实际上有点惊讶,经过几个小时的谷歌搜索我找不到任何东西,但问题如下:

我想让nginx充当我的API的限制器.

我的配置文件包含一个引用得很好的示例limit_req_zone:

limit_req_zone $binary_remote_addr zone=limit:2m rate=10r/m;

以及location包含预期的指令limit_req zone=limit nodelay;

我希望将nginx附加标头添加到X-RateLimit-RemainingX-RateLimit-Reset属性的响应消息中.基本上有nginx使用相同值的rate=10r/m填充X-RateLimit-Remaining和时间帧的活动计数来填充刷新前剩余的秒数.rate=10r/mX-RateLimit-Reset

http {
    limit_req_zone $binary_remote_addr zone=login:10m rate=2r/s;
    limit_req_status 429;
    limit_conn_status 429;

    server {
        listen       80;
        server_name  [removed];

        location / {
            limit_req zone=limit nodelay;

            proxy_pass http://reverse-proxy-example;
            add_header  X-RateLimit-Remaining [nginx variable?];
            add_header  X-RateLimit-Reset [nginx variable?]
        }
}
Run Code Online (Sandbox Code Playgroud)

思考?可能?愿意避免点击应用程序来获取这些数字.

nginx server devops

18
推荐指数
1
解决办法
874
查看次数

Azure Web App(ASP.NET MVC)每十分钟变冷一次,需要加载10到20秒

我对Azure Web App有一个非常奇怪的问题,我对此感到非常沮丧.

我们的应用程序在使用时非常快速且反应灵敏,但是,如果我们不使用它大约十分钟,它的启动非常冷(~10-20秒).这种冷启动仅在涉及数据库时才会发生.当它有点像我们发布网络应用程序时.

我们的尝试

在Azure中使用Application Insights,我们每隔5分钟设置一次ping:

在此输入图像描述

异常值总是由我的部署引起(现在不使用部署槽).但是,此登录页面不会调用我们的数据库,因此我们看不到这些数据中的"冷"启动.

应用程序设置应该是可靠的.我们的网络应用程序托管在北欧,具有Always on:

在此输入图像描述

我们刚刚将整个设置移至新的资源组/应用服务计划,以确保我们的问题与我们的其他应用程序纠缠在一起.新的应用服务计划是一个Standard 1 small,这应该不是问题.看看我们的消费情况,我并不担心,甚至可能尝试一下我解决问题后会做的小型服务:

在此输入图像描述

我们的SQL数据库也托管在北欧(检查位置十亿次,因为我之前犯了这个错误).

就像app服务一样,我们选择了"太大"的硬件来确保不会导致问题(标准S0:10 DTU).使用率低得离谱:

在此输入图像描述

我们确实使用持续部署(Deployment options在Azure菜单中),但是在查看部署时,它不应该经常部署:

在此输入图像描述

令人沮丧的是,应用程序在工作时具有超级响应性.当它"温暖"时,每个页面都会在几秒钟内加载,就像我的网络应用程序上显示的平均响应时间一样:

在此输入图像描述

但是当我们(或我们的用户!)使用我们的应用程序时,这些数字是完全错误的.在这里,我们经历了第一次+ 10-20秒的负载.

有谁有想法吗?任何提示?你不知道我会多么感激.

编辑和更新1:

我决定再设置一些测试.我现在设法通过调用另一个页面来获得显示我们问题的真实数据.具有讽刺意味的是,这个页面不会调用数据库,所以虽然我认为这是一个数据库问题,但它似乎不是这样的.在这里看到挑战(趋势持续+24小时).

奇怪的是它的稳定性大约是10秒.趋势似乎不是每10-20分钟,而是接近每5分钟 - 它们之间的间隔完全相同:

在此输入图像描述

编辑和更新2:

我一直在挖掘更多.事实证明,有一些非常有趣的见解:来自编辑1的"慢速"11秒调用仅来自美国东部和一个端点(http://prntscr.com/jcv69w),以及

我找到的最有趣的事情如下:

应用程序本身没有任何缓存.我使用实体框架,我假设使用一些缓存,但这就是全部.

我登录了我们的应用程序,并在Chrome中点击了.我发现,我访问过的页面是即时显示的(使用来自数据库的数据),但如果我打开一个新页面,它会加载缓慢.在我第一次打开页面时,似乎正在缓存某些实体.

然后我尝试在新的浏览器中打开应用程序.如果我打开了之前在Chrome中打开的页面,它会立即打开.如果我打开了一个我之前没有点击的新页面,它将会有~10秒的负载.

我现在最好的猜测是我使用的实体框架出于某种原因提出了问题.

编辑3:

刚刚添加了赏金,并且正在设置大量的日志记录.我添加了MiniProfiler,但无法让它在生产中工作(仅在本地请求中显示).

我还在global.asax中添加了日志记录Application_Start,Application_BeginRequestApplication_EndRequest在那里查看了一些和状态.将尽快更新结果.

编辑4:

所以现在我有了第一个有趣的数字.该应用程序没有被回收.Application_Start只被叫一次.

我可以看到通过登录的时间差EndRequestBeginRequest.我可以看到有多个调用,这两个调用之间需要超过+15秒......但是当网站温暖时,根据页面需要大约0.5-2秒.所以在请求的开始和结束之间发生了一些非常奇怪的事情.进一步调试!

编辑5:

让MiniProfiler工作.以下是慢负载(~15秒)的示例:

在此输入图像描述

我的下一步是添加实体框架跟踪,甚至更多线路调用.我在数据库上赚了钱!

编辑6:

Okidoki,我错了.它的渲染方法很慢 - 而不是数据库!我不知道如何调试这个... 到谷歌!

在此输入图像描述

编辑7:

是时候再次更新了.现状是:没有解决任何问题.

所以我尝试了很多东西:

1)我试图禁用所有类型的缓存(使用属性阻止ASP.NET MVC中的缓存以获取特定操作)并且我有相同的行为.首次加载?慢.下次加载?快速.等待5-10分钟,相同的行为所以没有解决.

2)我的startup.auth文件中有一些自定义的东西,延迟5分钟.删除.不是问题.

3)我使用自定义属性进行授权.我删除了.

4)我更新了我的实体框架实现,使其在每个请求中工作

我真的很沮丧.我的下一步是:

A)尝试制作相同页面的5-10个版本(没有_layout,带有布局,带数据库,没有数据库,有依赖注入,没有......所有这些),所以看看我是否能找到一个模式. …

asp.net asp.net-mvc azure azure-web-sites devops

18
推荐指数
1
解决办法
1292
查看次数

如何轻松地让 Github Actions 在某些条件下跳过后续作业执行?

我有一个 YAML Github Action 脚本,其中包含三个作业。每晚脚本应检查是否有任何用户提交(不是来自自动作业),然后执行每晚发布构建并将构建部署到测试环境。

我正在努力使用一个单点,如果存储库中除了自动提交之外没有最近的提交,我可以跳过整个第二个和第三个作业的执行。

据我了解,我应该要么使脚本失败以跳过任何进一步的操作,要么if为我所做的每项工作的每一步设置条件,这看起来不简洁。

我试图将if条件放在工作本身上,但它不起作用。if即使条件值为 false,作业也会执行。如果存储库过时,除了使工作失败之外,还有其他更好或更优雅的解决方案吗?

name: Nightly script

on:
  workflow_dispatch:
  schedule:
    - cron: "0 1 * * *"  

jobs:
  check-if-there-are-commits:
    runs-on: ubuntu-latest
    outputs:
      alive: ${{ steps.check.outputs.alive }}
    steps:
      ### Activity check
      ### uses GitHub API to check last non-automagic commit in repository
      ### if it's older than a week, all other steps are skipped
      - name: Activity check
        id: "check"
        run: |
          curl -sL  -H "Authorization: bearer ${{secrets.REPO_BEARER_TOKEN}}" https://api.github.com/repos/$GITHUB_REPOSITORY/commits?sha=dev | …
Run Code Online (Sandbox Code Playgroud)

jobs yaml skip devops github-actions

18
推荐指数
1
解决办法
2万
查看次数

docker swarm模式多个服务相同的端口

假设拓扑上有两个服务

  1. API
  2. Web界面

两者都假设在端口80上运行.

在创建服务时,如果要在群集外部访问它,则需要在docker swarm上公开并将端口从服务映射到节点(外部端口).但是,如果您将端口80映射为让我们说API服务,那么您无法映射Web Interface服务的相同端口,因为它已经映射.

怎么解决这个问题?

据我所知,这个用例不受支持.即使你想拥有一个大群集群,并且因为这种行为也无法实现所有服务和应用程序.

我错过了什么?

任何模式来解决这个问题?

docker docker-swarm devops

17
推荐指数
3
解决办法
8705
查看次数

在Angular 5环境中使用process.env

我尝试使用标准ng build --prod命令构建一个Angular 5应用程序,并且我想将基本API-Url设置为environment.prod.ts依赖于我的process.env变量的值.

这是我的档案:

export const environment = {
    production: true,
    apiUrl: `${process.env.BASE_URL}` || 'http://localhost:8070/',
};
Run Code Online (Sandbox Code Playgroud)

但是当我尝试构建应用程序时,会发生以下错误:

ERROR in src/environments/environment.ts(7,16): error TS2304: Cannot find name 'process'.

在构建应用程序时,如何根据env变量设置API-Url?

devops angular angular5 ng-build

17
推荐指数
1
解决办法
2万
查看次数

Azure Yaml 架构批量触发器

任何人都可以解释 Azure YAML 架构触发器中的 Batch 的作用吗?

MSFT网站上唯一的解释是

batch changes if true; start a new build for every push if false (default)

我不太清楚

azure devops azure-devops azure-pipelines azure-yaml-pipelines

17
推荐指数
1
解决办法
9977
查看次数

如何为nuget包设置Azure DevOps CI构建/发布管道(高级)

作为一家公司,我们正在使用Azure DevOps中的各种git repo创建NuGet包.测试和批准软件包后,应在Azure DevOps组织内共享.

通过使用Azure DevOps提要,我仍在努力设置构建/发布管道.在组织中共享包之前,包应首先可用于测试.

尽管Microsoft共享了许多建议和最佳实践,但我仍然找不到可行的解决方案.我将解释迄今为止我尝试过的解决方案:

解决方案A.

使用一个Feed,整个组织.测试完成后,软件包会自动推送到@local Feed并推送到@prelease和@release视图.管道使用如下:

  • 我们根据git-flow与开发,功能和主分支一起工作.
  • 在构建分支上触发CI构建
  • 具有预发布后缀的包被推送到@local Feed.
  • 通过在visual studio内的NuGet包管理器中启用预发布复选框,可以在其他工具中完成验收测试.
  • 接受包后,将创建一个版本并触发新版本.
  • 包被推了

问题解决方案A:

  • 接受包时,应将其提升为@release视图,但包名仍包含-pre后缀.
  • 当一个包被接受时,我认为不应该要求新版本,除非您可以从发布分支执行此操作吗?
  • 虽然该包只能在带有前缀的visual studio中看到,但可以使用后缀推送到@release视图.
  • 当一个包被提升时,它应该被复制和存储而没有任何后缀.

解决方案B.

为每个git存储库(由Microsoft推荐)使用专用订阅源,并从CI版本将NuGet包发布到此订阅源.每个包都发送到@local提要,没有任何后缀.测试并接受包时,包将被提升为@release视图.每个专用订阅源都配置为上游源(@release视图),发布视图中的包将在所有开发团队之间的组织中共享的公共订阅源中"缓存".

问题解决方案B:

  • 只有在完成单个部署/构建后,才会添加/缓存通过上游源可见的包.将包提升为@release视图时,您无法强制执行此操作.
  • 所有开发团队都必须在Visual Studio中订阅所有NuGet订阅源以安装最新版本的包.(30 git repos = 30个feed)

一般的问题:

  • 当我们只创建NuGet包时,git-flow是否可行?
  • 我们应该使用预发布包还是将它们保存在没有后缀的@ pre-release视图中?
  • 启动新构建以获得没有后缀的包是错误的.一旦预发布包被测试,它应该只被提升到发布视图.
  • 我们是否应该在CI构建中构建包并使用发布版本来发布包.我见过有人使用PowerShell和环境变量将包从一个版本升级到另一个版本.

我知道有很多问题,但我现在在这个问题上挣扎了很长时间.我希望有人能给我一些好的建议.

谢谢!

git continuous-integration nuget devops azure-devops

16
推荐指数
1
解决办法
1225
查看次数

将现有的GitLab项目移动到新的子组中

刚刚开始使用自托管的GitLab ......看起来它对于DevOps工作流程来说真的很有用.

无论如何,在将大约20个本地Git存储库迁移到新的GitLab服务器之后,整齐地排列成4组.然后我注意到你实际上可以在组内有子组.这将有助于组织更进一步,但我正在努力研究如何移动我花了一天时间导入和配置到新创建的子组中的现有项目.当然,我可以创建一个新项目并复制文件并将它们提交到新项目中,并花时间重新配置项目.

是否有一种简单的方法可以将现有已配置的项目从组移动到新的子组中?

git continuous-integration gitlab devops gitlab-omnibus

15
推荐指数
1
解决办法
7118
查看次数

Docker 守护进程未运行

这个领域的新手。我已经在我的 Windows PC 中安装了新版本的 Docker。我正在使用 Windows 10 专业版。我已经尝试了非常基本的 docker 命令,但它不起作用。我也以管理员身份运行 docker。总是出现以下错误

docker : error during connect: Post http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.39/containers/create : open //./pipe/docker_engine: Zugriff verweigert 在 Windows 上的默认守护进程配置中,docker客户端必须运行提升才能连接。此错误也可能表示 docker 守护程序未运行。

在此处输入图片说明

containers docker docker-compose devops docker-machine

15
推荐指数
5
解决办法
4万
查看次数