Commit Graph

35 Commits

Author SHA1 Message Date
Unchained
0f00aa8a47 Add Mautic environment variables to deployment
Some checks failed
Build and Deploy / build (push) Has been cancelled
2026-04-03 16:31:40 +02:00
Unchained
1ed6cac647 fix(k8s): use NodePort with externalTrafficPolicy Local to preserve client IP
Some checks failed
Build and Deploy / build (push) Has been cancelled
Change storefront service from ClusterIP to NodePort with externalTrafficPolicy: Local.
This preserves the real client source IP instead of NATing to the node IP.

Fixes analytics tracking showing Hetzner IP (138.201.11.251) instead of real visitor IPs.
Same fix previously applied to Rybbit backend service.

Note: On single-node clusters, this works seamlessly. Traefik routes directly
to the node where the pod is running, preserving the original source IP.
2026-04-03 06:55:42 +02:00
Unchained
e476bc9fc4 fix(k8s): add HTTP to HTTPS redirect for manoonoils.com
Some checks failed
Build and Deploy / build (push) Has been cancelled
- Create redirect-https middleware for permanent redirect (301)
- Split IngressRoute: HTTP route redirects to HTTPS, HTTPS route serves app
- Fixes Google Search Console 404 error on HTTP version
- No application code changes, only routing configuration
2026-04-02 22:50:43 +02:00
Unchained
054889a44e feat(analytics): add RYBBIT_API_KEY for server-side tracking
Some checks failed
Build and Deploy / build (push) Has been cancelled
2026-03-31 06:05:47 +02:00
Unchained
56c05cc8fc feat(analytics): add Rybbit proxy rewrites and env vars
Some checks failed
Build and Deploy / build (push) Has been cancelled
- Add Next.js rewrites to proxy /api/script.js and /api/track through self-hosted Rybbit
- This bypasses ad blockers that would block rybbit.nodecrew.me directly
- Add NEXT_PUBLIC_RYBBIT_HOST and NEXT_PUBLIC_RYBBIT_SITE_ID env vars to K8s deployment
2026-03-31 05:17:57 +02:00
Unchained
044aefae94 fix: remove dev.manoonoils.com from ingress and update OpenPanel API URL
Some checks failed
Build and Deploy / build (push) Has been cancelled
- Remove dev.manoonoils.com from storefront ingress to prevent cross-domain tracking issues
- Use environment variable for OpenPanel API URL in route handler
- Fixes session state conflicts from multiple domains
2026-03-30 20:40:17 +02:00
Unchained
83efc4f1e2 feat: migrate storefront to manoonoils.com domain
Some checks failed
Build and Deploy / build (push) Has been cancelled
- Update ingress to serve all domains (dev.manoonoils.com, manoonoils.com, www.manoonoils.com)
- Update NEXT_PUBLIC_SITE_URL to https://manoonoils.com in deployment env vars
- Prepare for 24h testing period before removing dev domain
2026-03-30 16:52:04 +02:00
Unchained
d0e3ee3201 fix(k8s): add OpenPanel env vars to runtime container
Some checks failed
Build and Deploy / build (push) Has been cancelled
Add NEXT_PUBLIC_OPENPANEL_CLIENT_ID, OPENPANEL_CLIENT_SECRET, and
OPENPANEL_API_URL to the storefront runtime container for server-side
tracking to work properly.
2026-03-25 19:30:28 +02:00
Unchained
6e0a05c314 fix(k8s): add RESEND_API_KEY and DASHBOARD_URL env vars to deployment
Some checks failed
Build and Deploy / build (push) Has been cancelled
2026-03-25 14:26:56 +02:00
Unchained
2876a8f80e fix: Replace WooCommerce env vars with Saleor API URL
Some checks failed
Build and Deploy / build (push) Has been cancelled
- NEXT_PUBLIC_WOOCOMMERCE_URL → NEXT_PUBLIC_SALEOR_API_URL
- Remove WooCommerce consumer key/secret (not needed for Saleor public API)
- Saleor API is public, no authentication required
2026-03-21 17:58:13 +02:00
Unchained
2c6889ad20 fix: revert to init container deployment with webhook auto-restart
Some checks failed
Build and Deploy / build (push) Has been cancelled
- Init containers clone and build fresh code on each pod start
- Webhook triggers kubectl rollout restart on git push
- This provides true auto-deploy without requiring Docker registry
2026-03-07 12:35:30 +02:00
Unchained
8f3bcebbf6 feat: implement full CI/CD pipeline with GitHub Actions and Flux
Some checks failed
Build and Deploy / build (push) Has been cancelled
- Add GitHub Actions workflow to build and push Docker images to GHCR
- Add Dockerfile for multi-stage builds
- Update deployment to use GHCR images
- Add GHCR authentication secrets
- Configure Flux ImageRepository, ImagePolicy, and ImageUpdateAutomation
- Remove init container approach in favor of proper Docker builds

