feat(helm): add Helm charts for chat and freeleaps services with initial configurations

Signed-off-by: zhenyus <zhenyus@mathmast.com>
This commit is contained in:
zhenyus 2025-02-25 02:14:16 +08:00
parent ddfa9a6553
commit 2b76d1d969
26 changed files with 1181 additions and 0 deletions

View File

@ -119,6 +119,29 @@ class DependenciesResolver {
} }
} }
break
case DependenciesManager.PNPM:
if (configurations.pnpmPackageJsonFile == null || configurations.pnpmPackageJsonFile.isEmpty()) {
steps.error("pnpmPackageJsonFile is required when using PNPM as dependencies manager")
}
def packageJsonFile = configurations.pnpmPackageJsonFile
this.getNodeVersion()
if (cachingEnabled) {
steps.dir(this.workspace) {
steps.cache(maxCacheSize: 512, caches: [[$class: 'ArbitraryFileCache', includes: '**/*', path: ".${configurations.name}-pnpm-cache", cacheValidityDecidingFile: 'pnpm-lock.yaml']]) {
steps.sh "mkdir -p ${configurations.name}-pnpm-cache"
steps.sh "pnpm install --store-dir ${configurations.name}-pnpm-cache --prefer-offline"
}
}
} else {
steps.dir(this.workspace) {
steps.sh "pnpm install"
}
}
break break
default: default:
steps.error("Unsupported dependencies manager") steps.error("Unsupported dependencies manager")

View File

@ -4,6 +4,7 @@ enum DependenciesManager {
PIP('pip'), PIP('pip'),
NPM('npm'), NPM('npm'),
YARN('yarn'), YARN('yarn'),
PNPM('pnpm'),
UNKNOWN('Unknown') UNKNOWN('Unknown')
final String manager final String manager
@ -20,6 +21,8 @@ enum DependenciesManager {
return DependenciesManager.NPM return DependenciesManager.NPM
case 'yarn': case 'yarn':
return DependenciesManager.YARN return DependenciesManager.YARN
case 'pnpm':
return DependenciesManager.PNPM
default: default:
return DependenciesManager.UNKNOWN return DependenciesManager.UNKNOWN
} }

View File

@ -0,0 +1,78 @@
library 'first-class-pipeline'
executeFreeleapsPipeline {
serviceName = 'freeleaps'
environmentSlug = 'alpha'
serviceGitBranch = 'develop'
serviceGitRepo = "https://freeleaps@dev.azure.com/freeleaps/freeleaps2-frontend/_git/freeleaps2-frontend"
serviceGitRepoType = 'monorepo'
serviceGitCredentialsId = 'freeleaps-azure-devops-credentials'
executeMode = 'on-demand'
commitMessageLintEnabled = false
components = [
[
name: 'chat',
root: 'apps/chat',
language: 'python',
dependenciesManager: 'pip',
requirementsFile: 'requirements.txt',
buildCacheEnabled: true,
buildAgentImage: 'python:3.10-slim-buster',
buildArtifacts: ['.'],
lintEnabled: false,
sastEnabled: false,
imageRegistry: 'docker.io',
imageRepository: 'freeleaps',
imageName: 'devsvc',
imageBuilder: 'dind',
dockerfilePath: 'Dockerfile',
imageBuildRoot: '.',
imageReleaseArchitectures: ['linux/amd64', 'linux/arm64/v8'],
registryCredentialsId: 'freeleaps-devops-docker-hub-credentials',
semanticReleaseEnabled: true
],
[
name: 'freeleaps',
root: 'apps/freeleaps',
language: 'python',
dependenciesManager: 'pip',
requirementsFile: 'requirements.txt',
buildCacheEnabled: true,
buildAgentImage: 'python:3.10-slim-buster',
buildArtifacts: ['.'],
lintEnabled: false,
sastEnabled: false,
imageRegistry: 'docker.io',
imageRepository: 'freeleaps',
imageName: 'devsvc',
imageBuilder: 'dind',
dockerfilePath: 'Dockerfile',
imageBuildRoot: '.',
imageReleaseArchitectures: ['linux/amd64', 'linux/arm64/v8'],
registryCredentialsId: 'freeleaps-devops-docker-hub-credentials',
semanticReleaseEnabled: true
],
[
name: 'frontend',
root: 'frontend',
language: 'javascript',
dependenciesManager: 'pnpm',
npmPackageJsonFile: 'package.json',
buildCacheEnabled: true,
buildAgentImage: 'node:lts',
buildCommand: 'pnpm -r build',
buildArtifacts: ['freeleaps/dist'],
lintEnabled: false,
sastEnabled: false,
imageRegistry: 'docker.io',
imageRepository: 'freeleaps',
imageName: 'frontend',
imageBuilder: 'dind',
dockerfilePath: 'Dockerfile',
imageBuildRoot: '.',
imageReleaseArchitectures: ['linux/amd64', 'linux/arm64/v8'],
registryCredentialsId: 'freeleaps-devops-docker-hub-credentials',
semanticReleaseEnabled: true
]
]
}

View File

@ -0,0 +1,6 @@
apiVersion: v2
name: chat
description: A Helm Chart of chat service, which part of Freeleaps Platform, powered by Freeleaps.
type: application
version: 0.0.1
appVersion: "0.0.1"

View File

@ -0,0 +1,27 @@
{{ $namespace := .Release.Namespace }}
{{ $appVersion := .Chart.AppVersion | quote }}
{{ $releaseCertificate := .Release.Service }}
{{ $releaseName := .Release.Name }}
{{- range $ingress := .Values.chat.ingresses }}
{{- if not $ingress.tls.exists }}
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: {{ $ingress.name }}
namespace: {{ $namespace }}
labels:
app.kubernetes.io/version: {{ $appVersion }}
app.kubernetes.io/name: {{ $ingress.name | quote }}
app.kubernetes.io/managed-by: {{ $releaseCertificate }}
app.kubernetes.io/instance: {{ $releaseName }}
spec:
commonName: {{ $ingress.host }}
dnsNames:
- {{ $ingress.host }}
issuerRef:
name: {{ $ingress.tls.issuerRef.name }}
kind: {{ $ingress.tls.issuerRef.kind }}
secretName: {{ $ingress.tls.name }}
{{- end }}
{{- end }}

