chore: initial infrastructure scaffold
Kustomize base + overlays for the full Sunbeam k3s stack: - base/mesh — Linkerd edge (crds + control-plane + viz) - base/ingress — custom Pingora edge proxy - base/ory — Kratos 0.60.1 + Hydra 0.60.1 + login-ui - base/data — CloudNativePG 0.27.1, Valkey 8, OpenSearch 2 - base/storage — SeaweedFS master + volume + filer (S3 on :8333) - base/lasuite — Hive sync daemon + La Suite app placeholders - base/media — LiveKit livekit-server 1.9.0 - base/devtools — Gitea 12.5.0 (external PG + Valkey) overlays/local — sslip.io domain, mkcert TLS, Lima hostPort overlays/production — stub (TODOs for sunbeam.pt values) scripts/ — local-up/down/certs/urls helpers justfile — up / down / certs / urls targets
This commit is contained in:
28
base/lasuite/hive-config.yaml
Normal file
28
base/lasuite/hive-config.yaml
Normal file
@@ -0,0 +1,28 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: hive-config
|
||||
namespace: lasuite
|
||||
data:
|
||||
config.toml: |
|
||||
[drive]
|
||||
base_url = "http://drive.lasuite.svc.cluster.local:8000"
|
||||
workspace = "Game Assets"
|
||||
oidc_client_id = "hive"
|
||||
oidc_token_url = "http://hydra.ory.svc.cluster.local:4444/oauth2/token"
|
||||
# oidc_client_secret_file = "/run/secrets/hive-oidc" # mounted from Secret
|
||||
|
||||
[s3]
|
||||
endpoint = "http://seaweedfs-filer.storage.svc.cluster.local:8333"
|
||||
bucket = "sunbeam-game-assets"
|
||||
region = "us-east-1"
|
||||
# access_key_file = "/run/secrets/seaweedfs-key" # mounted from Secret
|
||||
# secret_key_file = "/run/secrets/seaweedfs-secret" # mounted from Secret
|
||||
|
||||
[postgres]
|
||||
# url_file = "/run/secrets/hive-db-url" # mounted from Secret
|
||||
|
||||
[sync]
|
||||
interval_seconds = 30
|
||||
temp_dir = "/tmp/hive"
|
||||
large_file_threshold_mb = 50
|
||||
44
base/lasuite/hive-deployment.yaml
Normal file
44
base/lasuite/hive-deployment.yaml
Normal file
@@ -0,0 +1,44 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: hive
|
||||
namespace: lasuite
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: hive
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: hive
|
||||
spec:
|
||||
containers:
|
||||
- name: hive
|
||||
image: ghcr.io/sunbeam-studio/hive:latest
|
||||
volumeMounts:
|
||||
- name: config
|
||||
mountPath: /etc/hive
|
||||
readOnly: true
|
||||
- name: secrets
|
||||
mountPath: /run/secrets
|
||||
readOnly: true
|
||||
resources:
|
||||
limits:
|
||||
memory: 64Mi
|
||||
requests:
|
||||
memory: 32Mi
|
||||
cpu: 25m
|
||||
volumes:
|
||||
- name: config
|
||||
configMap:
|
||||
name: hive-config
|
||||
- name: secrets
|
||||
projected:
|
||||
sources:
|
||||
- secret:
|
||||
name: hive-oidc
|
||||
- secret:
|
||||
name: seaweedfs-s3-credentials
|
||||
- secret:
|
||||
name: hive-db-url
|
||||
15
base/lasuite/hive-service.yaml
Normal file
15
base/lasuite/hive-service.yaml
Normal file
@@ -0,0 +1,15 @@
|
||||
# Hive has no inbound HTTP API — it is a reconciliation daemon only.
|
||||
# This Service exists for Linkerd observability (metrics scraping).
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: hive
|
||||
namespace: lasuite
|
||||
spec:
|
||||
selector:
|
||||
app: hive
|
||||
ports:
|
||||
- name: metrics
|
||||
port: 9090
|
||||
targetPort: 9090
|
||||
protocol: TCP
|
||||
69
base/lasuite/kustomization.yaml
Normal file
69
base/lasuite/kustomization.yaml
Normal file
@@ -0,0 +1,69 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
|
||||
namespace: lasuite
|
||||
|
||||
resources:
|
||||
- namespace.yaml
|
||||
- hive-config.yaml
|
||||
- hive-deployment.yaml
|
||||
- hive-service.yaml
|
||||
- seaweedfs-buckets.yaml
|
||||
|
||||
# La Suite Numérique Helm charts:
|
||||
# Each component's chart lives in-tree inside its own GitHub repo (under helm/ or charts/).
|
||||
# There is NO published Helm repo index at a suitenumerique.github.io URL — charts must be
|
||||
# pulled from each component's repo individually.
|
||||
#
|
||||
# Options:
|
||||
# a) Use Flux HelmRepository with type=git pointing at each suitenumerique/<app> repo.
|
||||
# b) Package each chart locally (`helm package`) and commit to this repo under charts/.
|
||||
# c) Use OCI if/when they start publishing to GHCR (check each repo's CI for ghcr.io pushes).
|
||||
#
|
||||
# Recommended starting points:
|
||||
# - https://github.com/suitenumerique/docs (helm/ directory)
|
||||
# - https://github.com/suitenumerique/meet (helm/ directory)
|
||||
# - https://github.com/suitenumerique/drive (helm/ directory)
|
||||
# - https://github.com/suitenumerique/people (helm/ directory)
|
||||
# - https://github.com/suitenumerique/messages (check for helm/ directory)
|
||||
# - https://github.com/suitenumerique/conversations (check for helm/ directory)
|
||||
#
|
||||
# TODO: Once each app's chart path is confirmed, add helmCharts entries here.
|
||||
# Placeholder entries (commented out) — verify chart name and repo format first:
|
||||
|
||||
# helmCharts:
|
||||
# - name: docs
|
||||
# repo: oci://ghcr.io/suitenumerique/docs # hypothetical; verify on ghcr.io first
|
||||
# version: "1.0.0"
|
||||
# releaseName: docs
|
||||
# namespace: lasuite
|
||||
#
|
||||
# - name: meet
|
||||
# repo: oci://ghcr.io/suitenumerique/meet
|
||||
# version: "1.0.0"
|
||||
# releaseName: meet
|
||||
# namespace: lasuite
|
||||
#
|
||||
# - name: drive
|
||||
# repo: oci://ghcr.io/suitenumerique/drive
|
||||
# version: "1.0.0"
|
||||
# releaseName: drive
|
||||
# namespace: lasuite
|
||||
#
|
||||
# - name: messages
|
||||
# repo: oci://ghcr.io/suitenumerique/messages
|
||||
# version: "1.0.0"
|
||||
# releaseName: messages
|
||||
# namespace: lasuite
|
||||
#
|
||||
# - name: conversations
|
||||
# repo: oci://ghcr.io/suitenumerique/conversations
|
||||
# version: "1.0.0"
|
||||
# releaseName: conversations
|
||||
# namespace: lasuite
|
||||
#
|
||||
# - name: people
|
||||
# repo: oci://ghcr.io/suitenumerique/people
|
||||
# version: "1.0.0"
|
||||
# releaseName: people
|
||||
# namespace: lasuite
|
||||
6
base/lasuite/namespace.yaml
Normal file
6
base/lasuite/namespace.yaml
Normal file
@@ -0,0 +1,6 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: lasuite
|
||||
annotations:
|
||||
linkerd.io/inject: enabled
|
||||
37
base/lasuite/seaweedfs-buckets.yaml
Normal file
37
base/lasuite/seaweedfs-buckets.yaml
Normal file
@@ -0,0 +1,37 @@
|
||||
apiVersion: batch/v1
|
||||
kind: Job
|
||||
metadata:
|
||||
name: seaweedfs-bucket-init
|
||||
namespace: lasuite
|
||||
annotations:
|
||||
# Run once on first deploy; manually delete to re-run if needed.
|
||||
helm.sh/hook: post-install
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
restartPolicy: OnFailure
|
||||
containers:
|
||||
- name: mc
|
||||
image: minio/mc:latest
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- |
|
||||
set -e
|
||||
ENDPOINT=http://seaweedfs-filer.storage.svc.cluster.local:8333
|
||||
mc alias set weed "$ENDPOINT" "$S3_ACCESS_KEY" "$S3_SECRET_KEY"
|
||||
|
||||
for bucket in \
|
||||
sunbeam-docs \
|
||||
sunbeam-meet \
|
||||
sunbeam-drive \
|
||||
sunbeam-messages \
|
||||
sunbeam-conversations \
|
||||
sunbeam-git-lfs \
|
||||
sunbeam-game-assets; do
|
||||
mc mb --ignore-existing "weed/$bucket"
|
||||
echo "Ensured bucket: $bucket"
|
||||
done
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: seaweedfs-s3-credentials
|
||||
Reference in New Issue
Block a user