From c9648cd4864832efaa29c7a1e027d31635841c94 Mon Sep 17 00:00:00 2001 From: kisfenyo Date: Thu, 5 Feb 2026 10:53:20 +0100 Subject: [PATCH] added mailer pod --- felhom-system/contact-mailer.yaml | 142 ++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 felhom-system/contact-mailer.yaml diff --git a/felhom-system/contact-mailer.yaml b/felhom-system/contact-mailer.yaml new file mode 100644 index 0000000..d956974 --- /dev/null +++ b/felhom-system/contact-mailer.yaml @@ -0,0 +1,142 @@ +# Contact Mailer - Lightweight email sender for felhom.eu contact form +# Uses Resend.com API for transactional email delivery. +# +# PREREQUISITES: +# 1. Build and push the container image: +# docker build -t contact-mailer:latest . +# # Option A: Push to Gitea registry (if configured): +# # docker tag contact-mailer:latest gitea.felhom.eu/felhom/contact-mailer:latest +# # docker push gitea.felhom.eu/felhom/contact-mailer:latest +# # Option B: Import directly into k3s (single node): +# # docker save contact-mailer:latest | sudo k3s ctr images import - +# +# 2. Create the Secret with your Resend API key: +# kubectl create secret generic contact-mailer-config \ +# --namespace=felhom-system \ +# --from-literal=RESEND_API_KEY='re_xxxxxxxxxxxx' +# +# 3. Apply this manifest: +# kubectl apply -f contact-mailer.yaml +# +# 4. Test: +# # Health check: +# curl https://felhom.eu/api/healthz +# # Send test email (only works if DEBUG=true): +# curl -X POST https://felhom.eu/api/debug/test +# +# 5. Update contact form endpoint in kapcsolat.html: +# CONFIG.formEndpoint = '/api/contact'; +# +# DEBUGGING: +# kubectl logs -n felhom-system deploy/contact-mailer -f +# kubectl exec -it -n felhom-system deploy/contact-mailer -- wget -qO- http://localhost:8080/healthz +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: contact-mailer + namespace: felhom-system + labels: + app: contact-mailer +spec: + replicas: 1 + selector: + matchLabels: + app: contact-mailer + template: + metadata: + labels: + app: contact-mailer + spec: + containers: + - name: contact-mailer + image: contact-mailer:latest + # Use 'Never' for locally imported images, 'Always' for registry + imagePullPolicy: Never + ports: + - containerPort: 8080 + env: + - name: RESEND_API_KEY + valueFrom: + secretKeyRef: + name: contact-mailer-config + key: RESEND_API_KEY + - name: FROM_EMAIL + value: "Felhom.eu " + - name: TO_EMAIL + value: "info@felhom.eu" + - name: ALLOWED_ORIGIN + value: "https://felhom.eu" + - name: TZ + value: "Europe/Budapest" + # Set to "true" to enable /debug/test endpoint + - name: DEBUG + value: "false" + resources: + requests: + memory: "16Mi" + cpu: "5m" + limits: + memory: "64Mi" + cpu: "100m" + livenessProbe: + httpGet: + path: /healthz + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 30 + readinessProbe: + httpGet: + path: /healthz + port: 8080 + initialDelaySeconds: 3 + periodSeconds: 10 + securityContext: + runAsNonRoot: true + runAsUser: 1000 + readOnlyRootFilesystem: true + allowPrivilegeEscalation: false +--- +apiVersion: v1 +kind: Service +metadata: + name: contact-mailer + namespace: felhom-system +spec: + selector: + app: contact-mailer + ports: + - port: 80 + targetPort: 8080 +--- +# Ingress: routes felhom.eu/api/* to the contact mailer +# This is a SEPARATE ingress from the website - nginx-ingress merges them +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: contact-mailer + namespace: felhom-system + annotations: + cert-manager.io/cluster-issuer: letsencrypt-prod + # Allow larger uploads for attachments + nginx.ingress.kubernetes.io/proxy-body-size: "25m" + # Timeout for large file uploads + nginx.ingress.kubernetes.io/proxy-read-timeout: "60" + nginx.ingress.kubernetes.io/proxy-send-timeout: "60" +spec: + ingressClassName: nginx-internal + tls: + - hosts: + - felhom.eu + secretName: felhom-webpage-tls + rules: + - host: felhom.eu + http: + paths: + - path: /api + pathType: Prefix + backend: + service: + name: contact-mailer + port: + number: 80 \ No newline at end of file