Я пытаюсь настроить архитектуру микросервисов для личного блога.
Идея состоит в том, чтобы иметь контейнер 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.