Skip to content

Mealie

Mealie is an intuitive and easy to use recipe management app. It's designed to make your life easier by being the best recipes management experience on the web and providing you with an easy to use interface to manage your growing collection of recipes.

Mealie deployment is consisting of two containers, one for frontend and one for backend. It's database (sqlite) is stored on disk so we will be deploying this app as StatefulSet.

Deploying with Kubedeploy

We will use Helmfile to define our release and configuration.

Export the Mealie domain as environment variable

export MEALIE_DOMAIN=mealie.my-domain.com
helmfile.yaml
---
repositories:
  - name: sysbee
    url: https://charts.sysbee.io/stable/sysbee

releases:
  - name: mealie
    namespace: apps
    chart: sysbee/kubedeploy
    disableValidationOnInstall: true
    version: 1.1.0
    installed: true

    values:
      - deploymentMode: Statefulset
      - fullnameOverride: mealie
      - image:
          repository: hkotel/mealie
          tag: frontend-nightly
          pullPolicy: Always

      - ports:
          - name: http
            containerPort: 3000
            protocol: TCP

      - service:
          enabled: true
          ports:
            - port: 3000
              targetPort: http
              protocol: TCP
              name: http

      - ingress:
          enabled: true
          hosts:
            - host: {{ requiredEnv "MEALIE_DOMAIN" }}

      - env:
        - name: API_URL
          value: http://localhost:9000
        - name: BASE_URL
          value: https://{{ requiredEnv "MEALIE_DOMAIN" }}
        - name: ALLOW_SIGNUP
          value: "false"
        - name: DB_ENGINE
          value: sqlite
        - name: WEB_GUNICORN
          value: "false"
        - name: WORKERS_PER_CORE
          value: "0.5"
        - name: MAX_WORKERS
          value: "1"
        - name: WEB_CONCURRENCY
          value: "1"

      - resources:
          limits:
            memory: 512Mi

      - additionalContainers:
          enabled: true
          containers:
            - name: mealie-api
              repository: hkotel/mealie
              tag: "api-nightly"
              ports:
                - name: api
                  containerPort: 9000
                  protocol: TCP
              resources:
                limits:
                  memory: 1Gi
              healthcheck:
                enabled: false
                probes:
                  livenessProbe:
                    httpGet:
                      path: /api/app/about
                      port: 9000
                    initialDelaySeconds: 3
                    periodSeconds: 3
                  readinessProbe:
                    httpGet:
                      path: /api/app/about
                      port: 9000
                    initialDelaySeconds: 3
                    periodSeconds: 3

      - persistency:
          enabled: true
          capacity:
            storage: 20Gi
          mountPath: "/app/data"

Deploy command

helmfile --file helmfile.yaml apply

Open your browser at MEALIE_DOMAIN