1
0
Fork 0

feat: add octopus.k8s.vxm.cz (cluster signpost)

This commit is contained in:
Vojtěch Mareš 2022-01-02 18:27:43 +01:00
parent b8489a3de3
commit 9a1cc6f04d
Signed by: vojtech.mares
GPG key ID: C6827B976F17240D
28 changed files with 3890 additions and 0 deletions

View file

@ -0,0 +1,3 @@
{
"extends": "next/core-web-vitals"
}

42
sites/octopus.k8s.vxm.cz/.gitignore vendored Normal file
View file

@ -0,0 +1,42 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# next.js
/.next/
/out/
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# local env files
.env.local
.env.development.local
.env.test.local
.env.production.local
# vercel
.vercel
# typescript
*.tsbuildinfo
.yarn/*
!.yarn/cache
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions

View file

@ -0,0 +1,3 @@
node_modules
.next
out

View file

@ -0,0 +1,6 @@
{
"semi": true,
"trailingComma": "all",
"singleQuote": true,
"printWidth": 70
}

View file

@ -0,0 +1,7 @@
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
}

View file

@ -0,0 +1,34 @@
This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
## Getting Started
First, run the development server:
```bash
npm run dev
# or
yarn dev
```
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file.
[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`.
The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.
## Learn More
To learn more about Next.js, take a look at the following resources:
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
## Deploy on Vercel
The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.

View file

@ -0,0 +1,3 @@
# signpost.mareshq.com
Crossroad for all my services currently running

View file

@ -0,0 +1,5 @@
FROM nginx:mainline-alpine as nginx
COPY ./build/nginx/site.conf /etc/nginx/conf.d/default.conf
COPY ./out /website/

View file

@ -0,0 +1,15 @@
server {
listen 80;
location /security.txt {
return 308 /.well-known/security.txt;
}
location / {
root /website;
index index.html index.htm;
}
error_page 404 /404.html;
#error_page 500 502 503 504 /50x.html;
}

View file

@ -0,0 +1,58 @@
[
{
"name": "DevOps",
"items": [
{
"name": "Argo CD",
"url": "https://argo-cd.octopus.k8s.vxm.cz"
},
{
"name": "GitLab (MaresHQ / GitOps)",
"url": "https://gitlab.mareshq.com/mareshq/gitops"
}
]
},
{
"name": "Monitoring",
"items": [
{
"name": "Prometheus",
"url": "https://octopus.k8s.vxm.cz/prometheus"
},
{
"name": "Alert Manager",
"url": "https://octopus.k8s.vxm.cz/alertmanager"
},
{
"name": "Grafana",
"url": "https://octopus.k8s.vxm.cz/grafana"
}
]
},
{
"name": "Cluster / Nodes",
"items": [
{
"name": "Platypus (platypus.vxm.cz)",
"url": "https://platypus.vxm.cz"
},
{
"name": "Kangaroo (kangaroo.vxm.cz)",
"url": "https://kangaroo.vxm.cz"
},
{
"name": "Wombat (wombat.vxm.cz)",
"url": "https://wombat.vxm.cz"
}
]
},
{
"name": "Cluster / Storage",
"items": [
{
"name": "Longhorn Dashboard",
"url": "https://octopus.k8s.vxm.cz/longhorn"
}
]
}
]

View file

@ -0,0 +1,23 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/

View file

@ -0,0 +1,5 @@
apiVersion: v2
name: octopus.k8s.vxm.cz
description: A Helm chart for octopus.k8s.vxm.cz
type: application
version: 1.0.0

View file

@ -0,0 +1,51 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "octopus.k8s.vxm.cz.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "octopus.k8s.vxm.cz.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "octopus.k8s.vxm.cz.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "octopus.k8s.vxm.cz.labels" -}}
helm.sh/chart: {{ include "octopus.k8s.vxm.cz.chart" . }}
{{ include "octopus.k8s.vxm.cz.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "octopus.k8s.vxm.cz.selectorLabels" -}}
app.kubernetes.io/name: {{ include "octopus.k8s.vxm.cz.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}

View file

@ -0,0 +1,58 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "octopus.k8s.vxm.cz.fullname" . }}
labels:
{{- include "octopus.k8s.vxm.cz.labels" . | nindent 4 }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
{{- include "octopus.k8s.vxm.cz.selectorLabels" . | nindent 6 }}
template:
metadata:
{{- with .Values.podAnnotations }}
annotations:
{{- toYaml . | nindent 8 }}
{{- end }}
labels:
{{- include "octopus.k8s.vxm.cz.selectorLabels" . | nindent 8 }}
spec:
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
securityContext:
{{- toYaml .Values.podSecurityContext | nindent 8 }}
containers:
- name: {{ .Chart.Name }}
securityContext:
{{- toYaml .Values.securityContext | nindent 12 }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- name: http
containerPort: 80
protocol: TCP
livenessProbe:
httpGet:
path: /
port: http
readinessProbe:
httpGet:
path: /
port: http
resources:
{{- toYaml .Values.resources | nindent 12 }}
{{- with .Values.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}

View file

@ -0,0 +1,61 @@
{{- if .Values.ingress.enabled -}}
{{- $fullName := include "octopus.k8s.vxm.cz.fullname" . -}}
{{- $svcPort := .Values.service.port -}}
{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }}
{{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }}
{{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}}
{{- end }}
{{- end }}
{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}}
apiVersion: networking.k8s.io/v1
{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}
apiVersion: networking.k8s.io/v1beta1
{{- else -}}
apiVersion: extensions/v1beta1
{{- end }}
kind: Ingress
metadata:
name: {{ $fullName }}
labels:
{{- include "octopus.k8s.vxm.cz.labels" . | nindent 4 }}
{{- with .Values.ingress.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
{{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }}
ingressClassName: {{ .Values.ingress.className }}
{{- end }}
{{- if .Values.ingress.tls }}
tls:
{{- range .Values.ingress.tls }}
- hosts:
{{- range .hosts }}
- {{ . | quote }}
{{- end }}
secretName: {{ .secretName }}
{{- end }}
{{- end }}
rules:
{{- range .Values.ingress.hosts }}
- host: {{ .host | quote }}
http:
paths:
{{- range .paths }}
- path: {{ .path }}
{{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }}
pathType: {{ .pathType }}
{{- end }}
backend:
{{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }}
service:
name: {{ $fullName }}
port:
number: {{ $svcPort }}
{{- else }}
serviceName: {{ $fullName }}
servicePort: {{ $svcPort }}
{{- end }}
{{- end }}
{{- end }}
{{- end }}

View file

@ -0,0 +1,15 @@
apiVersion: v1
kind: Service
metadata:
name: {{ include "octopus.k8s.vxm.cz.fullname" . }}
labels:
{{- include "octopus.k8s.vxm.cz.labels" . | nindent 4 }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: http
protocol: TCP
name: http
selector:
{{- include "octopus.k8s.vxm.cz.selectorLabels" . | nindent 4 }}

View file

@ -0,0 +1,66 @@
# Default values for octopus.k8s.vxm.cz.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
replicaCount: 1
image:
repository: nginx
pullPolicy: IfNotPresent
tag: ""
imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""
podAnnotations: {}
podSecurityContext: {}
# fsGroup: 2000
securityContext:
# capabilities:
# drop:
# - ALL
# readOnlyRootFilesystem: true
# runAsNonRoot: true
# runAsUser: 1000
service:
type: ClusterIP
port: 80
ingress:
enabled: true
className: nginx
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
nginx.ingress.kubernetes.io/auth-url: "https://$host/oauth2/auth"
nginx.ingress.kubernetes.io/auth-signin: "https://$host/oauth2/start?rd=$escaped_request_uri"
hosts:
- host: octopus.k8s.vxm.cz
paths:
- path: /
pathType: Prefix
tls:
- secretName: octopus-signpost-tls
hosts:
- octopus.k8s.vxm.cz
resources:
# We usually recommend not to specify default resources and to leave this as a conscious
# choice for the user. This also increases chances charts run on environments with little
# resources, such as Minikube. If you do want to specify resources, uncomment the following
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
limits:
cpu: 100m
memory: 128Mi
requests:
cpu: 50m
memory: 64Mi
nodeSelector: {}
tolerations: []
affinity: {}

View file

@ -0,0 +1,6 @@
/// <reference types="next" />
/// <reference types="next/types/global" />
/// <reference types="next/image-types/global" />
// NOTE: This file should not be edited
// see https://nextjs.org/docs/basic-features/typescript for more information.

View file

@ -0,0 +1,4 @@
/** @type {import('next').NextConfig} */
module.exports = {
reactStrictMode: true,
};

