Feat Docker Files
This commit is contained in:
26
backend/Dockerfile
Normal file
26
backend/Dockerfile
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# --- Etapa 1: Compilación (Build) ---
|
||||||
|
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Copiar archivos de proyecto y restaurar dependencias primero para aprovechar el caché de Docker
|
||||||
|
COPY backend/src/Titulares.Api/Titulares.Api.csproj backend/src/Titulares.Api/
|
||||||
|
RUN dotnet restore backend/src/Titulares.Api/Titulares.Api.csproj
|
||||||
|
|
||||||
|
# Copiar el resto del código fuente del backend
|
||||||
|
COPY backend/src/ ./backend/src/
|
||||||
|
|
||||||
|
# Publicar la aplicación en modo Release
|
||||||
|
RUN dotnet publish backend/src/Titulares.Api/Titulares.Api.csproj -c Release -o /app/publish
|
||||||
|
|
||||||
|
# --- Etapa 2: Imagen Final (Final) ---
|
||||||
|
FROM mcr.microsoft.com/dotnet/aspnet:9.0
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Copiar solo los artefactos compilados desde la etapa de build
|
||||||
|
COPY --from=build /app/publish .
|
||||||
|
|
||||||
|
# Exponer el puerto interno que ASP.NET Core usará por defecto en Docker
|
||||||
|
EXPOSE 8080
|
||||||
|
|
||||||
|
# Comando para iniciar la aplicación
|
||||||
|
ENTRYPOINT ["dotnet", "Titulares.Api.dll"]
|
||||||
@@ -7,6 +7,6 @@
|
|||||||
},
|
},
|
||||||
"AllowedHosts": "*",
|
"AllowedHosts": "*",
|
||||||
"ConnectionStrings": {
|
"ConnectionStrings": {
|
||||||
"DefaultConnection": "Server=TECNICA3;Database=TitularesDB;User Id=titularesApi;Password=PTP847Titulares;Trusted_Connection=True;TrustServerCertificate=True;"
|
"DefaultConnection": "Server=db-sqlserver;Database=TitularesDB;User Id=titularesApi;Password=PTP847Titulares;Trusted_Connection=True;TrustServerCertificate=True;"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
48
docker-compose.yml
Normal file
48
docker-compose.yml
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
services:
|
||||||
|
# Servicio del Backend
|
||||||
|
titulares-api:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: backend/Dockerfile
|
||||||
|
container_name: titulares-api
|
||||||
|
restart: unless-stopped
|
||||||
|
expose:
|
||||||
|
- "8080"
|
||||||
|
networks:
|
||||||
|
- titulares-net
|
||||||
|
- shared-net # Se conecta a la red compartida para acceder a la DB
|
||||||
|
|
||||||
|
# Servicio del Frontend
|
||||||
|
titulares-frontend:
|
||||||
|
build:
|
||||||
|
context: ./frontend
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
container_name: titulares-frontend
|
||||||
|
restart: unless-stopped
|
||||||
|
expose:
|
||||||
|
- "80"
|
||||||
|
networks:
|
||||||
|
- titulares-net
|
||||||
|
|
||||||
|
# Proxy Inverso
|
||||||
|
titulares-proxy:
|
||||||
|
image: nginx:1.25-alpine
|
||||||
|
container_name: titulares-proxy
|
||||||
|
restart: unless-stopped
|
||||||
|
volumes:
|
||||||
|
- ./frontend/proxy/nginx.conf:/etc/nginx/conf.d/default.conf
|
||||||
|
ports:
|
||||||
|
- "8905:80" # Usamos el puerto 8905 para no colisionar con otros
|
||||||
|
networks:
|
||||||
|
- titulares-net
|
||||||
|
depends_on:
|
||||||
|
- titulares-api
|
||||||
|
- titulares-frontend
|
||||||
|
|
||||||
|
networks:
|
||||||
|
# Red interna para la comunicación entre los servicios de esta aplicación
|
||||||
|
titulares-net:
|
||||||
|
driver: bridge
|
||||||
|
# Red externa preexistente para la base de datos
|
||||||
|
shared-net:
|
||||||
|
external: true
|
||||||
25
frontend/Dockerfile
Normal file
25
frontend/Dockerfile
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
# --- Etapa 1: Compilación (Build) ---
|
||||||
|
FROM node:20-alpine AS build
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Copiar package.json y package-lock.json para instalar dependencias
|
||||||
|
COPY package*.json ./
|
||||||
|
RUN npm install
|
||||||
|
|
||||||
|
# Copiar el resto del código fuente del frontend
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
# Construir la aplicación de producción
|
||||||
|
RUN npm run build
|
||||||
|
|
||||||
|
# --- Etapa 2: Servidor de Producción (Final) ---
|
||||||
|
FROM nginx:1.25-alpine
|
||||||
|
|
||||||
|
# Copiar los archivos estáticos construidos en la etapa anterior al directorio web de Nginx
|
||||||
|
COPY --from=build /app/dist /usr/share/nginx/html
|
||||||
|
|
||||||
|
# Exponer el puerto 80, que es el puerto por defecto de Nginx
|
||||||
|
EXPOSE 80
|
||||||
|
|
||||||
|
# El comando por defecto de la imagen de Nginx se encargará de iniciar el servidor
|
||||||
|
CMD ["nginx", "-g", "daemon off;"]
|
||||||
40
frontend/proxy/nginx.conf
Normal file
40
frontend/proxy/nginx.conf
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
# Define el servidor upstream para la API, usando el nombre del servicio de Docker Compose
|
||||||
|
upstream api_server {
|
||||||
|
server titulares-api:8080;
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
|
||||||
|
# Redirigir todas las peticiones que comiencen con /api/ al servicio del backend
|
||||||
|
location /api/ {
|
||||||
|
proxy_pass http://api_server;
|
||||||
|
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-Proto $scheme;
|
||||||
|
|
||||||
|
# Cabeceras importantes para SignalR (WebSockets)
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection "Upgrade";
|
||||||
|
}
|
||||||
|
|
||||||
|
# Redirigir todas las peticiones que comiencen con /titularesHub (para SignalR)
|
||||||
|
location /titularesHub {
|
||||||
|
proxy_pass http://api_server;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection "Upgrade";
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_cache_bypass $http_upgrade;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Servir los archivos del frontend para todas las demás peticiones
|
||||||
|
location / {
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
index index.html;
|
||||||
|
# Esta línea es crucial para que el enrutamiento de React funcione correctamente (Single Page Application)
|
||||||
|
try_files $uri $uri/ /index.html;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user