View File

@ -0,0 +1,33 @@
apiVersion: v1
kind: Secret
metadata:
name: chat-config
namespace: {{ .Release.Namespace }}
type: Opaque
data:
TZ: {{ .Values.chat.configs.tz | b64enc | quote }}
APP_NAME: {{ .Values.chat.configs.appName | b64enc | quote }}
SERVICE_API_ACCESS_HOST: {{ .Values.chat.configs.serviceApiAccessHost | b64enc | quote }}
SERVICE_API_ACCESS_PORT: {{ .Values.chat.configs.serviceApiAccessPort | toString | b64enc }}
MONGODB_NAME: {{ .Values.chat.configs.mongodbName | b64enc | quote }}
MONGODB_URI: {{ .Values.chat.configs.mongodbUri | b64enc | quote }}
MONGODB_PORT: {{ .Values.chat.configs.mongodbPort | toString | b64enc }}
EMAIL_FROM: {{ .Values.chat.configs.emailFrom | b64enc | quote }}
SITE_URL_ROOT: {{ .Values.chat.configs.siteUrlRoot | b64enc | quote }}
JWT_SECRET_KEY: {{ .Values.chat.configs.jwtSecretKey | b64enc | quote }}
JWT_ALGORITHM: {{ .Values.chat.configs.jwtAlgorithm | b64enc | quote }}
STRIPE_API_KEY: {{ .Values.chat.configs.stripeApiKey | b64enc | quote }}
STRIPE_WEBHOOK_SECRET: {{ .Values.chat.configs.stripeWebhookSecret | b64enc | quote }}
STRIPE_ACCOUNT_WEBHOOK_SECRET: {{ .Values.chat.configs.stripeAccountWebhookSecret | b64enc | quote }}
RABBITMQ_HOST: {{ .Values.chat.configs.rabbitmqHost | b64enc | quote }}
RABBITMQ_PORT: {{ .Values.chat.configs.rabbitmqPort | toString | b64enc }}
RABBITMQ_USERNAME: {{ .Values.chat.configs.rabbitmqUsername | b64enc | quote }}
RABBITMQ_PASSWORD: {{ .Values.chat.configs.rabbitmqPassword | b64enc | quote }}
FREELEAPS_DEVSVC_ENDPOINT: {{ .Values.chat.configs.freeleapsDevsvcEndpoint | b64enc | quote }}
FREELEAPS_CONTENT_ENDPOINT: {{ .Values.chat.configs.freeleapsContentEndpoint | b64enc | quote }}
FREELEAPS_CENTRAL_STORAGE_ENDPOINT: {{ .Values.chat.configs.freeleapsCentralStorageEndpoint | b64enc | quote }}
FREELEAPS_CHAT_ENDPOINT: {{ .Values.chat.configs.freeleapsChatEndpoint | b64enc | quote }}
FREELEAPS_PAYMENT_ENDPOINT: {{ .Values.chat.configs.freeleapsPaymentEndpoint | b64enc | quote }}
FREELEAPS_AILAB_ENDPOINT: {{ .Values.chat.configs.freeleapsAilabEndpoint | b64enc | quote }}
FREELEAPS_ENV: {{ .Values.chat.configs.freeleapsEnv | b64enc | quote }}
CERT_PATH: {{ .Values.chat.configs.certPath | b64enc | quote }}

View File

@ -0,0 +1,98 @@
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
app.kubernetes.io/name: "chat"
app.kubernetes.io/managed-by: {{ .Release.Service }}
app.kubernetes.io/instance: {{ .Release.Name }}
name: "chat"
namespace: {{ .Release.Namespace | quote }}
spec:
selector:
matchLabels:
app.kubernetes.io/name: "chat"
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
replicas: {{ .Values.chat.replicas }}
template:
metadata:
labels:
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
app.kubernetes.io/name: "chat"
app.kubernetes.io/managed-by: {{ .Release.Service }}
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
containers:
- name: "chat"
image: "{{ coalesce .Values.chat.image.registry .Values.global.registry "docker.io"}}/{{ coalesce .Values.chat.image.repository .Values.global.repository }}/{{ .Values.chat.image.name }}:{{ .Values.chat.image.tag | default "latest" }}"
imagePullPolicy: {{ .Values.chat.image.imagePullPolicy | default "IfNotPresent" }}
ports:
{{- range $port := .Values.chat.ports }}
- containerPort: {{ $port.containerPort }}
name: {{ $port.name }}
protocol: {{ $port.protocol }}
{{- end }}
{{- if .Values.chat.resources }}
resources:
{{- toYaml .Values.chat.resources | nindent 12 }}
{{- end }}
{{- if .Values.chat.probes }}
{{- if and (.Values.chat.probes.liveness) (eq .Values.chat.probes.liveness.type "httpGet") }}
livenessProbe:
httpGet:
path: {{ .Values.chat.probes.liveness.config.path }}
port: {{ .Values.chat.probes.liveness.config.port }}
{{- if .Values.chat.probes.liveness.config.initialDelaySeconds }}
initialDelaySeconds: {{ .Values.chat.probes.liveness.config.initialDelaySeconds }}
{{- end }}
{{- if .Values.chat.probes.liveness.config.periodSeconds }}
periodSeconds: {{ .Values.chat.probes.liveness.config.periodSeconds }}
{{- end }}
{{- if .Values.chat.probes.liveness.config.timeoutSeconds }}
timeoutSeconds: {{ .Values.chat.probes.liveness.config.timeoutSeconds }}
{{- end }}
{{- if .Values.chat.probes.liveness.config.successThreshold }}
successThreshold: {{ .Values.chat.probes.liveness.config.successThreshold }}
{{- end }}
{{- if .Values.chat.probes.liveness.config.failureThreshold }}
failureThreshold: {{ .Values.chat.probes.liveness.config.failureThreshold }}
{{- end }}
{{- if .Values.chat.probes.liveness.config.terminationGracePeriodSeconds }}
terminationGracePeriodSeconds: {{ .Values.chat.probes.liveness.config.terminationGracePeriodSeconds }}
{{- end }}
{{- end }}
{{- if and (.Values.chat.probes.readiness) (eq .Values.chat.probes.readiness.type "httpGet") }}
readinessProbe:
httpGet:
path: {{ .Values.chat.probes.readiness.config.path }}
port: {{ .Values.chat.probes.readiness.config.port }}
{{- if .Values.chat.probes.readiness.config.initialDelaySeconds }}
initialDelaySeconds: {{ .Values.chat.probes.readiness.config.initialDelaySeconds }}
{{- end }}
{{- if .Values.chat.probes.readiness.config.periodSeconds }}
periodSeconds: {{ .Values.chat.probes.readiness.config.periodSeconds }}
{{- end }}
{{- if .Values.chat.probes.readiness.config.timeoutSeconds }}
timeoutSeconds: {{ .Values.chat.probes.readiness.config.timeoutSeconds }}
{{- end }}
{{- if .Values.chat.probes.readiness.config.successThreshold }}
successThreshold: {{ .Values.chat.probes.readiness.config.successThreshold }}
{{- end }}
{{- if .Values.chat.probes.readiness.config.failureThreshold }}
failureThreshold: {{ .Values.chat.probes.readiness.config.failureThreshold }}
{{- end }}:%
{{- if .Values.chat.probes.readiness.config.terminationGracePeriodSeconds }}
terminationGracePeriodSeconds: {{ .Values.chat.probes.readiness.config.terminationGracePeriodSeconds }}
{{- end }}
{{- end }}
{{- end}}
env:
{{- range $key, $value := .Values.chat.configs }}
- name: {{ $key | snakecase | upper }}
valueFrom:
secretKeyRef:
name: chat-config
key: {{ $key | snakecase | upper }}
{{- end }}

