标签: devops

docker 和 php:将依赖项(composer)放入容器中

一点背景:我是 docker 新手,还不知道任何最佳实践。我的任务是创建一个基于 php 的网络服务,我决定使用 docker-compose 进行配置。

因为我们都是优秀的开发人员,所以我们知道 - 现在没有使用 Composer 构建 php 应用程序的方法。

我的问题:

我应该在构建中安装依赖项吗?因此,通过将其添加到我的 Dockerfile 中:

RUN cd /app && composer install --no-interaction --prefer-source --optimize-autoloader
Run Code Online (Sandbox Code Playgroud)

或者我应该在开发过程中安装依赖项并构建包含依赖项的容器映像?


我只知道一种不这样做的方法:在开发机器上本地安装依赖项,然后构建容器。但是“最佳实践”会是什么样子呢?

而且 - 因为我是这个领域的新手 - 我将如何为我的应用程序服务容器运行“composer require some/package”?

顺便一提

我还注意到一条消息“不要以 root/超级用户身份运行 Composer!” 在构建容器时。我添加COMPOSER_ALLOW_SUPERUSER=1到我的 Env 文件(如这里所示),但此消息仍然出现。

是否可以不在 docker 容器中以 root 身份执行 composer install?我可以忽略该消息吗?

提前致谢,菲利普

php composer-php docker docker-compose devops

6
推荐指数
2
解决办法
4540
查看次数

在微服务环境中提供静态文件?

为部署在微服务架构(生产中)中的应用程序提供静态文件的首选方式是什么?

为简单起见,假设我有 3 个应用程序服务器和一个将请求转发到这些服务器的负载平衡器。

  • 负载平衡器是否应该存储文件并根据要求立即提供它们?或者..
  • 负载平衡器是否应该将静态文件请求转发到不同的应用程序实例(每个请求到不同的实例)?

是否有最佳实践?

system-design microservices devops

6
推荐指数
1
解决办法
813
查看次数

我应该如何将应用程序配置放入我的 Docker 容器中?

我阅读了以下关于“如何将应用程序配置导入到我的 Docker 容器中?”的文章。 https://dantehranian.wordpress.com/2015/03/25/how-should-i-get-application-configuration-into-my-docker-containers/

它总结了 4 个与 2015 年相关的选项。简而言之:

  1. 将配置烘焙到容器中

  2. 通过环境变量动态设置应用程序配置

  3. 通过环境变量动态设置应用程序配置(使用外部 kv 存储)

  4. 通过 Docker Volumes 直接映射配置文件

我想知道现在这些选项是否仍然是唯一可行的,或者是否有任何新的选项/模式可以做到这一点?

谢谢。

configuration docker devops

6
推荐指数
1
解决办法
1424
查看次数

多个 Pod 的单一服务

我有 9 个 pod 正在运行,它们基本上是 9 个不同的应用程序。

是否可以为多个 pod 使用相同的 k8s 服务(LB | 公共 IP),以便我可以通过不同的端口访问它们,但服务的 IP 相同(LB)?

例如像这样:
LB-IP:80 -- 在后端,一个应用程序正在运行,我可以访问它。
LB-IP:8080(与之前的 IP 相同)——我将在后端运行另一个 pod。

**** 每个 pod 的选择器都不同。**

google-cloud-platform kubernetes devops

6
推荐指数
1
解决办法
4236
查看次数

如何在相同的 Heroku 应用程序但不同的 docker 镜像中部署前端和后端

我正在创建一个 Web 应用程序,前端使用 Angular,后端使用 Flask。我已经“dockered”了我的应用程序,但我不确定如何在 Heroku 中将它们作为相同的应用程序获取

