diff --git a/sk1/Dockerfile b/sk1/Dockerfile new file mode 100644 index 0000000..08f157b --- /dev/null +++ b/sk1/Dockerfile @@ -0,0 +1,20 @@ +FROM python:3.9-slim + +# Set the working directory to /app +WORKDIR /app + +# Copy requirements.txt from the app folder +COPY ./app/requirements.txt . + +# Install dependencies +RUN pip install -r requirements.txt + +# Copy the entire app folder into the container +COPY ./app /app + +# Expose port 5000 +EXPOSE 5000 + +# Run the app +CMD ["python", "app.py"] + diff --git a/sk1/deploy.sh b/sk1/deploy.sh new file mode 100644 index 0000000..1545f27 --- /dev/null +++ b/sk1/deploy.sh @@ -0,0 +1,78 @@ +#!/bin/bash + +# Variables +RESOURCE_GROUP="travel-planner" +AKS_CLUSTER="travelplanneraks" +ACR_NAME="travelplannerregistry" # Nom en minuscules sans tirets +NAMESPACE="travel-planner" +IMAGE_NAME="travel-planner" +IMAGE_TAG="latest" +LOCATION="eastus" + +echo "==== Déploiement Azure - Création des ressources ====" + +az login + +# Étape 1: Créer le groupe de ressources s'il n'existe pas +echo "Création du groupe de ressources..." +az group create --name $RESOURCE_GROUP --location $LOCATION || exit 1 + +# Étape 2: Créer le registre de conteneurs Azure (ACR) +echo "Création du registre de conteneurs Azure..." +az acr create --resource-group $RESOURCE_GROUP --name $ACR_NAME --sku Basic || exit 1 + +# Étape 3: Créer le cluster AKS +echo "Création du cluster AKS (cela peut prendre plusieurs minutes)..." +az aks create \ + --resource-group $RESOURCE_GROUP \ + --name $AKS_CLUSTER \ + --node-count 1 \ + --enable-addons monitoring \ + --generate-ssh-keys \ + --attach-acr $ACR_NAME + +# Étape 4: Connexion au cluster AKS +echo "Connexion au cluster AKS..." +az aks get-credentials --resource-group $RESOURCE_GROUP --name $AKS_CLUSTER || exit 1 + +# Étape 5: Créer le namespace Kubernetes +echo "Création du namespace Kubernetes..." +kubectl create namespace $NAMESPACE || true + +# Étape 6: Construire et pousser l'image Docker vers ACR +echo "Construction et publication de l'image Docker..." +# Se connecter à l'ACR +az acr login --name $ACR_NAME + +# Taguer l'image avec le nom de l'ACR +docker pull chabooo/travel-planner:latest +docker tag chabooo/travel-planner:latest ${ACR_NAME}.azurecr.io/${IMAGE_NAME} +docker push ${ACR_NAME}.azurecr.io/${IMAGE_NAME} + +# Étape 7: Mise à jour du fichier deployment.yaml pour utiliser l'image de l'ACR +echo "Mise à jour du fichier deployment.yaml..." +sed -i "s|image:.*|image: ${ACR_NAME}.azurecr.io/${IMAGE_NAME}|" k8s/deployment.yaml + +# Étape 8: Appliquer les ressources Kubernetes +echo "Déploiement des ressources Kubernetes..." +kubectl apply -f k8s/namespace.yaml -n $NAMESPACE +kubectl apply -f k8s/secret.yaml -n $NAMESPACE +kubectl apply -f k8s/persistent-volume.yaml -n $NAMESPACE +kubectl apply -f k8s/persistent-volume-claim.yaml -n $NAMESPACE +kubectl apply -f k8s/postgres-service.yaml -n $NAMESPACE +kubectl apply -f k8s/statefulset.yaml -n $NAMESPACE +kubectl apply -f k8s/deployment.yaml -n $NAMESPACE +kubectl apply -f k8s/service.yaml -n $NAMESPACE + +# Étape 9: Attendre que les pods soient prêts +echo "Attente du déploiement des pods..." +kubectl wait --namespace $NAMESPACE --for=condition=ready pod -l app=postgres --timeout=300s +kubectl wait --namespace $NAMESPACE --for=condition=ready pod -l app=travel-planner --timeout=300s + +# Étape 10: Afficher l'URL d'accès +echo "Application déployée. URL d'accès:" +kubectl get svc travel-planner -n $NAMESPACE -o jsonpath='{.status.loadBalancer.ingress[0].ip}' +echo "" + +echo "==== Déploiement Azure terminé ====" + diff --git a/sk1/prepare-app.sh b/sk1/prepare-app.sh new file mode 100644 index 0000000..9528ede --- /dev/null +++ b/sk1/prepare-app.sh @@ -0,0 +1,14 @@ +#!/bin/bash +echo "Preparing app" + +# build image Docker +docker build -t chabooo/travel-planner:latest . + +echo "Sucessfuly built" + +# push docker image +docker push chabooo/travel-planner:latest + +echo "sucessfuly pushed" + +echo "Preparation completed."