View File

@ -0,0 +1,36 @@
{{ $namespace := .Release.Namespace }}
{{ $appVersion := .Chart.AppVersion | quote }}
{{ $releaseIngress := .Release.Service }}
{{ $releaseName := .Release.Name }}
{{- range $ingress := .Values.chat.ingresses }}
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ $ingress.name }}
namespace: {{ $namespace }}
labels:
app.kubernetes.io/version: {{ $appVersion }}
app.kubernetes.io/name: {{ $ingress.name | quote }}
app.kubernetes.io/managed-by: {{ $releaseIngress }}
app.kubernetes.io/instance: {{ $releaseName }}
spec:
{{- if $ingress.class }}
ingressClassName: {{ $ingress.class }}
{{- end }}
{{- if $ingress.tls }}
tls:
- hosts:
- {{ $ingress.host }}
{{- if $ingress.tls.exists }}
secretName: {{ $ingress.tls.secretRef.name }}
{{- else }}
secretName: {{ $ingress.tls.name }}
{{- end }}
{{- end }}
rules:
- host: {{ $ingress.host }}
http:
paths:
{{- toYaml $ingress.rules | nindent 10 }}
{{- end }}

View File

@ -0,0 +1,26 @@
{{ $namespace := .Release.Namespace }}
{{ $appVersion := .Chart.AppVersion | quote }}
{{ $releaseService := .Release.Service }}
{{ $releaseName := .Release.Name }}
{{- range $service := .Values.chat.services }}
---
apiVersion: v1
kind: Service
metadata:
name: {{ $service.name }}
namespace: {{ $namespace }}
labels:
app.kubernetes.io/version: {{ $appVersion }}
app.kubernetes.io/name: {{ $service.name | quote }}
app.kubernetes.io/managed-by: {{ $releaseService }}
app.kubernetes.io/instance: {{ $releaseName }}
spec:
ports:
- port: {{ $service.port }}
targetPort: {{ $service.targetPort }}
selector:
app.kubernetes.io/version: {{ $appVersion }}
app.kubernetes.io/name: "chat"
app.kubernetes.io/managed-by: {{ $releaseService }}
app.kubernetes.io/instance: {{ $releaseName }}
{{- end }}

View File

@ -0,0 +1,77 @@
global:
registry: docker.io
repository: freeleaps
nodeSelector: {}
chat:
replicas: 1
image:
registry:
repository: freeleaps
name: chat
tag: 1.0.0
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 8012
protocol: TCP
resources:
requests:
cpu: "0.5"
memory: "512Mi"
limits:
cpu: "1"
memory: "1Gi"
# FIXME: Wait until the developers implements the probes APIs
probes: {}
services:
- name: chat-service
type: ClusterIP
port: 8012
targetPort: 8012
# Defaults to {}, which means doesn't have any ingress
ingresses:
- name: chat-ingress
host: alpha.chat.freeleaps.mathmast.com
class: nginx
rules:
- path: /
pathType: Prefix
backend:
service:
name: chat-service
port:
number: 8012
tls:
exists: false
issuerRef:
name: mathmast-dot-com
kind: ClusterIssuer
name: alpha.chat.freeleaps.mathmast.com-cert
configs:
tz: "UTC"
appName: "chat"
serviceApiAccessHost: "0.0.0.0"
serviceApiAccessPort: 8012
mongodbName: freeleaps2
mongodbUri: mongodb://freeleaps-alpha-mongo-mongodb.freeleaps-alpha.svc.freeleaps.cluster:27017/
mongodbHost: freeleaps-alpha-mongo-mongodb.freeleaps-alpha.svc.freeleaps.cluster
mongodbPort: 27017
emailFrom: "freeleaps@freeleaps.com"
siteUrlRoot: "https://alpha.freeleaps.mathmast.com"
jwtSecretKey: 8f87ca8c3c9c3df09a9c78e0adb0927855568f6072d9efc892534aee35f5867b
jwtAlgorithm: HS256
stripeApiKey: sk_test_51Ogsw5B0IyqaSJBrwczlr820jnmvA1qQQGoLZ2XxOsIzikpmXo4pRLjw4XVMTEBR8DdVTYySiAv1XX53Zv5xqynF00GfMqttFd
stripeWebhookSecret: ""
stripeAccountWebhookSecret: ""
rabbitmqHost: freeleaps-alpha-rabbitmq.freeleaps-alpha.svc.freeleaps.cluster
rabbitmqPort: 5672
rabbitmqUsername: user
rabbitmqPassword: 9dPrkjD8KENevfjT
freeleapsDevsvcEndpoint: "https://alpha.devsvc.freeleaps.mathmast.com"
freeleapsContentEndpoint: "https://alpha.content.freeleaps.mathmast.com"
freeleapsCentralStorageEndpoint: "https://alpha.central-storage.freeleaps.mathmast.com"
freeleapsChatEndpoint: "https://alpha.chat.freeleaps.mathmast.com"
freeleapsPaymentEndpoint: "https://alpha.payment.freeleaps.mathmast.com"
freeleapsAilabEndpoint: ""
freeleapsEnv: "alpha"
certPath: ""

