Add invy app
This commit is contained in:
parent
fe3dd1e208
commit
3306c7c680
21
argocd-apps/invy.yaml
Normal file
21
argocd-apps/invy.yaml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: ipify
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: my-apps
|
||||||
|
source:
|
||||||
|
repoURL: https://git.dvirlabs.com/dvirlabs/my-apps.git
|
||||||
|
targetRevision: HEAD
|
||||||
|
path: charts/invy-chart
|
||||||
|
helm:
|
||||||
|
valueFiles:
|
||||||
|
- ../../manifests/invy/values.yaml
|
||||||
|
destination:
|
||||||
|
server: https://kubernetes.default.svc
|
||||||
|
namespace: my-apps
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
selfHeal: true
|
||||||
12
charts/invy-chart/Chart.yaml
Normal file
12
charts/invy-chart/Chart.yaml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: invy
|
||||||
|
description: A Helm chart for Invy - Wedding Guest List Management Application
|
||||||
|
type: application
|
||||||
|
version: 1.0.0
|
||||||
|
appVersion: "1.0.0"
|
||||||
|
keywords:
|
||||||
|
- invy
|
||||||
|
- wedding
|
||||||
|
- guest-management
|
||||||
|
maintainers:
|
||||||
|
- name: dvir
|
||||||
183
charts/invy-chart/README.md
Normal file
183
charts/invy-chart/README.md
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
# Invy Helm Chart
|
||||||
|
|
||||||
|
This Helm chart deploys the Invy wedding guest list management application on Kubernetes.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- Kubernetes 1.19+
|
||||||
|
- Helm 3.0+
|
||||||
|
- Persistent Volume provisioner support in the underlying infrastructure (for PostgreSQL)
|
||||||
|
- Ingress controller (Traefik recommended)
|
||||||
|
- Cert-manager (for TLS certificates)
|
||||||
|
|
||||||
|
## Components
|
||||||
|
|
||||||
|
This chart deploys the following components:
|
||||||
|
|
||||||
|
- **Frontend**: React + Vite application (Nginx)
|
||||||
|
- **Backend**: FastAPI application
|
||||||
|
- **Database**: PostgreSQL 16
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
### Add the chart repository (if applicable)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
helm repo add invy https://your-helm-repo.com
|
||||||
|
helm repo update
|
||||||
|
```
|
||||||
|
|
||||||
|
### Install the chart
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Install with default values
|
||||||
|
helm install invy ./invy-chart -n my-apps --create-namespace
|
||||||
|
|
||||||
|
# Install with custom values
|
||||||
|
helm install invy ./invy-chart -n my-apps --create-namespace -f custom-values.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
The following table lists the configurable parameters and their default values.
|
||||||
|
|
||||||
|
### Global Parameters
|
||||||
|
|
||||||
|
| Parameter | Description | Default |
|
||||||
|
|-----------|-------------|---------|
|
||||||
|
| `global.namespace` | Namespace for all resources | `my-apps` |
|
||||||
|
| `global.imagePullSecrets` | Image pull secrets | `[]` |
|
||||||
|
|
||||||
|
### Backend Parameters
|
||||||
|
|
||||||
|
| Parameter | Description | Default |
|
||||||
|
|-----------|-------------|---------|
|
||||||
|
| `backend.image.repository` | Backend image repository | `harbor.dvirlabs.com/my-apps/invy-backend` |
|
||||||
|
| `backend.image.tag` | Backend image tag | `latest` |
|
||||||
|
| `backend.replicaCount` | Number of backend replicas | `1` |
|
||||||
|
| `backend.service.port` | Backend service port | `8000` |
|
||||||
|
| `backend.ingress.enabled` | Enable backend ingress | `true` |
|
||||||
|
| `backend.ingress.hosts[0].host` | Backend ingress hostname | `api-invy.dvirlabs.com` |
|
||||||
|
|
||||||
|
### Frontend Parameters
|
||||||
|
|
||||||
|
| Parameter | Description | Default |
|
||||||
|
|-----------|-------------|---------|
|
||||||
|
| `frontend.image.repository` | Frontend image repository | `harbor.dvirlabs.com/my-apps/invy-frontend` |
|
||||||
|
| `frontend.image.tag` | Frontend image tag | `latest` |
|
||||||
|
| `frontend.replicaCount` | Number of frontend replicas | `1` |
|
||||||
|
| `frontend.service.port` | Frontend service port | `80` |
|
||||||
|
| `frontend.env.VITE_API_URL` | Backend API URL | `https://api-invy.dvirlabs.com` |
|
||||||
|
| `frontend.ingress.enabled` | Enable frontend ingress | `true` |
|
||||||
|
| `frontend.ingress.hosts[0].host` | Frontend ingress hostname | `invy.dvirlabs.com` |
|
||||||
|
|
||||||
|
### PostgreSQL Parameters
|
||||||
|
|
||||||
|
| Parameter | Description | Default |
|
||||||
|
|-----------|-------------|---------|
|
||||||
|
| `postgres.user` | PostgreSQL user | `invy_user` |
|
||||||
|
| `postgres.password` | PostgreSQL password | `invy_password` |
|
||||||
|
| `postgres.database` | PostgreSQL database name | `invy_db` |
|
||||||
|
| `postgres.persistence.enabled` | Enable persistence | `true` |
|
||||||
|
| `postgres.persistence.size` | Persistent volume size | `10Gi` |
|
||||||
|
| `postgres.persistence.storageClass` | Storage class | `nfs-client` |
|
||||||
|
|
||||||
|
## Building and Pushing Images
|
||||||
|
|
||||||
|
### Backend Image
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd backend
|
||||||
|
docker build -t harbor.dvirlabs.com/my-apps/invy-backend:latest .
|
||||||
|
docker push harbor.dvirlabs.com/my-apps/invy-backend:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
### Frontend Image
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd frontend
|
||||||
|
docker build --build-arg VITE_API_URL=https://api-invy.dvirlabs.com -t harbor.dvirlabs.com/my-apps/invy-frontend:latest .
|
||||||
|
docker push harbor.dvirlabs.com/my-apps/invy-frontend:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
## Upgrading
|
||||||
|
|
||||||
|
```bash
|
||||||
|
helm upgrade invy ./invy-chart -n my-apps
|
||||||
|
```
|
||||||
|
|
||||||
|
## Uninstalling
|
||||||
|
|
||||||
|
```bash
|
||||||
|
helm uninstall invy -n my-apps
|
||||||
|
```
|
||||||
|
|
||||||
|
## Customization
|
||||||
|
|
||||||
|
Create a `custom-values.yaml` file to override default values:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
backend:
|
||||||
|
image:
|
||||||
|
tag: "v1.0.0"
|
||||||
|
ingress:
|
||||||
|
hosts:
|
||||||
|
- host: api.mycompany.com
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
|
||||||
|
frontend:
|
||||||
|
image:
|
||||||
|
tag: "v1.0.0"
|
||||||
|
env:
|
||||||
|
VITE_API_URL: "https://api.mycompany.com"
|
||||||
|
ingress:
|
||||||
|
hosts:
|
||||||
|
- host: invy.mycompany.com
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
|
||||||
|
postgres:
|
||||||
|
password: "your-secure-password"
|
||||||
|
persistence:
|
||||||
|
storageClass: "your-storage-class"
|
||||||
|
```
|
||||||
|
|
||||||
|
Then install with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
helm install invy ./invy-chart -n my-apps -f custom-values.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Check pod status
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl get pods -n my-apps
|
||||||
|
```
|
||||||
|
|
||||||
|
### View pod logs
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Backend logs
|
||||||
|
kubectl logs -n my-apps -l app.kubernetes.io/component=backend
|
||||||
|
|
||||||
|
# Frontend logs
|
||||||
|
kubectl logs -n my-apps -l app.kubernetes.io/component=frontend
|
||||||
|
|
||||||
|
# Database logs
|
||||||
|
kubectl logs -n my-apps -l app.kubernetes.io/component=database
|
||||||
|
```
|
||||||
|
|
||||||
|
### Access the database
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl exec -it -n my-apps invy-db-0 -- psql -U invy_user -d invy_db
|
||||||
|
```
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
For issues and feature requests, please open an issue in the repository.
|
||||||
38
charts/invy-chart/templates/NOTES.txt
Normal file
38
charts/invy-chart/templates/NOTES.txt
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
Thank you for installing {{ .Chart.Name }}!
|
||||||
|
|
||||||
|
Your release is named {{ .Release.Name }}.
|
||||||
|
|
||||||
|
To learn more about the release, try:
|
||||||
|
|
||||||
|
$ helm status {{ .Release.Name }}
|
||||||
|
$ helm get all {{ .Release.Name }}
|
||||||
|
|
||||||
|
{{- if .Values.frontend.ingress.enabled }}
|
||||||
|
|
||||||
|
Application URLs:
|
||||||
|
{{- range .Values.frontend.ingress.hosts }}
|
||||||
|
Frontend: https://{{ .host }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range .Values.backend.ingress.hosts }}
|
||||||
|
Backend API: https://{{ .host }}
|
||||||
|
{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
|
||||||
|
To access your application:
|
||||||
|
|
||||||
|
1. Get the frontend URL:
|
||||||
|
export POD_NAME=$(kubectl get pods --namespace {{ .Values.global.namespace }} -l "app.kubernetes.io/name={{ include "invy.name" . }},app.kubernetes.io/instance={{ .Release.Name }},app.kubernetes.io/component=frontend" -o jsonpath="{.items[0].metadata.name}")
|
||||||
|
kubectl --namespace {{ .Values.global.namespace }} port-forward $POD_NAME 8080:80
|
||||||
|
echo "Visit http://127.0.0.1:8080 to use your application"
|
||||||
|
|
||||||
|
2. Get the backend URL:
|
||||||
|
export POD_NAME=$(kubectl get pods --namespace {{ .Values.global.namespace }} -l "app.kubernetes.io/name={{ include "invy.name" . }},app.kubernetes.io/instance={{ .Release.Name }},app.kubernetes.io/component=backend" -o jsonpath="{.items[0].metadata.name}")
|
||||||
|
kubectl --namespace {{ .Values.global.namespace }} port-forward $POD_NAME 8000:8000
|
||||||
|
echo "Visit http://127.0.0.1:8000 to access the API"
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
Database connection:
|
||||||
|
Host: {{ include "invy.fullname" . }}-db
|
||||||
|
Port: {{ .Values.postgres.port }}
|
||||||
|
Database: {{ .Values.postgres.database }}
|
||||||
|
User: {{ .Values.postgres.user }}
|
||||||
60
charts/invy-chart/templates/_helpers.tpl
Normal file
60
charts/invy-chart/templates/_helpers.tpl
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
{{/*
|
||||||
|
Expand the name of the chart.
|
||||||
|
*/}}
|
||||||
|
{{- define "invy.name" -}}
|
||||||
|
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create a default fully qualified app name.
|
||||||
|
*/}}
|
||||||
|
{{- define "invy.fullname" -}}
|
||||||
|
{{- if .Values.fullnameOverride }}
|
||||||
|
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- $name := default .Chart.Name .Values.nameOverride }}
|
||||||
|
{{- if contains $name .Release.Name }}
|
||||||
|
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create chart name and version as used by the chart label.
|
||||||
|
*/}}
|
||||||
|
{{- define "invy.chart" -}}
|
||||||
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Common labels
|
||||||
|
*/}}
|
||||||
|
{{- define "invy.labels" -}}
|
||||||
|
helm.sh/chart: {{ include "invy.chart" . }}
|
||||||
|
{{ include "invy.selectorLabels" . }}
|
||||||
|
{{- if .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||||
|
{{- end }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Selector labels
|
||||||
|
*/}}
|
||||||
|
{{- define "invy.selectorLabels" -}}
|
||||||
|
app.kubernetes.io/name: {{ include "invy.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create the name of the service account to use
|
||||||
|
*/}}
|
||||||
|
{{- define "invy.serviceAccountName" -}}
|
||||||
|
{{- if .Values.serviceAccount.create }}
|
||||||
|
{{- default (include "invy.fullname" .) .Values.serviceAccount.name }}
|
||||||
|
{{- else }}
|
||||||
|
{{- default "default" .Values.serviceAccount.name }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
80
charts/invy-chart/templates/backend-deployment.yaml
Normal file
80
charts/invy-chart/templates/backend-deployment.yaml
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: {{ include "invy.fullname" . }}-backend
|
||||||
|
labels:
|
||||||
|
{{- include "invy.labels" . | nindent 4 }}
|
||||||
|
app.kubernetes.io/component: backend
|
||||||
|
spec:
|
||||||
|
replicas: {{ .Values.backend.replicaCount }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "invy.selectorLabels" . | nindent 6 }}
|
||||||
|
app.kubernetes.io/component: backend
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
{{- with .Values.podAnnotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "invy.selectorLabels" . | nindent 8 }}
|
||||||
|
app.kubernetes.io/component: backend
|
||||||
|
spec:
|
||||||
|
{{- with .Values.global.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
serviceAccountName: {{ include "invy.serviceAccountName" . }}
|
||||||
|
securityContext:
|
||||||
|
{{- toYaml .Values.podSecurityContext | nindent 8 }}
|
||||||
|
initContainers:
|
||||||
|
- name: wait-for-postgres
|
||||||
|
image: busybox:1.35
|
||||||
|
command: ['sh', '-c', 'until nc -z {{ include "invy.fullname" . }}-db-headless {{ .Values.postgres.port | default 5432 }}; do echo waiting for postgres; sleep 2; done;']
|
||||||
|
containers:
|
||||||
|
- name: backend
|
||||||
|
securityContext:
|
||||||
|
{{- toYaml .Values.securityContext | nindent 12 }}
|
||||||
|
image: "{{ .Values.backend.image.repository }}:{{ .Values.backend.image.tag | default .Chart.AppVersion }}"
|
||||||
|
imagePullPolicy: {{ .Values.backend.image.pullPolicy }}
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
containerPort: {{ .Values.backend.service.targetPort }}
|
||||||
|
protocol: TCP
|
||||||
|
env:
|
||||||
|
- name: DATABASE_URL
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ include "invy.fullname" . }}-secrets
|
||||||
|
key: database-url
|
||||||
|
{{- range $key, $value := .Values.backend.env }}
|
||||||
|
- name: {{ $key }}
|
||||||
|
value: {{ $value | quote }}
|
||||||
|
{{- end }}
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /
|
||||||
|
port: http
|
||||||
|
initialDelaySeconds: 30
|
||||||
|
periodSeconds: 10
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /
|
||||||
|
port: http
|
||||||
|
initialDelaySeconds: 10
|
||||||
|
periodSeconds: 5
|
||||||
|
resources:
|
||||||
|
{{- toYaml .Values.backend.resources | nindent 12 }}
|
||||||
|
{{- with .Values.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.affinity }}
|
||||||
|
affinity:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
42
charts/invy-chart/templates/backend-ingress.yaml
Normal file
42
charts/invy-chart/templates/backend-ingress.yaml
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
{{- if .Values.backend.ingress.enabled -}}
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: {{ include "invy.fullname" . }}-backend
|
||||||
|
labels:
|
||||||
|
{{- include "invy.labels" . | nindent 4 }}
|
||||||
|
app.kubernetes.io/component: backend
|
||||||
|
{{- with .Values.backend.ingress.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.backend.ingress.className }}
|
||||||
|
ingressClassName: {{ .Values.backend.ingress.className }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.backend.ingress.tls }}
|
||||||
|
tls:
|
||||||
|
{{- range .Values.backend.ingress.tls }}
|
||||||
|
- hosts:
|
||||||
|
{{- range .hosts }}
|
||||||
|
- {{ . | quote }}
|
||||||
|
{{- end }}
|
||||||
|
secretName: {{ .secretName }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
rules:
|
||||||
|
{{- range .Values.backend.ingress.hosts }}
|
||||||
|
- host: {{ .host | quote }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
{{- range .paths }}
|
||||||
|
- path: {{ .path }}
|
||||||
|
pathType: {{ .pathType }}
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: {{ include "invy.fullname" $ }}-backend
|
||||||
|
port:
|
||||||
|
number: {{ $.Values.backend.service.port }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
17
charts/invy-chart/templates/backend-service.yaml
Normal file
17
charts/invy-chart/templates/backend-service.yaml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ include "invy.fullname" . }}-backend
|
||||||
|
labels:
|
||||||
|
{{- include "invy.labels" . | nindent 4 }}
|
||||||
|
app.kubernetes.io/component: backend
|
||||||
|
spec:
|
||||||
|
type: {{ .Values.backend.service.type }}
|
||||||
|
ports:
|
||||||
|
- port: {{ .Values.backend.service.port }}
|
||||||
|
targetPort: http
|
||||||
|
protocol: TCP
|
||||||
|
name: http
|
||||||
|
selector:
|
||||||
|
{{- include "invy.selectorLabels" . | nindent 4 }}
|
||||||
|
app.kubernetes.io/component: backend
|
||||||
41
charts/invy-chart/templates/db-schema-configmap.yaml
Normal file
41
charts/invy-chart/templates/db-schema-configmap.yaml
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: {{ include "invy.fullname" . }}-db-schema
|
||||||
|
labels:
|
||||||
|
{{- include "invy.labels" . | nindent 4 }}
|
||||||
|
app.kubernetes.io/component: database
|
||||||
|
data:
|
||||||
|
init.sql: |
|
||||||
|
-- Wedding Guest List Database Schema
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS guests (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
name VARCHAR(255) NOT NULL,
|
||||||
|
phone VARCHAR(50),
|
||||||
|
email VARCHAR(255),
|
||||||
|
rsvp_status VARCHAR(50) DEFAULT 'pending',
|
||||||
|
meal_preference VARCHAR(100),
|
||||||
|
plus_one BOOLEAN DEFAULT FALSE,
|
||||||
|
plus_one_name VARCHAR(255),
|
||||||
|
notes TEXT,
|
||||||
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Create index for faster searches
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_guests_name ON guests(name);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_guests_email ON guests(email);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_guests_rsvp_status ON guests(rsvp_status);
|
||||||
|
|
||||||
|
-- Create trigger to update updated_at timestamp
|
||||||
|
CREATE OR REPLACE FUNCTION update_updated_at_column()
|
||||||
|
RETURNS TRIGGER AS $$
|
||||||
|
BEGIN
|
||||||
|
NEW.updated_at = CURRENT_TIMESTAMP;
|
||||||
|
RETURN NEW;
|
||||||
|
END;
|
||||||
|
$$ language 'plpgsql';
|
||||||
|
|
||||||
|
CREATE TRIGGER update_guests_updated_at BEFORE UPDATE ON guests
|
||||||
|
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
||||||
36
charts/invy-chart/templates/db-service.yaml
Normal file
36
charts/invy-chart/templates/db-service.yaml
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ include "invy.fullname" . }}-db
|
||||||
|
labels:
|
||||||
|
{{- include "invy.labels" . | nindent 4 }}
|
||||||
|
app.kubernetes.io/component: database
|
||||||
|
spec:
|
||||||
|
type: {{ .Values.postgres.service.type }}
|
||||||
|
ports:
|
||||||
|
- port: {{ .Values.postgres.service.port }}
|
||||||
|
targetPort: postgres
|
||||||
|
protocol: TCP
|
||||||
|
name: postgres
|
||||||
|
selector:
|
||||||
|
{{- include "invy.selectorLabels" . | nindent 4 }}
|
||||||
|
app.kubernetes.io/component: database
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ include "invy.fullname" . }}-db-headless
|
||||||
|
labels:
|
||||||
|
{{- include "invy.labels" . | nindent 4 }}
|
||||||
|
app.kubernetes.io/component: database
|
||||||
|
spec:
|
||||||
|
type: ClusterIP
|
||||||
|
clusterIP: None
|
||||||
|
ports:
|
||||||
|
- port: {{ .Values.postgres.service.port }}
|
||||||
|
targetPort: postgres
|
||||||
|
protocol: TCP
|
||||||
|
name: postgres
|
||||||
|
selector:
|
||||||
|
{{- include "invy.selectorLabels" . | nindent 4 }}
|
||||||
|
app.kubernetes.io/component: database
|
||||||
90
charts/invy-chart/templates/db-statefulset.yaml
Normal file
90
charts/invy-chart/templates/db-statefulset.yaml
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: StatefulSet
|
||||||
|
metadata:
|
||||||
|
name: {{ include "invy.fullname" . }}-db
|
||||||
|
labels:
|
||||||
|
{{- include "invy.labels" . | nindent 4 }}
|
||||||
|
app.kubernetes.io/component: database
|
||||||
|
spec:
|
||||||
|
serviceName: {{ include "invy.fullname" . }}-db-headless
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "invy.selectorLabels" . | nindent 6 }}
|
||||||
|
app.kubernetes.io/component: database
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "invy.selectorLabels" . | nindent 8 }}
|
||||||
|
app.kubernetes.io/component: database
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: postgres
|
||||||
|
image: "{{ .Values.postgres.image.repository }}:{{ .Values.postgres.image.tag }}"
|
||||||
|
imagePullPolicy: {{ .Values.postgres.image.pullPolicy }}
|
||||||
|
ports:
|
||||||
|
- name: postgres
|
||||||
|
containerPort: {{ .Values.postgres.port }}
|
||||||
|
protocol: TCP
|
||||||
|
env:
|
||||||
|
- name: POSTGRES_USER
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ include "invy.fullname" . }}-secrets
|
||||||
|
key: postgres-user
|
||||||
|
- name: POSTGRES_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ include "invy.fullname" . }}-secrets
|
||||||
|
key: postgres-password
|
||||||
|
- name: POSTGRES_DB
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ include "invy.fullname" . }}-secrets
|
||||||
|
key: postgres-database
|
||||||
|
- name: PGDATA
|
||||||
|
value: /var/lib/postgresql/data/pgdata
|
||||||
|
volumeMounts:
|
||||||
|
- name: postgres-data
|
||||||
|
mountPath: /var/lib/postgresql/data
|
||||||
|
- name: init-script
|
||||||
|
mountPath: /docker-entrypoint-initdb.d
|
||||||
|
resources:
|
||||||
|
{{- toYaml .Values.postgres.resources | nindent 12 }}
|
||||||
|
livenessProbe:
|
||||||
|
exec:
|
||||||
|
command:
|
||||||
|
- pg_isready
|
||||||
|
- -U
|
||||||
|
- $(POSTGRES_USER)
|
||||||
|
initialDelaySeconds: 30
|
||||||
|
periodSeconds: 10
|
||||||
|
readinessProbe:
|
||||||
|
exec:
|
||||||
|
command:
|
||||||
|
- pg_isready
|
||||||
|
- -U
|
||||||
|
- $(POSTGRES_USER)
|
||||||
|
initialDelaySeconds: 5
|
||||||
|
periodSeconds: 5
|
||||||
|
volumes:
|
||||||
|
- name: init-script
|
||||||
|
configMap:
|
||||||
|
name: {{ include "invy.fullname" . }}-db-schema
|
||||||
|
{{- if .Values.postgres.persistence.enabled }}
|
||||||
|
volumeClaimTemplates:
|
||||||
|
- metadata:
|
||||||
|
name: postgres-data
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- {{ .Values.postgres.persistence.accessMode }}
|
||||||
|
{{- if .Values.postgres.persistence.storageClass }}
|
||||||
|
storageClassName: {{ .Values.postgres.persistence.storageClass }}
|
||||||
|
{{- end }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ .Values.postgres.persistence.size }}
|
||||||
|
{{- else }}
|
||||||
|
- name: postgres-data
|
||||||
|
emptyDir: {}
|
||||||
|
{{- end }}
|
||||||
73
charts/invy-chart/templates/frontend-deployment.yaml
Normal file
73
charts/invy-chart/templates/frontend-deployment.yaml
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: {{ include "invy.fullname" . }}-frontend
|
||||||
|
labels:
|
||||||
|
{{- include "invy.labels" . | nindent 4 }}
|
||||||
|
app.kubernetes.io/component: frontend
|
||||||
|
spec:
|
||||||
|
replicas: {{ .Values.frontend.replicaCount }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "invy.selectorLabels" . | nindent 6 }}
|
||||||
|
app.kubernetes.io/component: frontend
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
{{- with .Values.podAnnotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "invy.selectorLabels" . | nindent 8 }}
|
||||||
|
app.kubernetes.io/component: frontend
|
||||||
|
spec:
|
||||||
|
{{- with .Values.global.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
serviceAccountName: {{ include "invy.serviceAccountName" . }}
|
||||||
|
securityContext:
|
||||||
|
{{- toYaml .Values.podSecurityContext | nindent 8 }}
|
||||||
|
containers:
|
||||||
|
- name: frontend
|
||||||
|
securityContext:
|
||||||
|
{{- toYaml .Values.securityContext | nindent 12 }}
|
||||||
|
image: "{{ .Values.frontend.image.repository }}:{{ .Values.frontend.image.tag | default .Chart.AppVersion }}"
|
||||||
|
imagePullPolicy: {{ .Values.frontend.image.pullPolicy }}
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
containerPort: {{ .Values.frontend.service.targetPort }}
|
||||||
|
protocol: TCP
|
||||||
|
{{- if .Values.frontend.env }}
|
||||||
|
env:
|
||||||
|
{{- range $key, $value := .Values.frontend.env }}
|
||||||
|
- name: {{ $key }}
|
||||||
|
value: {{ $value | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /
|
||||||
|
port: http
|
||||||
|
initialDelaySeconds: 30
|
||||||
|
periodSeconds: 10
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /
|
||||||
|
port: http
|
||||||
|
initialDelaySeconds: 10
|
||||||
|
periodSeconds: 5
|
||||||
|
resources:
|
||||||
|
{{- toYaml .Values.frontend.resources | nindent 12 }}
|
||||||
|
{{- with .Values.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.affinity }}
|
||||||
|
affinity:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
42
charts/invy-chart/templates/frontend-ingress.yaml
Normal file
42
charts/invy-chart/templates/frontend-ingress.yaml
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
{{- if .Values.frontend.ingress.enabled -}}
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: {{ include "invy.fullname" . }}-frontend
|
||||||
|
labels:
|
||||||
|
{{- include "invy.labels" . | nindent 4 }}
|
||||||
|
app.kubernetes.io/component: frontend
|
||||||
|
{{- with .Values.frontend.ingress.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.frontend.ingress.className }}
|
||||||
|
ingressClassName: {{ .Values.frontend.ingress.className }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.frontend.ingress.tls }}
|
||||||
|
tls:
|
||||||
|
{{- range .Values.frontend.ingress.tls }}
|
||||||
|
- hosts:
|
||||||
|
{{- range .hosts }}
|
||||||
|
- {{ . | quote }}
|
||||||
|
{{- end }}
|
||||||
|
secretName: {{ .secretName }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
rules:
|
||||||
|
{{- range .Values.frontend.ingress.hosts }}
|
||||||
|
- host: {{ .host | quote }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
{{- range .paths }}
|
||||||
|
- path: {{ .path }}
|
||||||
|
pathType: {{ .pathType }}
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: {{ include "invy.fullname" $ }}-frontend
|
||||||
|
port:
|
||||||
|
number: {{ $.Values.frontend.service.port }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
17
charts/invy-chart/templates/frontend-service.yaml
Normal file
17
charts/invy-chart/templates/frontend-service.yaml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ include "invy.fullname" . }}-frontend
|
||||||
|
labels:
|
||||||
|
{{- include "invy.labels" . | nindent 4 }}
|
||||||
|
app.kubernetes.io/component: frontend
|
||||||
|
spec:
|
||||||
|
type: {{ .Values.frontend.service.type }}
|
||||||
|
ports:
|
||||||
|
- port: {{ .Values.frontend.service.port }}
|
||||||
|
targetPort: http
|
||||||
|
protocol: TCP
|
||||||
|
name: http
|
||||||
|
selector:
|
||||||
|
{{- include "invy.selectorLabels" . | nindent 4 }}
|
||||||
|
app.kubernetes.io/component: frontend
|
||||||
12
charts/invy-chart/templates/secret.yaml
Normal file
12
charts/invy-chart/templates/secret.yaml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: {{ include "invy.fullname" . }}-secrets
|
||||||
|
labels:
|
||||||
|
{{- include "invy.labels" . | nindent 4 }}
|
||||||
|
type: Opaque
|
||||||
|
stringData:
|
||||||
|
postgres-user: {{ .Values.postgres.user | quote }}
|
||||||
|
postgres-password: {{ .Values.postgres.password | quote }}
|
||||||
|
postgres-database: {{ .Values.postgres.database | quote }}
|
||||||
|
database-url: "postgresql://{{ .Values.postgres.user }}:{{ .Values.postgres.password }}@{{ include "invy.fullname" . }}-db:{{ .Values.postgres.port }}/{{ .Values.postgres.database }}"
|
||||||
12
charts/invy-chart/templates/serviceaccount.yaml
Normal file
12
charts/invy-chart/templates/serviceaccount.yaml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{{- if .Values.serviceAccount.create -}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
name: {{ include "invy.serviceAccountName" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "invy.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.serviceAccount.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
136
charts/invy-chart/values.yaml
Normal file
136
charts/invy-chart/values.yaml
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
global:
|
||||||
|
namespace: my-apps
|
||||||
|
imagePullSecrets: []
|
||||||
|
|
||||||
|
# Backend configuration
|
||||||
|
backend:
|
||||||
|
name: backend
|
||||||
|
replicaCount: 1
|
||||||
|
image:
|
||||||
|
repository: harbor.dvirlabs.com/my-apps/invy-backend
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
tag: "latest"
|
||||||
|
|
||||||
|
service:
|
||||||
|
type: ClusterIP
|
||||||
|
port: 8000
|
||||||
|
targetPort: 8000
|
||||||
|
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 128Mi
|
||||||
|
limits:
|
||||||
|
cpu: 500m
|
||||||
|
memory: 512Mi
|
||||||
|
|
||||||
|
env:
|
||||||
|
PYTHONUNBUFFERED: "1"
|
||||||
|
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
className: "traefik"
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
cert-manager.io/cluster-issuer: "letsencrypt-prod"
|
||||||
|
hosts:
|
||||||
|
- host: api-invy.dvirlabs.com
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
tls:
|
||||||
|
- secretName: api-invy-tls
|
||||||
|
hosts:
|
||||||
|
- api-invy.dvirlabs.com
|
||||||
|
|
||||||
|
# Frontend configuration
|
||||||
|
frontend:
|
||||||
|
name: frontend
|
||||||
|
replicaCount: 1
|
||||||
|
image:
|
||||||
|
repository: harbor.dvirlabs.com/my-apps/invy-frontend
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
tag: "latest"
|
||||||
|
|
||||||
|
service:
|
||||||
|
type: ClusterIP
|
||||||
|
port: 80
|
||||||
|
targetPort: 80
|
||||||
|
|
||||||
|
env:
|
||||||
|
VITE_API_URL: "https://api-invy.dvirlabs.com"
|
||||||
|
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 50m
|
||||||
|
memory: 64Mi
|
||||||
|
limits:
|
||||||
|
cpu: 200m
|
||||||
|
memory: 256Mi
|
||||||
|
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
className: "traefik"
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
cert-manager.io/cluster-issuer: "letsencrypt-prod"
|
||||||
|
hosts:
|
||||||
|
- host: invy.dvirlabs.com
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
tls:
|
||||||
|
- secretName: invy-tls
|
||||||
|
hosts:
|
||||||
|
- invy.dvirlabs.com
|
||||||
|
|
||||||
|
# PostgreSQL configuration
|
||||||
|
postgres:
|
||||||
|
name: db
|
||||||
|
image:
|
||||||
|
repository: postgres
|
||||||
|
tag: "16-alpine"
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
|
||||||
|
user: invy_user
|
||||||
|
password: invy_password
|
||||||
|
database: invy_db
|
||||||
|
port: 5432
|
||||||
|
|
||||||
|
service:
|
||||||
|
type: ClusterIP
|
||||||
|
port: 5432
|
||||||
|
targetPort: 5432
|
||||||
|
|
||||||
|
persistence:
|
||||||
|
enabled: true
|
||||||
|
accessMode: ReadWriteOnce
|
||||||
|
storageClass: "nfs-client"
|
||||||
|
size: 10Gi
|
||||||
|
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 256Mi
|
||||||
|
limits:
|
||||||
|
cpu: 1000m
|
||||||
|
memory: 1Gi
|
||||||
|
|
||||||
|
# Ingress configuration
|
||||||
|
ingress:
|
||||||
|
enabled: false # Individual frontend/backend ingress resources handle routing instead
|
||||||
|
className: "traefik"
|
||||||
|
annotations:
|
||||||
|
cert-manager.io/cluster-issuer: "letsencrypt-prod"
|
||||||
|
hosts:
|
||||||
|
- host: invy.dvirlabs.com
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend: frontend
|
||||||
|
tls:
|
||||||
|
- secretName: invy-tls
|
||||||
|
hosts:
|
||||||
|
- invy.dvirlabs.com
|
||||||
2
manifests/invy/cname.yaml
Normal file
2
manifests/invy/cname.yaml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
enabled: true
|
||||||
|
hostname: ipify.dvirlabs.com
|
||||||
136
manifests/invy/values.yaml
Normal file
136
manifests/invy/values.yaml
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
global:
|
||||||
|
namespace: my-apps
|
||||||
|
imagePullSecrets: []
|
||||||
|
|
||||||
|
# Backend configuration
|
||||||
|
backend:
|
||||||
|
name: backend
|
||||||
|
replicaCount: 1
|
||||||
|
image:
|
||||||
|
repository: harbor.dvirlabs.com/my-apps/invy-backend
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
tag: "latest"
|
||||||
|
|
||||||
|
service:
|
||||||
|
type: ClusterIP
|
||||||
|
port: 8000
|
||||||
|
targetPort: 8000
|
||||||
|
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 128Mi
|
||||||
|
limits:
|
||||||
|
cpu: 500m
|
||||||
|
memory: 512Mi
|
||||||
|
|
||||||
|
env:
|
||||||
|
PYTHONUNBUFFERED: "1"
|
||||||
|
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
className: "traefik"
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
cert-manager.io/cluster-issuer: "letsencrypt-prod"
|
||||||
|
hosts:
|
||||||
|
- host: api-invy.dvirlabs.com
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
tls:
|
||||||
|
- secretName: api-invy-tls
|
||||||
|
hosts:
|
||||||
|
- api-invy.dvirlabs.com
|
||||||
|
|
||||||
|
# Frontend configuration
|
||||||
|
frontend:
|
||||||
|
name: frontend
|
||||||
|
replicaCount: 1
|
||||||
|
image:
|
||||||
|
repository: harbor.dvirlabs.com/my-apps/invy-frontend
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
tag: "latest"
|
||||||
|
|
||||||
|
service:
|
||||||
|
type: ClusterIP
|
||||||
|
port: 80
|
||||||
|
targetPort: 80
|
||||||
|
|
||||||
|
env:
|
||||||
|
VITE_API_URL: "https://api-invy.dvirlabs.com"
|
||||||
|
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 50m
|
||||||
|
memory: 64Mi
|
||||||
|
limits:
|
||||||
|
cpu: 200m
|
||||||
|
memory: 256Mi
|
||||||
|
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
className: "traefik"
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
cert-manager.io/cluster-issuer: "letsencrypt-prod"
|
||||||
|
hosts:
|
||||||
|
- host: invy.dvirlabs.com
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
tls:
|
||||||
|
- secretName: invy-tls
|
||||||
|
hosts:
|
||||||
|
- invy.dvirlabs.com
|
||||||
|
|
||||||
|
# PostgreSQL configuration
|
||||||
|
postgres:
|
||||||
|
name: db
|
||||||
|
image:
|
||||||
|
repository: postgres
|
||||||
|
tag: "16-alpine"
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
|
||||||
|
user: invy_user
|
||||||
|
password: invy_password
|
||||||
|
database: invy_db
|
||||||
|
port: 5432
|
||||||
|
|
||||||
|
service:
|
||||||
|
type: ClusterIP
|
||||||
|
port: 5432
|
||||||
|
targetPort: 5432
|
||||||
|
|
||||||
|
persistence:
|
||||||
|
enabled: true
|
||||||
|
accessMode: ReadWriteOnce
|
||||||
|
storageClass: "nfs-client"
|
||||||
|
size: 10Gi
|
||||||
|
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 256Mi
|
||||||
|
limits:
|
||||||
|
cpu: 1000m
|
||||||
|
memory: 1Gi
|
||||||
|
|
||||||
|
# Ingress configuration
|
||||||
|
ingress:
|
||||||
|
enabled: false # Individual frontend/backend ingress resources handle routing instead
|
||||||
|
className: "traefik"
|
||||||
|
annotations:
|
||||||
|
cert-manager.io/cluster-issuer: "letsencrypt-prod"
|
||||||
|
hosts:
|
||||||
|
- host: invy.dvirlabs.com
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend: frontend
|
||||||
|
tls:
|
||||||
|
- secretName: invy-tls
|
||||||
|
hosts:
|
||||||
|
- invy.dvirlabs.com
|
||||||
Loading…
x
Reference in New Issue
Block a user