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:
parent
ddfa9a6553
commit
2b76d1d969
@ -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
|
||||
default:
|
||||
steps.error("Unsupported dependencies manager")
|
||||
|
||||
@ -4,6 +4,7 @@ enum DependenciesManager {
|
||||
PIP('pip'),
|
||||
NPM('npm'),
|
||||
YARN('yarn'),
|
||||
PNPM('pnpm'),
|
||||
UNKNOWN('Unknown')
|
||||
|
||||
final String manager
|
||||
@ -20,6 +21,8 @@ enum DependenciesManager {
|
||||
return DependenciesManager.NPM
|
||||
case 'yarn':
|
||||
return DependenciesManager.YARN
|
||||
case 'pnpm':
|
||||
return DependenciesManager.PNPM
|
||||
default:
|
||||
return DependenciesManager.UNKNOWN
|
||||
}
|
||||
|
||||
@ -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
|
||||
]
|
||||
]
|
||||
}
|
||||
6
freeleaps/helm-pkg/chat/Chart.yaml
Normal file
6
freeleaps/helm-pkg/chat/Chart.yaml
Normal 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"
|
||||
27
freeleaps/helm-pkg/chat/templates/chat/certificate.yaml
Normal file
27
freeleaps/helm-pkg/chat/templates/chat/certificate.yaml
Normal 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 }}
|
||||
33
freeleaps/helm-pkg/chat/templates/chat/chat-config.yaml
Normal file
33
freeleaps/helm-pkg/chat/templates/chat/chat-config.yaml
Normal 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 }}
|
||||
98
freeleaps/helm-pkg/chat/templates/chat/deployment.yaml
Normal file
98
freeleaps/helm-pkg/chat/templates/chat/deployment.yaml
Normal 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 }}
|
||||
36
freeleaps/helm-pkg/chat/templates/chat/ingress.yaml
Normal file
36
freeleaps/helm-pkg/chat/templates/chat/ingress.yaml
Normal 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 }}
|
||||
26
freeleaps/helm-pkg/chat/templates/chat/service.yaml
Normal file
26
freeleaps/helm-pkg/chat/templates/chat/service.yaml
Normal 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 }}
|
||||
@ -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: ""
|
||||
87
freeleaps/helm-pkg/chat/values.yaml
Normal file
87
freeleaps/helm-pkg/chat/values.yaml
Normal 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: ""
|
||||
6
freeleaps/helm-pkg/freeleaps/Chart.yaml
Normal file
6
freeleaps/helm-pkg/freeleaps/Chart.yaml
Normal 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"
|
||||
@ -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 }}
|
||||
@ -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 }}
|
||||
@ -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 }}
|
||||
@ -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 }}
|
||||
@ -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 }}
|
||||
@ -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: ""
|
||||
87
freeleaps/helm-pkg/freeleaps/values.yaml
Normal file
87
freeleaps/helm-pkg/freeleaps/values.yaml
Normal 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: ""
|
||||
@ -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 }}
|
||||
@ -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 }}
|
||||
@ -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 }}
|
||||
36
freeleaps/helm-pkg/frontend/templates/frontend/ingress.yaml
Normal file
36
freeleaps/helm-pkg/frontend/templates/frontend/ingress.yaml
Normal 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 }}
|
||||
26
freeleaps/helm-pkg/frontend/templates/frontend/service.yaml
Normal file
26
freeleaps/helm-pkg/frontend/templates/frontend/service.yaml
Normal 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 }}
|
||||
@ -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"
|
||||
41
freeleaps/helm-pkg/frontend/values.yaml
Normal file
41
freeleaps/helm-pkg/frontend/values.yaml
Normal 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: ""
|
||||
Loading…
Reference in New Issue
Block a user