diff --git a/apps/fc-landing/fc-landing.yaml b/apps/fc-landing/fc-landing.yaml index d606df3..2e4786c 100644 --- a/apps/fc-landing/fc-landing.yaml +++ b/apps/fc-landing/fc-landing.yaml @@ -1,248 +1,320 @@ -# FlowerCore Landing Page -# Blue Jay Lab branded landing page -# ArgoCD managed - BlueJay Lab ---- -# fc-system namespace is shared; don't overwrite if it exists -apiVersion: v1 -kind: Namespace -metadata: - name: fc-system - labels: - app.kubernetes.io/part-of: bluejay-infra ---- -# Landing page HTML -apiVersion: v1 -kind: ConfigMap -metadata: - name: fc-landing-html - namespace: fc-system -data: - index.html: | - - - - - - FlowerCore - Blue Jay Lab - - - -
- -

FlowerCore

-

Blue Jay Lab

-
-
- -

Gitea

-

Git repositories

-
- -

ArgoCD

-

GitOps deployments

-
- -

Zabbix

-

Monitoring

-
- -

Guacamole

-

Remote desktop

-
- -

Element

-

Matrix chat

-
- -

Mail

-

Snappymail webmail

-
- -

Intranet

-

Lab portal

-
- -

PKI

-

Certificates

-
-
- - - ---- -# nginx configuration -apiVersion: v1 -kind: ConfigMap -metadata: - name: fc-landing-nginx-conf - namespace: fc-system -data: - default.conf: | - server { - listen 80; - server_name _; - root /usr/share/nginx/html; - index index.html; - - location / { - try_files $uri $uri/ =404; - } - - location /healthz { - access_log off; - return 200 "ok"; - add_header Content-Type text/plain; - } - } ---- -# Landing Page Deployment -apiVersion: apps/v1 -kind: Deployment -metadata: - name: fc-landing - namespace: fc-system - labels: - app: fc-landing -spec: - replicas: 1 - selector: - matchLabels: - app: fc-landing - template: - metadata: - labels: - app: fc-landing - spec: - containers: - - name: nginx - image: nginx:alpine - ports: - - containerPort: 80 - name: http - volumeMounts: - - name: nginx-conf - mountPath: /etc/nginx/conf.d/default.conf - subPath: default.conf - - name: html - mountPath: /usr/share/nginx/html - resources: - requests: - memory: 16Mi - cpu: 5m - limits: - memory: 64Mi - cpu: 50m - livenessProbe: - httpGet: - path: /healthz - port: 80 - initialDelaySeconds: 5 - periodSeconds: 10 - readinessProbe: - httpGet: - path: /healthz - port: 80 - initialDelaySeconds: 3 - periodSeconds: 5 - volumes: - - name: nginx-conf - configMap: - name: fc-landing-nginx-conf - - name: html - configMap: - name: fc-landing-html ---- -apiVersion: v1 -kind: Service -metadata: - name: fc-landing - namespace: fc-system -spec: - selector: - app: fc-landing - ports: - - port: 80 - targetPort: 80 - name: http ---- -# Traefik IngressRoute (internal only, no public cert needed) -apiVersion: traefik.io/v1alpha1 -kind: IngressRoute -metadata: - name: fc-landing - namespace: fc-system -spec: - entryPoints: - - websecure - routes: - - match: Host(`flowercore.iamworkin.lan`) - kind: Rule - services: - - name: fc-landing - port: 80 - tls: {} +# FlowerCore Landing Page +# Blue Jay Lab branded landing page - PUBLIC facing +# ArgoCD managed - BlueJay Lab +--- +apiVersion: v1 +kind: Namespace +metadata: + name: fc-system + labels: + app.kubernetes.io/part-of: bluejay-infra +--- +# Landing page HTML (public-safe - no internal LAN references) +apiVersion: v1 +kind: ConfigMap +metadata: + name: fc-landing-html + namespace: fc-system +data: + index.html: | + + + + + + FlowerCore + + + +
+ +

FlowerCore

+

Blue Jay Lab

+

+ Multi-tenant service management platform built on .NET 10, + Kubernetes, and GitOps. Digital signage, telephony IVR, + MySQL/PHP hosting, and infrastructure automation. +

+
+
+ +

Source

+

Gitea repositories

+
+ +

Mail

+

Webmail access

+
+ +

Chat

+

Matrix messaging

+
+ +

GitHub

+

Open source

+
+
+
+
+
17
+
Services
+
+
+
13
+
VLANs
+
+
+
12k+
+
Tests
+
+
+ + + +--- +# nginx configuration +apiVersion: v1 +kind: ConfigMap +metadata: + name: fc-landing-nginx-conf + namespace: fc-system +data: + default.conf: | + server { + listen 80; + server_name _; + root /usr/share/nginx/html; + index index.html; + + location / { + try_files $uri $uri/ =404; + } + + location /healthz { + access_log off; + return 200 "ok"; + add_header Content-Type text/plain; + } + } +--- +# Landing Page Deployment +apiVersion: apps/v1 +kind: Deployment +metadata: + name: fc-landing + namespace: fc-system + labels: + app: fc-landing +spec: + replicas: 1 + selector: + matchLabels: + app: fc-landing + template: + metadata: + labels: + app: fc-landing + spec: + containers: + - name: nginx + image: nginx:alpine + ports: + - containerPort: 80 + name: http + volumeMounts: + - name: nginx-conf + mountPath: /etc/nginx/conf.d/default.conf + subPath: default.conf + - name: html + mountPath: /usr/share/nginx/html + resources: + requests: + memory: 16Mi + cpu: 5m + limits: + memory: 64Mi + cpu: 50m + livenessProbe: + httpGet: + path: /healthz + port: 80 + initialDelaySeconds: 5 + periodSeconds: 10 + readinessProbe: + httpGet: + path: /healthz + port: 80 + initialDelaySeconds: 3 + periodSeconds: 5 + volumes: + - name: nginx-conf + configMap: + name: fc-landing-nginx-conf + - name: html + configMap: + name: fc-landing-html +--- +apiVersion: v1 +kind: Service +metadata: + name: fc-landing + namespace: fc-system +spec: + selector: + app: fc-landing + ports: + - port: 80 + targetPort: 80 + name: http +--- +# Internal IngressRoute (LAN access) +apiVersion: traefik.io/v1alpha1 +kind: IngressRoute +metadata: + name: fc-landing + namespace: fc-system +spec: + entryPoints: + - websecure + routes: + - match: Host(`flowercore.iamworkin.lan`) + kind: Rule + services: + - name: fc-landing + port: 80 + tls: {} +--- +# Public IngressRoute (flowercore.io with Cloudflare origin cert) +apiVersion: traefik.io/v1alpha1 +kind: IngressRoute +metadata: + name: fc-landing-public + namespace: fc-system +spec: + entryPoints: + - websecure + routes: + - match: Host(`flowercore.io`) || Host(`www.flowercore.io`) + kind: Rule + services: + - name: fc-landing + port: 80 + tls: + secretName: cf-origin-flowercore-io +--- +# HTTP to HTTPS redirect for public domain +apiVersion: traefik.io/v1alpha1 +kind: IngressRoute +metadata: + name: fc-landing-public-http + namespace: fc-system +spec: + entryPoints: + - web + routes: + - match: Host(`flowercore.io`) || Host(`www.flowercore.io`) + kind: Rule + services: + - name: fc-landing + port: 80 + middlewares: + - name: redirect-https +--- +apiVersion: traefik.io/v1alpha1 +kind: Middleware +metadata: + name: redirect-https + namespace: fc-system +spec: + redirectScheme: + scheme: https + permanent: true