Standardize config.

This commit is contained in:
2026-05-23 19:51:33 +00:00
parent e2e3f730a5
commit 6b5325c6f3
87 changed files with 426 additions and 531 deletions

View File

@@ -31,21 +31,18 @@ requires:
alias: db # Use a different reference name in templates alias: db # Use a different reference name in templates
- name: redis # 'alias' and 'installedAs' default to 'name' value - name: redis # 'alias' and 'installedAs' default to 'name' value
defaultConfig: defaultConfig:
serverImage: ghcr.io/immich-app/immich-server:release namespace: immich
mlImage: ghcr.io/immich-app/immich-machine-learning:release externalDnsDomain: "{{ .cloud.domain }}"
timezone: UTC
serverPort: 2283
mlPort: 3003
storage: 250Gi storage: 250Gi
cacheStorage: 10Gi cacheStorage: 10Gi
redisHostname: "{{ .apps.redis.host }}" # Can reference 'requires' app configurations domain: immich.{{ .cloud.domain }}
dbHostname: "{{ .apps.pg.host }}" tlsSecretName: wildcard-wild-cloud-tls
db: # Configuration can be nested db: # Configuration can be nested
host: "{{ .apps.pg.host }}" # Can reference 'requires' app configurations
name: immich name: immich
user: immich user: immich
host: "{{ .apps.pg.host }}" redis:
port: "{{ .apps.pg.port }}" host: "{{ .apps.redis.host }}"
domain: immich.{{ .cloud.domain }}
defaultSecrets: defaultSecrets:
- key: password # Random value will be generated if empty - key: password # Random value will be generated if empty
- key: dbUrl - key: dbUrl

View File

@@ -1,11 +1,6 @@
# Decidim # Decidim
Decidim is a participatory democracy framework for cities and organizations. Built in Ruby on Rails, it enables citizen participation through proposals, debates, and voting. Includes Sidekiq for background job processing. Decidim is a participatory democracy framework for cities and organizations. It enables citizen participation through proposals, debates, and voting.
## Dependencies
- **PostgreSQL** - Database for storing participatory processes and user data
- **Redis** - Used for Sidekiq background job processing
## Configuration ## Configuration
@@ -16,20 +11,3 @@ Key settings configured through your instance's `config.yaml`:
- **systemAdminEmail** - System admin email (defaults to your operator email) - **systemAdminEmail** - System admin email (defaults to your operator email)
- **storage** - Persistent volume size (default: `20Gi`) - **storage** - Persistent volume size (default: `20Gi`)
- **SMTP** - Email delivery settings inherited from your Wild Cloud instance - **SMTP** - Email delivery settings inherited from your Wild Cloud instance
## Access
After deployment, Decidim will be available at:
- `https://decidim.{your-cloud-domain}`
## First-Time Setup
1. Add and deploy the app:
```bash
wild app add decidim
wild app deploy decidim
```
2. Log in with the system admin credentials configured during setup
3. Create your first organization and configure participatory processes

View File

@@ -54,7 +54,7 @@ spec:
echo "Database initialization completed successfully" echo "Database initialization completed successfully"
env: env:
- name: POSTGRES_HOST - name: POSTGRES_HOST
value: {{ .dbHostname }} value: {{ .db.host }}
- name: POSTGRES_ADMIN_USER - name: POSTGRES_ADMIN_USER
value: postgres value: postgres
- name: POSTGRES_ADMIN_PASSWORD - name: POSTGRES_ADMIN_PASSWORD
@@ -63,9 +63,9 @@ spec:
name: decidim-secrets name: decidim-secrets
key: postgres.password key: postgres.password
- name: DB_NAME - name: DB_NAME
value: {{ .dbName }} value: {{ .db.name }}
- name: DB_USER - name: DB_USER
value: {{ .dbUsername }} value: {{ .db.user }}
- name: DB_PASSWORD - name: DB_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:

View File

@@ -55,7 +55,7 @@ spec:
- name: RAILS_ENV - name: RAILS_ENV
value: "production" value: "production"
- name: PORT - name: PORT
value: "{{ .port }}" value: "3000"
- name: RAILS_LOG_TO_STDOUT - name: RAILS_LOG_TO_STDOUT
value: "true" value: "true"
# Database configuration # Database configuration
@@ -66,7 +66,7 @@ spec:
key: dbUrl key: dbUrl
# Redis configuration # Redis configuration
- name: REDIS_HOSTNAME - name: REDIS_HOSTNAME
value: {{ .redisHostname }} value: {{ .redis.host }}
- name: REDIS_PASSWORD - name: REDIS_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
@@ -112,11 +112,11 @@ spec:
key: systemAdminPassword key: systemAdminPassword
ports: ports:
- name: http - name: http
containerPort: {{ .port }} containerPort: 3000
protocol: TCP protocol: TCP
livenessProbe: livenessProbe:
tcpSocket: tcpSocket:
port: {{ .port }} port: 3000
initialDelaySeconds: 300 initialDelaySeconds: 300
periodSeconds: 30 periodSeconds: 30
timeoutSeconds: 10 timeoutSeconds: 10
@@ -124,7 +124,7 @@ spec:
failureThreshold: 6 failureThreshold: 6
readinessProbe: readinessProbe:
tcpSocket: tcpSocket:
port: {{ .port }} port: 3000
initialDelaySeconds: 180 initialDelaySeconds: 180
periodSeconds: 30 periodSeconds: 30
timeoutSeconds: 10 timeoutSeconds: 10
@@ -182,7 +182,7 @@ spec:
key: dbUrl key: dbUrl
# Redis configuration # Redis configuration
- name: REDIS_HOSTNAME - name: REDIS_HOSTNAME
value: {{ .redisHostname }} value: {{ .redis.host }}
- name: REDIS_PASSWORD - name: REDIS_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:

View File

@@ -23,4 +23,4 @@ spec:
service: service:
name: decidim name: decidim
port: port:
number: {{ .port }} number: 3000

View File

@@ -1,7 +1,7 @@
name: decidim name: decidim
is: decidim is: decidim
description: Decidim is a participatory democracy framework for cities and organizations. Built in Ruby on Rails, it enables citizen participation through proposals, debates, and voting. Includes Sidekiq for background job processing. description: Decidim is a participatory democracy framework for cities and organizations. Built in Ruby on Rails, it enables citizen participation through proposals, debates, and voting. Includes Sidekiq for background job processing.
version: 0.31.0 version: 0.31.0-1
icon: https://raw.githubusercontent.com/decidim/decidim/develop/logo.svg icon: https://raw.githubusercontent.com/decidim/decidim/develop/logo.svg
requires: requires:
- name: postgres - name: postgres
@@ -11,27 +11,27 @@ requires:
- name: smtp - name: smtp
defaultConfig: defaultConfig:
namespace: decidim namespace: decidim
externalDnsDomain: "{{ .cloud.domain }}" externalDnsDomain: '{{ .cloud.domain }}'
timezone: UTC
port: 3000
storage: 20Gi storage: 20Gi
systemAdminEmail: "{{ .operator.email }}" systemAdminEmail: '{{ .operator.email }}'
siteName: "Decidim" siteName: 'Decidim'
domain: decidim.{{ .cloud.domain }} domain: decidim.{{ .cloud.domain }}
dbHostname: "{{ .apps.postgres.host }}"
dbPort: "{{ .apps.postgres.port }}"
dbUsername: decidim
dbName: decidim
redisHostname: "{{ .apps.redis.host }}"
tlsSecretName: wildcard-wild-cloud-tls tlsSecretName: wildcard-wild-cloud-tls
db:
host: '{{ .apps.postgres.host }}'
port: '{{ .apps.postgres.port }}'
name: decidim
user: decidim
redis:
host: '{{ .apps.redis.host }}'
smtp: smtp:
enabled: true enabled: true
host: "{{ .apps.smtp.host }}" host: '{{ .apps.smtp.host }}'
port: "{{ .apps.smtp.port }}" port: '{{ .apps.smtp.port }}'
user: "{{ .apps.smtp.user }}" user: '{{ .apps.smtp.user }}'
from: "{{ .apps.smtp.from }}" from: '{{ .apps.smtp.from }}'
tls: "{{ .apps.smtp.tls }}" tls: '{{ .apps.smtp.tls }}'
startTls: "{{ .apps.smtp.startTls }}" startTls: '{{ .apps.smtp.startTls }}'
defaultSecrets: defaultSecrets:
- key: systemAdminPassword - key: systemAdminPassword
- key: secretKeyBase - key: secretKeyBase
@@ -39,7 +39,7 @@ defaultSecrets:
- key: smtpPassword - key: smtpPassword
- key: dbPassword - key: dbPassword
- key: dbUrl - key: dbUrl
default: "postgres://{{ .app.dbUsername }}:{{ .secrets.dbPassword }}@{{ .app.dbHostname }}:{{ .app.dbPort }}/{{ .app.dbName }}" default: "postgres://{{ .app.db.user }}:{{ .secrets.dbPassword }}@{{ .app.db.host }}:{{ .app.db.port }}/{{ .app.db.name }}"
requiredSecrets: requiredSecrets:
- postgres.password - postgres.password
- redis.password - redis.password

View File

@@ -9,7 +9,7 @@ spec:
component: web component: web
ports: ports:
- name: http - name: http
port: {{ .port }} port: 3000
targetPort: http targetPort: http
protocol: TCP protocol: TCP
type: ClusterIP type: ClusterIP

View File

@@ -27,7 +27,7 @@ spec:
readOnlyRootFilesystem: false readOnlyRootFilesystem: false
env: env:
- name: PGHOST - name: PGHOST
value: "{{ .dbHostname }}" value: "{{ .db.host }}"
- name: PGPORT - name: PGPORT
value: "5432" value: "5432"
- name: PGUSER - name: PGUSER
@@ -38,9 +38,9 @@ spec:
name: discourse-secrets name: discourse-secrets
key: postgres.password key: postgres.password
- name: DISCOURSE_DB_USER - name: DISCOURSE_DB_USER
value: "{{ .dbUsername }}" value: "{{ .db.user }}"
- name: DISCOURSE_DB_NAME - name: DISCOURSE_DB_NAME
value: "{{ .dbName }}" value: "{{ .db.name }}"
- name: DISCOURSE_DB_PASSWORD - name: DISCOURSE_DB_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:

View File

@@ -56,20 +56,20 @@ spec:
- name: RAILS_ENV - name: RAILS_ENV
value: "production" value: "production"
- name: DISCOURSE_DB_HOST - name: DISCOURSE_DB_HOST
value: {{ .dbHostname }} value: {{ .db.host }}
- name: DISCOURSE_DB_PORT - name: DISCOURSE_DB_PORT
value: "{{ .dbPort }}" value: "{{ .db.port }}"
- name: DISCOURSE_DB_NAME - name: DISCOURSE_DB_NAME
value: {{ .dbName }} value: {{ .db.name }}
- name: DISCOURSE_DB_USERNAME - name: DISCOURSE_DB_USERNAME
value: {{ .dbUsername }} value: {{ .db.user }}
- name: DISCOURSE_DB_PASSWORD - name: DISCOURSE_DB_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
name: discourse-secrets name: discourse-secrets
key: dbPassword key: dbPassword
- name: DISCOURSE_REDIS_HOST - name: DISCOURSE_REDIS_HOST
value: {{ .redisHostname }} value: {{ .redis.host }}
- name: DISCOURSE_REDIS_PASSWORD - name: DISCOURSE_REDIS_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
@@ -113,13 +113,13 @@ spec:
value: "production" value: "production"
# Discourse database configuration # Discourse database configuration
- name: DISCOURSE_DB_HOST - name: DISCOURSE_DB_HOST
value: {{ .dbHostname }} value: {{ .db.host }}
- name: DISCOURSE_DB_PORT - name: DISCOURSE_DB_PORT
value: "{{ .dbPort }}" value: "{{ .db.port }}"
- name: DISCOURSE_DB_NAME - name: DISCOURSE_DB_NAME
value: {{ .dbName }} value: {{ .db.name }}
- name: DISCOURSE_DB_USERNAME - name: DISCOURSE_DB_USERNAME
value: {{ .dbUsername }} value: {{ .db.user }}
- name: DISCOURSE_DB_PASSWORD - name: DISCOURSE_DB_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
@@ -127,7 +127,7 @@ spec:
key: dbPassword key: dbPassword
# Redis configuration # Redis configuration
- name: DISCOURSE_REDIS_HOST - name: DISCOURSE_REDIS_HOST
value: {{ .redisHostname }} value: {{ .redis.host }}
- name: DISCOURSE_REDIS_PASSWORD - name: DISCOURSE_REDIS_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
@@ -220,13 +220,13 @@ spec:
value: "production" value: "production"
# Discourse database configuration # Discourse database configuration
- name: DISCOURSE_DB_HOST - name: DISCOURSE_DB_HOST
value: {{ .dbHostname }} value: {{ .db.host }}
- name: DISCOURSE_DB_PORT - name: DISCOURSE_DB_PORT
value: "{{ .dbPort }}" value: "{{ .db.port }}"
- name: DISCOURSE_DB_NAME - name: DISCOURSE_DB_NAME
value: {{ .dbName }} value: {{ .db.name }}
- name: DISCOURSE_DB_USERNAME - name: DISCOURSE_DB_USERNAME
value: {{ .dbUsername }} value: {{ .db.user }}
- name: DISCOURSE_DB_PASSWORD - name: DISCOURSE_DB_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
@@ -234,7 +234,7 @@ spec:
key: dbPassword key: dbPassword
# Redis configuration # Redis configuration
- name: DISCOURSE_REDIS_HOST - name: DISCOURSE_REDIS_HOST
value: {{ .redisHostname }} value: {{ .redis.host }}
- name: DISCOURSE_REDIS_PASSWORD - name: DISCOURSE_REDIS_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:

