新手问题 使用 Docker 為 Rails 系統作橫向擴展?

Aiken00 · 2018年02月20日 · 最后由 hechian 回复于 2018年07月20日 · 1131 次阅读

作為Docker以及Ngnix的配置新手我卡關了

我在嘗試以docker來scale up Rails系統 在沒有Ngnix時我是能夠成夠運行Rails系統的

但當使用nginx-proxy後及Scale up後我發現rails不能再指定某個port了 而且proxy也不能指向Rails系統群作load balancing

同時有沒有關於Ngnix配置的常數作參考? 我的docker-compose.yml配置如下

version: '3'
services:
  db:
    container_name: 'postgresql'
    image: postgres
    ports:
      - '5432:5432'
  redis:
    container_name: 'redis'
    image: 'redis:4.0.8-alpine'
    command: redis-server --requirepass yourpassword
    ports:
      - '6379:6379'
    volumes:
      - 'redis:/data'
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s"
    volumes:
      - .:/mapAPI
    env_file:
      - '.env'
    depends_on:
      - db
      - redis
  sidekiq:
    depends_on:
      - 'db'
      - 'redis'
    build: .
    command: bundle exec sidekiq -C config/sidekiq.yml
    volumes:
      - '.:/mapAPI'
    env_file:
      - '.env'
  proxy:
    image: jwilder/nginx-proxy:latest
    ports:
      - "80:80"
    volumes:
      - "/var/run/docker.sock:/tmp/docker.sock"
volumes:
  redis:
  postgres:
共收到 7 条回复

能解释下 rails不能再指定某個port?是因为在同一台机器上运行多个 containers 所以同一个 port 会冲突?

nginx应该跑在主机上,成为container的balance

写个脚本,读随机生成的 port ,生成一个 conf, reload nginx. 我在测试环境这么做的。生产用的 swarm mode。

n5ken 回复

對當我嘗試指定port為3000時,以後的instance就不能創建了

pynix 回复

nginx跟load balancer不是在docker裏面運行才對的嗎?

lithium4010 回复

感謝回覆 Devops我自己是個新手,請問有沒有類似的代碼作參考? Swarm我有看過一下,但還是不太理解背後的運作。

Aiken00 回复

是正體中文欸XD

command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s"

這邊你在 rails s 改成 rails s -p $RANDOM 試試,可以 google 一下 bash random

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册