小编flo*_*olu的帖子

如何为 docker compose 服务指定多个“env_files”?

目前我已经设置了我的服务,如下所示。

version: '3'
services:
  gateway:
    container_name: gateway
    image: node:lts-alpine
    working_dir: /
    volumes:
      - ./package.json:/package.json
      - ./tsconfig.json:/tsconfig.json
      - ./services/gateway:/services/gateway
      - ./packages:/packages
      - ./node_modules:/node_modules
    env_file: .env
    command: yarn run ts-node-dev services/gateway --colors
    ports:
      - 3000:3000
Run Code Online (Sandbox Code Playgroud)

所以我指定了一个env_file。但现在我想传递多个 .env 文件。

不幸的是,以下情况是不可能的:

    env_files:
       - .env.secrets
       - .env.development
Run Code Online (Sandbox Code Playgroud)

有没有办法将多个 .env 文件传递​​给 docker-compsoe 中的一项服务?

docker-compose

43
推荐指数
3
解决办法
2万
查看次数

Bazel + Angular + SocketIO 原因:Uncaught TypeError: XMLHttpRequest is not a constructor

我想将ngx-socket-io添加到我的 Angular 应用程序中。我使用 Bazel 来运行我的 Angular 开发服务器。不幸的是ngx-socket-iots_devserver开箱即用似乎并不适用。我在浏览器控制台中收到此错误:

Uncaught TypeError: XMLHttpRequest is not a constructor
    at ts_scripts.js?v=1587802098203:16776
    at Object.23.../transport (ts_scripts.js?v=1587802098203:16780)
    at o (ts_scripts.js?v=1587802098203:11783)
Run Code Online (Sandbox Code Playgroud)

它似乎是由xmlhttprequest-ssl引起的,它是engine.io-client 的一个依赖项,它是ngx-socket-io. 但是这个问题只发生在ts_devserver 上生产中运行 Angular 应用程序完全正常。

最小复制

你可以自己轻松尝试:https : //github.com/flolu/bazel-socketio-issue