View File

@ -0,0 +1,87 @@
global:
registry: docker.io
repository: freeleaps
nodeSelector: {}
chat:
replicas: 1
image:
registry:
repository: freeleaps
name: chat
tag: 1.0.0
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 8007
protocol: TCP
resources:
requests:
cpu: "0.5"
memory: "512Mi"
limits:
cpu: "1"
memory: "1Gi"
# FIXME: Wait until the developers implements the probes APIs
probes: {}
services:
- name: chat-service
type: ClusterIP
port: 8007
targetPort: 8007
# Defaults to {}, which means doesn't have any ingress
ingresses: {}
configs:
# TZ
tz: "UTC"
# APP_NAME
appName: "chat"
# SERVICE_API_ACCESS_HOST
serviceApiAccessHost: "0.0.0.0"
# SERVICE_API_ACCESS_PORT
serviceApiAccessPort: "8013"
# MONGODB_NAME
mongodbName: ""
# MONGODB_URI
mongodbUri: ""
# MONGODB_HOST
mongodbHost: ""
# MONGODB_PORT
mongodbPort: ''
# EMAIL_FROM
emailFrom: ""
# SITE_URL_ROOT
siteUrlRoot: ""
# JWT_SECRET_KEY
jwtSecretKey: ""
# JWT_ALGORITHM
jwtAlgorithm: ""
# STRIPE_API_KEY
stripeApiKey: ""
# STRIPE_WEBHOOK_SECRET
stripeWebhookSecret: ""
# STRIPE_ACCOUNT_WEBHOOK_SECRET
stripeAccountWebhookSecret: ""
# RABBITMQ_HOST
rabbitmqHost: ""
# RABBITMQ_PORT
rabbitmqPort:
# RABBITMQ_USERNAME
rabbitmqUsername: ""
# RABBITMQ_PASSWORD
rabbitmqPassword: ""
# FREELEAPS_DEVSVC_ENDPOINT
freeleapsDevsvcEndpoint: ""
# FREELEAPS_CONTENT_ENDPOINT
freeleapsContentEndpoint: ""
# FREELEAPS_CENTRAL_STORAGE_ENDPOINT
freeleapsCentralStorageEndpoint: ""
# FREELEAPS_CHAT_ENDPOINT
freeleapsChatEndpoint: ""
# FREELEAPS_PAYMENT_ENDPOINT
freeleapsPaymentEndpoint: ""
# FREELEAPS_AILAB_ENDPOINT
freeleapsAilabEndpoint: ""
# FREELEAPS_ENV
freeleapsEnv: ""
# CERT_PATH
certPath: ""

View File

@ -0,0 +1,6 @@
apiVersion: v2
name: freeleaps
description: A Helm Chart of freeleaps service, which part of Freeleaps Platform, powered by Freeleaps.
type: application
version: 0.0.1
appVersion: "0.0.1"

View File

@ -0,0 +1,27 @@
{{ $namespace := .Release.Namespace }}
{{ $appVersion := .Chart.AppVersion | quote }}
{{ $releaseCertificate := .Release.Service }}
{{ $releaseName := .Release.Name }}
{{- range $ingress := .Values.freeleaps.ingresses }}
{{- if not $ingress.tls.exists }}
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: {{ $ingress.name }}
namespace: {{ $namespace }}
labels:
app.kubernetes.io/version: {{ $appVersion }}
app.kubernetes.io/name: {{ $ingress.name | quote }}
app.kubernetes.io/managed-by: {{ $releaseCertificate }}
app.kubernetes.io/instance: {{ $releaseName }}
spec:
commonName: {{ $ingress.host }}
dnsNames:
- {{ $ingress.host }}
issuerRef:
name: {{ $ingress.tls.issuerRef.name }}
kind: {{ $ingress.tls.issuerRef.kind }}
secretName: {{ $ingress.tls.name }}
{{- end }}
{{- end }}

View File

