Minio
Minio provides S3-compatible object storage for all kinds of things. It's deployed on the NAS and stores bulk storage.
Static Web Hosting
For static web hosting the Shivering-Isles Infrastructure re-uses the centralised Ingress infrastructure in combination with Minio running on the NAS.
A requirement for the static webpage that links to full filenames like example.html
as part of the URL.
Ingress-nginx is configured to handle the domain:
apiVersion: v1
kind: Service
metadata:
name: s3
spec:
type: ExternalName
externalName: nas.example.net
ports:
- port: 9000
name: https
protocol: TCP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example
annotations:
nginx.ingress.kubernetes.io/backend-protocol: HTTPS
nginx.ingress.kubernetes.io/app-root: /index.html
nginx.ingress.kubernetes.io/rewrite-target: /example/$1
spec:
rules:
- host: example.com
http:
paths:
- path: /(.*)
pathType: Prefix
backend:
service:
name: s3
port:
number: 9000
tls:
- hosts:
- example.com
secretName: example-tls
Finally a bucket example
is created and the website is copied inside:
mc alias set minio https://nas.example.net:9000 example-access-key example-access-secret
mc mirror --remove --overwrite ./ minio/example
Minium GitLab integration
A minimal GitLab CI defintion to sync the current directory to a bucket would look like this:
.minio:
image:
name: docker.io/minio/mc
entrypoint: ['']
before_script:
- mc alias set minio $MINIO_ENDPOINT $MINIO_ACCESS_KEY $MINIO_ACCESS_SECRET
script:
- mc mirror --remove --overwrite ./ minio/$MINIO_BUCKET
The provided template should be extended by a job and provide the relevant environment variables.