Estoy tratando de configurar una arquitectura de microservicios para un blog personal.
La idea es tener un contenedor NGINX que sirva un sitio Gatsby estático y redirigir a otros servicios. Por ejemplo, me gustaría tener una aplicación de reacción en /todos y una API para esa aplicación de tareas en /todos_api.
Mi estructura de carpetas actual es así:
Mi archivo docker-compose se ve así:
version: "3" services: gatsby: restart: always build: dockerfile: Dockerfile context: ./gatsby_blog ports: - "80:80" todoclient: build: dockerfile: Dockerfile context: ./portfolio/todos/todo_clientMi archivo nginx principal de Gatsby se ve así:
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; } }y mi configuración de React nginx es así:
server { listen 3000; location / { root /usr/share/nginx/html; index index.html index.htm; } }El problema del que estoy bastante seguro es con mis configuraciones de nginx. Cuando voy a localhost me encuentro con la aplicación gatsby, pero si voy a /todos me sale un error de nginx. Puedo ver que la solicitud se pasa correctamente al contenedor todoclient, pero el error devuelto es:
open() "/usr/share/nginx/html/todos" falló (2: No existe tal archivo o directorio
Si alguien puede ver dónde me estoy equivocando con las configuraciones de nginx, realmente lo agradecería. También puedo publicar mis Dockerfiles si es necesario. Gracias
Logré que el proxy funcione ahora, pero el problema es que la aplicación Todos no puede encontrar sus archivos estáticos. Están en el lugar correcto en el contenedor, y el contenedor funciona de forma aislada, por lo que el problema tiene que ver con docker-compose y el proxy nginx.
Hecho para angular. El archivo nginx debe reemplazar el archivo en /etc/nginx/nginx.conf. Y coloque la carpeta todos, suponiendo que tenga las páginas estáticas, en /usr/share/nginx/html. Puedes probar un servicio a la vez
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; } } }