@ -0,0 +1,98 @@
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
app.kubernetes.io/name: "freeleaps"
app.kubernetes.io/managed-by: {{ .Release.Service }}
app.kubernetes.io/instance: {{ .Release.Name }}
name: "freeleaps"
namespace: {{ .Release.Namespace | quote }}
spec:
selector:
matchLabels:
app.kubernetes.io/name: "freeleaps"
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
replicas: {{ .Values.freeleaps.replicas }}
template:
metadata:
labels:
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
app.kubernetes.io/name: "freeleaps"
app.kubernetes.io/managed-by: {{ .Release.Service }}
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
containers:
- name: "freeleaps"
image: "{{ coalesce .Values.freeleaps.image.registry .Values.global.registry "docker.io"}}/{{ coalesce .Values.freeleaps.image.repository .Values.global.repository }}/{{ .Values.freeleaps.image.name }}:{{ .Values.freeleaps.image.tag | default "latest" }}"
imagePullPolicy: {{ .Values.freeleaps.image.imagePullPolicy | default "IfNotPresent" }}
ports:
{{- range $port := .Values.freeleaps.ports }}
- containerPort: {{ $port.containerPort }}
name: {{ $port.name }}
protocol: {{ $port.protocol }}
{{- end }}
{{- if .Values.freeleaps.resources }}
resources:
{{- toYaml .Values.freeleaps.resources | nindent 12 }}
{{- end }}
{{- if .Values.freeleaps.probes }}
{{- if and (.Values.freeleaps.probes.liveness) (eq .Values.freeleaps.probes.liveness.type "httpGet") }}
livenessProbe:
httpGet:
path: {{ .Values.freeleaps.probes.liveness.config.path }}
port: {{ .Values.freeleaps.probes.liveness.config.port }}
{{- if .Values.freeleaps.probes.liveness.config.initialDelaySeconds }}
initialDelaySeconds: {{ .Values.freeleaps.probes.liveness.config.initialDelaySeconds }}
{{- end }}
{{- if .Values.freeleaps.probes.liveness.config.periodSeconds }}
periodSeconds: {{ .Values.freeleaps.probes.liveness.config.periodSeconds }}
{{- end }}
{{- if .Values.freeleaps.probes.liveness.config.timeoutSeconds }}
timeoutSeconds: {{ .Values.freeleaps.probes.liveness.config.timeoutSeconds }}
{{- end }}
{{- if .Values.freeleaps.probes.liveness.config.successThreshold }}
successThreshold: {{ .Values.freeleaps.probes.liveness.config.successThreshold }}
{{- end }}
{{- if .Values.freeleaps.probes.liveness.config.failureThreshold }}
failureThreshold: {{ .Values.freeleaps.probes.liveness.config.failureThreshold }}
{{- end }}
{{- if .Values.freeleaps.probes.liveness.config.terminationGracePeriodSeconds }}
terminationGracePeriodSeconds: {{ .Values.freeleaps.probes.liveness.config.terminationGracePeriodSeconds }}
{{- end }}
{{- end }}
{{- if and (.Values.freeleaps.probes.readiness) (eq .Values.freeleaps.probes.readiness.type "httpGet") }}
readinessProbe:
httpGet:
path: {{ .Values.freeleaps.probes.readiness.config.path }}
port: {{ .Values.freeleaps.probes.readiness.config.port }}
{{- if .Values.freeleaps.probes.readiness.config.initialDelaySeconds }}
initialDelaySeconds: {{ .Values.freeleaps.probes.readiness.config.initialDelaySeconds }}
{{- end }}
{{- if .Values.freeleaps.probes.readiness.config.periodSeconds }}
periodSeconds: {{ .Values.freeleaps.probes.readiness.config.periodSeconds }}
{{- end }}
{{- if .Values.freeleaps.probes.readiness.config.timeoutSeconds }}
timeoutSeconds: {{ .Values.freeleaps.probes.readiness.config.timeoutSeconds }}
{{- end }}
{{- if .Values.freeleaps.probes.readiness.config.successThreshold }}
successThreshold: {{ .Values.freeleaps.probes.readiness.config.successThreshold }}
{{- end }}
{{- if .Values.freeleaps.probes.readiness.config.failureThreshold }}
failureThreshold: {{ .Values.freeleaps.probes.readiness.config.failureThreshold }}
{{- end }}:%
{{- if .Values.freeleaps.probes.readiness.config.terminationGracePeriodSeconds }}
terminationGracePeriodSeconds: {{ .Values.freeleaps.probes.readiness.config.terminationGracePeriodSeconds }}
{{- end }}
{{- end }}
{{- end}}
env:
{{- range $key, $value := .Values.freeleaps.configs }}
- name: {{ $key | snakecase | upper }}
valueFrom:
secretKeyRef:
name: freeleaps-config
key: {{ $key | snakecase | upper }}
{{- end }}

View File

@ -0,0 +1,33 @@
apiVersion: v1
kind: Secret
metadata:
name: freeleaps-config
namespace: {{ .Release.Namespace }}
type: Opaque
data:
TZ: {{ .Values.freeleaps.configs.tz | b64enc | quote }}
APP_NAME: {{ .Values.freeleaps.configs.appName | b64enc | quote }}
SERVICE_API_ACCESS_HOST: {{ .Values.freeleaps.configs.serviceApiAccessHost | b64enc | quote }}
SERVICE_API_ACCESS_PORT: {{ .Values.freeleaps.configs.serviceApiAccessPort | toString | b64enc }}
MONGODB_NAME: {{ .Values.freeleaps.configs.mongodbName | b64enc | quote }}
MONGODB_URI: {{ .Values.freeleaps.configs.mongodbUri | b64enc | quote }}
MONGODB_PORT: {{ .Values.freeleaps.configs.mongodbPort | toString | b64enc }}
EMAIL_FROM: {{ .Values.freeleaps.configs.emailFrom | b64enc | quote }}
SITE_URL_ROOT: {{ .Values.freeleaps.configs.siteUrlRoot | b64enc | quote }}
JWT_SECRET_KEY: {{ .Values.freeleaps.configs.jwtSecretKey | b64enc | quote }}
JWT_ALGORITHM: {{ .Values.freeleaps.configs.jwtAlgorithm | b64enc | quote }}
STRIPE_API_KEY: {{ .Values.freeleaps.configs.stripeApiKey | b64enc | quote }}
STRIPE_WEBHOOK_SECRET: {{ .Values.freeleaps.configs.stripeWebhookSecret | b64enc | quote }}
STRIPE_ACCOUNT_WEBHOOK_SECRET: {{ .Values.freeleaps.configs.stripeAccountWebhookSecret | b64enc | quote }}
RABBITMQ_HOST: {{ .Values.freeleaps.configs.rabbitmqHost | b64enc | quote }}
RABBITMQ_PORT: {{ .Values.freeleaps.configs.rabbitmqPort | toString | b64enc }}
RABBITMQ_USERNAME: {{ .Values.freeleaps.configs.rabbitmqUsername | b64enc | quote }}
RABBITMQ_PASSWORD: {{ .Values.freeleaps.configs.rabbitmqPassword | b64enc | quote }}
FREELEAPS_DEVSVC_ENDPOINT: {{ .Values.freeleaps.configs.freeleapsDevsvcEndpoint | b64enc | quote }}
FREELEAPS_CONTENT_ENDPOINT: {{ .Values.freeleaps.configs.freeleapsContentEndpoint | b64enc | quote }}
FREELEAPS_CENTRAL_STORAGE_ENDPOINT: {{ .Values.freeleaps.configs.freeleapsCentralStorageEndpoint | b64enc | quote }}
FREELEAPS_CHAT_ENDPOINT: {{ .Values.freeleaps.configs.freeleapsChatEndpoint | b64enc | quote }}
FREELEAPS_PAYMENT_ENDPOINT: {{ .Values.freeleaps.configs.freeleapsPaymentEndpoint | b64enc | quote }}
FREELEAPS_AILAB_ENDPOINT: {{ .Values.freeleaps.configs.freeleapsAilabEndpoint | b64enc | quote }}
FREELEAPS_ENV: {{ .Values.freeleaps.configs.freeleapsEnv | b64enc | quote }}
CERT_PATH: {{ .Values.freeleaps.configs.certPath | b64enc | quote }}

