Автообнаружение Containerpilot не работает с несколькими службами - PullRequest
0 голосов
/ 02 мая 2019

Это приложение я реализовал на сервис-обнаружении с использованием containerpilot и nginx. Я ссылался на этот URL - https://github.com/MohamedFawzy/hotels

Этот URL-адрес реализован в приложениях консула, контейнерного пилота, nginx и отдельного laravel. Я реализовал так же. Работает нормально.

Я хочу интегрировать микроуслуги в несколько API с несколькими папками. Я изменил несколько изменений в нескольких файлах. Ниже моей новой структуры папок.

projectName
    |_ source
        |_ index.php
        |_ customer
             |_ Lumen Files
        |_ vendor
             |_ Lumen Files
        |_ driver
             |_ Lumen Files
    |_ docker
        |_ docker-compose.yml
        |_ autodiscovery
             |_ Dockerfile
        |_ microservices
             |_ nginx
                    |_ config
                            |_  containerpilot.json
                            |_  nginx
                                   |_  nginx.conf.ctmpl
                    |_ Dockerfile
                    |_ scripts
                            |_  reload.sh
                            |_  sensor.sh
             |_ customer
                    |_ php-fpm
                            |_  config
                                   |_  containerpilot.json
                            |_  Dockerfile
                            |_  scripts
                                   |_  reload.sh
             |_ vendor
                    |_ php-fpm
                            |_  config
                                   |_  containerpilot.json
                            |_  Dockerfile
                            |_  scripts
                                   |_  reload.sh
             |_ driver
                    |_ php-fpm
                            |_  config
                                   |_  containerpilot.json
                            |_  Dockerfile
                            |_  scripts
                                   |_  reload.sh

Я добавил файл docker-compose.yml.

version: '2'
services:
    ##
    # Autodiscovery : Consul
    ##
    autodiscovery:
        build: ./autodiscovery/
        mem_limit: 128m
        expose:
            - 53
            - 8300
            - 8301
            - 8302
            - 8400
            - 8500
        ports:
            - 8500:8500
        dns:
            - 127.0.0.1

    ##
    # Battle Microservice
    ##
    microservice_customer_1_0:
        build: ./microservices/customer/php-fpm/
        links:
            - autodiscovery
        environment:
            - BACKEND=microservice-nginx-new
            - CONSUL=autodiscovery
        ports:
            - 9001:9000
    ##
    microservice_vendor_1_0:
        build: ./microservices/vendor/php-fpm/
        links:
            - autodiscovery
        environment:
            - BACKEND=microservice-nginx-new
            - CONSUL=autodiscovery
        ports:
            - 9002:9000
    ##
    microservice_driver_1_0:
        build: ./microservices/driver/php-fpm/
        links:
            - autodiscovery
        environment:
            - BACKEND=microservice-nginx-new
            - CONSUL=autodiscovery
        ports:
            - 9003:9000

    microservice_nginx:
        build: ./microservices/nginx/
        links:
            - autodiscovery
        environment:
            - BACKEND=microservice-customer_1_0
            - BACKEND=microservice-vendor_1_0
            - BACKEND=microservice-driver_1_0
            - CONSUL=autodiscovery
        ports:
            - 8081:80
            - 9091:9090

    #mysqldb:
    #  image: mysql:latest
    #  container_name: "mysqldb"
    #  ports:
    #    - "3307:3306"

Папка Microservice, имеющая папку nginx. Эта папка с файлом nginx.ctmpl. В этот файл я добавил данные сервера.

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

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

    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;
    keepalive_timeout 65;
    gzip              on;

    {{ $backend := env "BACKEND" }}
    {{ if service $backend }}
    upstream {{ $backend }} {
        # write the address:port pairs for each healthy backend instance
        {{range service $backend }}
        server {{.Address}}:{{.Port}};
        {{end}}
        least_conn;
    }{{ end }}

    server {
        listen       80 default_server;
        server_name  _;
        root /var/www/html/source;
        index index.php index.html;

        charset utf-8;

        location /nginx-health {
            access_log off;
            error_log off;
            stub_status on;
            allow 127.0.0.1;
            deny all;
        }

        location = /favicon.ico { access_log off; log_not_found off; }
        location = /robots.txt  { access_log off; log_not_found off; }

        access_log /var/log/nginx/access.log;
        error_log  /var/log/nginx/error.log error;

        sendfile off;

        client_max_body_size 100m;

        location / {
            try_files $uri $uri/ /index.php?_url=$uri&$args;
        }

        location ^~ /customer {
            root /var/www/html/source/customer/public;
        }

        location ^~ /vendor {
            root /var/www/html/source/vendor/public;
        }

        location ^~ /driver {
            root /var/www/html/source/driver/public;
        }

        location ~ /\.ht {
            deny all;
        }

        {{ if service $backend }}
            location ~ \.php$ {
                try_files     $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass {{ $backend }};
                fastcgi_index /index.php;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_intercept_errors off;
                fastcgi_buffer_size 16k;
                fastcgi_buffers 4 16k;
            }
        {{ end }}
    }
}

Я запустил команду compose.

docker-compose up --build -d

Я проверил в браузере пользовательский интерфейс консула. Работает нормально. https://ibb.co/9rf2zw9

Я проверил URL. Это показывает 404 не найдена ошибка. https://ibb.co/dbyWP78

...