diff --git a/Makefile b/Makefile index be0e188..e55b7e9 100644 --- a/Makefile +++ b/Makefile @@ -1,38 +1,55 @@ -.PHONY: help build-backend build-frontend build-all deploy undeploy clean +# Переменные для путей к утилитам +KIND_PATH = /home/tactile/.kind-d8/kind +KUBECTL_PATH = /home/tactile/.kind-d8/kubectl + +.PHONY: help build-backend build-backend-dotnet build-frontend build-all load-images deploy undeploy clean help: @echo "Доступные команды:" - @echo " make build-backend - Собрать Docker образ бэкенда" + @echo " make build-backend - Собрать Docker образ Python бэкенда" + @echo " make build-backend-dotnet - Собрать Docker образ .NET бэкенда" @echo " make build-frontend - Собрать Docker образ фронтенда" @echo " make build-all - Собрать все Docker образы" + @echo " make load-images - Загрузить образы в kind кластер" @echo " make deploy - Развернуть приложение в k8s" @echo " make undeploy - Удалить приложение из k8s" @echo " make clean - Очистить все ресурсы" build-backend: - @echo "Сборка backend образа..." + @echo "Сборка Python backend образа..." docker build -t python-navigator-demo-backend:latest ./backend +build-backend-dotnet: + @echo "Сборка .NET backend образа..." + docker build -t python-navigator-demo-backend-dotnet:latest ./backend-dotnet + build-frontend: @echo "Сборка frontend образа..." docker build -t python-navigator-demo-frontend:latest ./frontend -build-all: build-backend build-frontend +build-all: build-backend build-backend-dotnet build-frontend @echo "Все образы собраны успешно!" +load-images: + @echo "Загрузка образов в kind кластер..." + $(KIND_PATH) load docker-image python-navigator-demo-backend:latest --name d8 + $(KIND_PATH) load docker-image python-navigator-demo-backend-dotnet:latest --name d8 + $(KIND_PATH) load docker-image python-navigator-demo-frontend:latest --name d8 + @echo "Образы загружены в kind кластер!" + deploy: @echo "Развертывание приложения в Kubernetes..." - ~/.kind-d8/kubectl apply -k k8s/ + $(KUBECTL_PATH) apply -k k8s/ @echo "Приложение развернуто!" @echo "Доступно по адресу: https://python-navigator-demo.127.0.0.1.sslip.io" undeploy: @echo "Удаление приложения из Kubernetes..." - ~/.kind-d8/kubectl delete -k k8s/ + $(KUBECTL_PATH) delete -k k8s/ @echo "Приложение удалено!" clean: undeploy @echo "Очистка Docker образов..." - docker rmi navigator-demo-backend:latest navigator-demo-frontend:latest || true + docker rmi python-navigator-demo-backend:latest python-navigator-demo-backend-dotnet:latest python-navigator-demo-frontend:latest || true @echo "Очистка завершена!" diff --git a/backend-dotnet/Program.cs b/backend-dotnet/Program.cs index af69e8e..c9fc2ae 100644 --- a/backend-dotnet/Program.cs +++ b/backend-dotnet/Program.cs @@ -5,6 +5,16 @@ using Npgsql; var builder = WebApplication.CreateBuilder(args); +// // Force binding to all interfaces in Kubernetes +// Console.WriteLine($"ASPNETCORE_URLS env var: {Environment.GetEnvironmentVariable("ASPNETCORE_URLS")}"); +// Console.WriteLine($"ASPNETCORE_HTTP_PORTS env var: {Environment.GetEnvironmentVariable("ASPNETCORE_HTTP_PORTS")}"); + +// // Clear any existing configuration and force our URL +// builder.WebHost.ConfigureKestrel(options => +// { +// options.ListenAnyIP(8000); +// }); + // Configuration var config = new AppConfig { diff --git a/backend-dotnet/appsettings.json b/backend-dotnet/appsettings.json index 3a4a202..fb87850 100644 --- a/backend-dotnet/appsettings.json +++ b/backend-dotnet/appsettings.json @@ -5,7 +5,6 @@ "Microsoft.AspNetCore": "Warning" } }, - "AllowedHosts": "*", - "Urls": "http://localhost:8000" + "AllowedHosts": "*" } diff --git a/k8s/backend-dotnet.yaml b/k8s/backend-dotnet.yaml new file mode 100644 index 0000000..9b17d2a --- /dev/null +++ b/k8s/backend-dotnet.yaml @@ -0,0 +1,78 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: backend-dotnet-config + namespace: python-navigator-demo +data: + DB_HOST: postgres + DB_PORT: "5432" + DB_NAME: python-navigator-demo + DB_USER: python-navigator-demo + DEX_ISSUER: https://dex.127.0.0.1.sslip.io/ +--- +apiVersion: v1 +kind: Secret +metadata: + name: backend-dotnet-secret + namespace: python-navigator-demo +type: Opaque +stringData: + DB_PASSWORD: python-navigator-demo +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: backend-dotnet + namespace: python-navigator-demo +spec: + selector: + matchLabels: + app: backend-dotnet + template: + metadata: + labels: + app: backend-dotnet + spec: + containers: + - name: backend-dotnet + image: python-navigator-demo-backend-dotnet:latest + imagePullPolicy: Never # Для локальной разработки + ports: + - containerPort: 8000 + env: + - name: ASPNETCORE_URLS + value: "http://0.0.0.0:8000" + # - name: ASPNETCORE_HTTP_PORTS + # value: "8000" + envFrom: + - configMapRef: + name: backend-dotnet-config + - secretRef: + name: backend-dotnet-secret + # livenessProbe: + # httpGet: + # path: /api/health + # port: 8000 + # initialDelaySeconds: 10 + # periodSeconds: 10 + # readinessProbe: + # httpGet: + # path: /api/health + # port: 8000 + # initialDelaySeconds: 5 + # periodSeconds: 5 + +--- +apiVersion: v1 +kind: Service +metadata: + name: backend-dotnet + namespace: python-navigator-demo +spec: + selector: + app: backend-dotnet + ports: + - port: 8000 + targetPort: 8000 + type: ClusterIP + diff --git a/k8s/backend.yaml b/k8s/backend.yaml index 1627f17..fd33b62 100644 --- a/k8s/backend.yaml +++ b/k8s/backend.yaml @@ -35,7 +35,7 @@ spec: spec: containers: - name: backend - image: navigator-demo-backend:latest + image: python-navigator-demo-backend:latest imagePullPolicy: Never # Для локальной разработки ports: - containerPort: 8000 diff --git a/k8s/ingress.yaml b/k8s/ingress.yaml index eb9615b..843a5a0 100644 --- a/k8s/ingress.yaml +++ b/k8s/ingress.yaml @@ -22,14 +22,22 @@ spec: - host: python-navigator-demo.127.0.0.1.sslip.io http: paths: - # API запросы идут напрямую в backend + # API запросы для .NET backend - path: /api pathType: Prefix backend: service: - name: backend + name: backend-dotnet port: number: 8000 + # API запросы идут напрямую в Python backend + # - path: /api + # pathType: Prefix + # backend: + # service: + # name: backend + # port: + # number: 8000 # Все остальное идет в frontend - path: / pathType: Prefix