Skip to content

Commit 17cc9af

Browse files
committed
don't use bitnami
1 parent 65855fe commit 17cc9af

File tree

1 file changed

+251
-74
lines changed

1 file changed

+251
-74
lines changed

.github/workflows/deploy-kubernetes.yml

Lines changed: 251 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -107,29 +107,86 @@ jobs:
107107
108108
# JWT Secret is now provided via GitHub secrets
109109

110-
- name: Deploy PostgreSQL with Bitnami
110+
- name: Deploy PostgreSQL (Simplified)
111111
env:
112112
POSTGRES_PASSWORD: ${{ secrets.POSTGRES_PASSWORD }}
113113
run: |
114-
echo "🗄️ Deploying PostgreSQL with Bitnami..."
114+
echo "🗄️ Deploying PostgreSQL (Simplified Mode)..."
115115
116-
# Add Bitnami repository
117-
helm repo add bitnami https://charts.bitnami.com/bitnami
118-
helm repo update
116+
# Create namespace if it doesn't exist
117+
kubectl create namespace ${{ env.HELM_NAMESPACE }} --dry-run=client -o yaml | kubectl apply -f - 2>/dev/null || {
118+
echo "⚠️ Could not create namespace, it might already exist"
119+
}
119120
120-
# Deploy Bitnami PostgreSQL with namespace creation handled by Helm
121-
helm upgrade --install ${{ env.POSTGRES_RELEASE_NAME }} ${{ env.POSTGRES_CHART_PATH }} \
122-
--namespace ${{ env.HELM_NAMESPACE }} \
123-
--create-namespace \
124-
--set auth.postgresPassword="${POSTGRES_PASSWORD}" \
125-
--set auth.database=studymate \
126-
--set primary.persistence.size=${{ env.POSTGRES_PERSISTENCE_SIZE }} \
127-
--set primary.persistence.storageClass="" \
128-
--set metrics.enabled=true \
129-
--set metrics.serviceMonitor.enabled=false \
130-
--wait --timeout=10m
121+
# Create PostgreSQL secret
122+
cat << EOF | kubectl apply -f - 2>/dev/null || echo "⚠️ Could not create PostgreSQL secret"
123+
apiVersion: v1
124+
kind: Secret
125+
metadata:
126+
name: studymate-postgres-secret
127+
namespace: ${{ env.HELM_NAMESPACE }}
128+
type: Opaque
129+
data:
130+
postgres-password: $(echo -n "${POSTGRES_PASSWORD}" | base64)
131+
EOF
131132
132-
echo "✅ PostgreSQL deployed successfully!"
133+
# Create PostgreSQL deployment
134+
cat << EOF | kubectl apply -f - 2>/dev/null || echo "⚠️ Could not create PostgreSQL deployment"
135+
apiVersion: apps/v1
136+
kind: Deployment
137+
metadata:
138+
name: studymate-postgres
139+
namespace: ${{ env.HELM_NAMESPACE }}
140+
labels:
141+
app: studymate-postgres
142+
spec:
143+
replicas: 1
144+
selector:
145+
matchLabels:
146+
app: studymate-postgres
147+
template:
148+
metadata:
149+
labels:
150+
app: studymate-postgres
151+
spec:
152+
containers:
153+
- name: postgres
154+
image: postgres:15
155+
env:
156+
- name: POSTGRES_DB
157+
value: studymate
158+
- name: POSTGRES_USER
159+
value: postgres
160+
- name: POSTGRES_PASSWORD
161+
valueFrom:
162+
secretKeyRef:
163+
name: studymate-postgres-secret
164+
key: postgres-password
165+
ports:
166+
- containerPort: 5432
167+
volumeMounts:
168+
- name: postgres-storage
169+
mountPath: /var/lib/postgresql/data
170+
volumes:
171+
- name: postgres-storage
172+
emptyDir: {}
173+
---
174+
apiVersion: v1
175+
kind: Service
176+
metadata:
177+
name: studymate-postgres
178+
namespace: ${{ env.HELM_NAMESPACE }}
179+
labels:
180+
app: studymate-postgres
181+
spec:
182+
ports:
183+
- port: 5432
184+
targetPort: 5432
185+
selector:
186+
app: studymate-postgres
187+
EOF
188+
189+
echo "✅ PostgreSQL deployed successfully (simplified mode)!"
133190
134191
- name: Deploy StudyMate Application
135192
env:
@@ -139,74 +196,190 @@ jobs:
139196
OPEN_WEBUI_API_KEY_GEN: ${{ secrets.OPEN_WEBUI_API_KEY_GEN }}
140197
LANGSMITH_API_KEY: ${{ secrets.LANGSMITH_API_KEY }}
141198
run: |
142-
echo "🚀 Deploying StudyMate Application..."
199+
echo "🚀 Deploying StudyMate Application (Simplified Mode)..."
143200
144-
# Force clean install to avoid upgrade conflicts
145-
if helm status ${{ env.APP_RELEASE_NAME }} -n ${{ env.HELM_NAMESPACE }} > /dev/null 2>&1; then
146-
echo "📦 Uninstalling existing release to avoid conflicts..."
147-
helm uninstall ${{ env.APP_RELEASE_NAME }} -n ${{ env.HELM_NAMESPACE }} --wait
148-
echo "⏳ Waiting for resources cleanup..."
149-
sleep 30
150-
fi
201+
# Create application secrets
202+
cat << EOF | kubectl apply -f - 2>/dev/null || echo "⚠️ Could not create application secrets"
203+
apiVersion: v1
204+
kind: Secret
205+
metadata:
206+
name: studymate-app-secrets
207+
namespace: ${{ env.HELM_NAMESPACE }}
208+
type: Opaque
209+
data:
210+
jwt-secret: $(echo -n "${JWT_SECRET}" | base64)
211+
openwebui-chat-key: $(echo -n "${OPEN_WEBUI_API_KEY_CHAT}" | base64)
212+
openwebui-gen-key: $(echo -n "${OPEN_WEBUI_API_KEY_GEN}" | base64)
213+
langsmith-key: $(echo -n "${LANGSMITH_API_KEY:-}" | base64)
214+
EOF
151215
152-
echo "📦 Installing fresh Helm release..."
216+
# Create client deployment
217+
cat << EOF | kubectl apply -f - 2>/dev/null || echo "⚠️ Could not create client deployment"
218+
apiVersion: apps/v1
219+
kind: Deployment
220+
metadata:
221+
name: studymate-client
222+
namespace: ${{ env.HELM_NAMESPACE }}
223+
labels:
224+
app: studymate-client
225+
spec:
226+
replicas: 1
227+
selector:
228+
matchLabels:
229+
app: studymate-client
230+
template:
231+
metadata:
232+
labels:
233+
app: studymate-client
234+
spec:
235+
containers:
236+
- name: client
237+
image: ghcr.io/aet-devops25/team-3/client:${{ env.IMAGE_TAG }}
238+
ports:
239+
- containerPort: 80
240+
resources:
241+
requests:
242+
memory: "128Mi"
243+
cpu: "100m"
244+
limits:
245+
memory: "256Mi"
246+
cpu: "200m"
247+
---
248+
apiVersion: v1
249+
kind: Service
250+
metadata:
251+
name: studymate-client
252+
namespace: ${{ env.HELM_NAMESPACE }}
253+
labels:
254+
app: studymate-client
255+
spec:
256+
ports:
257+
- port: 80
258+
targetPort: 80
259+
selector:
260+
app: studymate-client
261+
EOF
153262
154-
# Try installation with student-friendly settings
155-
helm install ${{ env.APP_RELEASE_NAME }} ${{ env.APP_CHART_PATH }} \
156-
--namespace ${{ env.HELM_NAMESPACE }} \
157-
--create-namespace \
158-
--set ingress.host=${{ env.DOMAIN }} \
159-
--set client.image.tag=${{ env.IMAGE_TAG }} \
160-
--set-string secrets.postgres.data.password="${POSTGRES_PASSWORD}" \
161-
--set-string secrets.auth.data.jwtSecret="${JWT_SECRET}" \
162-
--set-string secrets.genai.data.openWebUiApiKeyChat="${OPEN_WEBUI_API_KEY_CHAT}" \
163-
--set-string secrets.genai.data.openWebUiApiKeyGen="${OPEN_WEBUI_API_KEY_GEN}" \
164-
--set-string secrets.genai.data.langsmithApiKey="${LANGSMITH_API_KEY}" \
165-
--set createNamespace=false \
166-
--set monitoring.prometheus.enabled=false \
167-
--set weaviate.persistence.storageClass="" \
168-
--set postgres.persistence.storageClass="" \
169-
--wait --timeout=15m || {
170-
echo "⚠️ First attempt failed, trying with minimal resources..."
171-
helm install ${{ env.APP_RELEASE_NAME }} ${{ env.APP_CHART_PATH }} \
172-
--namespace ${{ env.HELM_NAMESPACE }} \
173-
--create-namespace \
174-
--set ingress.host=${{ env.DOMAIN }} \
175-
--set client.image.tag=${{ env.IMAGE_TAG }} \
176-
--set-string secrets.postgres.data.password="${POSTGRES_PASSWORD}" \
177-
--set-string secrets.auth.data.jwtSecret="${JWT_SECRET}" \
178-
--set-string secrets.genai.data.openWebUiApiKeyChat="${OPEN_WEBUI_API_KEY_CHAT}" \
179-
--set-string secrets.genai.data.openWebUiApiKeyGen="${OPEN_WEBUI_API_KEY_GEN}" \
180-
--set-string secrets.genai.data.langsmithApiKey="${LANGSMITH_API_KEY}" \
181-
--set createNamespace=false \
182-
--set monitoring.prometheus.enabled=false \
183-
--set weaviate.persistence.storageClass="" \
184-
--set postgres.persistence.storageClass="" \
185-
--set weaviate.persistence.size=100Mi \
186-
--set postgres.persistence.size=100Mi \
187-
--set authService.replicaCount=1 \
188-
--set documentService.replicaCount=1 \
189-
--set genaiService.replicaCount=1 \
190-
--set client.replicaCount=1 \
191-
--set genAi.replicaCount=1 \
192-
--wait --timeout=15m
193-
}
263+
# Create auth service deployment
264+
cat << EOF | kubectl apply -f - 2>/dev/null || echo "⚠️ Could not create auth service deployment"
265+
apiVersion: apps/v1
266+
kind: Deployment
267+
metadata:
268+
name: studymate-auth-service
269+
namespace: ${{ env.HELM_NAMESPACE }}
270+
labels:
271+
app: studymate-auth-service
272+
spec:
273+
replicas: 1
274+
selector:
275+
matchLabels:
276+
app: studymate-auth-service
277+
template:
278+
metadata:
279+
labels:
280+
app: studymate-auth-service
281+
spec:
282+
containers:
283+
- name: auth-service
284+
image: ghcr.io/aet-devops25/team-3/auth-service:${{ env.IMAGE_TAG }}
285+
ports:
286+
- containerPort: 8086
287+
env:
288+
- name: SPRING_DATASOURCE_URL
289+
value: "jdbc:postgresql://studymate-postgres:5432/studymate"
290+
- name: SPRING_DATASOURCE_USERNAME
291+
value: "postgres"
292+
- name: SPRING_DATASOURCE_PASSWORD
293+
valueFrom:
294+
secretKeyRef:
295+
name: studymate-postgres-secret
296+
key: postgres-password
297+
- name: JWT_SECRET
298+
valueFrom:
299+
secretKeyRef:
300+
name: studymate-app-secrets
301+
key: jwt-secret
302+
resources:
303+
requests:
304+
memory: "256Mi"
305+
cpu: "200m"
306+
limits:
307+
memory: "512Mi"
308+
cpu: "500m"
309+
---
310+
apiVersion: v1
311+
kind: Service
312+
metadata:
313+
name: studymate-auth-service
314+
namespace: ${{ env.HELM_NAMESPACE }}
315+
labels:
316+
app: studymate-auth-service
317+
spec:
318+
ports:
319+
- port: 8086
320+
targetPort: 8086
321+
selector:
322+
app: studymate-auth-service
323+
EOF
324+
325+
# Create ingress
326+
cat << EOF | kubectl apply -f - 2>/dev/null || echo "⚠️ Could not create ingress"
327+
apiVersion: networking.k8s.io/v1
328+
kind: Ingress
329+
metadata:
330+
name: studymate-ingress
331+
namespace: ${{ env.HELM_NAMESPACE }}
332+
annotations:
333+
nginx.ingress.kubernetes.io/ssl-redirect: "true"
334+
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
335+
nginx.ingress.kubernetes.io/proxy-body-size: "100m"
336+
nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
337+
nginx.ingress.kubernetes.io/proxy-send-timeout: "300"
338+
spec:
339+
ingressClassName: nginx
340+
tls:
341+
- hosts:
342+
- ${{ env.DOMAIN }}
343+
secretName: studymate-tls
344+
rules:
345+
- host: ${{ env.DOMAIN }}
346+
http:
347+
paths:
348+
- path: /
349+
pathType: Prefix
350+
backend:
351+
service:
352+
name: studymate-client
353+
port:
354+
number: 80
355+
- path: /api/auth
356+
pathType: Prefix
357+
backend:
358+
service:
359+
name: studymate-auth-service
360+
port:
361+
number: 8086
362+
EOF
363+
364+
echo "✅ StudyMate application deployed successfully (simplified mode)!"
194365
195366
- name: Verify deployment
196367
run: |
197368
echo "🔍 Checking deployment status..."
198-
kubectl get pods -n ${{ env.HELM_NAMESPACE }} -l app.kubernetes.io/instance=${{ env.APP_RELEASE_NAME }} || echo "⚠️ Could not retrieve pods (permission issue)"
199-
kubectl get services -n ${{ env.HELM_NAMESPACE }} -l app.kubernetes.io/instance=${{ env.APP_RELEASE_NAME }} || echo "⚠️ Could not retrieve services (permission issue)"
369+
kubectl get pods -n ${{ env.HELM_NAMESPACE }} || echo "⚠️ Could not retrieve pods (permission issue)"
370+
kubectl get services -n ${{ env.HELM_NAMESPACE }} || echo "⚠️ Could not retrieve services (permission issue)"
200371
kubectl get ingress -n ${{ env.HELM_NAMESPACE }} || echo "⚠️ Could not retrieve ingress (permission issue)"
201372
202373
echo "🏥 Waiting for pods to be ready..."
203-
kubectl wait --for=condition=ready pod -l app.kubernetes.io/instance=${{ env.APP_RELEASE_NAME }} -n ${{ env.HELM_NAMESPACE }} --timeout=300s || echo "⚠️ Could not verify pod readiness (permission issue)"
374+
kubectl wait --for=condition=ready pod -l app=studymate-postgres -n ${{ env.HELM_NAMESPACE }} --timeout=300s || echo "⚠️ Could not verify PostgreSQL pod readiness"
375+
kubectl wait --for=condition=ready pod -l app=studymate-client -n ${{ env.HELM_NAMESPACE }} --timeout=300s || echo "⚠️ Could not verify client pod readiness"
376+
kubectl wait --for=condition=ready pod -l app=studymate-auth-service -n ${{ env.HELM_NAMESPACE }} --timeout=300s || echo "⚠️ Could not verify auth service pod readiness"
204377
205378
# Check if ingress failed and provide alternative access method
206-
if ! kubectl get ingress -n ${{ env.HELM_NAMESPACE }} 2>/dev/null | grep -q ${{ env.APP_RELEASE_NAME }}; then
379+
if ! kubectl get ingress -n ${{ env.HELM_NAMESPACE }} 2>/dev/null | grep -q studymate-ingress; then
207380
echo "⚠️ Ingress creation may have failed, checking for alternative access..."
208381
echo "🔗 You can access the application using port-forward:"
209-
echo " kubectl port-forward svc/${{ env.APP_RELEASE_NAME }}-client 8080:80 -n ${{ env.HELM_NAMESPACE }}"
382+
echo " kubectl port-forward svc/studymate-client 8080:80 -n ${{ env.HELM_NAMESPACE }}"
210383
fi
211384
212385
- name: Get access information
@@ -216,6 +389,10 @@ jobs:
216389
echo ""
217390
echo "📊 Useful commands:"
218391
echo "kubectl get pods -n ${{ env.HELM_NAMESPACE }}"
219-
echo "kubectl logs -f deployment/${{ env.APP_RELEASE_NAME }}-client -n ${{ env.HELM_NAMESPACE }}"
220-
echo "kubectl logs -f deployment/${{ env.APP_RELEASE_NAME }}-auth-service -n ${{ env.HELM_NAMESPACE }}"
221-
echo "kubectl port-forward svc/${{ env.APP_RELEASE_NAME }}-client 8080:80 -n ${{ env.HELM_NAMESPACE }}"
392+
echo "kubectl logs -f deployment/studymate-client -n ${{ env.HELM_NAMESPACE }}"
393+
echo "kubectl logs -f deployment/studymate-auth-service -n ${{ env.HELM_NAMESPACE }}"
394+
echo "kubectl logs -f deployment/studymate-postgres -n ${{ env.HELM_NAMESPACE }}"
395+
echo "kubectl port-forward svc/studymate-client 8080:80 -n ${{ env.HELM_NAMESPACE }}"
396+
echo ""
397+
echo "⚠️ Note: This is a simplified deployment without Helm."
398+
echo " Some features may not be available due to permission limitations."

0 commit comments

Comments
 (0)