Production-ready Helm charts for Spring Boot and Next.js applications
Add the HomeRun Helm repository:
helm repo add homerun https://charts.sty.ovh
helm repo update
Version: 0.1.0
Description: Spring Boot Kotlin application Helm chart
helm repo add homerun https://charts.sty.ovh
helm install my-springboot homerun/springboot
| Key | Default Value | Description |
|---|---|---|
replicaCount |
2 |
Default value for replicaCount |
image.repository |
openjdk |
Default value for repository |
image.pullPolicy |
IfNotPresent |
Default value for pullPolicy |
image.tag |
17-jre-alpine |
Default value for tag |
imageCredentials.registry |
registry.gitlab.com |
Default value for registry |
imageCredentials.username |
|
Default value for username |
imageCredentials.password |
|
Default value for password |
imageCredentials.email |
|
Default value for email |
imagePullSecrets |
[{"name": "gitlab-registry"}] |
Default value for imagePullSecrets |
nameOverride |
|
Default value for nameOverride |
fullnameOverride |
|
Default value for fullnameOverride |
serviceAccount.create |
True |
Default value for create |
serviceAccount.name |
|
Default value for name |
podSecurityContext.fsGroup |
1001 |
Default value for fsGroup |
securityContext.allowPrivilegeEscalation |
False |
Default value for allowPrivilegeEscalation |
securityContext.runAsNonRoot |
True |
Default value for runAsNonRoot |
securityContext.runAsUser |
1001 |
Default value for runAsUser |
securityContext.capabilities.drop |
["ALL"] |
Default value for drop |
service.type |
ClusterIP |
Default value for type |
service.port |
8080 |
Default value for port |
ingress.enabled |
True |
Default value for enabled |
ingress.className |
traefik |
Default value for className |
ingress.annotations.traefik.ingress.kubernetes.io/router.entrypoints |
web,websecure |
Default value for traefik.ingress.kubernetes.io/router.entrypoints |
ingress.annotations.traefik.ingress.kubernetes.io/router.tls.certresolver |
letsencrypt |
Default value for traefik.ingress.kubernetes.io/router.tls.certresolver |
ingress.annotations.traefik.ingress.kubernetes.io/router.middlewares |
default-redirect-https@kubernetescrd |
Default value for traefik.ingress.kubernetes.io/router.middlewares |
ingress.hosts |
[{"host": "api.sty.ovh", "paths": [{"path": "/", "pathType": "Prefix"}]}] |
Default value for hosts |
ingress.tls |
[{"secretName": "springboot-tls", "hosts": ["api.sty.ovh"]}] |
Default value for tls |
resources.limits.cpu |
1000m |
Default value for cpu |
resources.limits.memory |
1Gi |
Default value for memory |
resources.requests.cpu |
200m |
Default value for cpu |
resources.requests.memory |
512Mi |
Default value for memory |
tolerations |
[] |
Default value for tolerations |
springboot.profiles.active |
prod |
Default value for active |
springboot.server.port |
8080 |
Default value for port |
springboot.management.endpoints.web.exposure.include |
health,info,prometheus |
Default value for include |
springboot.management.endpoint.health.show-details |
when-authorized |
Default value for show-details |
probes.liveness.httpGet.path |
/actuator/health/liveness |
Default value for path |
probes.liveness.httpGet.port |
8080 |
Default value for port |
probes.liveness.initialDelaySeconds |
60 |
Default value for initialDelaySeconds |
probes.liveness.periodSeconds |
10 |
Default value for periodSeconds |
probes.liveness.timeoutSeconds |
5 |
Default value for timeoutSeconds |
probes.liveness.failureThreshold |
3 |
Default value for failureThreshold |
probes.readiness.httpGet.path |
/actuator/health/readiness |
Default value for path |
probes.readiness.httpGet.port |
8080 |
Default value for port |
probes.readiness.initialDelaySeconds |
30 |
Default value for initialDelaySeconds |
probes.readiness.periodSeconds |
5 |
Default value for periodSeconds |
probes.readiness.timeoutSeconds |
3 |
Default value for timeoutSeconds |
probes.readiness.failureThreshold |
3 |
Default value for failureThreshold |
env |
[{"name": "SPRING_PROFILES_ACTIVE", "value": "prod"}, {"name": "SERVER_PORT", "value": "8080"}, {"name": "JAVA_OPTS", "value": "-Xms256m -Xmx512m"}] |
Default value for env |
configMap.enabled |
True |
Default value for enabled |
configMap.data.application.yml |
server:
port: 8080
spring:
application:
name: springboot-app
profiles:
active: prod
management:
endpoints:
web:
exposure:
include: health,info,prometheus
endpoint:
health:
show-details: when-authorized
|
Default value for application.yml |
secrets.enabled |
True |
Default value for enabled |
secrets.data |
None |
Default value for data |
persistence.enabled |
False |
Default value for enabled |
persistence.accessMode |
ReadWriteOnce |
Default value for accessMode |
persistence.size |
1Gi |
Default value for size |
persistence.storageClass |
local-path |
Default value for storageClass |
persistence.mountPath |
/app/logs |
Default value for mountPath |
autoscaling.enabled |
False |
Default value for enabled |
autoscaling.minReplicas |
1 |
Default value for minReplicas |
autoscaling.maxReplicas |
100 |
Default value for maxReplicas |
autoscaling.targetCPUUtilizationPercentage |
80 |
Default value for targetCPUUtilizationPercentage |
To use images from private GitLab registry:
imageCredentials:
registry: registry.gitlab.com
username: "your-username"
password: "your-access-token"
email: "your-email@example.com"
Version: 0.1.0
Description: Next.js application Helm chart
helm repo add homerun https://charts.sty.ovh
helm install my-nextjs homerun/nextjs
| Key | Default Value | Description |
|---|---|---|
replicaCount |
2 |
Default value for replicaCount |
image.repository |
node |
Default value for repository |
image.pullPolicy |
IfNotPresent |
Default value for pullPolicy |
image.tag |
18-alpine |
Default value for tag |
imageCredentials.registry |
registry.gitlab.com |
Default value for registry |
imageCredentials.username |
|
Default value for username |
imageCredentials.password |
|
Default value for password |
imageCredentials.email |
|
Default value for email |
imagePullSecrets |
[{"name": "gitlab-registry"}] |
Default value for imagePullSecrets |
nameOverride |
|
Default value for nameOverride |
fullnameOverride |
|
Default value for fullnameOverride |
serviceAccount.create |
True |
Default value for create |
serviceAccount.name |
|
Default value for name |
podSecurityContext.fsGroup |
1001 |
Default value for fsGroup |
securityContext.allowPrivilegeEscalation |
False |
Default value for allowPrivilegeEscalation |
securityContext.runAsNonRoot |
True |
Default value for runAsNonRoot |
securityContext.runAsUser |
1001 |
Default value for runAsUser |
securityContext.capabilities.drop |
["ALL"] |
Default value for drop |
service.type |
ClusterIP |
Default value for type |
service.port |
3000 |
Default value for port |
ingress.enabled |
True |
Default value for enabled |
ingress.className |
traefik |
Default value for className |
ingress.annotations.traefik.ingress.kubernetes.io/router.entrypoints |
web,websecure |
Default value for traefik.ingress.kubernetes.io/router.entrypoints |
ingress.annotations.traefik.ingress.kubernetes.io/router.tls.certresolver |
letsencrypt |
Default value for traefik.ingress.kubernetes.io/router.tls.certresolver |
ingress.annotations.traefik.ingress.kubernetes.io/router.middlewares |
default-redirect-https@kubernetescrd |
Default value for traefik.ingress.kubernetes.io/router.middlewares |
ingress.hosts |
[{"host": "app.sty.ovh", "paths": [{"path": "/", "pathType": "Prefix"}]}] |
Default value for hosts |
ingress.tls |
[{"secretName": "nextjs-tls", "hosts": ["app.sty.ovh"]}] |
Default value for tls |
resources.limits.cpu |
500m |
Default value for cpu |
resources.limits.memory |
512Mi |
Default value for memory |
resources.requests.cpu |
100m |
Default value for cpu |
resources.requests.memory |
128Mi |
Default value for memory |
tolerations |
[] |
Default value for tolerations |
env |
[{"name": "NODE_ENV", "value": "production"}, {"name": "PORT", "value": "3000"}] |
Default value for env |
configMap.enabled |
False |
Default value for enabled |
secrets.enabled |
False |
Default value for enabled |
persistence.enabled |
False |
Default value for enabled |
persistence.accessMode |
ReadWriteOnce |
Default value for accessMode |
persistence.size |
1Gi |
Default value for size |
persistence.storageClass |
local-path |
Default value for storageClass |
autoscaling.enabled |
False |
Default value for enabled |
autoscaling.minReplicas |
1 |
Default value for minReplicas |
autoscaling.maxReplicas |
100 |
Default value for maxReplicas |
autoscaling.targetCPUUtilizationPercentage |
80 |
Default value for targetCPUUtilizationPercentage |
To use images from private GitLab registry:
imageCredentials:
registry: registry.gitlab.com
username: "your-username"
password: "your-access-token"
email: "your-email@example.com"
All charts support private GitLab Container Registry. Configure your credentials:
# Method 1: Via values.yaml
imageCredentials:
registry: registry.gitlab.com
username: "gitlab-username"
password: "gitlab-access-token"
email: "your-email@example.com"
# Method 2: Via Helm CLI
helm install my-app homerun/springboot \
--set imageCredentials.registry=registry.gitlab.com \
--set imageCredentials.username=myuser \
--set imageCredentials.password=mytoken