Организация докеров контейнера домашнего сервера за прокси-сервером nginx [решено] - PullRequest
0 голосов
/ 05 октября 2019

У меня есть домашний сервер, который я использую в основном для автономных приложений (заметки, git-сервер, сервер Jenkins и т. Д.), Которые я хотел бы организовать, поэтому мне не нужно запоминать все порты для каждого контейнера. Я надеялся настроить структуру следующим образом:

Я бы хотел, чтобы корневая конечная точка направлялась в контейнер с запущенным cadvisor Google для мониторинга состояния всех моих контейнеров, / jenkins - в Дженкинс, / pihole - вpi-hole и т. д.

Вот как я настраиваю свои файлы docker-compose и nginx.conf на основе моего понимания схемы конфигурации:

docker-compose.yml:

version: '3'
services:
    webserver:
        image: nginx:alpine
        container_name: webserver
        restart: unless-stopped
        tty: true
        ports:
            - "80:80"
            - "443:443"
        volumes:
            - ./:/var/www
            - ./nginx/conf.d/:/etc/nginx/conf.d/
        restart: unless-stopped

    cadvisor:
        image: 'google/cadvisor'
        volumes:
            - /:/rootfs:ro
            - /var/run:/var/run:ro
            - /sys:/sys:ro
            - /var/lib/docker/:/var/lib/docker:ro
            - /dev/disk/:/dev/disk:ro
        ports:
            - "8090:8090"

    pi-hole:
        container_name: pihole
        image: pihole/pihole:latest
        ports:
            - "53:53/tcp"
            - "53:53/udp"
            - "67:67/udp"
            - "8070:8070/tcp"
            - "4437:4437/tcp"
        environment:
            TZ: 'America/Chicago'
            # WEBPASSWORD: 'set a secure password here or it will be random'
        # Volumes store your data between container upgrades
        volumes:
            - './etc-pihole/:/etc/pihole/'
            - './etc-dnsmasq.d/:/etc/dnsmasq.d/'
        dns:
          - 127.0.0.1
          - 1.1.1.1
        # Recommended but not required (DHCP needs NET_ADMIN)
        #   https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
        cap_add:
            - NET_ADMIN
        restart: unless-stopped

    cowyo:
        image: 'schollz/cowyo'
        ports:
            - "8050:8050"
        volumes:
            - './cowyo/data/:/data/'
        restart: unless-stopped

    jenkins:
        image: 'bitnami/jenkins:2'
        ports:
            - '8080:8080'
            - '8443:8443'
            - '50000:50000'
        volumes:
            - 'jenkins_data:/bitnami'
        restart: unless-stopped

volumes:
    jenkins_data:
        driver: local

nginx.conf:

worker_processes 1;

events { worker_connections 1024; }

http {

    sendfile on;

    upstream docker-cadvisor {
        server cadvisor:8090;
    }

    upstream docker-pihole {
        server pi-hole:8070;
    }

    upstream docker-cowyo {
        server cowyo:8050;
    }

    upstream docker-jenkins {
        server jenkins:8080;
    }

    server {
        listen 80;

        location / {
            proxy_pass         http://docker-cadvisor;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
        }
    }

    server {
        listen 80;

        location /pihole {
            proxy_pass         http://docker-pihole;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
        }
    }

    server {
        listen 80;

        location /cowyo {
            proxy_pass         http://docker-cowyo;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
        }
    }

    server {
        listen 80;

        location /jenkins {
            proxy_pass         http://docker-jenkins;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
        }
    }

}

Есть идеи, что я делаю не так? Буду признателен за любую помощь.

Редактировать: проблема с тем, как он работает сейчас, заключается в том, что когда я перехожу на один из URL выше, я получаю ошибку "Этот сайт не может быть достигнут".

Edit2: вышеуказанная проблема была вызвана неправильным файлом nginx.conf, из-за которого контейнер докера не запускался должным образом. После разрешения этого я получаю «502 Bad Gateway».

Edit3 [resolution]: мое решение было в ответ с переполнением стека . TLDR - мне пришлось добавить строку «network_mode: host» в раздел nginx в моем файле docker-compose.yml.

Ответы [ 2 ]

0 голосов
/ 05 октября 2019

Я думаю, вы должны изменить на

upstream docker-cadvisor {
    server 127.0.0.1:8090;
}

upstream docker-pihole {
    server 127.0.0.1:8070;
}

upstream docker-cowyo {
    server 127.0.0.1:8050;
}

upstream docker-jenkins {
    server 127.0.0.1:8080;
}
0 голосов
/ 05 октября 2019

Какую ошибку вы получаете? Tre ниже config, и если вы не получите ожидаемый результат, смотрите соответствующие журналы для ошибки.

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

   upstream docker-cadvisor {
        server cadvisor:8090;
    }

    upstream docker-pihole {
        server pi-hole:8070;
    }

    upstream docker-cowyo {
        server cowyo:8050;
    }

    upstream docker-jenkins {
        server jenkins:8080;
    }

server {
   listen 80;
   server_name home.server;
   fastcgi_param home.server $host;

   location / {
       proxy_set_header X-Forwarded-Host $host:$server_port;
       proxy_set_header X-Forwarded-Server $host;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header Host $host;
       proxy_connect_timeout      300;
       proxy_send_timeout         300;
       proxy_read_timeout         300;
       proxy_pass         http://docker-cadvisor;
   }
           access_log /tmp/cadvisor-access.log main;
           error_log /tmp/cadvisor-error.log error;
}
server {
   listen 80;
   server_name home.server;
   fastcgi_param home.server $host;

   location /jenkins {
       proxy_set_header X-Forwarded-Host $host:$server_port;
       proxy_set_header X-Forwarded-Server $host;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header Host $host;
       proxy_connect_timeout      300;
       proxy_send_timeout         300;
       proxy_read_timeout         300;
       proxy_pass         http://docker-jenkins;
   }
           access_log /tmp/jenkins-access.log main;
           error_log /tmp/jenkins-error.log error;
}
server {
   listen 80;
   server_name home.server;
   fastcgi_param home.server $host;

   location /cowyo {
       proxy_set_header X-Forwarded-Host $host:$server_port;
       proxy_set_header X-Forwarded-Server $host;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header Host $host;
       proxy_connect_timeout      300;
       proxy_send_timeout         300;
       proxy_read_timeout         300;
       proxy_pass         http://docker-cowyo;
   }
           access_log /tmp/cowyo-access.log main;
           error_log /tmp/cowyo-error.log error;
}
server {
   listen 80;
   server_name home.server;
   fastcgi_param home.server $host;

   location /pihole {
       proxy_set_header X-Forwarded-Host $host:$server_port;
       proxy_set_header X-Forwarded-Server $host;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header Host $host;
       proxy_connect_timeout      300;
       proxy_send_timeout         300;
       proxy_read_timeout         300;
       proxy_pass         http://docker-pihole;
   }
           access_log /tmp/pihole-access.log main;
           error_log /tmp/pihole-error.log error;
}
}
...