Auto-deploy flow:
1. Push to master triggers GitHub Actions
2. GitHub Actions builds image with commit hash tag
3. Image pushed to ghcr.io/unchainedio/manoon-headless
4. Flux ImageRepository detects new image
5. Flux ImageUpdateAutomation updates kustomization.yaml
6. Flux Kustomization applies new deployment
7. Kubernetes restarts pods with new image
2026-03-07 12:26:37 +02:00
Unchained
2c27fc65d0 Revert to init container approach
The Docker-based CI/CD approach is the industry standard but requires:
- Proper container registry (GHCR, Docker Hub) with HTTPS
- Or complex local registry setup with containerd HTTP configuration

The init container approach works reliably for now. To enable auto-deploy:
1. Flux detects git changes in 30s (via webhook)
2. Kustomization applies new config
3. Manually run: kubectl rollout restart deployment/storefront -n manoonoils

For true auto-deploy, consider:
- Setting up GHCR with proper auth
- Using GitHub Actions to build/push images
- Using Flux ImageUpdateAutomation

Or simpler: A post-deploy webhook that triggers rollout restart.
2026-03-07 11:33:07 +02:00
Unchained
8f2b214c9f deploy: use registry ClusterIP instead of DNS name 2026-03-07 11:23:23 +02:00
Unchained
c4ff39394e deploy: use local registry image 2026-03-07 11:21:24 +02:00
Unchained
c3b3e133a8 fix: yaml indentation in deployment.yaml 2026-03-07 11:10:45 +02:00
Unchained
81d74ced0c feat: migrate to standard Docker-based CI/CD deployment
- Add Dockerfile for building Next.js images
- Replace init-container deployment with standard deployment
- Add kustomization with image tag tracking
- Add deploy.sh script for CI/CD pipeline

This enables proper GitOps auto-deployment:
1. Build image with commit hash tag
2. Push to GHCR
3. Update kustomization.yaml image tag
4. Flux detects change and restarts pods
2026-03-07 11:09:59 +02:00
Unchained
467b513b67 feat: add gitRevision annotation for auto-restart on git changes 2026-03-07 11:06:15 +02:00
Unchained
ee391a7b8d feat: add deployment-metadata configmap to trigger pod restarts on git changes 2026-03-07 11:01:04 +02:00
Unchained
5ce35817a1 feat: add git revision annotation to force pod restart on updates 2026-03-07 10:57:58 +02:00
Unchained
214547362c Remove secret from deployment - must be created manually with real credentials 2026-03-07 07:04:31 +02:00
Unchained
a1090e0e2c Fix kustomization.yaml - use deployment-nodejs.yaml 2026-03-07 06:31:35 +02:00
Unchained
72fe1d4079 Remove Docker-related files - using pure Node.js deployment 2026-03-07 06:20:00 +02:00
Unchained
c065b5ee17 Fix probes: use /favicon.ico instead of static dir 2026-03-06 20:50:09 +02:00
Unchained
bd423dbcc6 Fix health probes - use /_next/static/ path 2026-03-06 20:40:45 +02:00
Unchained
ee8902b843 Working Node.js deployment - use npm install instead of ci 2026-03-06 20:40:08 +02:00
Unchained
ba0e789b80 Fix Node.js deployment: add debug output, increase resources for npm install 2026-03-06 20:32:14 +02:00
Unchained
d8fe9337bb Update Node.js deployment with resource limits for k3s 2026-03-06 19:34:29 +02:00
Unchained
ced136fb4d Add pure Node.js deployment without Docker 2026-03-06 19:10:56 +02:00
Unchained
cac26e73ce Add Docker-less Node.js deployment config 2026-03-06 18:56:22 +02:00
Unchained
7d23176b6a Remove /en routes to fix build - using sr locale only 2026-03-06 16:24:06 +02:00
Unchained
5df87cbb9d Revert to Docker image deployment 2026-03-06 16:19:41 +02:00
Unchained
0f5f009512 Update deployment to use Node.js image directly, no Docker required 2026-03-06 16:18:32 +02:00
Unchained
1bef68c360 Fix IngressRoute syntax 2026-03-06 14:29:46 +02:00
Unchained
8a720f5335 Add Kubernetes manifests for Flux CD deployment 2026-03-06 14:25:28 +02:00