Skip to content
Snippets Groups Projects
README.md 3.86 KiB
Newer Older
  • Learn to ignore specific revisions
  • # Stackspin Outwards - Stackspout
    
    Varac's avatar
    Varac committed
    
    
    This repository extends [Stackspin](https://open.greenhost.net/stackspin/stackspin)
    with extra applications and overrides
    
    xeruf's avatar
    xeruf committed
    focused on business use.
    
    Once stabilized, the aim is to contribute as much upstream as possible.
    
    Varac's avatar
    Varac committed
    
    
    Stackspout is used in day-to-day business
    
    xeruf's avatar
    xeruf committed
    with a double-digit user number,
    
    so all experiments happen carefully.
    
    xeruf's avatar
    xeruf committed
    Still, it is an experimental offering.
    
    xeruf's avatar
    xeruf committed
    ## Tools
    
    Useful tools for administration:
    - my `stack` CLI helper, currently part of my dotfiles:
      https://git.jfischer.org/xeruf/dotfiles/src/branch/main/.config/shell/server#L11
    - stackspin docs:
      https://docs.stackspin.net/en/v2/system_administration/customizing.html
    
    
    xeruf's avatar
    xeruf committed
    ## Explanation - Typical App Deployment in Stackspout with Flux on Kubernetes
    
    The diagram illustrates generically how continuous app deployment works in our Kubernetes cluster
    from Infrastructure-as-Code using flux.
    Not every app has database, backend and frontend,
    but in the end the deployments all work very similarly
    so there is no point showing it for each individual app.
    Except for the Single-Sign On,
    apps also do not really depend on each other.
    
    Explanations:
    - deploy :: creates a resource on the cluster from a file in the GitRepository
    - create :: creates a resource on the cluster using Kubernetes logic
    - ... all :: creates multiple independent resources
    
    All Flux Kustomizations refer to a directory in the GitRepository,
    but for clarity I omitted it beyond the initial one.
    
    Clouds are created not via Flux GitOps,
    but through one-time scripts.
    
    ![Flux Diagram](./stackspout.png)
    
    
    xeruf's avatar
    xeruf committed
    ### Guide: Creating OAuth Credentials for an external service
    
    xeruf's avatar
    xeruf committed
    - push an OAuth2Client definition like for the apps,
    
    xeruf's avatar
    xeruf committed
      adjusting `metadata.name` and `spec.secretName` as well as `spec.redirectUris`
    
    xeruf's avatar
    xeruf committed
    - obtain the generated `client_secret` for your application from kubernetes:
    
    xeruf's avatar
    xeruf committed
          kubectl get secret -n flux-system stackspin-APP-oauth-variables --template '{{.data.client_secret}}' | base64 -d
    
      with client_id:
    
          kubectl get secret -n flux-system stackspin-APP-oauth-variables --template '{{.data.client_id}}{{"\n"}}{{.data.client_secret}}{{"\n"}}' | while read in; do echo $in | base64 -d; echo; done
    
    xeruf's avatar
    xeruf committed
    
    
    ## Customizations
    
    ### Overrides
    - Adds many Nextcloud extensions and some configuration
    
    xeruf's avatar
    xeruf committed
      -> most notably `external` to add Applications into Nextcloud as hub
    
    
    ### New Applications
    
    xeruf's avatar
    xeruf committed
    below list is formatted as:
    
    > subdomain: Service (helmrepo, if not provided by the service authors)
    
    xeruf's avatar
    xeruf committed
    
    
    #### Stable including Single-Sign-On
    
    xeruf's avatar
    xeruf committed
    - forge: Forgejo
    - do: Vikunja
    #### No SSO
    - ninja: InvoiceNinja
    - support: Zammad
    - flow: n8n (8gears)
    - meet: cal.com (pyrrha)
    - status: Gatus (minicloudlabs)
    
    #### Planned
    
    xeruf's avatar
    xeruf committed
    - design: penpot (truecharts, waiting on PR)
    - sprint: taiga (nemonik)
    - video: Peertube ([LecygneNoir](https://git.lecygnenoir.info/LecygneNoir/peertube-helm)
    )
    - call: Jitsi Meet / OpenTalk
    
    - wiki: Wiki (maybe wikijs, but I'd like something that integrated with Nextcloud and Markdown/Orgdown)
    #### Ideas
    - link: URL Shortener
    
    xeruf's avatar
    xeruf committed
    - connect: Bonfire
    
    xeruf's avatar
    xeruf committed
    #### Stale
    - people: SuiteCRM (bitnami repo)
    - time: Kimai (robjuz repo)
    
    
    #### Functionally
    
    xeruf's avatar
    xeruf committed
    - Nextcloud too slow - add Redis?
    
    - Preconfigure user settings in Nextcloud, Vikunja and more
    
    
    xeruf's avatar
    xeruf committed
    ## Setup
    
    
    > Warning: Lots of experiments happening here!
    
    xeruf's avatar
    xeruf committed
    First [install Stackspin](https://docs.stackspin.net/en/latest/installation/install_stackspin.html).
    Then apply the configuration to your cluster:
    
    xeruf's avatar
    xeruf committed
    install.sh
    
    xeruf's avatar
    xeruf committed
    Done!
    Note that the added applications are currently only toggled via repository changes
    and integration with Stackspin mechanisms is very rudimentary.
    To list the central resource related to this repo:
    
    kubectl get gitrepositories -A
    kubectl get kustomization -A -o=jsonpath='{.items[?(@.spec.sourceRef.name=="stackspout")].metadata.name}'
    
    kubectl -n stackspout get helmreleases
    kubectl -n stackspout get pods
    
    xeruf's avatar
    xeruf committed
    But there are also ConfigMaps, Secrets, StatefulSets, PVCs, Helmrepos and more...