diff --git a/.gitea/workflows/deploy-alpha.yml b/.gitea/workflows/deploy-alpha.yml index fff4588..67e10a8 100644 --- a/.gitea/workflows/deploy-alpha.yml +++ b/.gitea/workflows/deploy-alpha.yml @@ -63,8 +63,8 @@ jobs: - name: Deploy to k3s run: | - kubectl apply -k deploy/k3s/ --kubeconfig ~/.kube/config + kubectl apply -k deploy/k3s/alpha --kubeconfig ~/.kube/config kubectl set image deployment/hosting-frontend \ hosting-frontend=${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USER }}/hosting-frontend:${{ github.sha }} \ - -n hosting --kubeconfig ~/.kube/config - kubectl rollout status deployment/hosting-frontend -n hosting --kubeconfig ~/.kube/config + -n hosting-alpha --kubeconfig ~/.kube/config + kubectl rollout status deployment/hosting-frontend -n hosting-alpha --kubeconfig ~/.kube/config diff --git a/.gitea/workflows/deploy-prod.yml b/.gitea/workflows/deploy-prod.yml new file mode 100644 index 0000000..92e6bcb --- /dev/null +++ b/.gitea/workflows/deploy-prod.yml @@ -0,0 +1,67 @@ +name: Build and Deploy to k3s +on: + push: + tags: + - 'PROD*' + +jobs: + build-and-deploy: + env: + KUBECONFIG: ~/.kube/config + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: '22' + + + - name: Install dependencies + run: npm ci + + - name: Build Angular app + run: npm run build --prod + + - name: Build Docker image + run: | + docker build -t ${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USER }}/hosting-frontend:${{ github.sha }} . + docker tag ${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USER }}/hosting-frontend:${{ github.sha }} ${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USER }}/hosting-frontend:latest + + - name: Login to Container Registry + run: echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login ${{ secrets.REGISTRY_URL }} -u "${{ secrets.REGISTRY_USER }}" --password-stdin + + - name: Push Docker image + run: | + docker push ${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USER }}/hosting-frontend:${{ github.sha }} + docker push ${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USER }}/hosting-frontend:latest + + - name: Setup kubectl + uses: azure/setup-kubectl@v3 + with: + version: 'latest' + + - name: Configure kubectl + run: | + mkdir -p ~/.kube + echo "${{ secrets.KUBE_CONFIG }}" | base64 -d > ~/.kube/config + chmod 600 ~/.kube/config + + + - name: Validate kubeconfig + run: | + if ! kubectl version --client && kubectl cluster-info --kubeconfig ~/.kube/config; then + echo "❌ Failed to connect to cluster" + exit 1 + fi + + + - name: Deploy to k3s + run: | + kubectl apply -k deploy/k3s/prod --kubeconfig ~/.kube/config + kubectl set image deployment/hosting-frontend \ + hosting-frontend=${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USER }}/hosting-frontend:${{ github.sha }} \ + -n hosting --kubeconfig ~/.kube/config + kubectl rollout status deployment/hosting-frontend -n hosting --kubeconfig ~/.kube/config diff --git a/deploy/k3s/alpha/frontend/deployment.yml b/deploy/k3s/alpha/frontend/deployment.yml new file mode 100644 index 0000000..d9b81ae --- /dev/null +++ b/deploy/k3s/alpha/frontend/deployment.yml @@ -0,0 +1,20 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: hosting-frontend + namespace: hosting-alpha +spec: + replicas: 1 + selector: + matchLabels: + app: hosting-frontend + template: + metadata: + labels: + app: hosting-frontend + spec: + containers: + - name: hosting-frontend + image: gitea.vidoks.fr/sortifal/hosting-frontend:latest + ports: + - containerPort: 80 diff --git a/deploy/k3s/alpha/frontend/ingress.yml b/deploy/k3s/alpha/frontend/ingress.yml new file mode 100644 index 0000000..0bfbd60 --- /dev/null +++ b/deploy/k3s/alpha/frontend/ingress.yml @@ -0,0 +1,21 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: hosting-ingress + namespace: hosting-alpha + annotations: + kubernetes.io/ingress.class: traefik + traefik.ingress.kubernetes.io/router.entrypoints: web + traefik.ingress.kubernetes.io/router.middlewares: alpha-allow-local@kubernetescrd +spec: + rules: + - host: alpha.portfolio-host.com + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: hosting-frontend-service + port: + number: 80 diff --git a/deploy/k3s/alpha/frontend/kustomization.yml b/deploy/k3s/alpha/frontend/kustomization.yml new file mode 100644 index 0000000..d32ed33 --- /dev/null +++ b/deploy/k3s/alpha/frontend/kustomization.yml @@ -0,0 +1,6 @@ +namespace: hosting-alpha +resources: + - deployment.yml + - service.yml + - ingress.yml + - middleware.yml diff --git a/deploy/k3s/alpha/frontend/middleware.yml b/deploy/k3s/alpha/frontend/middleware.yml new file mode 100644 index 0000000..4fdb549 --- /dev/null +++ b/deploy/k3s/alpha/frontend/middleware.yml @@ -0,0 +1,10 @@ +apiVersion: traefik.io/v1alpha1 +kind: Middleware +metadata: + name: allow-local + namespace: hosting-alpha +spec: + ipWhiteList: + sourceRange: + - 127.0.0.1/32 + - 192.168.1.0/24 diff --git a/deploy/k3s/alpha/frontend/service.yml b/deploy/k3s/alpha/frontend/service.yml new file mode 100644 index 0000000..0e9a84d --- /dev/null +++ b/deploy/k3s/alpha/frontend/service.yml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + name: hosting-frontend-service + namespace: hosting-alpha +spec: + selector: + app: hosting-frontend + ports: + - port: 80 + targetPort: 80 + type: ClusterIP diff --git a/deploy/k3s/alpha/kustomization.yml b/deploy/k3s/alpha/kustomization.yml new file mode 100644 index 0000000..c6a2161 --- /dev/null +++ b/deploy/k3s/alpha/kustomization.yml @@ -0,0 +1,8 @@ +--- + +kind: Kustomization +namespace: hosting-alpha + +resources: + - namespace.yml + - frontend diff --git a/deploy/k3s/alpha/namespace.yml b/deploy/k3s/alpha/namespace.yml new file mode 100644 index 0000000..548de4b --- /dev/null +++ b/deploy/k3s/alpha/namespace.yml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: hosting-alpha diff --git a/deploy/k3s/frontend/deployment.yml b/deploy/k3s/prod/frontend/deployment.yml similarity index 100% rename from deploy/k3s/frontend/deployment.yml rename to deploy/k3s/prod/frontend/deployment.yml diff --git a/deploy/k3s/frontend/ingress.yml b/deploy/k3s/prod/frontend/ingress.yml similarity index 100% rename from deploy/k3s/frontend/ingress.yml rename to deploy/k3s/prod/frontend/ingress.yml diff --git a/deploy/k3s/frontend/kustomization.yml b/deploy/k3s/prod/frontend/kustomization.yml similarity index 100% rename from deploy/k3s/frontend/kustomization.yml rename to deploy/k3s/prod/frontend/kustomization.yml diff --git a/deploy/k3s/frontend/service.yml b/deploy/k3s/prod/frontend/service.yml similarity index 100% rename from deploy/k3s/frontend/service.yml rename to deploy/k3s/prod/frontend/service.yml diff --git a/deploy/k3s/kustomization.yml b/deploy/k3s/prod/kustomization.yml similarity index 100% rename from deploy/k3s/kustomization.yml rename to deploy/k3s/prod/kustomization.yml diff --git a/deploy/k3s/namespace.yml b/deploy/k3s/prod/namespace.yml similarity index 100% rename from deploy/k3s/namespace.yml rename to deploy/k3s/prod/namespace.yml