From ae95b80af979f754deaf90d137919cfb4b6bc09e Mon Sep 17 00:00:00 2001 From: ange Date: Fri, 23 May 2025 04:19:21 +0000 Subject: [PATCH] first commit --- .env | 1 + .gitea/workflows/deploy.yaml | 24 ++++++++++++ README.md | 1 + default.conf | 9 +++++ manifests/bin/deploy.sh | 40 ++++++++++++++++++++ manifests/bin/devel.sh | 6 +++ manifests/bin/prod.sh | 6 +++ manifests/common/app.yaml | 71 ++++++++++++++++++++++++++++++++++++ manifests/devel/.gitkeep | 0 manifests/prod/.gitkeep | 0 10 files changed, 158 insertions(+) create mode 100644 .env create mode 100644 .gitea/workflows/deploy.yaml create mode 100644 README.md create mode 100644 default.conf create mode 100755 manifests/bin/deploy.sh create mode 100755 manifests/bin/devel.sh create mode 100755 manifests/bin/prod.sh create mode 100644 manifests/common/app.yaml create mode 100644 manifests/devel/.gitkeep create mode 100644 manifests/prod/.gitkeep diff --git a/.env b/.env new file mode 100644 index 0000000..a358ace --- /dev/null +++ b/.env @@ -0,0 +1 @@ +BASE_URL=cocoonlovina.com diff --git a/.gitea/workflows/deploy.yaml b/.gitea/workflows/deploy.yaml new file mode 100644 index 0000000..6bb8cd8 --- /dev/null +++ b/.gitea/workflows/deploy.yaml @@ -0,0 +1,24 @@ +on: push + +jobs: + deploy: + runs-on: debian + steps: + - uses: actions/checkout@v1 + - name: setup env + run: | + . ./.env || true + if [ "${{ gitea.ref_name }}" == prod ] && [ -n "$PROD_URL" ]; then + BASE_URL="$PROD_URL" + else + BASE_URL="${{ gitea.ref_name }}.$(tr / '\n' <<< "${{ gitea.repository }}" | tac | tr '\n' .)k8s.gmoker.com" + fi + cat <> .env + BASE_URL="$BASE_URL" + EOF + cat .env + + - uses: actions/k8sdeploy@v1 + with: + kubeconfig: "${{ secrets.K8S }}" + registry_password: "${{ secrets.PKGRW }}" diff --git a/README.md b/README.md new file mode 100644 index 0000000..e441b19 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# cocoon.com diff --git a/default.conf b/default.conf new file mode 100644 index 0000000..fc4a95e --- /dev/null +++ b/default.conf @@ -0,0 +1,9 @@ +server { + listen 80; + listen [::]:80; + server_name $BASE_URL; + + location / { + proxy_pass https://contact978194.wixsite.com/cocoon-lovina-ok; + } +} diff --git a/manifests/bin/deploy.sh b/manifests/bin/deploy.sh new file mode 100755 index 0000000..80d0501 --- /dev/null +++ b/manifests/bin/deploy.sh @@ -0,0 +1,40 @@ +#!/bin/bash -e +set -o pipefail + +function kapply() { + for f in "$@"; do + kubectl apply --server-side \ + -f<(envsubst "$(env | sed 's/^/$/')" < "manifests/$f") + done +}; export -f kapply + +function kcreatesec() { + kubectl apply --server-side \ + -f<(kubectl create secret generic --dry-run=client -oyaml "$@") +}; export -f kcreatesec + +function kcreatecm() { + kubectl apply --server-side \ + -f<(kubectl create configmap --dry-run=client -oyaml "$@") +}; export -f kcreatecm + +function kgseckey() { + local sec="$1"; shift + local key="$1"; shift + + kubectl get secret "$sec" -ojson | jq -re ".data.\"$key\"" | base64 -d +}; export -f kgseckey + +function kgcmkey() { + local cm="$1"; shift + local key="$1"; shift + + kubectl get configmap "$cm" -ojson | jq -re ".data.\"$key\"" +}; export -f kgcmkey + + +kcreatecm conf --from-file=default.conf + +kapply common/app.yaml + +kubectl rollout restart deployment app diff --git a/manifests/bin/devel.sh b/manifests/bin/devel.sh new file mode 100755 index 0000000..65675aa --- /dev/null +++ b/manifests/bin/devel.sh @@ -0,0 +1,6 @@ +#!/bin/bash -e +set -o pipefail + +export NB_REPLICAS=1 + +. ./manifests/bin/deploy.sh diff --git a/manifests/bin/prod.sh b/manifests/bin/prod.sh new file mode 100755 index 0000000..b7b5f83 --- /dev/null +++ b/manifests/bin/prod.sh @@ -0,0 +1,6 @@ +#!/bin/bash -e +set -o pipefail + +export NB_REPLICAS=3 + +. ./manifests/bin/deploy.sh diff --git a/manifests/common/app.yaml b/manifests/common/app.yaml new file mode 100644 index 0000000..2f719ef --- /dev/null +++ b/manifests/common/app.yaml @@ -0,0 +1,71 @@ +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: app + annotations: + cert-manager.io/cluster-issuer: letsencrypt-prod +spec: + ingressClassName: nginx + tls: + - secretName: tls-app + hosts: + - "$BASE_URL" + rules: + - host: "$BASE_URL" + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: app + port: + name: http +--- +apiVersion: v1 +kind: Service +metadata: + name: app + labels: + app: app +spec: + selector: + app: app + ports: + - name: http + port: 80 + targetPort: http +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: app + labels: + app: app +spec: + replicas: $NB_REPLICAS + selector: + matchLabels: + app: app + template: + metadata: + labels: + app: app + spec: + imagePullSecrets: + - name: regcred + containers: + - name: app + image: docker.io/nginx:latest + imagePullPolicy: Always + ports: + - name: http + containerPort: 3000 + volumeMounts: + - name: conf + mountPath: /etc/nginx/conf.d/ + volumes: + - name: config + configMap: + name: conf diff --git a/manifests/devel/.gitkeep b/manifests/devel/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/manifests/prod/.gitkeep b/manifests/prod/.gitkeep new file mode 100644 index 0000000..e69de29