View File

@ -0,0 +1,36 @@
{{ $namespace := .Release.Namespace }}
{{ $appVersion := .Chart.AppVersion | quote }}
{{ $releaseIngress := .Release.Service }}
{{ $releaseName := .Release.Name }}
{{- range $ingress := .Values.freeleaps.ingresses }}
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ $ingress.name }}
namespace: {{ $namespace }}
labels:
app.kubernetes.io/version: {{ $appVersion }}
app.kubernetes.io/name: {{ $ingress.name | quote }}
app.kubernetes.io/managed-by: {{ $releaseIngress }}
app.kubernetes.io/instance: {{ $releaseName }}
spec:
{{- if $ingress.class }}
ingressClassName: {{ $ingress.class }}
{{- end }}
{{- if $ingress.tls }}
tls:
- hosts:
- {{ $ingress.host }}
{{- if $ingress.tls.exists }}
secretName: {{ $ingress.tls.secretRef.name }}
{{- else }}
secretName: {{ $ingress.tls.name }}
{{- end }}
{{- end }}
rules:
- host: {{ $ingress.host }}
http:
paths:
{{- toYaml $ingress.rules | nindent 10 }}
{{- end }}

View File

@ -0,0 +1,26 @@
{{ $namespace := .Release.Namespace }}
{{ $appVersion := .Chart.AppVersion | quote }}
{{ $releaseService := .Release.Service }}
{{ $releaseName := .Release.Name }}
{{- range $service := .Values.freeleaps.services }}
---
apiVersion: v1
kind: Service
metadata:
name: {{ $service.name }}
namespace: {{ $namespace }}
labels:
app.kubernetes.io/version: {{ $appVersion }}
app.kubernetes.io/name: {{ $service.name | quote }}
app.kubernetes.io/managed-by: {{ $releaseService }}
app.kubernetes.io/instance: {{ $releaseName }}
spec:
ports:
- port: {{ $service.port }}
targetPort: {{ $service.targetPort }}
selector:
app.kubernetes.io/version: {{ $appVersion }}
app.kubernetes.io/name: "freeleaps"
app.kubernetes.io/managed-by: {{ $releaseService }}
app.kubernetes.io/instance: {{ $releaseName }}
{{- end }}

View File

@ -0,0 +1,77 @@
global:
registry: docker.io
repository: freeleaps
nodeSelector: {}
freeleaps:
replicas: 1
image:
registry:
repository: freeleaps
name: freeleaps
tag: 1.0.0
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 8001
protocol: TCP
resources:
requests:
cpu: "0.5"
memory: "512Mi"
limits:
cpu: "1"
memory: "1Gi"
# FIXME: Wait until the developers implements the probes APIs
probes: {}
services:
- name: freeleaps-service
type: ClusterIP
port: 8001
targetPort: 8001
# Defaults to {}, which means doesn't have any ingress
ingresses:
- name: freeleaps-ingress
host: alpha.api.freeleaps.mathmast.com
class: nginx
rules:
- path: /
pathType: Prefix
backend:
service:
name: free
port:
number: 8001
tls:
exists: false
issuerRef:
name: mathmast-dot-com
kind: ClusterIssuer
name: alpha.api.freeleaps.mathmast.com-cert
configs:
tz: "UTC"
appName: "freeleaps"
serviceApiAccessHost: "0.0.0.0"
serviceApiAccessPort: 8001
mongodbName: freeleaps2
mongodbUri: mongodb://freeleaps-alpha-mongo-mongodb.freeleaps-alpha.svc.freeleaps.cluster:27017/
mongodbHost: freeleaps-alpha-mongo-mongodb.freeleaps-alpha.svc.freeleaps.cluster
mongodbPort: 27017
emailFrom: "freeleaps@freeleaps.com"
siteUrlRoot: "https://alpha.freeleaps.mathmast.com"
jwtSecretKey: 8f87ca8c3c9c3df09a9c78e0adb0927855568f6072d9efc892534aee35f5867b
jwtAlgorithm: HS256
stripeApiKey: sk_test_51Ogsw5B0IyqaSJBrwczlr820jnmvA1qQQGoLZ2XxOsIzikpmXo4pRLjw4XVMTEBR8DdVTYySiAv1XX53Zv5xqynF00GfMqttFd
stripeWebhookSecret: ""
stripeAccountWebhookSecret: ""
rabbitmqHost: freeleaps-alpha-rabbitmq.freeleaps-alpha.svc.freeleaps.cluster
rabbitmqPort: 5672
rabbitmqUsername: user
rabbitmqPassword: 9dPrkjD8KENevfjT
freeleapsDevsvcEndpoint: "https://alpha.devsvc.freeleaps.mathmast.com"
freeleapsContentEndpoint: "https://alpha.content.freeleaps.mathmast.com"
freeleapsCentralStorageEndpoint: "https://alpha.central-storage.freeleaps.mathmast.com"
freeleapsChatEndpoint: "https://alpha.chat.freeleaps.mathmast.com"
freeleapsPaymentEndpoint: "https://alpha.payment.freeleaps.mathmast.com"
freeleapsAilabEndpoint: ""
freeleapsEnv: "alpha"
certPath: ""

View File

