node.js - 无法在 Node.js Docker 容器中发送 Sentry 事件

标签 node.js docker ubuntu docker-compose sentry

Node.js 的 Sentry SDK 在 Docker 容器内运行时无法将事件发送到 Sentry 服务器。我对在我的 DigitalOcean Ubuntu 20.04 VPS 上运行容器化设置相当陌生,因此非常感谢任何帮助!
错误:

Sentry Logger [Log]: [Tracing] starting gql transaction - GET_REFRESH_TOKEN
Sentry Logger [Log]: [Tracing] Finishing gql transaction: GET_REFRESH_TOKEN.
Sentry Logger [Error]: Error while sending event: Error: connect ETIMEDOUT 34.120.195.249:443
IP 是来自 Sentry 的预期,可在此处找到:https://docs.sentry.io/product/security/ip-ranges/#event-ingestion .
相关设置:
Sentry 初始化
{
  dsn: 'https://<secret>@<secret>.ingest.sentry.io/<secret>',
  environment: 'Testing',
  debug: true,
  integrations: [ Http { name: 'Http', _breadcrumbs: true, _tracing: true } ],
  tracesSampleRate: 1,
  _metadata: {
    sdk: {
      name: 'sentry.javascript.node',
      packages: [Array],
      version: '6.13.3'
    }
  }
}
Docker 撰写文件
version: '3'
services:
  frontend:
    #...

  api:
    container_name: api-${COMPOSE_PROJECT_NAME}
    restart: always
    build:
      context: ./api
      dockerfile: Dockerfile.prod
    env_file:
      - .env
    environment:
      API_PORT: 3001
      DB_HOST: db
      DB_PORT: 5432
      DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}?schema=${DB_SCHEMA}
    depends_on:
      - db
    ports:
      - ${API_PORT_INTERNAL}:3001
    volumes:
      - ./api:/app
      - /app/node_modules

  db:
    #...
API Dockerfile
FROM node:14 AS builder

# Create app directory
WORKDIR /app

COPY package*.json ./
COPY prisma ./prisma/

RUN npm install
RUN npx prisma generate

COPY . .

# Latest LTS version
FROM node:14

# Set default values for environment variables
ENV API_PORT=3001

COPY . .
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package*.json ./

# Bind port
EXPOSE 3001

# Start server
CMD ["npm", "start"]
如果需要更多详细信息,我将附加此列表。

最佳答案

经过更多调查后的自我回答:
事实证明,来自容器内的所有外部网络访问都被阻止了。 Sentry 的使用只是第一次有必要。
问题
在配置 VPS 防火墙 (UFW) 时,Docker 绕过了防火墙并暴露了不需要的端口。为了解决这个问题,我禁用了 iptables完全在 /etc/docker/daemon.json :

{
  "iptables": false
}
这可以完成工作,但会阻止来自容器内的所有外部网络访问。
解决方案
解决方案的所有学分都转到@Feng his answer here回答以下问题:What is the best practice of docker + ufw under Ubuntu .
解决方案是删除 iptables = false选项并在 UFW 配置中正确修复它。您可以按照他的帖子中所述手动执行此操作,也可以像我一样使用他的工具:https://github.com/chaifeng/ufw-docker .
TL;DR
  • 删除 "iptables": false来自 /etc/docker/daemon.json
  • 使用 https://github.com/chaifeng/ufw-docker 正确设置 UFW + Docker
  • 关于node.js - 无法在 Node.js Docker 容器中发送 Sentry 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69801317/

    相关文章:

    docker - 从 env var 获取 OAuth 设置,并在键中使用句号

    docker - Flask应用程序Docker Nginx

    javascript - 无需重复查询即可将一致数据从数据库传递给用户的正确方法

    node.js - 使用 pm2 programmatic api 重命名进程

    centos - 如何从中恢复

    php - 如何减少 TTFB(到第一个字节的时间)响应?

    ruby-on-rails - netbeans - 插件需要安装 HTML 编辑器库

    node.js - Express 中间件被多次调用

    javascript - 使用 Multer 在 Express JS 中无法上传文件

    linux - 'keystone user-list' 时出错