运行 private_pub 和 docker

Running private_pub with docker

我有一个应用程序使用 private_pub gem(使用 faye)向用户发送通知。 问题是我正在尝试使用 docker 和 docker-compose 进行部署(因为需要很多东西,例如 solr 搜索和 redis)。 只要一切都在 localhost 下 运行,一切都很好。但是现在我的网络服务器 运行 在 docker 容器中,以及所有其他服务。我已经尝试为 faye 启动一个容器,但是发布或订阅不起作用。

这是我的 docker-compose 文件:

version: "2"
services:
  web:
    build: .
    command: rails server -e development -p 3000 -b '0.0.0.0'
    volumes:
      - .:/app
    ports:
      - "3000:3000"
    links:
     - solr:solr
     - mariadb
     - redis
    depends_on:
      - solr
    env_file:
      - .env
  solr:
    image: solr
    ports:
     - "8983:8983"
    volumes:
      - data:/opt/solr/server/solr/mycores
    entrypoint:
      - docker-entrypoint.sh
      - solr-precreate
      - qwerteach
  mariadb:
    image: mariadb
    volumes:
      - mariadb:/var/lib/mysql
    env_file:
      - .env
    ports:
      - "13306:3306"
  redis:
    image: redis:latest
    ports:
      - "6379"
  faye:
    image: nickjj/faye
    links:
      - redis
    ports:
      - "9292:9292"
    environment:
      FAYE_PUSH_TOKEN: "secret"
      FAYE_PORT: 9292
      FAYE_MOUNT: "/faye"
      FAYE_LOGGING: 1

volumes:
  data:
  mariadb:

还有我的private_pub.yml

development:
  server: "http://faye:9292/faye"
  secret_token: "secret"
test:
  server: "http://localhost:9292/faye"
  secret_token: "secret"
production:
  server: "http://example.com/faye"
  secret_token: "9eba1078bbb9289f949f51abc7ed5f842fed3af11374056bf09799e4ef2733f2"
  signature_expiration: 3600 # one hour

使用此配置,我可以从 "outside"(表示哑终端)联系 faye: curl -X POST http://localhost:9292/faye -H 'Content-Type: application/json' -d '{"channel": "/foo", "data": "Hello", "ext": {"pushToken": "secret"}}' 成功 它也适用于 docker 网络容器,但地址不同:

curl -X POST http://faye:9292/faye     -H 'Content-Type: application/json'     -d '{"channel": "/foo", "data": "Hello", "ext": {"pushToken": "secret"}}'

但是 private_pub.yml 配置文件只允许一个地址...所以要么订阅频道适用于客户端但我不能从控制器发布,要么我可以从控制器发布但用户不能订阅.我该如何解决这个问题?

如有任何帮助,我们将不胜感激! :-)

所以,如果有人试图 运行 private_pub 在 dockerized rails 应用程序中,这就是我得到它的方法 运行ning:

  • 打开web容器的9292端口
  • 来自 Web 容器,运行 rackup 命令 rackup private_pub.ru -s thin -E production -o 0.0.0.0 明确告诉 thin 使用主机 0.0.0.0 是关键,这就是它在端口 9292 上从外部可用的方式(与端口 3000 上可用的 rails 容器相同)

private_pub.yml中的参数如下:

production:
  server: "http://production.server.ip:9292/faye"
  secret_token: "this_is_a_very_secret_token"

不确定这是最好的方法,但这是我能做到的唯一方法;经过 3 天的搜索和太多的咖啡,我不会要求更多。