@ -0,0 +1,87 @@
global:
registry: docker.io
repository: freeleaps
nodeSelector: {}
freeleaps:
replicas: 1
image:
registry:
repository: freeleaps
name: freeleaps
tag: 1.0.0
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 8007
protocol: TCP
resources:
requests:
cpu: "0.5"
memory: "512Mi"
limits:
cpu: "1"
memory: "1Gi"
# FIXME: Wait until the developers implements the probes APIs
probes: {}
services:
- name: freeleaps-service
type: ClusterIP
port: 8007
targetPort: 8007
# Defaults to {}, which means doesn't have any ingress
ingresses: {}
configs:
# TZ
tz: "UTC"
# APP_NAME
appName: "freeleaps"
# SERVICE_API_ACCESS_HOST
serviceApiAccessHost: "0.0.0.0"
# SERVICE_API_ACCESS_PORT
serviceApiAccessPort: "8013"
# MONGODB_NAME
mongodbName: ""
# MONGODB_URI
mongodbUri: ""
# MONGODB_HOST
mongodbHost: ""
# MONGODB_PORT
mongodbPort: ''
# EMAIL_FROM
emailFrom: ""
# SITE_URL_ROOT
siteUrlRoot: ""
# JWT_SECRET_KEY
jwtSecretKey: ""
# JWT_ALGORITHM
jwtAlgorithm: ""
# STRIPE_API_KEY
stripeApiKey: ""
# STRIPE_WEBHOOK_SECRET
stripeWebhookSecret: ""
# STRIPE_ACCOUNT_WEBHOOK_SECRET
stripeAccountWebhookSecret: ""
# RABBITMQ_HOST
rabbitmqHost: ""
# RABBITMQ_PORT
rabbitmqPort:
# RABBITMQ_USERNAME
rabbitmqUsername: ""
# RABBITMQ_PASSWORD
rabbitmqPassword: ""
# FREELEAPS_DEVSVC_ENDPOINT
freeleapsDevsvcEndpoint: ""
# FREELEAPS_CONTENT_ENDPOINT
freeleapsContentEndpoint: ""
# FREELEAPS_CENTRAL_STORAGE_ENDPOINT
freeleapsCentralStorageEndpoint: ""
# FREELEAPS_freeleaps_ENDPOINT
freeleapsfreeleapsEndpoint: ""
# FREELEAPS_PAYMENT_ENDPOINT
freeleapsPaymentEndpoint: ""
# FREELEAPS_AILAB_ENDPOINT
freeleapsAilabEndpoint: ""
# FREELEAPS_ENV
freeleapsEnv: ""
# CERT_PATH
certPath: ""

View File

@ -0,0 +1,27 @@
{{ $namespace := .Release.Namespace }}
{{ $appVersion := .Chart.AppVersion | quote }}
{{ $releaseCertificate := .Release.Service }}
{{ $releaseName := .Release.Name }}
{{- range $ingress := .Values.frontend.ingresses }}
{{- if not $ingress.tls.exists }}
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: {{ $ingress.name }}
namespace: {{ $namespace }}
labels:
app.kubernetes.io/version: {{ $appVersion }}
app.kubernetes.io/name: {{ $ingress.name | quote }}
app.kubernetes.io/managed-by: {{ $releaseCertificate }}
app.kubernetes.io/instance: {{ $releaseName }}
spec:
commonName: {{ $ingress.host }}
dnsNames:
- {{ $ingress.host }}
issuerRef:
name: {{ $ingress.tls.issuerRef.name }}
kind: {{ $ingress.tls.issuerRef.kind }}
secretName: {{ $ingress.tls.name }}
{{- end }}
{{- end }}

View File

@ -0,0 +1,98 @@
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
app.kubernetes.io/name: "frontend"
app.kubernetes.io/managed-by: {{ .Release.Service }}
app.kubernetes.io/instance: {{ .Release.Name }}
name: "frontend"
namespace: {{ .Release.Namespace | quote }}
spec:
selector:
matchLabels:
app.kubernetes.io/name: "frontend"
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
replicas: {{ .Values.frontend.replicas }}
template:
metadata:
labels:
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
app.kubernetes.io/name: "frontend"
app.kubernetes.io/managed-by: {{ .Release.Service }}
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
containers:
- name: "frontend"
image: "{{ coalesce .Values.frontend.image.registry .Values.global.registry "docker.io"}}/{{ coalesce .Values.frontend.image.repository .Values.global.repository }}/{{ .Values.frontend.image.name }}:{{ .Values.frontend.image.tag | default "latest" }}"
imagePullPolicy: {{ .Values.frontend.image.imagePullPolicy | default "IfNotPresent" }}
ports:
{{- range $port := .Values.frontend.ports }}
- containerPort: {{ $port.containerPort }}
name: {{ $port.name }}
protocol: {{ $port.protocol }}
{{- end }}
{{- if .Values.frontend.resources }}
resources:
{{- toYaml .Values.frontend.resources | nindent 12 }}
{{- end }}
{{- if .Values.frontend.probes }}
{{- if and (.Values.frontend.probes.liveness) (eq .Values.frontend.probes.liveness.type "httpGet") }}
livenessProbe:
httpGet:
path: {{ .Values.frontend.probes.liveness.config.path }}
port: {{ .Values.frontend.probes.liveness.config.port }}
{{- if .Values.frontend.probes.liveness.config.initialDelaySeconds }}
initialDelaySeconds: {{ .Values.frontend.probes.liveness.config.initialDelaySeconds }}
{{- end }}
{{- if .Values.frontend.probes.liveness.config.periodSeconds }}
periodSeconds: {{ .Values.frontend.probes.liveness.config.periodSeconds }}
{{- end }}
{{- if .Values.frontend.probes.liveness.config.timeoutSeconds }}
timeoutSeconds: {{ .Values.frontend.probes.liveness.config.timeoutSeconds }}
{{- end }}
{{- if .Values.frontend.probes.liveness.config.successThreshold }}
successThreshold: {{ .Values.frontend.probes.liveness.config.successThreshold }}
{{- end }}
{{- if .Values.frontend.probes.liveness.config.failureThreshold }}
failureThreshold: {{ .Values.frontend.probes.liveness.config.failureThreshold }}
{{- end }}
{{- if .Values.frontend.probes.liveness.config.terminationGracePeriodSeconds }}
terminationGracePeriodSeconds: {{ .Values.frontend.probes.liveness.config.terminationGracePeriodSeconds }}
{{- end }}
{{- end }}
{{- if and (.Values.frontend.probes.readiness) (eq .Values.frontend.probes.readiness.type "httpGet") }}
readinessProbe:
httpGet:
path: {{ .Values.frontend.probes.readiness.config.path }}
port: {{ .Values.frontend.probes.readiness.config.port }}
{{- if .Values.frontend.probes.readiness.config.initialDelaySeconds }}
initialDelaySeconds: {{ .Values.frontend.probes.readiness.config.initialDelaySeconds }}
{{- end }}
{{- if .Values.frontend.probes.readiness.config.periodSeconds }}
periodSeconds: {{ .Values.frontend.probes.readiness.config.periodSeconds }}
{{- end }}
{{- if .Values.frontend.probes.readiness.config.timeoutSeconds }}
timeoutSeconds: {{ .Values.frontend.probes.readiness.config.timeoutSeconds }}
{{- end }}
{{- if .Values.frontend.probes.readiness.config.successThreshold }}
successThreshold: {{ .Values.frontend.probes.readiness.config.successThreshold }}
{{- end }}
{{- if .Values.frontend.probes.readiness.config.failureThreshold }}
failureThreshold: {{ .Values.frontend.probes.readiness.config.failureThreshold }}
{{- end }}:%
{{- if .Values.frontend.probes.readiness.config.terminationGracePeriodSeconds }}
terminationGracePeriodSeconds: {{ .Values.frontend.probes.readiness.config.terminationGracePeriodSeconds }}
{{- end }}
{{- end }}
{{- end}}
env:
{{- range $key, $value := .Values.frontend.configs }}
- name: {{ $key | snakecase | upper }}
valueFrom:
secretKeyRef:
name: frontend-config
key: {{ $key | snakecase | upper }}
{{- end }}