View File

@@ -1,7 +1,7 @@
name: discourse name: discourse
is: discourse is: discourse
description: Discourse is a modern, open-source discussion platform designed for online communities and forums. description: Discourse is a modern, open-source discussion platform designed for online communities and forums.
version: 3.5.3 version: 3.5.3-1
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/discourse.svg icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/discourse.svg
requires: requires:
- name: postgres - name: postgres
@@ -9,28 +9,28 @@ requires:
- name: smtp - name: smtp
defaultConfig: defaultConfig:
namespace: discourse namespace: discourse
externalDnsDomain: "{{ .cloud.domain }}" externalDnsDomain: '{{ .cloud.domain }}'
timezone: UTC
port: 3000
storage: 10Gi storage: 10Gi
adminEmail: "{{ .operator.email }}" adminEmail: '{{ .operator.email }}'
adminUsername: admin adminUsername: admin
siteName: "Community" siteName: 'Community'
domain: discourse.{{ .cloud.domain }} domain: discourse.{{ .cloud.domain }}
dbHostname: "{{ .apps.postgres.host }}"
dbPort: "{{ .apps.postgres.port }}"
dbUsername: discourse
dbName: discourse
redisHostname: "{{ .apps.redis.host }}"
tlsSecretName: wildcard-wild-cloud-tls tlsSecretName: wildcard-wild-cloud-tls
db:
host: '{{ .apps.postgres.host }}'
port: '{{ .apps.postgres.port }}'
name: discourse
user: discourse
redis:
host: '{{ .apps.redis.host }}'
smtp: smtp:
enabled: false enabled: false
host: "{{ .apps.smtp.host }}" host: '{{ .apps.smtp.host }}'
port: "{{ .apps.smtp.port }}" port: '{{ .apps.smtp.port }}'
user: "{{ .apps.smtp.user }}" user: '{{ .apps.smtp.user }}'
from: "{{ .apps.smtp.from }}" from: '{{ .apps.smtp.from }}'
tls: "{{ .apps.smtp.tls }}" tls: '{{ .apps.smtp.tls }}'
startTls: "{{ .apps.smtp.startTls }}" startTls: '{{ .apps.smtp.startTls }}'
defaultSecrets: defaultSecrets:
- key: adminPassword - key: adminPassword
- key: secretKeyBase - key: secretKeyBase
@@ -38,7 +38,7 @@ defaultSecrets:
- key: smtpPassword - key: smtpPassword
- key: dbPassword - key: dbPassword
- key: dbUrl - key: dbUrl
default: "postgres://{{ .app.dbUsername }}:{{ .secrets.dbPassword }}@{{ .app.dbHostname }}:{{ .app.dbPort }}/{{ .app.dbName }}?sslmode=disable" default: "postgres://{{ .app.db.user }}:{{ .secrets.dbPassword }}@{{ .app.db.host }}:{{ .app.db.port }}/{{ .app.db.name }}?sslmode=disable"
requiredSecrets: requiredSecrets:
- postgres.password - postgres.password
- redis.password - redis.password

View File

@@ -28,7 +28,7 @@ spec:
readOnlyRootFilesystem: false readOnlyRootFilesystem: false
env: env:
- name: PGHOST - name: PGHOST
value: {{ .dbHost }} value: {{ .db.host }}
- name: PGUSER - name: PGUSER
value: postgres value: postgres
- name: PGPASSWORD - name: PGPASSWORD
@@ -37,9 +37,9 @@ spec:
name: e2e-test-app-secrets name: e2e-test-app-secrets
key: postgres.password key: postgres.password
- name: DB_NAME - name: DB_NAME
value: {{ .dbName }} value: {{ .db.name }}
- name: DB_USER - name: DB_USER
value: {{ .dbUser }} value: {{ .db.user }}
- name: DB_PASSWORD - name: DB_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:

View File

@@ -1,23 +1,23 @@
name: e2e-test-app name: e2e-test-app
is: e2e-test-app is: e2e-test-app
description: End-to-end test application for automated integration testing. Includes PVC and PostgreSQL dependency to exercise all backup strategies. description: End-to-end test application for automated integration testing. Includes PVC and PostgreSQL dependency to exercise all backup strategies.
version: 1.0.0 version: 1.0.0-1
requires: requires:
- name: postgres - name: postgres
defaultConfig: defaultConfig:
namespace: e2e-test-app namespace: e2e-test-app
domain: e2e-test-app.{{ .cloud.domain }} domain: e2e-test-app.{{ .cloud.domain }}
externalDnsDomain: "{{ .cloud.domain }}" externalDnsDomain: '{{ .cloud.domain }}'
tlsSecretName: wildcard-wild-cloud-tls tlsSecretName: wildcard-wild-cloud-tls
storage: 1Gi storage: 1Gi
dbHost: "{{ .apps.postgres.host }}" db:
dbPort: "{{ .apps.postgres.port }}" host: '{{ .apps.postgres.host }}'
dbName: e2e_test_app port: '{{ .apps.postgres.port }}'
dbUser: e2e_test_app name: e2e_test_app
timezone: UTC user: e2e_test_app
defaultSecrets: defaultSecrets:
- key: dbPassword - key: dbPassword
- key: dbUrl - key: dbUrl
default: "postgres://{{ .app.dbUser }}:{{ .secrets.dbPassword }}@{{ .app.dbHost }}:{{ .app.dbPort }}/{{ .app.dbName }}?sslmode=disable" default: "postgres://{{ .app.db.user }}:{{ .secrets.dbPassword }}@{{ .app.db.host }}:{{ .app.db.port }}/{{ .app.db.name }}?sslmode=disable"
requiredSecrets: requiredSecrets:
- postgres.password - postgres.password

View File

@@ -29,13 +29,13 @@ spec:
name: mysql-secrets name: mysql-secrets
key: rootPassword key: rootPassword
- name: DB_HOSTNAME - name: DB_HOSTNAME
value: "{{ .dbHost }}" value: "{{ .db.host }}"
- name: DB_PORT - name: DB_PORT
value: "{{ .dbPort }}" value: "{{ .db.port }}"
- name: DB_DATABASE_NAME - name: DB_DATABASE_NAME
value: "{{ .dbName }}" value: "{{ .db.name }}"
- name: DB_USERNAME - name: DB_USERNAME
value: "{{ .dbUser }}" value: "{{ .db.user }}"
- name: DB_PASSWORD - name: DB_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:

View File

@@ -17,10 +17,10 @@ spec:
spec: spec:
containers: containers:
- name: ghost - name: ghost
image: {{ .image }} image: docker.io/bitnami/ghost:5.118.1-debian-12-r0
ports: ports:
- name: http - name: http
containerPort: {{ .port }} containerPort: 2368
protocol: TCP protocol: TCP
env: env:
- name: BITNAMI_DEBUG - name: BITNAMI_DEBUG
@@ -28,13 +28,13 @@ spec:
- name: ALLOW_EMPTY_PASSWORD - name: ALLOW_EMPTY_PASSWORD
value: "yes" value: "yes"
- name: GHOST_DATABASE_HOST - name: GHOST_DATABASE_HOST
value: {{ .dbHost }} value: {{ .db.host }}
- name: GHOST_DATABASE_PORT_NUMBER - name: GHOST_DATABASE_PORT_NUMBER
value: "{{ .dbPort }}" value: "{{ .db.port }}"
- name: GHOST_DATABASE_NAME - name: GHOST_DATABASE_NAME
value: {{ .dbName }} value: {{ .db.name }}
- name: GHOST_DATABASE_USER - name: GHOST_DATABASE_USER
value: {{ .dbUser }} value: {{ .db.user }}
- name: GHOST_DATABASE_PASSWORD - name: GHOST_DATABASE_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
@@ -43,7 +43,7 @@ spec:
- name: GHOST_HOST - name: GHOST_HOST
value: {{ .domain }} value: {{ .domain }}
- name: GHOST_PORT_NUMBER - name: GHOST_PORT_NUMBER
value: "{{ .port }}" value: "2368"
- name: GHOST_USERNAME - name: GHOST_USERNAME
value: {{ .adminUser }} value: {{ .adminUser }}
- name: GHOST_PASSWORD - name: GHOST_PASSWORD
@@ -92,7 +92,7 @@ spec:
mountPath: /bitnami/ghost mountPath: /bitnami/ghost
livenessProbe: livenessProbe:
tcpSocket: tcpSocket:
port: {{ .port }} port: 2368
initialDelaySeconds: 120 initialDelaySeconds: 120
timeoutSeconds: 5 timeoutSeconds: 5
periodSeconds: 10 periodSeconds: 10

View File

@@ -2,7 +2,7 @@ name: ghost
is: ghost is: ghost
description: Ghost is a powerful app for new-media creators to publish, share, and description: Ghost is a powerful app for new-media creators to publish, share, and
grow a business around their content. grow a business around their content.
version: 5.118.1 version: 5.118.1-1
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/ghost.png icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/ghost.png
requires: requires:
- name: mysql - name: mysql
@@ -10,19 +10,17 @@ requires:
defaultConfig: defaultConfig:
namespace: ghost namespace: ghost
externalDnsDomain: '{{ .cloud.domain }}' externalDnsDomain: '{{ .cloud.domain }}'
image: docker.io/bitnami/ghost:5.118.1-debian-12-r0
domain: ghost.{{ .cloud.domain }} domain: ghost.{{ .cloud.domain }}
tlsSecretName: wildcard-wild-cloud-tls tlsSecretName: wildcard-wild-cloud-tls
port: 2368
storage: 10Gi storage: 10Gi
dbHost: mysql.mysql.svc.cluster.local
dbPort: 3306
dbName: ghost
dbUser: ghost
adminUser: admin adminUser: admin
adminEmail: {{ .operator.email }} adminEmail: '{{ .operator.email }}'
blogTitle: My Blog blogTitle: My Blog
timezone: UTC db:
host: '{{ .apps.mysql.host }}'
port: '3306'
name: ghost
user: ghost
smtp: smtp:
host: '{{ .apps.smtp.host }}' host: '{{ .apps.smtp.host }}'
port: '{{ .apps.smtp.port }}' port: '{{ .apps.smtp.port }}'

View File

@@ -9,6 +9,6 @@ spec:
- name: http - name: http
port: 80 port: 80
protocol: TCP protocol: TCP
targetPort: {{ .port }} targetPort: 2368
selector: selector:
component: web component: web

View File

@@ -38,11 +38,11 @@ spec:
name: postgres-secrets name: postgres-secrets
key: password key: password
- name: DB_HOSTNAME - name: DB_HOSTNAME
value: "{{ .dbHost }}" value: "{{ .db.host }}"
- name: DB_DATABASE_NAME - name: DB_DATABASE_NAME
value: "{{ .dbName }}" value: "{{ .db.name }}"
- name: DB_USERNAME - name: DB_USERNAME
value: "{{ .dbUser }}" value: "{{ .db.user }}"
- name: DB_PASSWORD - name: DB_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:

View File

@@ -23,7 +23,7 @@ spec:
terminationGracePeriodSeconds: 60 terminationGracePeriodSeconds: 60
containers: containers:
- name: gitea - name: gitea
image: "{{ .image }}" image: "gitea/gitea:1.24.3"
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
envFrom: envFrom:
- configMapRef: - configMapRef:

View File