我一直在读到有些人使用了反向代理服务器(这意味着两个应用程序都在不同的 heroku 应用程序中,他们使用像 traeffik 或 haproxy 这样的代理连接它们)。但我并不想这样做,我想他们是在同一个应用程序(例如:grupo-camporota.herokuapp.com

我在想我应该推送两个图像,一个作为 Web dyno(前端),另一个作为工作人员(后端),但我读到工作的 dyno 不是为了这个,而是为了 EXTERNAL api。我想将两个图像上传到 heroku 并让它们在它们之间进行通信。

我想知道如何完成这项工作(我很确定这是可能的),因为我有点迷茫

heroku docker devops

6
推荐指数
1
解决办法
1033
查看次数

.NET Core 3.1 的 Azure DevOps 代码覆盖率

我正在为 ASP.NET Core 3.1 应用程序设置 Azure DevOps 管道,并且我有以下 YAML 定义测试段)用于构建、测试和代码覆盖。

      - task: DotNetCoreCLI@2
        displayName: "dotnet global test tool install"
        inputs:
          command: 'custom'
          custom: 'tool'
          arguments: 'install --global dotnet-reportgenerator-globaltool'

      - task: DotNetCoreCLI@2
        displayName: "dotnet test"
        inputs:
          command: 'test'
          projects: '**/*[Tt]ests'
          arguments: '--no-build --configuration $(buildConfiguration) /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:CoverletOutput=$(System.DefaultWorkingDirectory)/TestResults/Coverage'
          testRunTitle: 'Unit Test'
          workingDirectory: '$(System.DefaultWorkingDirectory)'
      - script: reportgenerator -reports:$(System.DefaultWorkingDirectory)/**/cobertura/coverage.xml -targetdir:$(System.DefaultWorkingDirectory)/CodeCoverage -reporttypes:HtmlInLine_AzurePipelines
        displayName: "create code coverage report"


      - task: PublishCodeCoverageResults@1
        displayName: "publish test coverage result"
        inputs:
          codeCoverageTool: 'Cobertura'
          summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/cobertura/coverage.xml'
Run Code Online (Sandbox Code Playgroud)

在 Azure DevOps 中运行时,出现以下错误 来自 Azure DevOps 的错误消息

我可能做错了什么?项目来源: …

yaml devops azure-devops asp.net-core azure-devops-yaml

6
推荐指数
1
解决办法
2341
查看次数

如何在 GitHub Actions 中设置和访问工作流变量?

我正在自动化我的react-native Expo发布周期。我release channels在世博会中使用来构建stagingproduction构建。例如,每次推送到staging-v1GitHub 分支时,都会触发以下操作。

//staging.yaml

name: Release to staging
on:
  push:
    branches:
      - staging*
jobs:
  publish:
    name: Install and publish on staging channel
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - uses: actions/setup-node@v1
        with:
          node-version: 12.x
      - uses: expo/expo-github-action@v5
        with:
          expo-version: 3.x
          expo-username: ${{ secrets.EXPO_CLI_USERNAME }}
          expo-password: ${{ secrets.EXPO_CLI_PASSWORD }}
          expo-packager: npm
      - run: npm install
      - run: expo publish --release-channel ${{ GITHUB_REF }}
Run Code Online (Sandbox Code Playgroud)

{{ GITHUB_REF }}保存当前分支名称。因此,当我将更改推送staging-v1到此操作时会运行。但是,我收到此错误。

github-actions-错误

我试过设置 …

automation react-native devops expo github-actions

6
推荐指数
1
解决办法
2631
查看次数

Elastic BeanStalk 应用程序部署后挂钩未执行我的命令

我最近能够在 Elastic Beanstalk 上使用代码管道部署我的 Laravel 应用程序,但遇到了问题。我注意到我的路由由于 php.conf Nginx 配置而失败。我必须向 EB 的 nginx php.conf 文件添加几行代码才能使其工作。

我现在的问题是,每次部署后,我修改 php.conf 文件的应用程序实例都被销毁并重新创建。我想要一种在每次成功部署后动态更新文件的方法。我有一个文件版本,我想用我的应用程序进行版本控制,因此想在部署后创建一个指向该文件的符号链接。

经过大量研究,我偶然发现了 Elastic Beanstalk 上的 appDeploy Hooks,它在部署后运行发布脚本,所以这样做了

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/post/91_post_deploy_script.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      sudo mkdir /var/testing1
      sudo ln -sfn /var/www/html/php.conf.example /etc/nginx/conf.d/elasticbeanstalk/php.conf
      sudo mkdir /var/testing
      sudo nginx -s reload
