@@ -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