@@ -8,7 +8,7 @@ GITEA_ADMIN_PASSWORD_MODE=keepUpdated
# Core app settings # Core app settings
GITEA____APP_NAME={{ .appName }} GITEA____APP_NAME={{ .appName }}
GITEA____RUN_MODE={{ .runMode }} GITEA____RUN_MODE=prod
GITEA____RUN_USER=git GITEA____RUN_USER=git
# Security settings # Security settings
@@ -17,19 +17,19 @@ GITEA__security__PASSWORD_HASH_ALGO=pbkdf2
# Database settings (except password which comes from secret) # Database settings (except password which comes from secret)
GITEA__database__DB_TYPE=postgres GITEA__database__DB_TYPE=postgres
GITEA__database__HOST={{ .dbHost }}:{{ .dbPort }} GITEA__database__HOST={{ .db.host }}:{{ .db.port }}
GITEA__database__NAME={{ .dbName }} GITEA__database__NAME={{ .db.name }}
GITEA__database__USER={{ .dbUser }} GITEA__database__USER={{ .db.user }}
GITEA__database__SSL_MODE=disable GITEA__database__SSL_MODE=disable
GITEA__database__LOG_SQL=false GITEA__database__LOG_SQL=false
# Server settings # Server settings
GITEA__server__DOMAIN={{ .domain }} GITEA__server__DOMAIN={{ .domain }}
GITEA__server__HTTP_PORT={{ .port }} GITEA__server__HTTP_PORT=3000
GITEA__server__ROOT_URL=https://{{ .domain }}/ GITEA__server__ROOT_URL=https://{{ .domain }}/
GITEA__server__DISABLE_SSH=false GITEA__server__DISABLE_SSH=false
GITEA__server__SSH_DOMAIN={{ .domain }} GITEA__server__SSH_DOMAIN={{ .domain }}
GITEA__server__SSH_PORT={{ .sshPort }} GITEA__server__SSH_PORT=22
GITEA__server__SSH_LISTEN_PORT=2222 GITEA__server__SSH_LISTEN_PORT=2222
GITEA__server__LFS_START_SERVER=true GITEA__server__LFS_START_SERVER=true
GITEA__server__OFFLINE_MODE=true GITEA__server__OFFLINE_MODE=true

View File

@@ -1,7 +1,7 @@
name: gitea name: gitea
is: gitea is: gitea
description: Gitea is a painless self-hosted Git service written in Go description: Gitea is a painless self-hosted Git service written in Go
version: 1.24.3 version: 1.24.3-1
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/gitea.svg icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/gitea.svg
requires: requires:
- name: postgres - name: postgres
@@ -9,21 +9,17 @@ requires:
defaultConfig: defaultConfig:
namespace: gitea namespace: gitea
externalDnsDomain: '{{ .cloud.domain }}' externalDnsDomain: '{{ .cloud.domain }}'
image: gitea/gitea:1.24.3
appName: Gitea appName: Gitea
domain: gitea.{{ .cloud.domain }} domain: gitea.{{ .cloud.domain }}
tlsSecretName: wildcard-wild-cloud-tls tlsSecretName: wildcard-wild-cloud-tls
port: 3000
sshPort: 22
storage: 10Gi storage: 10Gi
dbName: gitea
dbUser: gitea
dbHost: postgres.postgres.svc.cluster.local
adminUser: admin adminUser: admin
adminEmail: "{{ .operator.email }}" adminEmail: "{{ .operator.email }}"
dbPort: 5432 db:
timezone: UTC name: gitea
runMode: prod user: gitea
host: '{{ .apps.postgres.host }}'
port: '{{ .apps.postgres.port }}'
smtp: smtp:
host: '{{ .apps.smtp.host }}' host: '{{ .apps.smtp.host }}'
port: '{{ .apps.smtp.port }}' port: '{{ .apps.smtp.port }}'

View File

@@ -8,7 +8,7 @@ spec:
ports: ports:
- name: http - name: http
port: 3000 port: 3000
targetPort: {{ .port }} targetPort: 3000
selector: selector:
component: web component: web
--- ---
@@ -21,7 +21,7 @@ spec:
type: LoadBalancer type: LoadBalancer
ports: ports:
- name: ssh - name: ssh
port: {{ .sshPort }} port: 22
targetPort: 2222 targetPort: 2222
protocol: TCP protocol: TCP
selector: selector:

View File

@@ -55,11 +55,11 @@ spec:
name: immich-secrets name: immich-secrets
key: postgres.password key: postgres.password
- name: DB_HOSTNAME - name: DB_HOSTNAME
value: "{{ .dbHostname }}" value: "{{ .db.host }}"
- name: DB_DATABASE_NAME - name: DB_DATABASE_NAME
value: "{{ .dbUsername }}" value: "{{ .db.name }}"
- name: DB_USERNAME - name: DB_USERNAME
value: "{{ .dbUsername }}" value: "{{ .db.user }}"
- name: DB_PASSWORD - name: DB_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:

View File

@@ -17,14 +17,14 @@ spec:
component: machine-learning component: machine-learning
spec: spec:
containers: containers:
- image: "{{ .mlImage }}" - image: "ghcr.io/immich-app/immich-machine-learning:v1.135.3"
name: immich-machine-learning name: immich-machine-learning
ports: ports:
- containerPort: {{ .mlPort }} - containerPort: 3003
protocol: TCP protocol: TCP
env: env:
- name: TZ - name: TZ
value: "{{ .timezone }}" value: "UTC"
volumeMounts: volumeMounts:
- mountPath: /cache - mountPath: /cache
name: immich-cache name: immich-cache

View File

@@ -20,27 +20,27 @@ spec:
component: microservices component: microservices
spec: spec:
containers: containers:
- image: "{{ .serverImage }}" - image: "ghcr.io/immich-app/immich-server:v1.135.3"
name: immich-microservices name: immich-microservices
env: env:
- name: REDIS_HOSTNAME - name: REDIS_HOSTNAME
value: "{{ .redisHostname }}" value: "{{ .redis.host }}"
- name: REDIS_PASSWORD - name: REDIS_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
name: immich-secrets name: immich-secrets
key: redis.password key: redis.password
- name: DB_HOSTNAME - name: DB_HOSTNAME
value: "{{ .dbHostname }}" value: "{{ .db.host }}"
- name: DB_USERNAME - name: DB_USERNAME
value: "{{ .dbUsername }}" value: "{{ .db.user }}"
- name: DB_PASSWORD - name: DB_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
name: immich-secrets name: immich-secrets
key: dbPassword key: dbPassword
- name: TZ - name: TZ
value: "{{ .timezone }}" value: "UTC"
- name: IMMICH_WORKERS_EXCLUDE - name: IMMICH_WORKERS_EXCLUDE
value: api value: api
volumeMounts: volumeMounts:

View File

@@ -20,30 +20,30 @@ spec:
component: server component: server
spec: spec:
containers: containers:
- image: "{{ .serverImage }}" - image: "ghcr.io/immich-app/immich-server:v1.135.3"
name: immich-server name: immich-server
ports: ports:
- containerPort: {{ .serverPort }} - containerPort: 2283
protocol: TCP protocol: TCP
env: env:
- name: REDIS_HOSTNAME - name: REDIS_HOSTNAME
value: "{{ .redisHostname }}" value: "{{ .redis.host }}"
- name: REDIS_PASSWORD - name: REDIS_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
name: immich-secrets name: immich-secrets
key: redis.password key: redis.password
- name: DB_HOSTNAME - name: DB_HOSTNAME
value: "{{ .dbHostname }}" value: "{{ .db.host }}"
- name: DB_USERNAME - name: DB_USERNAME
value: "{{ .dbUsername }}" value: "{{ .db.user }}"
- name: DB_PASSWORD - name: DB_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
name: immich-secrets name: immich-secrets
key: dbPassword key: dbPassword
- name: TZ - name: TZ
value: "{{ .timezone }}" value: "UTC"
- name: IMMICH_WORKERS_EXCLUDE - name: IMMICH_WORKERS_EXCLUDE
value: microservices value: microservices
volumeMounts: volumeMounts:

View File

@@ -2,7 +2,7 @@ name: immich
is: immich is: immich
description: Immich is a self-hosted photo and video backup solution that allows you description: Immich is a self-hosted photo and video backup solution that allows you
to store, manage, and share your media files securely. to store, manage, and share your media files securely.
version: 1.135.3 version: 1.135.3-1
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/immich.svg icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/immich.svg
requires: requires:
- name: redis - name: redis
@@ -10,18 +10,16 @@ requires:
defaultConfig: defaultConfig:
namespace: immich namespace: immich
externalDnsDomain: '{{ .cloud.domain }}' externalDnsDomain: '{{ .cloud.domain }}'
serverImage: ghcr.io/immich-app/immich-server:v1.135.3
mlImage: ghcr.io/immich-app/immich-machine-learning:v1.135.3
timezone: UTC
serverPort: 2283
mlPort: 3003
storage: 250Gi storage: 250Gi
cacheStorage: 10Gi cacheStorage: 10Gi
redisHostname: redis.redis.svc.cluster.local
dbHostname: postgres.postgres.svc.cluster.local
dbUsername: immich
domain: immich.{{ .cloud.domain }} domain: immich.{{ .cloud.domain }}
tlsSecretName: wildcard-wild-cloud-tls tlsSecretName: wildcard-wild-cloud-tls
db:
host: '{{ .apps.postgres.host }}'
name: immich
user: immich
redis:
host: '{{ .apps.redis.host }}'
defaultSecrets: defaultSecrets:
- key: dbPassword - key: dbPassword
requiredSecrets: requiredSecrets:

View File

@@ -9,7 +9,7 @@ metadata:
spec: spec:
ports: ports:
- port: 3001 - port: 3001
targetPort: {{ .serverPort }} targetPort: 2283
selector: selector:
app: immich app: immich
component: server component: server
@@ -25,7 +25,7 @@ metadata:
app: immich-machine-learning app: immich-machine-learning
spec: spec:
ports: ports:
- port: {{ .mlPort }} - port: 3003
selector: selector:
app: immich app: immich
component: machine-learning component: machine-learning

View File

@@ -26,7 +26,7 @@ spec:
readOnlyRootFilesystem: false readOnlyRootFilesystem: false
env: env:
- name: PGHOST - name: PGHOST
value: {{ .dbHostname }} value: {{ .db.host }}
- name: PGUSER - name: PGUSER
value: postgres value: postgres
- name: PGPASSWORD - name: PGPASSWORD
@@ -35,9 +35,9 @@ spec:
name: keila-secrets name: keila-secrets
key: postgres.password key: postgres.password
- name: DB_NAME - name: DB_NAME
value: {{ .dbName }} value: {{ .db.name }}
- name: DB_USER - name: DB_USER
value: {{ .dbUsername }} value: {{ .db.user }}
- name: DB_PASSWORD - name: DB_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:

View File

@@ -16,9 +16,9 @@ spec:
spec: spec:
containers: containers:
- name: keila - name: keila
image: "{{ .image }}" image: "pentacent/keila:0.17.1"
ports: ports:
- containerPort: {{ .port }} - containerPort: 4000
env: env:
- name: DB_URL - name: DB_URL
valueFrom: valueFrom:
@@ -32,7 +32,7 @@ spec:
- name: URL_PORT - name: URL_PORT
value: "443" value: "443"
- name: PORT - name: PORT
value: "{{ .port }}" value: "4000"
- name: SECRET_KEY_BASE - name: SECRET_KEY_BASE
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
@@ -72,13 +72,13 @@ spec:
livenessProbe: livenessProbe:
httpGet: httpGet:
path: / path: /
port: {{ .port }} port: 4000
initialDelaySeconds: 30 initialDelaySeconds: 30
periodSeconds: 10 periodSeconds: 10
readinessProbe: readinessProbe:
httpGet: httpGet:
path: / path: /
port: {{ .port }} port: 4000
initialDelaySeconds: 5 initialDelaySeconds: 5
periodSeconds: 5 periodSeconds: 5
volumes: volumes:

View File

@@ -1,38 +1,37 @@
name: keila name: keila
is: keila is: keila
description: Keila is an open-source email marketing platform that allows you to send newsletters and manage mailing lists with privacy and control. description: Keila is an open-source email marketing platform that allows you to send newsletters and manage mailing lists with privacy and control.
version: 0.17.1 version: 0.17.1-1
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/keila.svg icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/keila.svg
requires: requires:
- name: postgres - name: postgres
- name: smtp - name: smtp
defaultConfig: defaultConfig:
namespace: keila namespace: keila
externalDnsDomain: "{{ .cloud.domain }}" externalDnsDomain: '{{ .cloud.domain }}'
image: pentacent/keila:0.17.1
port: 4000
storage: 1Gi storage: 1Gi
domain: keila.{{ .cloud.domain }} domain: keila.{{ .cloud.domain }}
dbHostname: "{{ .apps.postgres.host }}" disableRegistration: 'true'
dbPort: "{{ .apps.postgres.port }}"
dbName: keila
dbUsername: keila
disableRegistration: "true"
adminUser: admin@{{ .cloud.domain }} adminUser: admin@{{ .cloud.domain }}
tlsSecretName: wildcard-wild-cloud-tls tlsSecretName: wildcard-wild-cloud-tls
db:
host: '{{ .apps.postgres.host }}'
port: '{{ .apps.postgres.port }}'
name: keila
user: keila
smtp: smtp:
host: "{{ .apps.smtp.host }}" host: '{{ .apps.smtp.host }}'
port: "{{ .apps.smtp.port }}" port: '{{ .apps.smtp.port }}'
from: "{{ .apps.smtp.from }}" from: '{{ .apps.smtp.from }}'
user: "{{ .apps.smtp.user }}" user: '{{ .apps.smtp.user }}'
tls: "{{ .apps.smtp.tls }}" tls: '{{ .apps.smtp.tls }}'
startTls: "{{ .apps.smtp.startTls }}" startTls: '{{ .apps.smtp.startTls }}'
defaultSecrets: defaultSecrets:
- key: secretKeyBase - key: secretKeyBase
default: "{{ random.AlphaNum 64 }}" default: "{{ random.AlphaNum 64 }}"
- key: dbPassword - key: dbPassword
- key: dbUrl - key: dbUrl
default: "postgres://{{ .app.dbUsername }}:{{ .secrets.dbPassword }}@{{ .app.dbHostname }}:{{ .app.dbPort }}/keila?sslmode=disable" default: "postgres://{{ .app.db.user }}:{{ .secrets.dbPassword }}@{{ .app.db.host }}:{{ .app.db.port }}/{{ .app.db.name }}?sslmode=disable"
- key: adminPassword - key: adminPassword
- key: smtpPassword - key: smtpPassword
requiredSecrets: requiredSecrets:

View File

@@ -7,5 +7,5 @@ spec:
component: web component: web
ports: ports:
- port: 80 - port: 80
targetPort: {{ .port }} targetPort: 4000
protocol: TCP protocol: TCP

View File

@@ -8,15 +8,15 @@ data:
{ {
hostname: "{{ .domain }}" hostname: "{{ .domain }}"
bind: "0.0.0.0" bind: "0.0.0.0"
port: {{ .backendPort }} port: 8536
tls_enabled: false tls_enabled: false
database: { database: {
uri: "postgresql://{{ .dbUser }}:DBPASSWORD@{{ .dbHost }}:{{ .dbPort }}/{{ .dbName }}" uri: "postgresql://{{ .db.user }}:DBPASSWORD@{{ .db.host }}:{{ .db.port }}/{{ .db.name }}"
} }
pictrs: { pictrs: {
url: "http://lemmy-pictrs:{{ .pictrsPort }}/" url: "http://lemmy-pictrs:8080/"
api_key: "PICTRS_API_KEY" api_key: "PICTRS_API_KEY"
} }

View File

@@ -26,9 +26,9 @@ spec:
readOnlyRootFilesystem: false readOnlyRootFilesystem: false
env: env:
- name: PGHOST - name: PGHOST
value: "{{ .dbHost }}" value: "{{ .db.host }}"
- name: PGPORT - name: PGPORT
value: "{{ .dbPort }}" value: "{{ .db.port }}"
- name: PGUSER - name: PGUSER
value: postgres value: postgres
- name: PGPASSWORD - name: PGPASSWORD
@@ -37,9 +37,9 @@ spec:
name: lemmy-secrets name: lemmy-secrets
key: postgres.password key: postgres.password
- name: DB_NAME - name: DB_NAME
value: "{{ .dbName }}" value: "{{ .db.name }}"
- name: DB_USER - name: DB_USER
value: "{{ .dbUser }}" value: "{{ .db.user }}"
- name: DB_PASSWORD - name: DB_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:

View File

@@ -4,7 +4,7 @@ metadata:
name: lemmy-backend name: lemmy-backend
namespace: {{ .namespace }} namespace: {{ .namespace }}
spec: spec:
replicas: {{ .backendReplicas }} replicas: 1
selector: selector:
matchLabels: matchLabels:
component: backend component: backend
@@ -65,7 +65,7 @@ spec:
mountPath: /config mountPath: /config
containers: containers:
- name: backend - name: backend
image: {{ .backendImage }} image: dessalines/lemmy:0.19.15
securityContext: securityContext:
allowPrivilegeEscalation: false allowPrivilegeEscalation: false
capabilities: capabilities:
@@ -75,9 +75,9 @@ spec:
- name: LEMMY_CONFIG_LOCATION - name: LEMMY_CONFIG_LOCATION
value: /config/lemmy.hjson value: /config/lemmy.hjson
- name: TZ - name: TZ
value: "{{ .timezone }}" value: "UTC"
ports: ports:
- containerPort: {{ .backendPort }} - containerPort: 8536
name: http name: http
volumeMounts: volumeMounts:
- name: config - name: config
@@ -85,13 +85,13 @@ spec:
livenessProbe: livenessProbe:
httpGet: httpGet:
path: /api/v3/site path: /api/v3/site
port: {{ .backendPort }} port: 8536
initialDelaySeconds: 30 initialDelaySeconds: 30
periodSeconds: 10 periodSeconds: 10
readinessProbe: readinessProbe:
httpGet: httpGet:
path: /api/v3/site path: /api/v3/site
port: {{ .backendPort }} port: 8536
initialDelaySeconds: 10 initialDelaySeconds: 10
periodSeconds: 5 periodSeconds: 5
volumes: volumes:

View File

@@ -4,7 +4,7 @@ metadata:
name: lemmy-pictrs name: lemmy-pictrs
namespace: {{ .namespace }} namespace: {{ .namespace }}
spec: spec:
replicas: {{ .pictrsReplicas }} replicas: 1
selector: selector:
matchLabels: matchLabels:
component: pictrs component: pictrs
@@ -22,7 +22,7 @@ spec:
type: RuntimeDefault type: RuntimeDefault
containers: containers:
- name: pictrs - name: pictrs
image: {{ .pictrsImage }} image: asonix/pictrs:0.5.5
securityContext: securityContext:
allowPrivilegeEscalation: false allowPrivilegeEscalation: false
capabilities: capabilities:
@@ -30,7 +30,7 @@ spec:
readOnlyRootFilesystem: false readOnlyRootFilesystem: false
env: env:
- name: PICTRS__SERVER__BIND - name: PICTRS__SERVER__BIND
value: "0.0.0.0:{{ .pictrsPort }}" value: "0.0.0.0:8080"
- name: PICTRS__MEDIA__VIDEO_CODEC - name: PICTRS__MEDIA__VIDEO_CODEC
value: vp9 value: vp9
- name: PICTRS__MEDIA__GIF__MAX_WIDTH - name: PICTRS__MEDIA__GIF__MAX_WIDTH
@@ -54,7 +54,7 @@ spec:
- name: PICTRS__STORE__PATH - name: PICTRS__STORE__PATH
value: /mnt/files value: /mnt/files
ports: ports:
- containerPort: {{ .pictrsPort }} - containerPort: 8080
name: http name: http
volumeMounts: volumeMounts:
- name: storage - name: storage
@@ -62,13 +62,13 @@ spec:
livenessProbe: livenessProbe:
httpGet: httpGet:
path: /healthz path: /healthz
port: {{ .pictrsPort }} port: 8080
initialDelaySeconds: 30 initialDelaySeconds: 30
periodSeconds: 10 periodSeconds: 10
readinessProbe: readinessProbe:
httpGet: httpGet:
path: /healthz path: /healthz
port: {{ .pictrsPort }} port: 8080
initialDelaySeconds: 10 initialDelaySeconds: 10
periodSeconds: 5 periodSeconds: 5
volumes: volumes:

View File

@@ -4,7 +4,7 @@ metadata:
name: lemmy-ui name: lemmy-ui
namespace: {{ .namespace }} namespace: {{ .namespace }}
spec: spec:
replicas: {{ .uiReplicas }} replicas: 1
selector: selector:
matchLabels: matchLabels:
component: ui component: ui
@@ -21,7 +21,7 @@ spec:
type: RuntimeDefault type: RuntimeDefault
containers: containers:
- name: ui - name: ui
image: {{ .uiImage }} image: dessalines/lemmy-ui:0.19.15
securityContext: securityContext:
allowPrivilegeEscalation: false allowPrivilegeEscalation: false
capabilities: capabilities:
@@ -29,25 +29,25 @@ spec:
readOnlyRootFilesystem: false readOnlyRootFilesystem: false
env: env:
- name: LEMMY_UI_LEMMY_INTERNAL_HOST - name: LEMMY_UI_LEMMY_INTERNAL_HOST
value: "lemmy-backend:{{ .backendPort }}" value: "lemmy-backend:8536"
- name: LEMMY_UI_LEMMY_EXTERNAL_HOST - name: LEMMY_UI_LEMMY_EXTERNAL_HOST
value: "{{ .domain }}" value: "{{ .domain }}"
- name: LEMMY_UI_HTTPS - name: LEMMY_UI_HTTPS
value: "true" value: "true"
ports: ports:
- containerPort: {{ .uiPort }} - containerPort: 1234
name: http name: http
livenessProbe: livenessProbe:
httpGet: httpGet:
path: / path: /
port: {{ .uiPort }} port: 1234
initialDelaySeconds: 30 initialDelaySeconds: 30
periodSeconds: 10 periodSeconds: 10
timeoutSeconds: 5 timeoutSeconds: 5
readinessProbe: readinessProbe:
httpGet: httpGet:
path: / path: /
port: {{ .uiPort }} port: 1234
initialDelaySeconds: 10 initialDelaySeconds: 10
periodSeconds: 5 periodSeconds: 5
timeoutSeconds: 5 timeoutSeconds: 5

View File

@@ -25,18 +25,18 @@ spec:
service: service:
name: lemmy-backend name: lemmy-backend
port: port:
number: {{ .backendPort }} number: 8536
- path: /pictrs - path: /pictrs
pathType: Prefix pathType: Prefix
backend: backend:
service: service:
name: lemmy-pictrs name: lemmy-pictrs
port: port:
number: {{ .pictrsPort }} number: 8080
- path: / - path: /
pathType: Prefix pathType: Prefix
backend: backend:
service: service:
name: lemmy-ui name: lemmy-ui
port: port:
number: {{ .uiPort }} number: 1234

View File

@@ -1,38 +1,29 @@
name: lemmy name: lemmy
is: lemmy is: lemmy
description: Lemmy is a selfhosted social link aggregation and discussion platform. It is an open source alternative to Reddit, designed for the fediverse. description: Lemmy is a selfhosted social link aggregation and discussion platform. It is an open source alternative to Reddit, designed for the fediverse.
version: 0.19.15 version: 0.19.15-2
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/lemmy.svg icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/lemmy.svg
requires: requires:
- name: postgres - name: postgres
- name: smtp - name: smtp
defaultConfig: defaultConfig:
namespace: lemmy namespace: lemmy
backendImage: dessalines/lemmy:0.19.15 externalDnsDomain: lemmy.{{ .cloud.baseDomain }}
uiImage: dessalines/lemmy-ui:0.19.15 domain: lemmy.{{ .cloud.domain }}
pictrsImage: asonix/pictrs:0.5.5 tlsSecretName: wildcard-wild-cloud-tls
backendPort: 8536
uiPort: 1234
pictrsPort: 8080
backendReplicas: 1
uiReplicas: 1
pictrsReplicas: 1
storage: 10Gi storage: 10Gi
pictrsStorage: 50Gi pictrsStorage: 50Gi
timezone: UTC db:
domain: lemmy.{{ .cloud.domain }} host: '{{ .apps.postgres.host }}'
externalDnsDomain: lemmy.{{ .cloud.baseDomain }} port: '{{ .apps.postgres.port }}'
tlsSecretName: lemmy-tls name: lemmy
dbName: lemmy user: lemmy
dbUser: lemmy
dbHost: postgres.postgres.svc.cluster.local
dbPort: 5432
smtp: smtp:
host: "{{ .apps.smtp.host }}" host: '{{ .apps.smtp.host }}'
port: "{{ .apps.smtp.port }}" port: '{{ .apps.smtp.port }}'
user: "{{ .apps.smtp.user }}" user: '{{ .apps.smtp.user }}'
from: "noreply@{{ .cloud.baseDomain }}" from: 'noreply@{{ .cloud.baseDomain }}'
tls: "{{ .apps.smtp.tls }}" tls: '{{ .apps.smtp.tls }}'
defaultSecrets: defaultSecrets:
- key: dbPassword - key: dbPassword
- key: adminPassword - key: adminPassword

View File

@@ -9,5 +9,5 @@ spec:
component: backend component: backend
ports: ports:
- name: http - name: http
port: {{ .backendPort }} port: 8536
targetPort: {{ .backendPort }} targetPort: 8536

View File

@@ -9,5 +9,5 @@ spec:
component: pictrs component: pictrs
ports: ports:
- name: http - name: http
port: {{ .pictrsPort }} port: 8080
targetPort: {{ .pictrsPort }} targetPort: 8080

View File

@@ -9,5 +9,5 @@ spec:
component: ui component: ui
ports: ports:
- name: http - name: http
port: {{ .uiPort }} port: 1234
targetPort: {{ .uiPort }} targetPort: 1234

View File

@@ -28,7 +28,7 @@ spec:
readOnlyRootFilesystem: false readOnlyRootFilesystem: false
env: env:
- name: PGHOST - name: PGHOST
value: {{ .dbHost }} value: {{ .db.host }}
- name: PGUSER - name: PGUSER
value: postgres value: postgres
- name: PGPASSWORD - name: PGPASSWORD
@@ -37,9 +37,9 @@ spec:
name: listmonk-secrets name: listmonk-secrets
key: postgres.password key: postgres.password
- name: DB_NAME - name: DB_NAME
value: {{ .dbName }} value: {{ .db.name }}
- name: DB_USER - name: DB_USER
value: {{ .dbUser }} value: {{ .db.user }}
- name: DB_PASSWORD - name: DB_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:

View File

@@ -31,17 +31,17 @@ spec:
- name: LISTMONK_app__address - name: LISTMONK_app__address
value: "0.0.0.0:9000" value: "0.0.0.0:9000"
- name: LISTMONK_app__root_url - name: LISTMONK_app__root_url
value: "{{ .rootUrl }}" value: "https://{{ .domain }}"
- name: LISTMONK_db__host - name: LISTMONK_db__host
value: {{ .dbHost }} value: {{ .db.host }}
- name: LISTMONK_db__port - name: LISTMONK_db__port
value: "{{ .dbPort }}" value: "{{ .db.port }}"
- name: LISTMONK_db__user - name: LISTMONK_db__user
value: {{ .dbUser }} value: {{ .db.user }}
- name: LISTMONK_db__database - name: LISTMONK_db__database
value: {{ .dbName }} value: {{ .db.name }}
- name: LISTMONK_db__ssl_mode - name: LISTMONK_db__ssl_mode
value: {{ .dbSSLMode }} value: disable
- name: LISTMONK_db__password - name: LISTMONK_db__password
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:

View File

@@ -2,7 +2,7 @@ name: listmonk
is: listmonk is: listmonk
description: Listmonk is a standalone, self-hosted, newsletter and mailing list manager. description: Listmonk is a standalone, self-hosted, newsletter and mailing list manager.
It is fast, feature-rich, and packed into a single binary. It is fast, feature-rich, and packed into a single binary.
version: 5.0.3 version: 5.0.3-1
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/listmonk.svg icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/listmonk.svg
requires: requires:
- name: postgres - name: postgres
@@ -10,18 +10,16 @@ defaultConfig:
namespace: listmonk namespace: listmonk
externalDnsDomain: '{{ .cloud.domain }}' externalDnsDomain: '{{ .cloud.domain }}'
domain: listmonk.{{ .cloud.domain }} domain: listmonk.{{ .cloud.domain }}
rootUrl: https://listmonk.{{ .cloud.domain }}
tlsSecretName: wildcard-wild-cloud-tls tlsSecretName: wildcard-wild-cloud-tls
storage: 1Gi storage: 1Gi
dbHost: postgres.postgres.svc.cluster.local db:
dbPort: 5432 host: '{{ .apps.postgres.host }}'
dbName: listmonk port: '{{ .apps.postgres.port }}'
dbUser: listmonk name: listmonk
dbSSLMode: disable user: listmonk
timezone: UTC
defaultSecrets: defaultSecrets:
- key: dbPassword - key: dbPassword
- key: dbUrl - key: dbUrl
default: 'postgres://{{ .app.dbUser }}:{{ .secrets.dbPassword }}@{{ .app.dbHost }}:{{ .app.dbPort }}/{{ .app.dbName }}?sslmode={{ .app.dbSSLMode }}' default: 'postgres://{{ .app.db.user }}:{{ .secrets.dbPassword }}@{{ .app.db.host }}:{{ .app.db.port }}/{{ .app.db.name }}?sslmode=disable'
requiredSecrets: requiredSecrets:
- postgres.password - postgres.password

View File

@@ -8,7 +8,7 @@ spec:
restartPolicy: OnFailure restartPolicy: OnFailure
containers: containers:
- name: db-init - name: db-init
image: {{ .image }} image: loomio/loomio:latest
command: command:
- /bin/bash - /bin/bash
- -c - -c

View File

@@ -14,7 +14,7 @@ spec:
spec: spec:
containers: containers:
- name: worker - name: worker
image: {{ .workerImage }} image: loomio/loomio:latest
env: env:
- name: TASK - name: TASK
value: worker value: worker
@@ -46,7 +46,7 @@ spec:
name: loomio-secrets name: loomio-secrets
key: secretCookieToken key: secretCookieToken
- name: ACTIVE_STORAGE_SERVICE - name: ACTIVE_STORAGE_SERVICE
value: {{ .activeStorageService }} value: local
- name: SMTP_AUTH - name: SMTP_AUTH
value: {{ .smtp.auth }} value: {{ .smtp.auth }}
- name: SMTP_DOMAIN - name: SMTP_DOMAIN

View File

@@ -4,6 +4,8 @@ metadata:
name: loomio name: loomio
spec: spec:
replicas: 1 replicas: 1
strategy:
type: Recreate
selector: selector:
matchLabels: matchLabels:
component: web component: web
@@ -14,13 +16,13 @@ spec:
spec: spec:
containers: containers:
- name: loomio - name: loomio
image: {{ .image }} image: loomio/loomio:latest
command: command:
- /bin/bash - /bin/bash
- -c - -c
- | - |
set -e set -e
bundle exec rake db:schema:load db:seed bundle exec rake db:migrate db:seed
bundle exec thrust puma -C config/puma.rb bundle exec thrust puma -C config/puma.rb
ports: ports:
- containerPort: 3000 - containerPort: 3000
@@ -54,17 +56,17 @@ spec:
name: loomio-secrets name: loomio-secrets
key: secretCookieToken key: secretCookieToken
- name: FORCE_SSL - name: FORCE_SSL
value: "{{ .forceSSL }}" value: "1"
- name: USE_RACK_ATTACK - name: USE_RACK_ATTACK
value: "{{ .useRackAttack }}" value: "1"
- name: PUMA_WORKERS - name: PUMA_WORKERS
value: "{{ .pumaWorkers }}" value: "2"
- name: MIN_THREADS - name: MIN_THREADS
value: "{{ .minThreads }}" value: "5"
- name: MAX_THREADS - name: MAX_THREADS
value: "{{ .maxThreads }}" value: "5"
- name: ACTIVE_STORAGE_SERVICE - name: ACTIVE_STORAGE_SERVICE
value: {{ .activeStorageService }} value: local
- name: SMTP_AUTH - name: SMTP_AUTH
value: {{ .smtp.auth }} value: {{ .smtp.auth }}
- name: SMTP_DOMAIN - name: SMTP_DOMAIN

View File

@@ -1,7 +1,7 @@
name: loomio name: loomio
is: loomio is: loomio
description: Loomio is a collaborative decision-making tool that makes it easy for groups to make decisions together description: Loomio is a collaborative decision-making tool that makes it easy for groups to make decisions together
version: 3.0.11 version: 3.0.11-2
icon: https://www.loomio.com/brand/logo_gold.svg icon: https://www.loomio.com/brand/logo_gold.svg
requires: requires:
- name: postgres - name: postgres
@@ -10,39 +10,30 @@ requires:
- name: smtp - name: smtp
defaultConfig: defaultConfig:
namespace: loomio namespace: loomio
externalDnsDomain: "{{ .cloud.domain }}" externalDnsDomain: '{{ .cloud.domain }}'
image: loomio/loomio:latest
workerImage: loomio/loomio:latest
appName: Loomio appName: Loomio
domain: "loomio.{{ .cloud.domain }}" domain: 'loomio.{{ .cloud.domain }}'
tlsSecretName: wildcard-wild-cloud-tls tlsSecretName: wildcard-wild-cloud-tls
port: 3000
storage: storage:
uploads: 5Gi uploads: 5Gi
files: 5Gi files: 5Gi
plugins: 1Gi plugins: 1Gi
redisUrl: "{{ .apps.redis.uri }}" redisUrl: '{{ .apps.redis.uri }}'
adminEmail: "{{ .operator.email }}" adminEmail: '{{ .operator.email }}'
supportEmail: "{{ .operator.email }}" supportEmail: '{{ .operator.email }}'
forceSSL: "1"
useRackAttack: "1"
pumaWorkers: "2"
minThreads: "5"
maxThreads: "5"
activeStorageService: local
db: db:
name: loomio name: loomio
user: loomio user: loomio
host: "{{ .apps.postgres.host }}" host: '{{ .apps.postgres.host }}'
port: "{{ .apps.postgres.port }}" port: '{{ .apps.postgres.port }}'
smtp: smtp:
auth: plain auth: plain
domain: "{{ .cloud.domain }}" domain: '{{ .cloud.domain }}'
host: "{{ .apps.smtp.host }}" host: '{{ .apps.smtp.host }}'
port: "{{ .apps.smtp.port }}" port: '{{ .apps.smtp.port }}'
user: "{{ .apps.smtp.user }}" user: '{{ .apps.smtp.user }}'
tls: "{{ .apps.smtp.tls }}" tls: '{{ .apps.smtp.tls }}'
from: "{{ .apps.smtp.from }}" from: '{{ .apps.smtp.from }}'
defaultSecrets: defaultSecrets:
- key: dbPassword - key: dbPassword
default: "{{ random.AlphaNum 32 }}" default: "{{ random.AlphaNum 32 }}"

View File

@@ -27,9 +27,9 @@ spec:
readOnlyRootFilesystem: false readOnlyRootFilesystem: false
env: env:
- name: PGHOST - name: PGHOST
value: "{{ .dbHostname }}" value: "{{ .db.host }}"
- name: PGPORT - name: PGPORT
value: "{{ .dbPort }}" value: "{{ .db.port }}"
- name: PGUSER - name: PGUSER
value: postgres value: postgres
- name: PGPASSWORD - name: PGPASSWORD
@@ -38,9 +38,9 @@ spec:
name: mastodon-secrets name: mastodon-secrets
key: postgres.password key: postgres.password
- name: MASTODON_DB - name: MASTODON_DB
value: "{{ .dbName }}" value: "{{ .db.name }}"
- name: MASTODON_USER - name: MASTODON_USER
value: "{{ .dbUsername }}" value: "{{ .db.user }}"
- name: MASTODON_PASSWORD - name: MASTODON_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
@@ -108,7 +108,7 @@ spec:
type: RuntimeDefault type: RuntimeDefault
containers: containers:
- name: db-migrate - name: db-migrate
image: {{ .image }} image: ghcr.io/mastodon/mastodon:v4.5.3
securityContext: securityContext:
allowPrivilegeEscalation: false allowPrivilegeEscalation: false
capabilities: capabilities:
@@ -150,22 +150,22 @@ spec:
name: mastodon-secrets name: mastodon-secrets
key: activeRecordKeyDerivationSalt key: activeRecordKeyDerivationSalt
- name: DB_HOST - name: DB_HOST
value: "{{ .dbHostname }}" value: "{{ .db.host }}"
- name: DB_PORT - name: DB_PORT
value: "{{ .dbPort }}" value: "{{ .db.port }}"
- name: DB_NAME - name: DB_NAME
value: "{{ .dbName }}" value: "{{ .db.name }}"
- name: DB_USER - name: DB_USER
value: "{{ .dbUsername }}" value: "{{ .db.user }}"
- name: DB_PASS - name: DB_PASS
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
name: mastodon-secrets name: mastodon-secrets
key: dbPassword key: dbPassword
- name: REDIS_HOST - name: REDIS_HOST
value: "{{ .redisHostname }}" value: "{{ .redis.host }}"
- name: REDIS_PORT - name: REDIS_PORT
value: "{{ .redisPort }}" value: "{{ .redis.port }}"
- name: REDIS_PASSWORD - name: REDIS_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:

View File

@@ -22,7 +22,7 @@ spec:
type: RuntimeDefault type: RuntimeDefault
containers: containers:
- name: sidekiq - name: sidekiq
image: {{ .image }} image: ghcr.io/mastodon/mastodon:v4.5.3
securityContext: securityContext:
allowPrivilegeEscalation: false allowPrivilegeEscalation: false
capabilities: capabilities:
@@ -33,7 +33,7 @@ spec:
- exec - exec
- sidekiq - sidekiq
- -c - -c
- "{{ .sidekiq.concurrency }}" - "25"
- -q - -q
- default,8 - default,8
- -q - -q
@@ -91,13 +91,13 @@ spec:
name: mastodon-secrets name: mastodon-secrets
key: activeRecordKeyDerivationSalt key: activeRecordKeyDerivationSalt
- name: DB_HOST - name: DB_HOST
value: "{{ .dbHostname }}" value: "{{ .db.host }}"
- name: DB_PORT - name: DB_PORT
value: "{{ .dbPort }}" value: "{{ .db.port }}"
- name: DB_NAME - name: DB_NAME
value: "{{ .dbName }}" value: "{{ .db.name }}"
- name: DB_USER - name: DB_USER
value: "{{ .dbUsername }}" value: "{{ .db.user }}"
- name: DB_PASS - name: DB_PASS
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
@@ -109,9 +109,9 @@ spec:
name: mastodon-secrets name: mastodon-secrets
key: postgres.password key: postgres.password
- name: REDIS_HOST - name: REDIS_HOST
value: "{{ .redisHostname }}" value: "{{ .redis.host }}"
- name: REDIS_PORT - name: REDIS_PORT
value: "{{ .redisPort }}" value: "{{ .redis.port }}"
- name: REDIS_PASSWORD - name: REDIS_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
@@ -131,9 +131,9 @@ spec:
- name: SMTP_FROM_ADDRESS - name: SMTP_FROM_ADDRESS
value: "{{ .smtp.from }}" value: "{{ .smtp.from }}"
- name: SMTP_AUTH_METHOD - name: SMTP_AUTH_METHOD
value: "{{ .smtp.authMethod }}" value: "plain"
- name: SMTP_ENABLE_STARTTLS - name: SMTP_ENABLE_STARTTLS
value: "{{ .smtp.enableStarttls }}" value: "auto"
- name: SMTP_TLS - name: SMTP_TLS
value: "{{ .smtp.tls }}" value: "{{ .smtp.tls }}"
volumeMounts: volumeMounts:

View File

@@ -22,7 +22,7 @@ spec:
type: RuntimeDefault type: RuntimeDefault
containers: containers:
- name: streaming - name: streaming
image: {{ .streamingImage }} image: ghcr.io/mastodon/mastodon-streaming:v4.5.3
securityContext: securityContext:
allowPrivilegeEscalation: false allowPrivilegeEscalation: false
capabilities: capabilities:
@@ -30,32 +30,32 @@ spec:
readOnlyRootFilesystem: false readOnlyRootFilesystem: false
ports: ports:
- name: streaming - name: streaming
containerPort: {{ .streamingPort }} containerPort: 4000
protocol: TCP protocol: TCP
env: env:
- name: NODE_ENV - name: NODE_ENV
value: production value: production
- name: PORT - name: PORT
value: "{{ .streamingPort }}" value: "4000"
- name: STREAMING_CLUSTER_NUM - name: STREAMING_CLUSTER_NUM
value: "1" value: "1"
- name: DB_HOST - name: DB_HOST
value: "{{ .dbHostname }}" value: "{{ .db.host }}"
- name: DB_PORT - name: DB_PORT
value: "{{ .dbPort }}" value: "{{ .db.port }}"
- name: DB_NAME - name: DB_NAME
value: "{{ .dbName }}" value: "{{ .db.name }}"
- name: DB_USER - name: DB_USER
value: "{{ .dbUsername }}" value: "{{ .db.user }}"
- name: DB_PASS - name: DB_PASS
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
name: mastodon-secrets name: mastodon-secrets
key: dbPassword key: dbPassword
- name: REDIS_HOST - name: REDIS_HOST
value: "{{ .redisHostname }}" value: "{{ .redis.host }}"
- name: REDIS_PORT - name: REDIS_PORT
value: "{{ .redisPort }}" value: "{{ .redis.port }}"
- name: REDIS_PASSWORD - name: REDIS_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:

View File

@@ -22,7 +22,7 @@ spec:
type: RuntimeDefault type: RuntimeDefault
containers: containers:
- name: web - name: web
image: {{ .image }} image: ghcr.io/mastodon/mastodon:v4.5.3
securityContext: securityContext:
allowPrivilegeEscalation: false allowPrivilegeEscalation: false
capabilities: capabilities:
@@ -36,7 +36,7 @@ spec:
- config/puma.rb - config/puma.rb
ports: ports:
- name: http - name: http
containerPort: {{ .webPort }} containerPort: 3000
protocol: TCP protocol: TCP
env: env:
- name: LOCAL_DOMAIN - name: LOCAL_DOMAIN
@@ -85,13 +85,13 @@ spec:
name: mastodon-secrets name: mastodon-secrets
key: activeRecordKeyDerivationSalt key: activeRecordKeyDerivationSalt
- name: DB_HOST - name: DB_HOST
value: "{{ .dbHostname }}" value: "{{ .db.host }}"
- name: DB_PORT - name: DB_PORT
value: "{{ .dbPort }}" value: "{{ .db.port }}"
- name: DB_NAME - name: DB_NAME
value: "{{ .dbName }}" value: "{{ .db.name }}"
- name: DB_USER - name: DB_USER
value: "{{ .dbUsername }}" value: "{{ .db.user }}"
- name: DB_PASS - name: DB_PASS
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
@@ -103,9 +103,9 @@ spec:
name: mastodon-secrets name: mastodon-secrets
key: postgres.password key: postgres.password
- name: REDIS_HOST - name: REDIS_HOST
value: "{{ .redisHostname }}" value: "{{ .redis.host }}"
- name: REDIS_PORT - name: REDIS_PORT
value: "{{ .redisPort }}" value: "{{ .redis.port }}"
- name: REDIS_PASSWORD - name: REDIS_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
@@ -125,9 +125,9 @@ spec:
- name: SMTP_FROM_ADDRESS - name: SMTP_FROM_ADDRESS
value: "{{ .smtp.from }}" value: "{{ .smtp.from }}"
- name: SMTP_AUTH_METHOD - name: SMTP_AUTH_METHOD
value: "{{ .smtp.authMethod }}" value: "plain"
- name: SMTP_ENABLE_STARTTLS - name: SMTP_ENABLE_STARTTLS
value: "{{ .smtp.enableStarttls }}" value: "auto"
- name: SMTP_TLS - name: SMTP_TLS
value: "{{ .smtp.tls }}" value: "{{ .smtp.tls }}"
- name: STREAMING_API_BASE_URL - name: STREAMING_API_BASE_URL

View File

@@ -23,11 +23,11 @@ spec:
service: service:
name: mastodon-streaming name: mastodon-streaming
port: port:
number: {{ .streamingPort }} number: 4000
- path: / - path: /
pathType: Prefix pathType: Prefix
backend: backend:
service: service:
name: mastodon-web name: mastodon-web
port: port:
number: {{ .webPort }} number: 3000

View File

@@ -1,7 +1,7 @@
name: mastodon name: mastodon
is: mastodon is: mastodon
description: Mastodon is a free, open-source social network server based on ActivityPub. description: Mastodon is a free, open-source social network server based on ActivityPub.
version: 4.5.3 version: 4.5.3-2
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/mastodon.svg icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/mastodon.svg
requires: requires:
- name: postgres - name: postgres
@@ -9,43 +9,30 @@ requires:
- name: smtp - name: smtp
defaultConfig: defaultConfig:
namespace: mastodon namespace: mastodon
externalDnsDomain: "{{ .cloud.domain }}" externalDnsDomain: '{{ .cloud.domain }}'
timezone: UTC
image: ghcr.io/mastodon/mastodon:v4.5.3
streamingImage: ghcr.io/mastodon/mastodon-streaming:v4.5.3
domain: mastodon.{{ .cloud.domain }} domain: mastodon.{{ .cloud.domain }}
locale: en locale: en
singleUserMode: false singleUserMode: false
# Database configuration
dbHostname: "{{ .apps.postgres.host }}"
dbPort: "{{ .apps.postgres.port }}"
dbName: mastodon_production
dbUsername: mastodon
# Redis configuration
redisHostname: "{{ .apps.redis.host }}"
redisPort: "{{ .apps.redis.port }}"
# Ports
webPort: 3000
streamingPort: 4000
# Storage
assetsStorage: 10Gi assetsStorage: 10Gi
systemStorage: 100Gi systemStorage: 100Gi
# SMTP configuration
smtp:
enabled: "{{ .apps.smtp.host | ternary true false }}"
server: "{{ .apps.smtp.host }}"
port: "{{ .apps.smtp.port }}"
from: notifications@{{ .cloud.domain }}
user: "{{ .apps.smtp.user }}"
authMethod: plain
enableStarttls: auto
tls: "{{ .apps.smtp.tls }}"
# TLS
tlsSecretName: wildcard-wild-cloud-tls tlsSecretName: wildcard-wild-cloud-tls
# Sidekiq configuration
sidekiq: sidekiq:
replicas: 1 replicas: 1
concurrency: 25 db:
host: '{{ .apps.postgres.host }}'
port: '{{ .apps.postgres.port }}'
name: mastodon_production
user: mastodon
redis:
host: '{{ .apps.redis.host }}'
port: '{{ .apps.redis.port }}'
smtp:
enabled: '{{ .apps.smtp.host | ternary true false }}'
server: '{{ .apps.smtp.host }}'
port: '{{ .apps.smtp.port }}'
from: notifications@{{ .cloud.domain }}
user: '{{ .apps.smtp.user }}'
tls: '{{ .apps.smtp.tls }}'
defaultSecrets: defaultSecrets:
- key: secretKeyBase - key: secretKeyBase
default: "{{ random.AlphaNum 128 }}" default: "{{ random.AlphaNum 128 }}"

View File

@@ -6,7 +6,7 @@ metadata:
spec: spec:
type: ClusterIP type: ClusterIP
ports: ports:
- port: {{ .streamingPort }} - port: 4000
targetPort: streaming targetPort: streaming
protocol: TCP protocol: TCP
name: streaming name: streaming

View File

@@ -6,7 +6,7 @@ metadata:
spec: spec:
type: ClusterIP type: ClusterIP
ports: ports:
- port: {{ .webPort }} - port: 3000
targetPort: http targetPort: http
protocol: TCP protocol: TCP
name: http name: http

View File

@@ -20,7 +20,7 @@ spec:
type: RuntimeDefault type: RuntimeDefault
containers: containers:
- name: vapid-init - name: vapid-init
image: {{ .image }} image: ghcr.io/mastodon/mastodon:v4.5.3
securityContext: securityContext:
allowPrivilegeEscalation: false allowPrivilegeEscalation: false
capabilities: capabilities:

View File

@@ -8,7 +8,7 @@ data:
public_baseurl: https://{{ .domain }} public_baseurl: https://{{ .domain }}
listeners: listeners:
- port: {{ .port }} - port: 8008
tls: false tls: false
type: http type: http
x_forwarded: true x_forwarded: true
@@ -20,17 +20,17 @@ data:
database: database:
name: psycopg2 name: psycopg2
args: args:
user: {{ .dbUsername }} user: {{ .db.user }}
password: ${DB_PASSWORD} password: ${DB_PASSWORD}
database: {{ .dbName }} database: {{ .db.name }}
host: {{ .dbHostname }} host: {{ .db.host }}
port: 5432 port: 5432
cp_min: 5 cp_min: 5
cp_max: 10 cp_max: 10
redis: redis:
enabled: true enabled: true
host: {{ .redisHostname }} host: {{ .redis.host }}
port: 6379 port: 6379
password: ${REDIS_PASSWORD} password: ${REDIS_PASSWORD}

View File

@@ -33,11 +33,11 @@ spec:
name: matrix-secrets name: matrix-secrets
key: postgres.password key: postgres.password
- name: DB_HOSTNAME - name: DB_HOSTNAME
value: "{{ .dbHostname }}" value: "{{ .db.host }}"
- name: DB_DATABASE_NAME - name: DB_DATABASE_NAME
value: "{{ .dbName }}" value: "{{ .db.name }}"
- name: DB_USERNAME - name: DB_USERNAME
value: "{{ .dbUsername }}" value: "{{ .db.user }}"
- name: DB_PASSWORD - name: DB_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:

View File

@@ -18,7 +18,7 @@ spec:
spec: spec:
initContainers: initContainers:
- name: generate-signing-key - name: generate-signing-key
image: "{{ .image }}" image: "matrixdotorg/synapse:v1.144.0"
command: ["/bin/sh", "-c"] command: ["/bin/sh", "-c"]
args: args:
- | - |
@@ -80,7 +80,7 @@ spec:
readOnlyRootFilesystem: false readOnlyRootFilesystem: false
containers: containers:
- name: synapse - name: synapse
image: "{{ .image }}" image: "matrixdotorg/synapse:v1.144.0"
command: ["/bin/sh", "-c"] command: ["/bin/sh", "-c"]
args: args:
- | - |
@@ -127,17 +127,17 @@ spec:
# Start Synapse with the processed config # Start Synapse with the processed config
exec /start.py exec /start.py
ports: ports:
- containerPort: {{ .port }} - containerPort: 8008
protocol: TCP protocol: TCP
name: http name: http
- containerPort: {{ .federationPort }} - containerPort: 8448
protocol: TCP protocol: TCP
name: federation name: federation
env: env:
- name: SYNAPSE_CONFIG_PATH - name: SYNAPSE_CONFIG_PATH
value: /data/homeserver.yaml value: /data/homeserver.yaml
- name: TZ - name: TZ
value: "{{ .timezone }}" value: "UTC"
- name: DB_PASSWORD - name: DB_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
@@ -179,14 +179,14 @@ spec:
livenessProbe: livenessProbe:
httpGet: httpGet:
path: /health path: /health
port: {{ .port }} port: 8008
initialDelaySeconds: 60 initialDelaySeconds: 60
periodSeconds: 30 periodSeconds: 30
timeoutSeconds: 5 timeoutSeconds: 5
readinessProbe: readinessProbe:
httpGet: httpGet:
path: /health path: /health
port: {{ .port }} port: 8008
initialDelaySeconds: 30 initialDelaySeconds: 30
periodSeconds: 10 periodSeconds: 10
timeoutSeconds: 5 timeoutSeconds: 5

View File

@@ -23,7 +23,7 @@ spec:
service: service:
name: matrix-synapse name: matrix-synapse
port: port:
number: {{ .port }} number: 8008
--- ---
apiVersion: networking.k8s.io/v1 apiVersion: networking.k8s.io/v1
kind: Ingress kind: Ingress
@@ -49,4 +49,4 @@ spec:
service: service:
name: matrix-synapse name: matrix-synapse
port: port:
number: {{ .federationPort }} number: 8448

View File

@@ -1,7 +1,7 @@
name: matrix name: matrix
is: matrix is: matrix
description: Matrix is an open standard for secure, decentralized, real-time communication. This deploys the Synapse homeserver for self-hosted Matrix federation and messaging. description: Matrix is an open standard for secure, decentralized, real-time communication. This deploys the Synapse homeserver for self-hosted Matrix federation and messaging.
version: v1.144.0 version: v1.144.0-2
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/matrix.svg icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/matrix.svg
requires: requires:
- name: postgres - name: postgres
@@ -10,20 +10,18 @@ requires:
defaultConfig: defaultConfig:
namespace: matrix namespace: matrix
externalDnsDomain: '{{ .cloud.domain }}' externalDnsDomain: '{{ .cloud.domain }}'
image: matrixdotorg/synapse:v1.144.0
timezone: UTC
port: 8008
federationPort: 8448
storage: 50Gi storage: 50Gi
mediaStorage: 100Gi mediaStorage: 100Gi
serverName: '{{ .cloud.domain }}' serverName: '{{ .cloud.domain }}'
dbHostname: postgres.postgres.svc.cluster.local
dbUsername: matrix
dbName: matrix
redisHostname: redis.redis.svc.cluster.local
domain: matrix.{{ .cloud.domain }} domain: matrix.{{ .cloud.domain }}
tlsSecretName: wildcard-wild-cloud-tls tlsSecretName: wildcard-wild-cloud-tls
enableRegistration: false enableRegistration: false
db:
host: '{{ .apps.postgres.host }}'
name: matrix
user: matrix
redis:
host: '{{ .apps.redis.host }}'
smtp: smtp:
host: '{{ .apps.smtp.host }}' host: '{{ .apps.smtp.host }}'
port: '{{ .apps.smtp.port }}' port: '{{ .apps.smtp.port }}'

View File

@@ -7,12 +7,12 @@ spec:
type: ClusterIP type: ClusterIP
ports: ports:
- name: http - name: http
port: {{ .port }} port: 8008
targetPort: {{ .port }} targetPort: 8008
protocol: TCP protocol: TCP
- name: federation - name: federation
port: {{ .federationPort }} port: 8448
targetPort: {{ .federationPort }} targetPort: 8448
protocol: TCP protocol: TCP
selector: selector:
app: matrix-synapse app: matrix-synapse

View File

@@ -3,7 +3,7 @@ kind: Deployment
metadata: metadata:
name: memcached name: memcached
spec: spec:
replicas: {{ .replicas }} replicas: 1
selector: selector:
matchLabels: matchLabels:
component: cache component: cache
@@ -14,24 +14,24 @@ spec:
spec: spec:
containers: containers:
- name: memcached - name: memcached
image: "{{ .image }}" image: "memcached:1.6.32-alpine"
ports: ports:
- containerPort: {{ .port }} - containerPort: 11211
name: memcached name: memcached
args: args:
- -m - -m
- "{{ .memoryLimit }}" - "{{ .memoryLimit }}"
- -c - -c
- "{{ .maxConnections }}" - "1024"
- -p - -p
- "{{ .port }}" - "11211"
resources: resources:
requests: requests:
memory: "{{ .resources.requests.memory }}" memory: 64Mi
cpu: "{{ .resources.requests.cpu }}" cpu: 100m
limits: limits:
memory: "{{ .resources.limits.memory }}" memory: 128Mi
cpu: "{{ .resources.limits.cpu }}" cpu: 200m
securityContext: securityContext:
runAsNonRoot: true runAsNonRoot: true
runAsUser: 11211 runAsUser: 11211

View File

@@ -2,21 +2,11 @@ name: memcached
is: memcached is: memcached
description: Memcached is an in-memory key-value store for small chunks of arbitrary description: Memcached is an in-memory key-value store for small chunks of arbitrary
data, commonly used as a cache layer. data, commonly used as a cache layer.
version: 1.6.32 version: 1.6.32-1
icon: https://www.vectorlogo.zone/logos/memcached/memcached-icon.svg icon: https://www.vectorlogo.zone/logos/memcached/memcached-icon.svg
requires: [] requires: []
defaultConfig: defaultConfig:
namespace: memcached namespace: memcached
image: memcached:1.6.32-alpine host: memcached.memcached.svc.cluster.local
port: 11211
memoryLimit: 64m memoryLimit: 64m
maxConnections: 1024
replicas: 1
resources:
requests:
memory: 64Mi
cpu: 100m
limits:
memory: 128Mi
cpu: 200m
defaultSecrets: [] defaultSecrets: []

View File

@@ -4,8 +4,8 @@ metadata:
name: memcached name: memcached
spec: spec:
ports: ports:
- port: {{ .port }} - port: 11211
targetPort: {{ .port }} targetPort: 11211
protocol: TCP protocol: TCP
name: memcached name: memcached
selector: selector:

View File

@@ -1,20 +1,15 @@
name: mysql name: mysql
is: mysql is: mysql
description: MySQL is an open-source relational database management system description: MySQL is an open-source relational database management system
version: 9.1.0 version: 9.1.0-1
icon: https://www.mysql.com/common/logos/logo-mysql-170x115.png icon: https://www.mysql.com/common/logos/logo-mysql-170x115.png
requires: [] requires: []
defaultConfig: defaultConfig:
namespace: mysql namespace: mysql
externalDnsDomain: '{{ .cloud.domain }}' host: mysql.mysql.svc.cluster.local
image: mysql:9.1.0
port: 3306
storage: 20Gi storage: 20Gi
dbName: mysql dbName: mysql
rootUser: root
user: mysql user: mysql
timezone: UTC
enableSSL: false
defaultSecrets: defaultSecrets:
- key: rootPassword - key: rootPassword
- key: password - key: password

View File

@@ -9,7 +9,7 @@ spec:
publishNotReadyAddresses: true publishNotReadyAddresses: true
ports: ports:
- name: mysql - name: mysql
port: {{ .port }} port: 3306
protocol: TCP protocol: TCP
targetPort: mysql targetPort: mysql
selector: selector:

View File

@@ -7,7 +7,7 @@ spec:
type: ClusterIP type: ClusterIP
ports: ports:
- name: mysql - name: mysql
port: {{ .port }} port: 3306
protocol: TCP protocol: TCP
targetPort: mysql targetPort: mysql
selector: selector:

View File

@@ -29,7 +29,7 @@ spec:
type: RuntimeDefault type: RuntimeDefault
containers: containers:
- name: mysql - name: mysql
image: {{ .image }} image: mysql:9.1.0
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
securityContext: securityContext:
allowPrivilegeEscalation: false allowPrivilegeEscalation: false
@@ -53,10 +53,10 @@ spec:
- name: MYSQL_DATABASE - name: MYSQL_DATABASE
value: {{ .dbName }} value: {{ .dbName }}
- name: TZ - name: TZ
value: {{ .timezone }} value: UTC
ports: ports:
- name: mysql - name: mysql
containerPort: {{ .port }} containerPort: 3306
protocol: TCP protocol: TCP
livenessProbe: livenessProbe:
exec: exec:

View File

@@ -19,7 +19,7 @@ spec:
type: RuntimeDefault type: RuntimeDefault
containers: containers:
- name: open-webui - name: open-webui
image: {{ .image }} image: ghcr.io/open-webui/open-webui:v0.9.5
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
securityContext: securityContext:
allowPrivilegeEscalation: false allowPrivilegeEscalation: false
@@ -29,12 +29,12 @@ spec:
readOnlyRootFilesystem: false readOnlyRootFilesystem: false
ports: ports:
- name: http - name: http
containerPort: {{ .port }} containerPort: 8080
env: env:
- name: WEBUI_AUTH - name: WEBUI_AUTH
value: "{{ .enableAuth }}" value: "true"
- name: ENABLE_SIGNUP - name: ENABLE_SIGNUP
value: "{{ .enableSignup }}" value: "false"
- name: OPENAI_API_BASE_URL - name: OPENAI_API_BASE_URL
value: "{{ .vllmApiUrl }}" value: "{{ .vllmApiUrl }}"
- name: OPENAI_API_KEY - name: OPENAI_API_KEY

View File

@@ -3,19 +3,15 @@ is: open-webui
description: Open WebUI is a comprehensive, open-source web interface for AI models. description: Open WebUI is a comprehensive, open-source web interface for AI models.
Features a user-friendly design, supports various LLM runners, and operates entirely Features a user-friendly design, supports various LLM runners, and operates entirely
offline. Perfect for creating a ChatGPT-like experience with local or hosted models. offline. Perfect for creating a ChatGPT-like experience with local or hosted models.
version: 0.9.5 version: 0.9.5-1
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/open-webui.svg icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/open-webui.svg
requires: [] requires: []
defaultConfig: defaultConfig:
namespace: open-webui namespace: open-webui
externalDnsDomain: '{{ .cloud.domain }}' externalDnsDomain: '{{ .cloud.domain }}'
image: ghcr.io/open-webui/open-webui:v0.9.5
port: 8080
storage: 10Gi storage: 10Gi
domain: chat.{{ .cloud.domain }} domain: chat.{{ .cloud.domain }}
vllmApiUrl: http://vllm-service.llm.svc.cluster.local:8000/v1 vllmApiUrl: http://vllm-service.llm.svc.cluster.local:8000/v1
enableAuth: true
enableSignup: false
adminEmail: '{{ .operator.email }}' adminEmail: '{{ .operator.email }}'
defaultSecrets: defaultSecrets:
- key: secretKey - key: secretKey

View File

@@ -5,19 +5,19 @@ kind: "ConfigMap"
metadata: metadata:
name: "openproject-core" name: "openproject-core"
data: data:
DATABASE_HOST: "{{ .dbHostname }}" DATABASE_HOST: "{{ .db.host }}"
DATABASE_PORT: "5432" DATABASE_PORT: "{{ .db.port }}"
DATABASE_NAME: "{{ .dbName }}" DATABASE_NAME: "{{ .db.name }}"
DATABASE_USERNAME: "{{ .dbUsername }}" DATABASE_USERNAME: "{{ .db.user }}"
DATABASE_URL: "postgresql://{{ .dbUsername }}@{{ .dbHostname }}:5432/{{ .dbName }}" DATABASE_URL: "postgresql://{{ .db.user }}@{{ .db.host }}:{{ .db.port }}/{{ .db.name }}"
OPENPROJECT_SEED_ADMIN_USER_PASSWORD_RESET: "{{ .adminPasswordReset }}" OPENPROJECT_SEED_ADMIN_USER_PASSWORD_RESET: "true"
OPENPROJECT_SEED_ADMIN_USER_NAME: "{{ .adminUserName }}" OPENPROJECT_SEED_ADMIN_USER_NAME: "{{ .adminUserName }}"
OPENPROJECT_SEED_ADMIN_USER_MAIL: "{{ .adminUserEmail }}" OPENPROJECT_SEED_ADMIN_USER_MAIL: "{{ .adminUserEmail }}"
OPENPROJECT_HTTPS: "{{ .https }}" OPENPROJECT_HTTPS: "true"
OPENPROJECT_SEED_LOCALE: "{{ .seedLocale }}" OPENPROJECT_SEED_LOCALE: "en"
OPENPROJECT_HOST__NAME: "{{ .domain }}" OPENPROJECT_HOST__NAME: "{{ .domain }}"
OPENPROJECT_HSTS: "{{ .hsts }}" OPENPROJECT_HSTS: "true"
OPENPROJECT_RAILS__CACHE__STORE: "{{ .cacheStore }}" OPENPROJECT_RAILS__CACHE__STORE: "memcache"
OPENPROJECT_RAILS__RELATIVE__URL__ROOT: "{{ .railsRelativeUrlRoot }}" OPENPROJECT_RAILS__RELATIVE__URL__ROOT: ""
POSTGRES_STATEMENT_TIMEOUT: "{{ .postgresStatementTimeout }}" POSTGRES_STATEMENT_TIMEOUT: "120s"
... ...

View File

@@ -5,5 +5,5 @@ kind: "ConfigMap"
metadata: metadata:
name: "openproject-memcached" name: "openproject-memcached"
data: data:
OPENPROJECT_CACHE__MEMCACHE__SERVER: "{{ .memcachedHostname }}:{{ .memcachedPort }}" OPENPROJECT_CACHE__MEMCACHE__SERVER: "{{ .memcached.host }}:{{ .memcached.port }}"
... ...

View File

@@ -38,11 +38,11 @@ spec:
name: postgres-secrets name: postgres-secrets
key: password key: password
- name: DB_HOSTNAME - name: DB_HOSTNAME
value: "{{ .dbHostname }}" value: "{{ .db.host }}"
- name: DB_DATABASE_NAME - name: DB_DATABASE_NAME
value: "{{ .dbName }}" value: "{{ .db.name }}"
- name: DB_USERNAME - name: DB_USERNAME
value: "{{ .dbUsername }}" value: "{{ .db.user }}"
- name: DB_PASSWORD - name: DB_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:

View File

@@ -2,7 +2,7 @@ name: openproject
is: openproject is: openproject
description: OpenProject is an open-source project management software that provides description: OpenProject is an open-source project management software that provides
comprehensive features for project planning, tracking, and collaboration. comprehensive features for project planning, tracking, and collaboration.
version: 16.1.1 version: 16.1.1-1
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/openproject.svg icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/openproject.svg
requires: requires:
- name: postgres - name: postgres
@@ -10,27 +10,19 @@ requires:
defaultConfig: defaultConfig:
namespace: openproject namespace: openproject
externalDnsDomain: '{{ .cloud.domain }}' externalDnsDomain: '{{ .cloud.domain }}'
serverImage: openproject/openproject:16.1.1-slim
timezone: UTC
serverPort: 8080
storage: 5Gi storage: 5Gi
dbHostname: postgres.postgres.svc.cluster.local
dbUsername: openproject
dbName: openproject
memcachedHostname: memcached.memcached.svc.cluster.local
memcachedPort: 11211
domain: openproject.{{ .cloud.domain }}
https: true
hsts: true
seedLocale: en
adminUserName: OpenProject Admin adminUserName: OpenProject Admin
adminUserEmail: '{{ .operator.email }}' adminUserEmail: '{{ .operator.email }}'
adminPasswordReset: true domain: openproject.{{ .cloud.domain }}
postgresStatementTimeout: 120s
tmpVolumesStorage: 2Gi
tlsSecretName: wildcard-wild-cloud-tls tlsSecretName: wildcard-wild-cloud-tls
cacheStore: memcache db:
railsRelativeUrlRoot: '' host: '{{ .apps.postgres.host }}'
port: '{{ .apps.postgres.port }}'
name: openproject
user: openproject
memcached:
host: '{{ .apps.memcached.host }}'
port: '{{ .apps.memcached.port }}'
defaultSecrets: defaultSecrets:
- key: dbPassword - key: dbPassword
- key: adminPassword - key: adminPassword

View File

@@ -27,7 +27,7 @@ spec:
accessModes: ["ReadWriteOnce"] accessModes: ["ReadWriteOnce"]
resources: resources:
requests: requests:
storage: {{ .tmpVolumesStorage }} storage: 2Gi
- name: app-tmp - name: app-tmp
# we can't use emptyDir due to the sticky bit / world writable issue # we can't use emptyDir due to the sticky bit / world writable issue
# see: https://github.com/kubernetes/kubernetes/issues/110835 # see: https://github.com/kubernetes/kubernetes/issues/110835
@@ -39,7 +39,7 @@ spec:
accessModes: ["ReadWriteOnce"] accessModes: ["ReadWriteOnce"]
resources: resources:
requests: requests:
storage: {{ .tmpVolumesStorage }} storage: 2Gi
- name: "data" - name: "data"
persistentVolumeClaim: persistentVolumeClaim:
claimName: openproject claimName: openproject
@@ -91,7 +91,7 @@ spec:
type: RuntimeDefault type: RuntimeDefault
containers: containers:
- name: seeder - name: seeder
image: "{{ .serverImage }}" image: "openproject/openproject:16.1.1-slim"
imagePullPolicy: Always imagePullPolicy: Always
args: args:
- bash - bash

View File

@@ -43,7 +43,7 @@ spec:
accessModes: ["ReadWriteOnce"] accessModes: ["ReadWriteOnce"]
resources: resources:
requests: requests:
storage: {{ .tmpVolumesStorage }} storage: 2Gi
- name: app-tmp - name: app-tmp
# we can't use emptyDir due to the sticky bit / world writable issue # we can't use emptyDir due to the sticky bit / world writable issue
# see: https://github.com/kubernetes/kubernetes/issues/110835 # see: https://github.com/kubernetes/kubernetes/issues/110835
@@ -55,7 +55,7 @@ spec:
accessModes: ["ReadWriteOnce"] accessModes: ["ReadWriteOnce"]
resources: resources:
requests: requests:
storage: {{ .tmpVolumesStorage }} storage: 2Gi
- name: "data" - name: "data"
persistentVolumeClaim: persistentVolumeClaim:
claimName: openproject claimName: openproject
@@ -118,7 +118,7 @@ spec:
runAsUser: 1000 runAsUser: 1000
seccompProfile: seccompProfile:
type: RuntimeDefault type: RuntimeDefault
image: {{ .serverImage }} image: openproject/openproject:16.1.1-slim
imagePullPolicy: Always imagePullPolicy: Always
envFrom: envFrom:
- configMapRef: - configMapRef:

View File

@@ -43,7 +43,7 @@ spec:
accessModes: ["ReadWriteOnce"] accessModes: ["ReadWriteOnce"]
resources: resources:
requests: requests:
storage: {{ .tmpVolumesStorage }} storage: 2Gi
- name: app-tmp - name: app-tmp
# we can't use emptyDir due to the sticky bit / world writable issue # we can't use emptyDir due to the sticky bit / world writable issue
# see: https://github.com/kubernetes/kubernetes/issues/110835 # see: https://github.com/kubernetes/kubernetes/issues/110835
@@ -55,7 +55,7 @@ spec:
accessModes: ["ReadWriteOnce"] accessModes: ["ReadWriteOnce"]
resources: resources:
requests: requests:
storage: {{ .tmpVolumesStorage }} storage: 2Gi
- name: "data" - name: "data"
persistentVolumeClaim: persistentVolumeClaim:
claimName: openproject claimName: openproject
@@ -118,7 +118,7 @@ spec:
runAsUser: 1000 runAsUser: 1000
seccompProfile: seccompProfile:
type: RuntimeDefault type: RuntimeDefault
image: {{ .serverImage }} image: openproject/openproject:16.1.1-slim
imagePullPolicy: Always imagePullPolicy: Always
envFrom: envFrom:
- configMapRef: - configMapRef:

View File

@@ -17,7 +17,7 @@ spec:
spec: spec:
containers: containers:
- name: postgres - name: postgres
image: "{{ .image }}" image: "pgvector/pgvector:pg15"
args: args:
[ [
"-c", "-c",
@@ -37,7 +37,7 @@ spec:
- name: PGDATA - name: PGDATA
value: /var/lib/postgresql/data/pgdata value: /var/lib/postgresql/data/pgdata
- name: TZ - name: TZ
value: "{{ .timezone }}" value: "UTC"
- name: POSTGRES_DB - name: POSTGRES_DB
value: "{{ .database }}" value: "{{ .database }}"
- name: POSTGRES_USER - name: POSTGRES_USER

View File

@@ -1,7 +1,7 @@
name: postgres name: postgres
is: postgres is: postgres
description: PostgreSQL is a powerful, open source object-relational database system. description: PostgreSQL is a powerful, open source object-relational database system.
version: 1.0.0 version: 1.0.0-1
icon: https://www.postgresql.org/media/img/about/press/elephant.png icon: https://www.postgresql.org/media/img/about/press/elephant.png
defaultConfig: defaultConfig:
namespace: postgres namespace: postgres
@@ -10,7 +10,5 @@ defaultConfig:
database: postgres database: postgres
user: postgres user: postgres
storage: 10Gi storage: 10Gi
image: pgvector/pgvector:pg15
timezone: UTC
defaultSecrets: defaultSecrets:
- key: password - key: password

View File

@@ -5,6 +5,6 @@ metadata:
name: postgres name: postgres
spec: spec:
ports: ports:
- port: {{ .port }} - port: 5432
selector: selector:
app: postgres app: postgres

View File

@@ -14,13 +14,11 @@ spec:
app: redis app: redis
spec: spec:
containers: containers:
- image: "{{ .image }}" - image: "redis:alpine"
name: redis name: redis
ports: ports:
- containerPort: {{ .port }} - containerPort: 6379
env: env:
- name: TZ
value: "{{ .timezone }}"
- name: REDIS_PASSWORD - name: REDIS_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:

View File

@@ -1,12 +1,10 @@
name: redis name: redis
is: redis is: redis
description: Redis is an open source, in-memory data structure store, used as a database, cache and message broker. description: Redis is an open source, in-memory data structure store, used as a database, cache and message broker.
version: 1.0.0 version: 1.0.0-1
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/redis.svg icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/redis.svg
defaultConfig: defaultConfig:
namespace: redis namespace: redis
image: redis:alpine
timezone: UTC
host: redis.redis.svc.cluster.local host: redis.redis.svc.cluster.local
port: 6379 port: 6379
uri: redis://{{ .app.host }}:{{ .app.port }}/0 uri: redis://{{ .app.host }}:{{ .app.port }}/0

View File

@@ -7,7 +7,7 @@ metadata:
app: redis app: redis
spec: spec:
ports: ports:
- port: {{ .port }} - port: 6379
targetPort: {{ .port }} targetPort: 6379
selector: selector:
app: redis app: redis

View File

@@ -22,7 +22,7 @@ spec:
nvidia.com/gpu.product: "{{ .gpuProduct }}" nvidia.com/gpu.product: "{{ .gpuProduct }}"
containers: containers:
- name: vllm - name: vllm
image: "{{ .image }}" image: vllm/vllm-openai:v0.5.4
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
securityContext: securityContext:
allowPrivilegeEscalation: false allowPrivilegeEscalation: false
@@ -33,11 +33,9 @@ spec:
args: args:
- --model={{ .model }} - --model={{ .model }}
- --max-model-len={{ .maxModelLen }} - --max-model-len={{ .maxModelLen }}
- --tensor-parallel-size={{ .tensorParallelSize }} - --tensor-parallel-size=1
- --gpu-memory-utilization={{ .gpuMemoryUtilization }} - --gpu-memory-utilization={{ .gpuMemoryUtilization }}
{{- if .apps.vllm.enforceEager }}
- --enforce-eager=True - --enforce-eager=True
{{- end }}
env: env:
- name: VLLM_TORCH_DTYPE - name: VLLM_TORCH_DTYPE
value: "auto" value: "auto"

View File

@@ -2,16 +2,14 @@ name: vllm
is: vllm is: vllm
description: vLLM is a fast and easy-to-use library for LLM inference and serving description: vLLM is a fast and easy-to-use library for LLM inference and serving
with OpenAI-compatible API with OpenAI-compatible API
version: 0.5.4 version: 0.5.4-1
icon: https://unpkg.com/@lobehub/icons-static-png@latest/dark/vllm.png icon: https://unpkg.com/@lobehub/icons-static-png@latest/dark/vllm.png
requires: [] requires: []
defaultConfig: defaultConfig:
image: vllm/vllm-openai:v0.5.4 namespace: llm
model: Qwen/Qwen2.5-7B-Instruct model: Qwen/Qwen2.5-7B-Instruct
maxModelLen: 8192 maxModelLen: 8192
tensorParallelSize: 1
gpuMemoryUtilization: 0.9 gpuMemoryUtilization: 0.9
enforceEager: true
gpuProduct: RTX 4090 gpuProduct: RTX 4090
cpuRequest: '4' cpuRequest: '4'
cpuLimit: '8' cpuLimit: '8'
@@ -19,5 +17,4 @@ defaultConfig:
memoryLimit: 24Gi memoryLimit: 24Gi
gpuCount: 1 gpuCount: 1
domain: vllm.{{ .cloud.domain }} domain: vllm.{{ .cloud.domain }}
namespace: llm
defaultSecrets: [] defaultSecrets: []