Run Code Online (Sandbox Code Playgroud)

这由于某种原因不起作用。符号链接未创建,因此我的路线仍然无法正常工作..

我什至添加了一些 mkdir 以确保该脚本中的命令运行,这些命令都没有运行,因为没有创建这些目录。

请注意,如果我通过 ssh 进入 ec2 实例并在那里运行命令,它会起作用。该 bash 脚本也存在于 post 目录中,如果我在服务器上手动运行它,它也能工作。

任何有关我如何解决此问题的指示都会有所帮助。也许我也做错了什么。

现在我已经按照这个来运行我的脚本。但是,脚本没有运行。我收到一个错误

2020/06/28 08:22:13.653339 [INFO] Following platform hooks will be executed in order: [01_myconf.config]
2020/06/28 …
Run Code Online (Sandbox Code Playgroud)

continuous-integration amazon-web-services continuous-deployment amazon-elastic-beanstalk devops

6
推荐指数
1
解决办法
4483
查看次数

AWS RDS MariaDB 在简单的更改表上无缘无故地消耗了 300GB

我们在 r5.large 实例上的 AWS RDS 中有 MariaDB。我们有 4 个实例,每个实例使用了大约 350GB 的存储空间。每个实例有近 2000 个不同的数据库,迁移尝试在所有数据库上运行,但算法会一一执行迁移。

我们正在修改的表实际上很小——每个数据库通常有数百行。

出于某种奇怪的原因,当我们运行此迁移时,AWS RDS MariaDB 消耗了我们拥有的所有存储,因为我们已自动扩展存储,它的值从 350GB 跃升至约 650GB,但仍然不够。此外,如此庞大的数据消耗非常快(基于监控1-2分钟)。然后它就停止了,因为 AWS 拒绝如此迅速地给我们更多的空间,而且没有剩余的存储空间。

它发生在所有 4 个实例上。

这是我们使用的alter表

ALTER TABLE `item_place`
    ADD COLUMN IF NOT EXISTS `deleted_at` datetime NULL,
    ALGORITHM=NOCOPY, LOCK=NONE;

ALTER TABLE `item_place`
    ADD INDEX IF NOT EXISTS `deleted_at` (`deleted_at`),
    ALGORITHM=NOCOPY, LOCK=NONE;
Run Code Online (Sandbox Code Playgroud)

我们没有看到任何异常。此外,我们有具有相同迁移的 TEST 数据库,但那里什么也没发生。虽然它们要小得多(5GB),但是当在那里执行迁移时,我们没有看到存储空间的小幅下降。

我们在日志中没有发现任何特别之处。

database alter-table amazon-web-services mariadb devops

6
推荐指数
1
解决办法
100
查看次数

如何在 Azure DevOps 组织中有效处理个人访问令牌?

语境:

我们正在使用 Azure DevOps,并且开始在我们的 DevOps 周期和流程中利用越来越多的 PAT。我们有大约 30 个用户,每个人在他们的个人帐户下为不同的用例创建了一堆用户。

以下是使用它们的一些场景: 

  • 自托管代理配置(Windows 和 docker)
  • Microsoft Teams 机器人的 API 调用
  • 与 Azure DevOps 和其他系统的自制集成
  • 等等。

基本上,我们开始放松对以下方面的控制:  

  • 创建了什么样的 PAT
  • 在哪里使用 PAT
  • 在 PAT 上定义了哪些范围

例如,我们有一些用户创建 PAT 来配置代理。他们将授予对此 PAT 的完全访问权限,而不是为其选择适当的范围。正如我们所知,最终用户并不真正关心安全性,我们知道我们需要教育我们的开发人员。但是,我们仍然希望有办法控制这些 PAT。

问题:  

  • 有没有办法在组织级别查看所有使用的 PAT?
  • 是否可以消除特定用户创建 PAT 的可能性,而只将该功能提供给管理员用户?
  • 是否可以撤销组织级别的所有 PAT?
  • 您能否分享您如何在组织中有效处理 PAT 的经验和技巧,更具体地说是在安全方面?

security devops azure-devops

6
推荐指数
1
解决办法
57
查看次数