the very large majorly different smol-k8s-lab upgrade #1

Merged
jessebot merged 0 commits from refs/pull/1/head into main 2026-04-17 09:49:03 +00:00
jessebot commented 2026-01-18 20:43:27 +00:00 (Migrated from git.smallhack.org)

TODO

  • document new smol-app schema
  • update TUI
  • test end to end install fresh (we already test existing installs constantly locally)

EXTREMELY LARGE OVERHAUL

  • Ripping out smol-tts entirely. We're taking a no-AI stance, and this include for accessibility technology, something we'd previously allowed. We will instead plug into other screenreading apps and focus on supporting that better. This is based on feedback from the blind tech community who found the screenreading experience to not even be very good.
  • Adds an explicit "No AI" policy being added to the contributing.md
  • Complete overhaul of the config schema
  • several major upgrades of textual, right up to the point just before AI is introduced

New Schema per app

All apps will now live under $XDG_CONFIG_HOME/small-k8s-lab/apps/name_of_app.yaml and they will follow a schema like what we have here for nextcloud:

description: |
  [link=https://nextcloud.com/]Nextcloud Hub[/link] is the industry-leading, fully open-source, on-premises content collaboration platform. Teams access, share and edit their documents, chat and participate in video calls and manage their mail and calendar and projects across mobile, desktop and web interfaces

  smol-k8s-lab supports initialization by setting up your admin username, password, and SMTP username and password, as well as your redis (or valkey) and postgresql credentials.

  To avoid providing sensitive values everytime you run smol-k8s-lab, consider exporting the following environment variables before running smol-k8s-lab:
    - NEXTCLOUD_SMTP_PASSWORD
    - NEXTCLOUD_S3_BACKUP_ACCESS_KEY
    - NEXTCLOUD_S3_BACKUP_ACCESS_ID
    - NEXTCLOUD_RESTIC_REPO_PASSWORD
    - COLLABORA_ONLINE_PASSWORD

  Note: smol-k8s-lab is not affiliated with Nextcloud GmbH. This is a community-supported-only install method.
enabled: false

hostnames:
  # Fully Qualified Domain Name for nextcloud
  nextcloud: ""
  # host name for collabora online
  collabora: "collabora.domain.com"

# initialize the app by setting up new k8s secrets and/or bitwarden items
init:
  enabled: true
  restore:
    # set to true to run a restic restore via a k8up job for:
    # seaweedfs pvcs and nextcloud files pvc
    enabled: false
    # for Cloudnative Postgres operator "cluster" CRD type resources
    cnpg_restore: true
    # restic snapshot ID for each PVC
    restic_snapshot_ids:
      # seaweedFS volume pvc snapshot id
      seaweedfs_volume: "latest"
      # seaweedFS filer pvc snapshot id
      seaweedfs_filer: "latest"
      # seaweedFS master pvc snapshot id
      # seaweedfs_master: ""
      # nextcloud-files pvc snapshot id
      nextcloud_files: "latest"
      # nextcloud-config pvc snapshot id - if you enabled config pvc, you can uncomment this
      # nextcloud_config: "latest"
  values:
    # change the name of your admin user to whatever you like. This is used in an admin credentials k8s secret
    admin_user: "nextcloud_admin"
    smtp_user: "change me to enable mail"
    smtp_host: "change-me-to-real-email@to-enable.mail"
    smtp_password:
      value_from:
        env: NEXTCLOUD_SMTP_PASSWORD
    collabora_user: admin
    collabora_password:
      value_from:
        # you can change this to any env var
        env: COLLABORA_ONLINE_PASSWORD

backups:
  pvc:
    # cronjob syntax schedule to run nextcloud pvc backups
    schedule: 10 0 * * *
  # cronjob syntax (with SECONDS field) for nextcloud postgres backups
  # must happen at least 10 minutes before pvc backups, to avoid corruption
  # due to missing files. This is because the cnpg backup shows as completed
  # before it actually is, due to the wal archive it lists as it's end not
  # being in the backup yet
  postgresqlSchedule: 0 0 0 * * *
  s3:
    # these are for pushing remote backups of your local s3 storage, for speed and cost optimization
    endpoint: ""
    bucket: ""
    region: ""
    secret_access_key:
      value_from:
        env: NEXTCLOUD_S3_BACKUP_SECRET_KEY
    access_key_id:
      value_from:
        env: NEXTCLOUD_S3_BACKUP_ACCESS_ID
  restic_repo_password:
    value_from:
      env: NEXTCLOUD_RESTIC_REPO_PASSWORD

tolerations: []

affinity: {}

s3:
  # choose S3 as the local primary object store from either: seaweedfs, or minio
  # SeaweedFS - deploy SeaweedFS filer/s3 gateway
  provider: seaweedfs
  # the endpoint you'd like to use for your minio or SeaweedFS instance
  endpoint: ""
  # how large the backing pvc's capacity should be for minio or seaweedfs
  capacity: 10Gi
  # you can also comment this out and we'll use the global storage class
  storage_class: local-path
  region: eu-west-1

valkey:
  # enable valkey
  enabled: true

pvc:
  files:
    # create a pvc for nextcloud files
    enabled: true
    # size of the pvc for nextcloud files
    capacity: "20Gi"
    access_mode: "ReadWriteOnce"
    # you can also comment this out and we'll use the global storage class
    storage_class: "local-path"

  config:
    # create a pvc for nextcloud config
    enabled: true
    # size of the pvc for nextcloud config
    capacity: "2Gi"
    access_mode: "ReadWriteOnce"
    # you can also comment this out and we'll use the global storage class
    storage_class: "local-path"

argo:
  # secrets keys to make available to Argo CD ApplicationSets
  secret_keys:
    # nextcloud needs this for new users or it throws a warning in the admin panel
    default_phone_region: NL
    # the default domain to send emails to user with
    mail_domain: "domain.com"
    # the default user to use with mail_domain for sending emails, formats to no-reply@domain.com
    mail_from_address: "no-reply"
    # cronjob schedule to turn on nextcloud maintenance mode for backups
    maintenance_mode_on_schedule: "0 1 * * *"
    # cronjob schedule to turn off nextcloud maintenance mode after backups
    maintenance_mode_off_schedule: "30 1 * * *"
  # git repo to install the Argo CD app from
  repo: https://codeberg.org/small-hack/argocd-apps
  # path in the argo repo to point to.
  path: nextcloud/smol-app/
  # either the branch or tag to point at in the argo repo above
  revision: main
  # kubernetes cluster to install the k8s app into, defaults to Argo CD default
  cluster: https://kubernetes.default.svc
  # namespace to install the k8s app in
  namespace: nextcloud
  # recurse directories in the provided git repo
  directory_recursion: false
  # source repos for Argo CD App Project (in addition to argo.repo)
  project:
    name: nextcloud
    source_repos:
      - https://codeberg.org/small-hack/argocd-apps
      - https://git.smallhack.org/small-hack/argocd-apps
      - registry-1.docker.io
      - https://nextcloud.github.io/helm
      - https://small-hack.github.io/cloudnative-pg-cluster-chart
      - https://seaweedfs.github.io/seaweedfs/helm
      - https://github.com/seaweedfs/seaweedfs
      - https://collaboraonline.github.io/online
      - https://cloudnative-pg.github.io/charts
    destination:
      # automatically includes the app's namespace and argocd's namespace
      namespaces: []

Significant schema changes

Top level parameters now include:

  • description
  • hostnames
  • backups
  • pvc
  • s3
  • valkey
  • init
  • argo
  • affinity
  • tolerations
  • smtp

This is because these are the top parameters most used in almost every single app, so cramming them all into the secrets felt weird. This also helps us have a predictable schema for all our our helm charts that we're calling smol-apps which live in the argocd-apps repo.

## TODO - [x] document new smol-app schema - [x] update TUI - [x] test end to end install fresh (we already test existing installs constantly locally) # EXTREMELY LARGE OVERHAUL - Ripping out smol-tts entirely. We're taking a no-AI stance, and this include for accessibility technology, something we'd previously allowed. We will instead plug into other screenreading apps and focus on supporting that better. This is based on feedback from the blind tech community who found the screenreading experience to not even be very good. - Adds an explicit "No AI" policy being added to the contributing.md - Complete overhaul of the config schema - several major upgrades of textual, right up to the point just before AI is introduced ## New Schema per app All apps will now live under `$XDG_CONFIG_HOME/small-k8s-lab/apps/name_of_app.yaml` and they will follow a schema like what we have here for nextcloud: ```yaml description: | [link=https://nextcloud.com/]Nextcloud Hub[/link] is the industry-leading, fully open-source, on-premises content collaboration platform. Teams access, share and edit their documents, chat and participate in video calls and manage their mail and calendar and projects across mobile, desktop and web interfaces smol-k8s-lab supports initialization by setting up your admin username, password, and SMTP username and password, as well as your redis (or valkey) and postgresql credentials. To avoid providing sensitive values everytime you run smol-k8s-lab, consider exporting the following environment variables before running smol-k8s-lab: - NEXTCLOUD_SMTP_PASSWORD - NEXTCLOUD_S3_BACKUP_ACCESS_KEY - NEXTCLOUD_S3_BACKUP_ACCESS_ID - NEXTCLOUD_RESTIC_REPO_PASSWORD - COLLABORA_ONLINE_PASSWORD Note: smol-k8s-lab is not affiliated with Nextcloud GmbH. This is a community-supported-only install method. enabled: false hostnames: # Fully Qualified Domain Name for nextcloud nextcloud: "" # host name for collabora online collabora: "collabora.domain.com" # initialize the app by setting up new k8s secrets and/or bitwarden items init: enabled: true restore: # set to true to run a restic restore via a k8up job for: # seaweedfs pvcs and nextcloud files pvc enabled: false # for Cloudnative Postgres operator "cluster" CRD type resources cnpg_restore: true # restic snapshot ID for each PVC restic_snapshot_ids: # seaweedFS volume pvc snapshot id seaweedfs_volume: "latest" # seaweedFS filer pvc snapshot id seaweedfs_filer: "latest" # seaweedFS master pvc snapshot id # seaweedfs_master: "" # nextcloud-files pvc snapshot id nextcloud_files: "latest" # nextcloud-config pvc snapshot id - if you enabled config pvc, you can uncomment this # nextcloud_config: "latest" values: # change the name of your admin user to whatever you like. This is used in an admin credentials k8s secret admin_user: "nextcloud_admin" smtp_user: "change me to enable mail" smtp_host: "change-me-to-real-email@to-enable.mail" smtp_password: value_from: env: NEXTCLOUD_SMTP_PASSWORD collabora_user: admin collabora_password: value_from: # you can change this to any env var env: COLLABORA_ONLINE_PASSWORD backups: pvc: # cronjob syntax schedule to run nextcloud pvc backups schedule: 10 0 * * * # cronjob syntax (with SECONDS field) for nextcloud postgres backups # must happen at least 10 minutes before pvc backups, to avoid corruption # due to missing files. This is because the cnpg backup shows as completed # before it actually is, due to the wal archive it lists as it's end not # being in the backup yet postgresqlSchedule: 0 0 0 * * * s3: # these are for pushing remote backups of your local s3 storage, for speed and cost optimization endpoint: "" bucket: "" region: "" secret_access_key: value_from: env: NEXTCLOUD_S3_BACKUP_SECRET_KEY access_key_id: value_from: env: NEXTCLOUD_S3_BACKUP_ACCESS_ID restic_repo_password: value_from: env: NEXTCLOUD_RESTIC_REPO_PASSWORD tolerations: [] affinity: {} s3: # choose S3 as the local primary object store from either: seaweedfs, or minio # SeaweedFS - deploy SeaweedFS filer/s3 gateway provider: seaweedfs # the endpoint you'd like to use for your minio or SeaweedFS instance endpoint: "" # how large the backing pvc's capacity should be for minio or seaweedfs capacity: 10Gi # you can also comment this out and we'll use the global storage class storage_class: local-path region: eu-west-1 valkey: # enable valkey enabled: true pvc: files: # create a pvc for nextcloud files enabled: true # size of the pvc for nextcloud files capacity: "20Gi" access_mode: "ReadWriteOnce" # you can also comment this out and we'll use the global storage class storage_class: "local-path" config: # create a pvc for nextcloud config enabled: true # size of the pvc for nextcloud config capacity: "2Gi" access_mode: "ReadWriteOnce" # you can also comment this out and we'll use the global storage class storage_class: "local-path" argo: # secrets keys to make available to Argo CD ApplicationSets secret_keys: # nextcloud needs this for new users or it throws a warning in the admin panel default_phone_region: NL # the default domain to send emails to user with mail_domain: "domain.com" # the default user to use with mail_domain for sending emails, formats to no-reply@domain.com mail_from_address: "no-reply" # cronjob schedule to turn on nextcloud maintenance mode for backups maintenance_mode_on_schedule: "0 1 * * *" # cronjob schedule to turn off nextcloud maintenance mode after backups maintenance_mode_off_schedule: "30 1 * * *" # git repo to install the Argo CD app from repo: https://codeberg.org/small-hack/argocd-apps # path in the argo repo to point to. path: nextcloud/smol-app/ # either the branch or tag to point at in the argo repo above revision: main # kubernetes cluster to install the k8s app into, defaults to Argo CD default cluster: https://kubernetes.default.svc # namespace to install the k8s app in namespace: nextcloud # recurse directories in the provided git repo directory_recursion: false # source repos for Argo CD App Project (in addition to argo.repo) project: name: nextcloud source_repos: - https://codeberg.org/small-hack/argocd-apps - https://git.smallhack.org/small-hack/argocd-apps - registry-1.docker.io - https://nextcloud.github.io/helm - https://small-hack.github.io/cloudnative-pg-cluster-chart - https://seaweedfs.github.io/seaweedfs/helm - https://github.com/seaweedfs/seaweedfs - https://collaboraonline.github.io/online - https://cloudnative-pg.github.io/charts destination: # automatically includes the app's namespace and argocd's namespace namespaces: [] ``` ### Significant schema changes Top level parameters now include: - description - hostnames - backups - pvc - s3 - valkey - init - argo - affinity - tolerations - smtp This is because these are the top parameters most used in almost every single app, so cramming them all into the secrets felt weird. This also helps us have a predictable schema for all our our helm charts that we're calling smol-apps which live in the [argocd-apps](https://git.smallhack.org/small-hack/argocd-apps) repo.
cloudymax (Migrated from git.smallhack.org) reviewed 2026-01-18 20:43:42 +00:00
jessebot commented 2026-04-12 11:51:19 +00:00 (Migrated from git.smallhack.org)

currently updating the docs, and then we need to get the CI running here as well...

currently updating the docs, and then we need to get the CI running here as well...
Sign in to join this conversation.
No description provided.