将主机上的nginx与docker容器中的wsgi unicorn连接起来

时间:2016-11-14 16:30:08

标签: sockets nginx docker unicorn

开始对我的Rails应用程序进行docker化我面临以下问题:

我的想法是让每个带有Wsgi和依赖项的Web应用程序在一个额外的docker容器中运行,并且数据库在使用docker-compose进行设置时也会在单独的容器中运行。

在容器之外,Nginx通过unix套接字将流量路由到特定容器,然后根据域路由。(不希望容器中的nginx降低复杂性并避免在多个容器中运行多个nginx来维护多个webapps) 。

在开始使用docker之前,我的wsgi和nginx通过unix套接字连接。但在停泊后这不再适用了。现在只能将它们与端口连接起来,我希望避免这种情况。

有没有办法通过unix套接字将Nginx与主机内的WSGI连接在主机上?如果不是这里的最佳做法?

我的方法是使用共享卷作为套接字文件的位置,但是nginx无法访问由wsgi unicorn创建的套接字: 由独角兽创建的套接字:

srwxrwxrwx 1 root root    0 Nov 14 14:53 unicorn.sock=

Nginx错误:

*2 connect() to unix:/ruby-webapps/myapp/shared/sockets/unicorn.sock failed (13: Permission denied) while connecting to upstream

Nginx sites-avaible / myapp:

upstream myapp {
    # Path to Unicorn SOCK file, as defined previously
    server unix:/ruby-webapps/myapp/shared/sockets/unicorn.sock fail_timeout=0;
}
server {
    listen 80 default_server;
...
}
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name myapp.de www.myapp.de;

    root /ruby-webapps/myapp;
    try_files $uri/index.html $uri @MyApp;

    location @MyApp {
        proxy_pass http://myapp;
        #proxy_pass  http://127.0.0.1:3000;
        proxy_set_header X-Forwarded-For https;
        proxy_redirect off;
    }   
}

搬运工-compose.yml:

version:'2'
 services:
  postgresmyapp: 
    image: postgres
    env_file: .env    
  myapp:
    build: .
    env_file: .env
    command: supervisord -c /myapp/unicorn_supervisord.conf 
    volumes:
      - .:/myapp
    ports:
      - "3000:3000" 
    links:
      - postgreslberg 

config / unicorn.rb:

app_dir = File.expand_path("../..", __FILE__)
shared_dir = "#{app_dir}/shared"
working_directory app_dir

rails_env = ENV['RAILS_ENV'] || 'production'

# Set unicorn options
worker_processes 2
preload_app true
timeout 30

# Set up socket location
listen "#{shared_dir}/sockets/unicorn.sock", :backlog => 64
#listen(3000, backlog: 64) 

stderr_path "#{shared_dir}/log/unicorn.stderr.log"
stdout_path "#{shared_dir}/log/unicorn.stdout.log"
pid "#{shared_dir}/pids/unicorn.pid"

0 个答案:

没有答案