app.lux.finance and app.lux.market are served by Deployments in namespaces
app-lux-finance / app-lux-market on lux-k8s that exist ONLY as hand-applied
objects — kubectl.kubernetes.io/last-applied-configuration, no file anywhere
in this repo. That is why both kept serving 2026-06-25 images long after the
fabricated figures in them were fixed in source:
ghcr.io/luxfi/finance:1.0.3-amd64 -> "$125M+ Total Value Locked", a
literal; a page-load trace makes 25
requests, none of them JSON-RPC
ghcr.io/luxfi/market:1.0.31-amd64 -> /genesis tier table claiming 40B LUX
"permanently locked" behind
0x004287c4..76c6, eth_getCode "0x"
Specs transcribed from the live objects unchanged — same replicas, ports,
env, resources, /health probes, ghcr-pull secret, ingressClassName and TLS
secret names — so applying this is a no-op except for the image tag, which is
now the point: it moves to finance 1.0.4 / market 1.1.8, the first tags built
from the live-read source.
Both files record the sibling deployments that also claim these apps'
hostnames (k8s/lux-k8s/finance, k8s/lux-k8s/market, k8s/lux-mainnet/
lux-market.yaml). Collapsing three deployments of one app into one is a
separate change and is not attempted here.
Not applied: the luxfi ARC pool has not scheduled a runner in 14h
("max node group size reached", 0/10 nodes match the runner node selector),
so neither image exists yet. Apply once the tags are in GHCR.
Co-authored-by: Hanzo Dev <[email protected]>
104 lines
3.0 KiB
YAML
104 lines
3.0 KiB
YAML
# app.lux.market — the NFT marketplace SPA (luxfi/market).
|
|
#
|
|
# This is the deployment that actually serves app.lux.market on lux-k8s. Like
|
|
# app-lux-finance it existed only as a hand-applied object with no owning repo,
|
|
# which is how it kept serving ghcr.io/luxfi/market 1.0.31-amd64 (2026-06-25) —
|
|
# the build whose /genesis page prints a hard-coded tier table claiming
|
|
# 40,000,000,000 LUX "permanently locked" behind 0x004287c4..76c6, an address
|
|
# with no code — for a month after that page was rewritten to read
|
|
# totalMinted()/totalLuxLocked() live.
|
|
#
|
|
# NOTE two sibling deployments also claim market hosts: k8s/lux-k8s/market/
|
|
# (ns hanzo, lux-market, ghcr.io/luxfi/lux-market:v2.0.0) and
|
|
# k8s/lux-mainnet/lux-market.yaml (ghcr.io/luxfi/market:latest). Three
|
|
# deployments of one app; collapsing them is a separate change.
|
|
apiVersion: v1
|
|
kind: Namespace
|
|
metadata:
|
|
name: app-lux-market
|
|
labels:
|
|
app.kubernetes.io/part-of: lux
|
|
---
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: app-lux-market
|
|
namespace: app-lux-market
|
|
labels:
|
|
app: app-lux-market
|
|
app.kubernetes.io/managed-by: lux-universe
|
|
app.kubernetes.io/part-of: lux-market
|
|
spec:
|
|
replicas: 2
|
|
selector:
|
|
matchLabels:
|
|
app: app-lux-market
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app: app-lux-market
|
|
spec:
|
|
containers:
|
|
- name: app
|
|
# v1.1.8 is the first tag whose build can even run: every tag from
|
|
# v1.0.32 on failed at 0s because a public repo cannot call a private
|
|
# reusable workflow. Bump this only to a tag that exists in
|
|
# ghcr.io/luxfi/market.
|
|
image: ghcr.io/luxfi/market:1.1.8
|
|
imagePullPolicy: IfNotPresent
|
|
ports:
|
|
- containerPort: 3000
|
|
name: http
|
|
env:
|
|
- name: PORT
|
|
value: "3000"
|
|
- name: ROOT
|
|
value: /public
|
|
resources:
|
|
requests: { cpu: 50m, memory: 32Mi }
|
|
limits: { memory: 128Mi }
|
|
readinessProbe:
|
|
httpGet: { path: /health, port: 3000 }
|
|
initialDelaySeconds: 3
|
|
periodSeconds: 10
|
|
livenessProbe:
|
|
httpGet: { path: /health, port: 3000 }
|
|
initialDelaySeconds: 10
|
|
periodSeconds: 30
|
|
imagePullSecrets:
|
|
- name: ghcr-pull
|
|
---
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: app-lux-market
|
|
namespace: app-lux-market
|
|
spec:
|
|
selector:
|
|
app: app-lux-market
|
|
ports:
|
|
- name: http
|
|
port: 80
|
|
targetPort: 3000
|
|
---
|
|
apiVersion: networking.k8s.io/v1
|
|
kind: Ingress
|
|
metadata:
|
|
name: app-lux-market
|
|
namespace: app-lux-market
|
|
annotations:
|
|
cert-manager.io/cluster-issuer: letsencrypt-prod
|
|
spec:
|
|
ingressClassName: ingress
|
|
tls:
|
|
- hosts: [app.lux.market]
|
|
secretName: app-lux-market-tls
|
|
rules:
|
|
- host: app.lux.market
|
|
http:
|
|
paths:
|
|
- path: /
|
|
pathType: Prefix
|
|
backend:
|
|
service: { name: app-lux-market, port: { number: 80 } }
|