From 37b070fe7ab20acceac7623195213f11fa070210 Mon Sep 17 00:00:00 2001 From: Stavros Kois <47820033+stavros-k@users.noreply.github.com> Date: Thu, 20 Apr 2023 01:26:20 +0300 Subject: [PATCH] NAS-121454 / 23.10 / Add nginx-proxy-manager to `community` train (#1117) * Add nginx-proxy-manager (initial commit) * Update questions and readme * Add a note/fixme * remove host network --- create_app.sh | 2 +- .../community/nginx-proxy-manager/Chart.lock | 6 + .../community/nginx-proxy-manager/Chart.yaml | 25 +++ .../community/nginx-proxy-manager/README.md | 5 + .../nginx-proxy-manager/app-readme.md | 5 + .../charts/common-1.0.5.tgz | Bin 0 -> 54667 bytes .../nginx-proxy-manager/ci/basic-values.yaml | 12 ++ .../community/nginx-proxy-manager/item.yaml | 4 + .../nginx-proxy-manager/questions.yaml | 204 ++++++++++++++++++ .../nginx-proxy-manager/templates/NOTES.txt | 1 + .../nginx-proxy-manager/templates/_npm.tpl | 105 +++++++++ .../nginx-proxy-manager/templates/_portal.tpl | 12 ++ .../nginx-proxy-manager/templates/common.yaml | 9 + .../nginx-proxy-manager/upgrade_info.json | 1 + .../nginx-proxy-manager/upgrade_strategy | 31 +++ .../community/nginx-proxy-manager/values.yaml | 28 +++ 16 files changed, 449 insertions(+), 1 deletion(-) create mode 100644 library/ix-dev/community/nginx-proxy-manager/Chart.lock create mode 100644 library/ix-dev/community/nginx-proxy-manager/Chart.yaml create mode 100644 library/ix-dev/community/nginx-proxy-manager/README.md create mode 100644 library/ix-dev/community/nginx-proxy-manager/app-readme.md create mode 100644 library/ix-dev/community/nginx-proxy-manager/charts/common-1.0.5.tgz create mode 100644 library/ix-dev/community/nginx-proxy-manager/ci/basic-values.yaml create mode 100644 library/ix-dev/community/nginx-proxy-manager/item.yaml create mode 100644 library/ix-dev/community/nginx-proxy-manager/questions.yaml create mode 100644 library/ix-dev/community/nginx-proxy-manager/templates/NOTES.txt create mode 100644 library/ix-dev/community/nginx-proxy-manager/templates/_npm.tpl create mode 100644 library/ix-dev/community/nginx-proxy-manager/templates/_portal.tpl create mode 100644 library/ix-dev/community/nginx-proxy-manager/templates/common.yaml create mode 100644 library/ix-dev/community/nginx-proxy-manager/upgrade_info.json create mode 100755 library/ix-dev/community/nginx-proxy-manager/upgrade_strategy create mode 100644 library/ix-dev/community/nginx-proxy-manager/values.yaml diff --git a/create_app.sh b/create_app.sh index 67e42f4d53..e90f81ed89 100755 --- a/create_app.sh +++ b/create_app.sh @@ -6,7 +6,7 @@ YQ_PATH="/tmp/yq" BASE_PATH="library/ix-dev" if [[ ! -f "$YQ_PATH" ]]; then - wget "https://github.com/mikefarah/yq/releases/download/${VERSION}/${BINARY}" -O "$YQ_PATH" && \ + wget -q "https://github.com/mikefarah/yq/releases/download/${VERSION}/${BINARY}" -O "$YQ_PATH" && \ chmod +x "$YQ_PATH" fi diff --git a/library/ix-dev/community/nginx-proxy-manager/Chart.lock b/library/ix-dev/community/nginx-proxy-manager/Chart.lock new file mode 100644 index 0000000000..c45b5f9c51 --- /dev/null +++ b/library/ix-dev/community/nginx-proxy-manager/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: file://../../../common + version: 1.0.5 +digest: sha256:cf1db8c2ae650987a3e3d8d98767caab62c341bd0fb15309213b00dce87111cc +generated: "2023-04-12T17:17:40.41107506+03:00" diff --git a/library/ix-dev/community/nginx-proxy-manager/Chart.yaml b/library/ix-dev/community/nginx-proxy-manager/Chart.yaml new file mode 100644 index 0000000000..fa74f840c2 --- /dev/null +++ b/library/ix-dev/community/nginx-proxy-manager/Chart.yaml @@ -0,0 +1,25 @@ +name: nginx-proxy-manager +description: Expose your services easily and securely +annotations: + title: Nginx Proxy Manager +type: application +version: 1.0.0 +apiVersion: v2 +appVersion: '2.10.2' +kubeVersion: '>=1.16.0-0' +maintainers: + - name: truenas + url: https://www.truenas.com/ +dependencies: + - name: common + repository: file://../../../common + version: 1.0.5 +home: https://nginxproxymanager.com/ +icon: https://nginxproxymanager.com/logo.png +sources: + - https://nginxproxymanager.com/ + - https://github.com/truenas/charts/tree/master/community/nginx-proxy-manager + - https://hub.docker.com/r/jc21/nginx-proxy-manager +keywords: + - nginx + - proxy diff --git a/library/ix-dev/community/nginx-proxy-manager/README.md b/library/ix-dev/community/nginx-proxy-manager/README.md new file mode 100644 index 0000000000..9ab47b8479 --- /dev/null +++ b/library/ix-dev/community/nginx-proxy-manager/README.md @@ -0,0 +1,5 @@ +# Nginx Proxy Manager + +[Nginx Proxy Manager](https://nginxproxymanager.com) Expose your services easily and securely + +> Application requires to run as root. This is a limitation of the application. diff --git a/library/ix-dev/community/nginx-proxy-manager/app-readme.md b/library/ix-dev/community/nginx-proxy-manager/app-readme.md new file mode 100644 index 0000000000..9ab47b8479 --- /dev/null +++ b/library/ix-dev/community/nginx-proxy-manager/app-readme.md @@ -0,0 +1,5 @@ +# Nginx Proxy Manager + +[Nginx Proxy Manager](https://nginxproxymanager.com) Expose your services easily and securely + +> Application requires to run as root. This is a limitation of the application. diff --git a/library/ix-dev/community/nginx-proxy-manager/charts/common-1.0.5.tgz b/library/ix-dev/community/nginx-proxy-manager/charts/common-1.0.5.tgz new file mode 100644 index 0000000000000000000000000000000000000000..f817b7c94100a76df335a61186505db5ce331240 GIT binary patch literal 54667 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

YshOouC2O=7fXMe~@BnAM_Ii5sra8C? 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 literal 0 HcmV?d00001 diff --git a/library/ix-dev/community/nginx-proxy-manager/ci/basic-values.yaml b/library/ix-dev/community/nginx-proxy-manager/ci/basic-values.yaml new file mode 100644 index 0000000000..1eb88502e2 --- /dev/null +++ b/library/ix-dev/community/nginx-proxy-manager/ci/basic-values.yaml @@ -0,0 +1,12 @@ +npmNetwork: + webPort: 31000 + httpPort: 31001 + httpsPort: 31002 + +npmStorage: + data: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/data + certs: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/certs diff --git a/library/ix-dev/community/nginx-proxy-manager/item.yaml b/library/ix-dev/community/nginx-proxy-manager/item.yaml new file mode 100644 index 0000000000..e2a8eaa90c --- /dev/null +++ b/library/ix-dev/community/nginx-proxy-manager/item.yaml @@ -0,0 +1,4 @@ +icon_url: https://nginxproxymanager.com/logo.png +categories: + - media + - series diff --git a/library/ix-dev/community/nginx-proxy-manager/questions.yaml b/library/ix-dev/community/nginx-proxy-manager/questions.yaml new file mode 100644 index 0000000000..a32a6b7528 --- /dev/null +++ b/library/ix-dev/community/nginx-proxy-manager/questions.yaml @@ -0,0 +1,204 @@ +groups: + - name: Nginx Proxy Manager Configuration + description: Configure Nginx Proxy Manager + - name: User and Group Configuration + description: Configure User and Group for Nginx Proxy Manager + - name: Network Configuration + description: Configure Network for Nginx Proxy Manager + - name: Storage Configuration + description: Configure Storage for Nginx Proxy Manager + - name: Resources Configuration + description: Configure Resources for Nginx Proxy Manager + +portals: + web_portal: + protocols: + - "$kubernetes-resource_configmap_portal_protocol" + host: + - "$kubernetes-resource_configmap_portal_host" + ports: + - "$kubernetes-resource_configmap_portal_port" + path: "$kubernetes-resource_configmap_portal_path" + +questions: + - variable: TZ + group: Nginx Proxy Manager Configuration + label: Timezone + schema: + type: string + default: Etc/UTC + required: true + $ref: + - definitions/timezone + + - variable: npmConfig + label: "" + group: Nginx Proxy Manager Configuration + schema: + type: dict + attrs: + - variable: additionalEnvs + label: Additional Environment Variables + description: Configure additional environment variables for Nginx Proxy Manager. + schema: + type: list + default: [] + items: + - variable: env + label: Environment Variable + schema: + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + + - variable: npmNetwork + label: "" + group: Network Configuration + schema: + type: dict + attrs: + - variable: webPort + label: Web Port + description: The port for the Nginx Proxy Manager Web UI. + schema: + type: int + default: 30000 + min: 9000 + max: 65535 + required: true + - variable: httpPort + label: HTTP Port + description: The HTTP port for the Nginx Proxy Manager. + schema: + type: int + default: 30001 + min: 9000 + max: 65535 + required: true + - variable: httpsPort + label: HTTPS Port + description: The HTTP port for the Nginx Proxy Manager. + schema: + type: int + default: 30002 + min: 9000 + max: 65535 + required: true + + - variable: npmStorage + label: "" + group: Storage Configuration + schema: + type: dict + attrs: + - variable: data + label: Nginx Proxy Manager Data Storage + description: The path to store Nginx Proxy Manager Data. + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + default: "ixVolume" + enum: + - value: "hostPath" + description: Host Path (Path that already exists on the system) + - value: "ixVolume" + description: ixVolume (Dataset created automatically by the system) + - variable: datasetName + label: Dataset Name + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + hidden: true + immutable: true + default: "data" + $ref: + - "normalize/ixVolume" + - variable: hostPath + label: Host Path + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + immutable: true + required: true + - variable: certs + label: Nginx Proxy Manager Certificate Storage + description: The path to store Nginx Proxy Manager Certificate. + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + default: "ixVolume" + enum: + - value: "hostPath" + description: Host Path (Path that already exists on the system) + - value: "ixVolume" + description: ixVolume (Dataset created automatically by the system) + - variable: datasetName + label: Dataset Name + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + hidden: true + immutable: true + default: "certs" + $ref: + - "normalize/ixVolume" + - variable: hostPath + label: Host Path + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + immutable: true + required: true + + - variable: resources + group: Resources Configuration + label: "" + schema: + type: dict + attrs: + - variable: limits + label: Limits + schema: + type: dict + attrs: + - variable: cpu + label: CPU + description: CPU limit for Nginx Proxy Manager. + schema: + type: string + default: "4000m" + required: true + - variable: memory + label: Memory + description: Memory limit for Nginx Proxy Manager. + schema: + type: string + default: "8Gi" + required: true diff --git a/library/ix-dev/community/nginx-proxy-manager/templates/NOTES.txt b/library/ix-dev/community/nginx-proxy-manager/templates/NOTES.txt new file mode 100644 index 0000000000..ba4e01146c --- /dev/null +++ b/library/ix-dev/community/nginx-proxy-manager/templates/NOTES.txt @@ -0,0 +1 @@ +{{ include "ix.v1.common.lib.chart.notes" $ }} diff --git a/library/ix-dev/community/nginx-proxy-manager/templates/_npm.tpl b/library/ix-dev/community/nginx-proxy-manager/templates/_npm.tpl new file mode 100644 index 0000000000..e9eb76886f --- /dev/null +++ b/library/ix-dev/community/nginx-proxy-manager/templates/_npm.tpl @@ -0,0 +1,105 @@ +{{- define "npm.workload" -}} +workload: + npm: + enabled: true + primary: true + type: Deployment + podSpec: + hostNetwork: false + securityContext: + fsGroup: 1000 + containers: + npm: + enabled: true + primary: true + imageSelector: image + securityContext: + runAsUser: 0 + runAsGroup: 0 + readOnlyRootFilesystem: false + runAsNonRoot: false + capabilities: + add: + # Needed for: s6-applyuidgid: fatal: unable to setuid: Operation not permitted + - SETUID + # Needed for: s6-applyuidgid: fatal: unable to set supplementary group list: Operation not permitted + - SETGID + # Needed for: Used in some s6-overlay startup scripts + - CHOWN + - DAC_OVERRIDE + # Needed for: Nginx Service + - FOWNER + fixedEnv: + # FIXME: Revisit once upstream irons out some issues in regarids with PUID. + # Make sure 568 PUID works before exposing + PUID: 1000 + env: + DISABLE_IPV6: true + DB_SQLITE_FILE: /data/database.sqlite + {{ with .Values.npmConfig.additionalEnvs }} + {{ range $env := . }} + {{ $env.name }}: {{ $env.value }} + {{ end }} + {{ end }} + probes: + liveness: + enabled: true + type: exec + command: /bin/check-health + readiness: + enabled: true + type: exec + command: /bin/check-health + startup: + enabled: true + type: exec + command: /bin/check-health +{{/* Service */}} +service: + npm: + enabled: true + primary: true + type: NodePort + targetSelector: npm + ports: + webui: + enabled: true + primary: true + port: {{ .Values.npmNetwork.webPort }} + nodePort: {{ .Values.npmNetwork.webPort }} + targetPort: 81 + targetSelector: npm + http: + enabled: true + port: {{ .Values.npmNetwork.httpPort }} + nodePort: {{ .Values.npmNetwork.httpPort }} + targetPort: 80 + targetSelector: npm + https: + enabled: true + port: {{ .Values.npmNetwork.httpsPort }} + nodePort: {{ .Values.npmNetwork.httpsPort }} + targetPort: 443 + targetSelector: npm + +{{/* Persistence */}} +persistence: + data: + enabled: true + type: {{ .Values.npmStorage.data.type }} + datasetName: {{ .Values.npmStorage.data.datasetName | default "" }} + hostPath: {{ .Values.npmStorage.data.hostPath | default "" }} + targetSelector: + npm: + npm: + mountPath: /data + certs: + enabled: true + type: {{ .Values.npmStorage.certs.type }} + datasetName: {{ .Values.npmStorage.certs.datasetName | default "" }} + hostPath: {{ .Values.npmStorage.certs.hostPath | default "" }} + targetSelector: + npm: + npm: + mountPath: /etc/letsencrypt +{{- end -}} diff --git a/library/ix-dev/community/nginx-proxy-manager/templates/_portal.tpl b/library/ix-dev/community/nginx-proxy-manager/templates/_portal.tpl new file mode 100644 index 0000000000..4d2ca959b3 --- /dev/null +++ b/library/ix-dev/community/nginx-proxy-manager/templates/_portal.tpl @@ -0,0 +1,12 @@ +{{- define "npm.portal" -}} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: portal +data: + path: "/" + port: {{ .Values.npmNetwork.webPort | quote }} + protocol: http + host: $node_ip +{{- end -}} diff --git a/library/ix-dev/community/nginx-proxy-manager/templates/common.yaml b/library/ix-dev/community/nginx-proxy-manager/templates/common.yaml new file mode 100644 index 0000000000..185c880134 --- /dev/null +++ b/library/ix-dev/community/nginx-proxy-manager/templates/common.yaml @@ -0,0 +1,9 @@ +{{- include "ix.v1.common.loader.init" . -}} + +{{/* Merge the templates with Values */}} +{{- $_ := mustMergeOverwrite .Values (include "npm.workload" $ | fromYaml) -}} + +{{/* Create the configmap for portal manually*/}} +{{- include "npm.portal" $ -}} + +{{- include "ix.v1.common.loader.apply" . -}} diff --git a/library/ix-dev/community/nginx-proxy-manager/upgrade_info.json b/library/ix-dev/community/nginx-proxy-manager/upgrade_info.json new file mode 100644 index 0000000000..767388094a --- /dev/null +++ b/library/ix-dev/community/nginx-proxy-manager/upgrade_info.json @@ -0,0 +1 @@ +{"filename": "values.yaml", "keys": ["image"]} diff --git a/library/ix-dev/community/nginx-proxy-manager/upgrade_strategy b/library/ix-dev/community/nginx-proxy-manager/upgrade_strategy new file mode 100755 index 0000000000..41e9448b21 --- /dev/null +++ b/library/ix-dev/community/nginx-proxy-manager/upgrade_strategy @@ -0,0 +1,31 @@ +#!/usr/bin/python3 +import json +import re +import sys + +from catalog_update.upgrade_strategy import semantic_versioning + + +RE_STABLE_VERSION = re.compile(r'[0-9]+\.[0-9]+\.[0-9]+') + + +def newer_mapping(image_tags): + key = list(image_tags.keys())[0] + tags = {t: t for t in image_tags[key] if RE_STABLE_VERSION.fullmatch(t)} + version = semantic_versioning(list(tags)) + if not version: + return {} + + return { + 'tags': {key: tags[version]}, + 'app_version': version, + } + + +if __name__ == '__main__': + try: + versions_json = json.loads(sys.stdin.read()) + except ValueError: + raise ValueError('Invalid json specified') + + print(json.dumps(newer_mapping(versions_json))) diff --git a/library/ix-dev/community/nginx-proxy-manager/values.yaml b/library/ix-dev/community/nginx-proxy-manager/values.yaml new file mode 100644 index 0000000000..8f3cf5b41e --- /dev/null +++ b/library/ix-dev/community/nginx-proxy-manager/values.yaml @@ -0,0 +1,28 @@ +image: + repository: jc21/nginx-proxy-manager + pullPolicy: IfNotPresent + tag: '2.10.2' +resources: + limits: + cpu: 4000m + memory: 8Gi +npmConfig: + additionalEnvs: [] +npmNetwork: + webPort: 30000 + httpPort: 30001 + httpsPort: 30002 +npmStorage: + data: + type: ixVolume + hostPath: '' + datasetName: data + certs: + type: ixVolume + hostPath: '' + datasetName: certs +notes: + custom: | + Default credentials: + - username: admin@example.com + - password: changeme