Nginx, Docker и Docker Составить - PullRequest
       20

Nginx, Docker и Docker Составить

2 голосов
/ 18 апреля 2020

Я пытаюсь настроить архитектуру микросервисов для личного блога.

Идея состоит в том, чтобы иметь контейнер NGINX для обслуживания сайта stati c gatsby и перенаправлять на другие сервисы. Например, я хотел бы иметь приложение реагирования в / todos и API для этого приложения todo в /todos_api.

Моя текущая структура папок выглядит следующим образом:

  • docker -compose.yml
  • gatsby_blog
    • (содержит папку для сборки)
    • nginx
      • default.conf (это мой основной nginx запись)
  • портфолио
    • задачи
      • todo_client
        • nginx
          • default.conf (это только для обслуживания приложения реагирования)
      • todo_api

Мой docker -компонентный файл выглядит так:

version: "3"

services:
  gatsby:
    restart: always
    build:
      dockerfile: Dockerfile
      context: ./gatsby_blog
    ports:
      - "80:80"
  todoclient:
    build:
      dockerfile: Dockerfile
      context: ./portfolio/todos/todo_client

Мой основной файл Gatsby nginx выглядит так:

upstream todoclient {
  server todoclient:3000;
}

server {
  listen 80;

  location / {
    root /usr/share/nginx/html;
    index index.html index.htm;
  }

  location /todos {
      rewrite /todos/(.*) /$1 break;
      proxy_pass http://todoclient;
  }
}

и мой React nginx config выглядит так:

server {
  listen 3000;

  location / {
    root /usr/share/nginx/html;
    index index.html index.htm;
  }
}

Проблема, в которой я почти уверен, связана с моими nginx конфигами. Когда я go на localhost, я встречаюсь с приложением gatsby, но если я go to / todos, я получаю ошибку nginx. Я вижу, что запрос правильно передается в контейнер todoclient, но возвращается ошибка:

open () "/ usr / share / nginx / html / todos" не удалось (2: Нет такой файл или каталог

Если кто-нибудь может увидеть, где я ошибаюсь с nginx конфигами, я был бы очень признателен. Я могу также опубликовать свои файлы Docker, если это необходимо. Спасибо

EDIT

Мне удалось заставить прокси работать сейчас, но проблема в том, что приложение todos не может найти свои stati c файлы. Они находятся в правильном месте в контейнере, и Контейнер работает изолированно, поэтому проблема заключается в docker -compose и nginx proxy.

1 Ответ

0 голосов
/ 18 апреля 2020

Сделано за angular. Файл nginx должен заменить файл в /etc/nginx/nginx.conf. И поместите папку с задачами (при условии, что в ней есть данные c) - в / usr / share / nginx / html. Вы можете попробовать одну услугу за раз



http {


    server {
        listen 80;
        server_name  localhost;

        root   /usr/share/nginx/html;
        include /etc/nginx/mime.types;


        location /todos {
            alias /usr/share/nginx/html/todos/;
            absolute_redirect off;
            rewrite ^(.+)/todos/+$ $1 permanent;
            rewrite ^(.+)/todos/index.html$ $1 permanent;    


            try_files $uri$args $uri$args/ $uri/ /todos/index.html;

        }

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...