View File

@ -0,0 +1,11 @@
apiVersion: v1
kind: Secret
metadata:
name: frontend-config
namespace: {{ .Release.Namespace }}
type: Opaque
data:
TZ: {{ .Values.frontend.configs.tz | b64enc | quote }}
FRONTEND_PORT: {{ .Values.frontend.configs.frontendPort | toString | b64enc }}
FREELEAPS_CHAT_ENDPOINT: {{ .Values.frontend.configs.freeleapsChatEndpoint | b64enc | quote }}
FREELEAPS_BACKEND_ENDPOINT: {{ .Values.frontend.configs.freeleapsBackendEndpoint | b64enc | quote }}

View File

@ -0,0 +1,36 @@
{{ $namespace := .Release.Namespace }}
{{ $appVersion := .Chart.AppVersion | quote }}
{{ $releaseIngress := .Release.Service }}
{{ $releaseName := .Release.Name }}
{{- range $ingress := .Values.frontend.ingresses }}
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ $ingress.name }}
namespace: {{ $namespace }}
labels:
app.kubernetes.io/version: {{ $appVersion }}
app.kubernetes.io/name: {{ $ingress.name | quote }}
app.kubernetes.io/managed-by: {{ $releaseIngress }}
app.kubernetes.io/instance: {{ $releaseName }}
spec:
{{- if $ingress.class }}
ingressClassName: {{ $ingress.class }}
{{- end }}
{{- if $ingress.tls }}
tls:
- hosts:
- {{ $ingress.host }}
{{- if $ingress.tls.exists }}
secretName: {{ $ingress.tls.secretRef.name }}
{{- else }}
secretName: {{ $ingress.tls.name }}
{{- end }}
{{- end }}
rules:
- host: {{ $ingress.host }}
http:
paths:
{{- toYaml $ingress.rules | nindent 10 }}
{{- end }}

View File

@ -0,0 +1,26 @@
{{ $namespace := .Release.Namespace }}
{{ $appVersion := .Chart.AppVersion | quote }}
{{ $releaseService := .Release.Service }}
{{ $releaseName := .Release.Name }}
{{- range $service := .Values.frontend.services }}
---
apiVersion: v1
kind: Service
metadata:
name: {{ $service.name }}
namespace: {{ $namespace }}
labels:
app.kubernetes.io/version: {{ $appVersion }}
app.kubernetes.io/name: {{ $service.name | quote }}
app.kubernetes.io/managed-by: {{ $releaseService }}
app.kubernetes.io/instance: {{ $releaseName }}
spec:
ports:
- port: {{ $service.port }}
targetPort: {{ $service.targetPort }}
selector:
app.kubernetes.io/version: {{ $appVersion }}
app.kubernetes.io/name: "frontend"
app.kubernetes.io/managed-by: {{ $releaseService }}
app.kubernetes.io/instance: {{ $releaseName }}
{{- end }}

View File

@ -0,0 +1,58 @@
global:
registry: docker.io
repository: freeleaps
nodeSelector: {}
frontend:
replicas: 1
image:
registry:
repository: freeleaps
name: frontend
tag: 1.0.0
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 8080
protocol: TCP
resources:
requests:
cpu: "0.5"
memory: "512Mi"
limits:
cpu: "1"
memory: "1Gi"
# FIXME: Wait until the developers implements the probes APIs
probes: {}
services:
- name: frontend-service
type: ClusterIP
port: 8080
targetPort: 8080
# Defaults to {}, which means doesn't have any ingress
ingresses:
- name: frontend-ingress
host: alpha.freeleaps.mathmast.com
class: nginx
rules:
- path: /
pathType: Prefix
backend:
service:
name: frontend-service
port:
number: 8080
tls:
exists: false
issuerRef:
name: mathmast-dot-com
kind: ClusterIssuer
name: alpha.freeleaps.mathmast.com-cert
configs:
# TZ
tz: "UTC"
# FRONTEND_PORT
frontendPort: 8080
# FREELEAPS_CHAT_ENDPOINT
freeleapsChatEndpoint: "https://alpha.chat.freeleaps.mathmast.com"
# FREELEAPS_BACKEND_ENDPOINT
freeleapsBackendEndpoint: "https://alpha.api.freeleaps.mathmast.com"

View File

@ -0,0 +1,41 @@
global:
registry: docker.io
repository: freeleaps
nodeSelector: {}
frontend:
replicas: 1
image:
registry:
repository: freeleaps
name: frontend
tag: 1.0.0
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 8080
protocol: TCP
resources:
requests:
cpu: "0.5"
memory: "512Mi"
limits:
cpu: "1"
memory: "1Gi"
# FIXME: Wait until the developers implements the probes APIs
probes: {}
services:
- name: frontend-service
type: ClusterIP
port: 8080
targetPort: 8080
# Defaults to {}, which means doesn't have any ingress
ingresses: {}
configs:
# TZ
tz: "America/Settle"
# FRONTEND_PORT
frontendPort: 8080
# FREELEAPS_CHAT_ENDPOINT
freeleapsChatEndpoint: ""
# FREELEAPS_BACKEND_ENDPOINT
freeleapsBackendEndpoint: ""