只需运行yarn install然后yarn dev(它会导致浏览器控制台 @ http://localhost:4200 中的错误)。并注意yarn prod@ http://localhost:8080工作正常!

编辑 1

目前,Windows 上似乎还有另一个问题。因此,如果您运行的是 Mac 或 Linux,则只能尝试示例存储库

socket.io typescript bazel angular

13
推荐指数
1
解决办法
539
查看次数

带有PWA和Service Worker的NGRX离线缓存

这不是一个错误,而是一个有关如何解决我的问题的问题!

借助Angular的新PWA功能,通过服务工作者使您的应用脱机工作非常简单。我的问题是如何利用NGRX来缓存状态,以便它可以脱机使用。

我还担心,客户端在浏览器中缓存状态时可能会修改状态。(例如,使用时ngrx-store-localstorage

service-worker progressive-web-apps ngrx angular ngrx-store

10
推荐指数
1
解决办法
573
查看次数

SocketIO 与客户端和服务之间的网关通信?

要旨

我有一个在基于微服务的架构(在 Kubernetes 上)上运行的应用程序。与应用程序外部的所有通信都通过API Gateway发生。

这只是意味着来自我前端的请求不会直接发送到服务,但它们必须通过网关。

动机

现在我需要实现一个需要在前端和内部服务之间进行实时通信的功能。但是由于内部服务没有对​​外公开,​​我需要一种通过网关“路由”实时数据的方法。

我所有的服务都在 Node.js 上运行,这就是我想使用Socket.IO来实现实时通信的原因。

建筑学

问题

但是如何从草图中实现紫色双箭头?

所以通常前端客户端会连接到运行 Socket.IO 的服务器。但在我的情况下,这个服务器(实时功能服务器)不能从客户端访问(并且永远不应该),这意味着客户端必须连接到网关。因此网关需要实现某种机制来将所有传入消息路由到实时服务,反之亦然。

想法

(1) 让第二个 HTTP 服务器侦听网关上的事件并将这些事件发送到实时服务器。在另一个方向,实时服务器将事件发送到网关,网关然后将它们发送到前端。我认为这种方法肯定会奏效,但是将所有内容发出两次似乎是多余的。它肯定会损害性能?

(2) 使用 Socket.IO 适配器“在节点之间传递事件”,这似乎是正确的方法,因为它用于“在进程或计算机之间传递消息”。但是由于缺乏文档/示例,我在入门时遇到了问题。我也没有使用 Redis(是否需要使用适配器?)

(3) 使用socket.io-emitter包,这似乎不是一个好的选择,因为上次提交是在 3 年前。

(4) 还有什么?

sockets node.js socket.io kubernetes microservices

10
推荐指数
1
解决办法
842
查看次数

无法使用 Kubernetes 上的 Node.Js 连接到 Elasticsearch(证书链中的自签名证书)

我有一个在 Kubernetes 集群中运行的 NodeJs 应用程序(我使用的是microk8s)。我还按照官方步骤在 Kubernetes 上设置 Elasticsearch。

问题

但是我无法连接到 Elasticsearch 集群。我收到此错误:

ConnectionError: self signed certificate in certificate chain
Run Code Online (Sandbox Code Playgroud)

这是我的连接的代码片段

ConnectionError: self signed certificate in certificate chain
Run Code Online (Sandbox Code Playgroud)

最小化复制

我在这里创建了这个问题的最小复制:https : //github.com/flolu/elasticsearch-k8s-connection。(设置说明在自述文件中)

基本上,在 Docker compose 中运行 Elasticsearch 时一切正常,但在 Kubernetes 中运行时无法连接。

造成这种情况的原因可能是我没有正确设置TLS证书,但我还没有找到任何相关信息。在创建 ES 客户端或在集群级别时,我是否在我的 NodeJs 应用程序中配置它?

node.js elasticsearch typescript kubernetes microk8s

10
推荐指数
1
解决办法
2328
查看次数

Mongoose Find - 排除一个特定文档

我想通过 获取许多文档Schema.find(),但通过其 id排除一个特定文档。目前,我的查询如下所示:

Product
    .find({
        $or: [
            { 'tags': { $regex: criteria, $options: 'i' }, },
            { 'name': { $regex: criteria, $options: 'i' }, },
        ],
    })
    .limit(10)
    .exec((err, similar) => {
        //...
    })
Run Code Online (Sandbox Code Playgroud)

我试图添加$not: { _id: someId }到查询中,但这给了我一个错误,这是$not无效的。

mongoose mongodb node.js

9
推荐指数
1
解决办法
4957
查看次数

填写记录中缺失的日期

我有一个集合ProductViews

产品视图

{
    productId: '5b8c0f3204a10228b00a1745,
    createdAt: '2018-09-07T17:18:40.759Z',
}
Run Code Online (Sandbox Code Playgroud)

我有一个查询来获取特定产品的每日浏览量。

询问

ProductView.aggregate([
    { $match: { productId } },
    { $project: { day: { $substr: ["$createdAt", 0, 10] } } },
    {
        $group: {
            _id: "$day",
            count: { $sum: 1 },
            time: { $avg: "$createdAt" },
        }
    },
    { $sort: { _id: 1 } },
    {
        $project: {
            date: '$_id',
            views: '$count',
        },
    },
]).exec((err, result) => ...)
Run Code Online (Sandbox Code Playgroud)

当前结果

[
    { date: '2018-09-01', views: 1 },
    { date: '2018-09-02', views: …
Run Code Online (Sandbox Code Playgroud)

aggregation mongoose mongodb node.js aggregation-framework

9
推荐指数
1
解决办法
3464
查看次数

API 网关应该通过队列还是直接与其他服务进行通信?

我想知道我的两种方法中哪一种更合适,或者还有另一种方法吗?

(1) 直接

直接沟通 GATEWAY和之间的直接通信?SERVICE A

  1. UI发送HTTP请求到GATEWAY
  2. GATEWAY发送HTTP请求到?SERVICE A
  3. ?SERVICE A返回SUCCESSERROR
  4. 事件存储EVENT STORE并发布到QUEUE
  5. PROJECTION DATABASE 已更新
  6. 其他?SERVICES可能消费事件

(2) 活动

队列通信 通过消息队列进行基于事件的通信

  1. UI发送HTTP请求到GATEWAY
  2. GATEWAY 发布事件到 QUEUE
  3. ?SERVICE A 消费事件
  4. 事件存储EVENT STORE并发布到QUEUE
  5. PROJECTION DATABASE 已更新
  6. 其他?SERVICES可能消费事件
  7. GATEWAY消费事件并将响应(SUCCESSERROR)发送到UI

如果我误解了一些概念,我真的很抱歉,我对这种建筑风格比较陌生。

在此先感谢您的帮助!:)

gateway message-queue cqrs event-sourcing microservices

9
推荐指数
1
解决办法
1785
查看次数

模块别名包的智能感知

我在我的 Node 项目中使用这个 npm 模块 ( module-alias) https://www.npmjs.com/package/module-alias

要使用这个包,你必须在package.json文件中设置路径别名。

包.json

但是,使用此软件包有一个缺点,即智能感知不再起作用。

我的问题是如何使用这些路径别名启用智能感知?

intellisense node.js npm drupal-path-aliases module-alias

8
推荐指数
1
解决办法
697
查看次数

Bazel - 在 Monorepo 中构建、推送、部署 Docker 容器到 Kubernetes

我有一个带有一些后端(Node.js)和前端(Angular)服务的 monorepo 。目前我的部署过程如下所示:

  1. 检查测试是否通过
  2. 为我的服务构建 docker 镜像
  3. 将 docker 镜像推送到容器注册表
  4. 将更改应用于Kubernetes集群(GKE)与kubectl

我的目标是在BazelCloud Build的帮助下自动化所有这些步骤。但我真的很难开始使用 Bazel:

为了使它工作,我可能需要为我自己的包/服务添加一个WORKSPACE包含外部依赖项的文件和多个BUILD文件?我需要实际实施方面的帮助:

  1. 如何使用 Bazel 构建我的 Dockerfiles?
  2. 如何将这些图像推送到注册表(最好是GCR)?
  3. 如何自动将更改应用到 Google Kubernetes Engine?
  4. 如何将此工具链与 Google Cloud Build 集成?

有关该项目的更多信息

我整理了一个小样本 monorepo来展示我的用例

结构

??? kubernetes
??? packages
?   ??? enums
?   ??? utils
??? services
    ??? gateway
Run Code Online (Sandbox Code Playgroud)

一般的

  • Gateway服务取决于enumsutils
  • 一切都是用打字稿写的
  • 每个服务/包都是一个 Node 模块
  • 文件夹Dockerfile里面有一个 …

docker kubernetes bazel monorepo google-cloud-build

7
推荐指数
1
解决办法
2618
查看次数