View file

@ -0,0 +1,29 @@
{
"name": "octopus.k8s.vxm.cz",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build && next export",
"start": "next start",
"lint": "next lint",
"fmt": "prettier --write .",
"fmt-check": "prettier --check ."
},
"dependencies": {
"next": "12.0.3",
"react": "17.0.2",
"react-dom": "17.0.2"
},
"devDependencies": {
"@types/node": "16.11.7",
"@types/react": "17.0.34",
"autoprefixer": "^10.4.0",
"eslint": "7",
"eslint-config-next": "12.0.3",
"postcss": "^8.3.11",
"prettier": "^2.4.1",
"tailwindcss": "^3.0.8",
"typescript": "4.4.4"
},
"packageManager": "yarn@3.1.1"
}

View file

@ -0,0 +1,8 @@
import '../styles/globals.css';
import type { AppProps } from 'next/app';
function App({ Component, pageProps }: AppProps) {
return <Component {...pageProps} />;
}
export default App;

View file

@ -0,0 +1,65 @@
import type { NextPage } from 'next';
import Head from 'next/head';
import sections from '../content/sections.json';
const Home: NextPage = () => {
return (
<>
<Head>
<title>octopus.k8s.vxm.cz</title>
<meta
name="description"
content="Signpost for Octopus Kubernetes Cluster (octopus.k8s.vxm.cz)"
/>
<link rel="icon" href="/favicon.ico" />
</Head>
<h3 className="px-16 py-4 text-gray-600">octopus.k8s.vxm.cz</h3>
<main className="px-16">
<h1 className="font-sans font-bold text-4xl">
Octopus Kubernetes Cluster Signpost
</h1>
<div className="grid grid-cols-3 gap-4">
{sections.map((section) => (
<section key={section.name} className="mt-2 mx-2">
<h2 className="font-sans font-semibold text-2xl mb-4">
{section.name}
</h2>
<ul>
{section.items.map((item) => (
<li key={item.name} className="my-2">
<a
href={item.url}
target="_blank"
rel="noopener noreferrer"
className="
block
w-full
text-center
mx-2
py-2
border-2
border-gray-400
rounded
hover:bg-gray-900
hover:border-gray-900
hover:text-white
transition
focus:ring-2
focus:ring-gray-600 text-gray-800
"
>
{item.name}
</a>
</li>
))}
</ul>
</section>
))}
</div>
</main>
</>
);
};
export default Home;

View file

@ -0,0 +1,6 @@
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View file

@ -0,0 +1,3 @@
@tailwind base;
@tailwind components;
@tailwind utilities;

View file

@ -0,0 +1,10 @@
module.exports = {
content: ['./**/*.tsx'],
theme: {
extend: {},
},
variants: {
extend: {},
},
plugins: [],
};

View file

@ -0,0 +1,20 @@
{
"compilerOptions": {
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"incremental": true
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
"exclude": ["node_modules"]
}

File diff suppressed because it is too large Load diff