add deploy
Some checks reported errors
continuous-integration/drone/push Build was killed

This commit is contained in:
2025-12-31 09:50:51 +03:00
parent 524f3ebf23
commit 85c4a36e17
40 changed files with 855 additions and 199 deletions

View File

@ -0,0 +1,64 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: team-planner-backend
spec:
replicas: 1
selector:
matchLabels:
app: team-planner-backend
template:
metadata:
labels:
app: team-planner-backend
spec:
imagePullSecrets:
- name: harbor-creds
containers:
- name: team-planner-backend
image: __BACKEND_IMAGE__
ports:
- containerPort: 4001
env:
- name: NODE_ENV
value: "production"
- name: PORT
value: "4001"
- name: DB_HOST
value: "postgres-service"
- name: DB_PORT
value: "5432"
- name: DB_DATABASE
valueFrom:
secretKeyRef:
name: team-planner-secrets
key: db-name
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: team-planner-secrets
key: db-user
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: team-planner-secrets
key: db-password
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /health
port: 4001
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /health
port: 4001
initialDelaySeconds: 10
periodSeconds: 5

12
k8s/backend-service.yaml Normal file
View File

@ -0,0 +1,12 @@
apiVersion: v1
kind: Service
metadata:
name: team-planner-backend-service
spec:
selector:
app: team-planner-backend
ports:
- protocol: TCP
port: 4001
targetPort: 4001
type: ClusterIP

View File

@ -0,0 +1,40 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: team-planner-frontend
spec:
replicas: 1
selector:
matchLabels:
app: team-planner-frontend
template:
metadata:
labels:
app: team-planner-frontend
spec:
imagePullSecrets:
- name: harbor-creds
containers:
- name: team-planner-frontend
image: __FRONTEND_IMAGE__
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "100m"
limits:
memory: "128Mi"
cpu: "200m"
livenessProbe:
httpGet:
path: /health
port: 80
initialDelaySeconds: 10
periodSeconds: 10
readinessProbe:
httpGet:
path: /health
port: 80
initialDelaySeconds: 5
periodSeconds: 5

12
k8s/frontend-service.yaml Normal file
View File

@ -0,0 +1,12 @@
apiVersion: v1
kind: Service
metadata:
name: team-planner-frontend-service
spec:
selector:
app: team-planner-frontend
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP

33
k8s/ingress.yaml Normal file
View File

@ -0,0 +1,33 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: team-planner-ingress
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls: "true"
spec:
ingressClassName: traefik
tls:
- hosts:
- __HOSTNAME__
secretName: __SECRET_NAME__
rules:
- host: __HOSTNAME__
http:
paths:
# Backend API routes
- path: /api
pathType: Prefix
backend:
service:
name: team-planner-backend-service
port:
number: 4001
# Frontend routes (all other paths)
- path: /
pathType: Prefix
backend:
service:
name: team-planner-frontend-service
port:
number: 80

11
k8s/postgres-pvc.yaml Normal file
View File

@ -0,0 +1,11 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: local-path

12
k8s/postgres-service.yaml Normal file
View File

@ -0,0 +1,12 @@
apiVersion: v1
kind: Service
metadata:
name: postgres-service
spec:
selector:
app: postgres
ports:
- protocol: TCP
port: 5432
targetPort: 5432
type: ClusterIP

View File

@ -0,0 +1,71 @@
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: postgres
spec:
serviceName: postgres-service
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:15-alpine
ports:
- containerPort: 5432
name: postgres
env:
- name: POSTGRES_DB
valueFrom:
secretKeyRef:
name: team-planner-secrets
key: db-name
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: team-planner-secrets
key: db-user
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: team-planner-secrets
key: db-password
- name: PGDATA
value: /var/lib/postgresql/data/pgdata
volumeMounts:
- name: postgres-storage
mountPath: /var/lib/postgresql/data
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
livenessProbe:
exec:
command:
- sh
- -c
- 'pg_isready -h 127.0.0.1 -U "$POSTGRES_USER" -d "$POSTGRES_DB"'
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
readinessProbe:
exec:
command:
- sh
- -c
- 'pg_isready -h 127.0.0.1 -U "$POSTGRES_USER" -d "$POSTGRES_DB"'
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 5
volumes:
- name: postgres-storage
persistentVolumeClaim:
claimName: postgres-pvc

16
k8s/secrets.yaml.example Normal file
View File

@ -0,0 +1,16 @@
# This is an example file. Create the actual secrets.yaml with your real values
# DO NOT commit secrets.yaml to git!
#
# To create the secrets in your cluster, run:
# kubectl create -f secrets.yaml -n prod-ns
apiVersion: v1
kind: Secret
metadata:
name: team-planner-secrets
type: Opaque
stringData:
# PostgreSQL credentials
db-name: "teamplanner"
db-user: "teamplanner"
db-password: "CHANGE_ME_STRONG_PASSWORD"