From 4f1ed35b78e616eb216d1cbbb8ca0c9793c3c9d0 Mon Sep 17 00:00:00 2001 From: jessebot Date: Sun, 29 Dec 2024 19:27:44 +0100 Subject: [PATCH 01/20] add all initial env vars for configuring pixelfed --- charts/pixelfed/Chart.yaml | 9 ++- charts/pixelfed/README.md | 55 +++++++++++++++- charts/pixelfed/values.yaml | 124 ++++++++++++++++++++++++++++++++++++ 3 files changed, 185 insertions(+), 3 deletions(-) diff --git a/charts/pixelfed/Chart.yaml b/charts/pixelfed/Chart.yaml index 18cba4b..e9c6c6f 100644 --- a/charts/pixelfed/Chart.yaml +++ b/charts/pixelfed/Chart.yaml @@ -15,8 +15,13 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.0 +version: 0.2.0 # This is the version number of the application being deployed. -# image=ghcr.io/mattlqx/docker-pixelfed +# renovate:image=ghcr.io/mattlqx/docker-pixelfed appVersion: "v0.12.3-nginx" + +maintainers: + - name: "jessebot" + email: "jessebot@linux.com" + url: "https://github.com/jessebot" diff --git a/charts/pixelfed/README.md b/charts/pixelfed/README.md index 23aa6f9..3bf3df6 100644 --- a/charts/pixelfed/README.md +++ b/charts/pixelfed/README.md @@ -1,9 +1,15 @@ # pixelfed -![Version: 0.1.0](https://img.shields.io/badge/Version-0.1.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: v0.12.3-nginx](https://img.shields.io/badge/AppVersion-v0.12.3--nginx-informational?style=flat-square) +![Version: 0.2.0](https://img.shields.io/badge/Version-0.2.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: v0.12.3-nginx](https://img.shields.io/badge/AppVersion-v0.12.3--nginx-informational?style=flat-square) A Helm chart for deploying Pixelfed on Kubernetes +## Maintainers + +| Name | Email | Url | +| ---- | ------ | --- | +| jessebot | | | + ## Values | Key | Type | Default | Description | @@ -30,6 +36,53 @@ A Helm chart for deploying Pixelfed on Kubernetes | livenessProbe.httpGet.port | string | `"http"` | | | nameOverride | string | `""` | This is to override the chart name. | | nodeSelector | object | `{}` | | +| pixelfed.account_deletion | bool | `true` | Enable account deletion (may be a requirement in some jurisdictions) | +| pixelfed.app.domain | string | `""` | The domain of your server, without https:// | +| pixelfed.app.env | string | `"production"` | The app environment, keep it set to "production" | +| pixelfed.app.locale | string | `"en"` | change this to the language code of your pixelfed instance | +| pixelfed.app.name | string | `"Pixelfed"` | The name of your server/instance | +| pixelfed.app.url | string | `"https://localhost"` | change this to the domain of your pixelfed instance | +| pixelfed.config_cache | bool | `true` | Enable the config cache to allow you to manage settings via the admin dashboard | +| pixelfed.enforce_email_verification | bool | `true` | Enforce email verification | +| pixelfed.force_https_urls | bool | `true` | Force https url generation | +| pixelfed.image_quality | int | `80` | Set the image optimization quality, between 1-100. Lower uses less space, higher more quality | +| pixelfed.instance.contact_email | string | `""` | The public contact email for your server | +| pixelfed.instance.contact_form | bool | `false` | enable the instance contact form | +| pixelfed.instance.cur_reg | bool | `false` | Enable Curated Registration | +| pixelfed.instance.description | string | `"Pixelfed - Photo sharing for everyone"` | your server description | +| pixelfed.instance.discover_public | bool | `false` | Enable public access to the Discover feature | +| pixelfed.instance.landing.show_directory | bool | `true` | Enable the profile directory on the landing page | +| pixelfed.instance.landing.show_explore | bool | `true` | Enable the popular post explore on the landing page | +| pixelfed.instance.post_embeds | bool | `true` | Enable the post embed feature | +| pixelfed.instance.profile_embeds | bool | `true` | Enable the profile embed feature | +| pixelfed.instance.public_hashtags | bool | `false` | Allow anonymous access to hashtag feeds | +| pixelfed.instance.reports.email_addresses | list | `[]` | A list of email addresses to deliver admin reports to | +| pixelfed.instance.reports.email_autospam | bool | `false` | Enable autospam reports (require INSTANCE_REPORTS_EMAIL_ENABLED) | +| pixelfed.instance.reports.email_enabled | bool | `false` | Send a report email to the admin account for new autospam/reports | +| pixelfed.instance.show_peers | bool | `false` | Enable the api/v1/peers API endpoint | +| pixelfed.max_account_size | int | `1000000` | The max allowed account size in KB | +| pixelfed.max_album_length | int | `6` | The max number of media per post album | +| pixelfed.max_avatar_size | int | `2000` | The max user avatar size in KB | +| pixelfed.max_bio_length | int | `256` | The max user bio length | +| pixelfed.max_caption_length | int | `1000` | The max post caption length | +| pixelfed.max_name_length | int | `32` | The max user display name length | +| pixelfed.max_photo_size | int | `15000` | The max photo/video size in KB | +| pixelfed.min_password_length | int | `16` | The min password length | +| pixelfed.oauth_enabled | bool | `true` | Enable oAuth support, required for mobile/3rd party apps | +| pixelfed.open_registration | bool | `true` | Enable open registration for new accounts | +| pixelfed.pf.admin_invites_enabled | bool | `true` | Enable the Admin Invites feature | +| pixelfed.pf.enable_cloud | bool | `false` | Enable S3/Object Storage | +| pixelfed.pf.enforce_max_users | int | `2000` | in KB | +| pixelfed.pf.hide_nsfw_on_public_feeds | bool | `false` | Hide sensitive posts from public/network feeds | +| pixelfed.pf.local_avatar_to_cloud | bool | `false` | Store local avatars on S3 (Requires S3) | +| pixelfed.pf.max_collection_length | int | `100` | Max collection post limit | +| pixelfed.pf.max_domain_blocks | int | `50` | The max number of domain blocks per account | +| pixelfed.pf.max_user_blocks | int | `50` | The max number of user blocks per account | +| pixelfed.pf.max_user_mutes | int | `50` | The max number of user mutes per account | +| pixelfed.pf.max_users | int | `1000` | Limit max user registrations | +| pixelfed.pf.optimize_images | bool | `true` | Enable image optimization | +| pixelfed.pf.optimize_videos | bool | `true` | Enable video optimization | +| pixelfed.stories_enabled | bool | `false` | Enable the Stories feature | | podAnnotations | object | `{}` | This is for setting Kubernetes Annotations to a Pod. For more information checkout: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ | | podLabels | object | `{}` | This is for setting Kubernetes Labels to a Pod. For more information checkout: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ | | podSecurityContext | object | `{}` | | diff --git a/charts/pixelfed/values.yaml b/charts/pixelfed/values.yaml index 7d33b99..927c6b5 100644 --- a/charts/pixelfed/values.yaml +++ b/charts/pixelfed/values.yaml @@ -123,3 +123,127 @@ nodeSelector: {} tolerations: [] affinity: {} + +pixelfed: + # app specific settings + app: + # -- The name of your server/instance + name: "Pixelfed" + # -- The app environment, keep it set to "production" + env: "production" + # -- change this to the domain of your pixelfed instance + url: "https://localhost" + # -- change this to the language code of your pixelfed instance + locale: "en" + # -- The domain of your server, without https:// + domain: "" + + # -- Enable open registration for new accounts + open_registration: true + + # -- Enforce email verification + enforce_email_verification: true + + # -- The min password length + min_password_length: 16 + + # -- Enable account deletion (may be a requirement in some jurisdictions) + account_deletion: true + + # -- Enable oAuth support, required for mobile/3rd party apps + oauth_enabled: true + + # -- Enable the Stories feature + stories_enabled: false + + # -- Enable the config cache to allow you to manage settings via the admin dashboard + config_cache: true + + # -- Set the image optimization quality, between 1-100. Lower uses less space, higher more quality + image_quality: 80 + + # -- The max allowed account size in KB + max_account_size: 1000000 + + # -- The max photo/video size in KB + max_photo_size: 15000 + + # -- The max user avatar size in KB + max_avatar_size: 2000 + + # -- The max post caption length + max_caption_length: 1000 + + # -- The max user bio length + max_bio_length: 256 + + # -- The max user display name length + max_name_length: 32 + + # -- The max number of media per post album + max_album_length: 6 + + # -- Force https url generation + force_https_urls: true + + # your whole instance, or server, settings + instance: + # -- your server description + description: "Pixelfed - Photo sharing for everyone" + # -- enable the instance contact form + contact_form: false + # -- Enable public access to the Discover feature + discover_public: false + # -- Allow anonymous access to hashtag feeds + public_hashtags: false + # -- The public contact email for your server + contact_email: "" + # -- Enable the profile embed feature + profile_embeds: true + # -- Enable the post embed feature + post_embeds: true + # -- Enable Curated Registration + cur_reg: false + # -- Enable the api/v1/peers API endpoint + show_peers: false + + reports: + # -- Send a report email to the admin account for new autospam/reports + email_enabled: false + # -- A list of email addresses to deliver admin reports to + email_addresses: [] + # -- Enable autospam reports (require INSTANCE_REPORTS_EMAIL_ENABLED) + email_autospam: false + + landing: + # -- Enable the profile directory on the landing page + show_directory: true + # -- Enable the popular post explore on the landing page + show_explore: true + + # public feed settings + pf: + # -- Hide sensitive posts from public/network feeds + hide_nsfw_on_public_feeds: false + # -- Store local avatars on S3 (Requires S3) + local_avatar_to_cloud: false + # -- Enable the Admin Invites feature + admin_invites_enabled: true + # -- The max number of user blocks per account + max_user_blocks: 50 + # -- The max number of user mutes per account + max_user_mutes: 50 + # -- The max number of domain blocks per account + max_domain_blocks: 50 + # -- Enable S3/Object Storage + enable_cloud: false + # -- Limit max user registrations + max_users: 1000 + # -- in KB + enforce_max_users: 2000 + # -- Enable image optimization + optimize_images: true + # -- Enable video optimization + optimize_videos: true + # -- Max collection post limit + max_collection_length: 100 From 4d5a66f31b8a6eb6b631cce6f079adc8ceaffac6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 29 Dec 2024 18:28:20 +0000 Subject: [PATCH 02/20] helm-docs: automated action --- charts/pixelfed/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/pixelfed/README.md b/charts/pixelfed/README.md index 3bf3df6..982f22a 100644 --- a/charts/pixelfed/README.md +++ b/charts/pixelfed/README.md @@ -102,4 +102,4 @@ A Helm chart for deploying Pixelfed on Kubernetes | volumes | list | `[]` | Additional volumes on the output Deployment definition. | ---------------------------------------------- -Autogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2) +Autogenerated from chart metadata using [helm-docs v1.11.0](https://github.com/norwoodj/helm-docs/releases/v1.11.0) From 8961e5c33056441884dc17b146917217f92efbf6 Mon Sep 17 00:00:00 2001 From: jessebot Date: Sun, 29 Dec 2024 20:02:56 +0100 Subject: [PATCH 03/20] template all the env vars out into the deployment --- charts/pixelfed/README.md | 2 +- charts/pixelfed/templates/deployment.yaml | 99 +++++++++++++++++++++++ charts/pixelfed/values.yaml | 2 +- 3 files changed, 101 insertions(+), 2 deletions(-) diff --git a/charts/pixelfed/README.md b/charts/pixelfed/README.md index 982f22a..1d77769 100644 --- a/charts/pixelfed/README.md +++ b/charts/pixelfed/README.md @@ -42,7 +42,7 @@ A Helm chart for deploying Pixelfed on Kubernetes | pixelfed.app.locale | string | `"en"` | change this to the language code of your pixelfed instance | | pixelfed.app.name | string | `"Pixelfed"` | The name of your server/instance | | pixelfed.app.url | string | `"https://localhost"` | change this to the domain of your pixelfed instance | -| pixelfed.config_cache | bool | `true` | Enable the config cache to allow you to manage settings via the admin dashboard | +| pixelfed.enable_config_cache | bool | `true` | Enable the config cache to allow you to manage settings via the admin dashboard | | pixelfed.enforce_email_verification | bool | `true` | Enforce email verification | | pixelfed.force_https_urls | bool | `true` | Force https url generation | | pixelfed.image_quality | int | `80` | Set the image optimization quality, between 1-100. Lower uses less space, higher more quality | diff --git a/charts/pixelfed/templates/deployment.yaml b/charts/pixelfed/templates/deployment.yaml index ab73d9a..e9d6594 100644 --- a/charts/pixelfed/templates/deployment.yaml +++ b/charts/pixelfed/templates/deployment.yaml @@ -40,6 +40,105 @@ spec: - name: http containerPort: {{ .Values.service.port }} protocol: TCP + env: + - name: APP_NAME + value: {{ .Values.pixelfed.app.name }} + - name: APP_ENV + value: {{ .Values.pixelfed.app.env }} + - name: APP_URL + value: {{ .Values.pixelfed.app.url }} + - name: APP_LOCALE + value: {{ .Values.pixelfed.app.locale }} + {{- with .Values.pixelfed.app.domain }} + - name: APP_DOMAIN + value: {{ . }} + {{- end }} + - name: OPEN_REGISTRATION + value: {{ .Values.pixelfed.open_registration }} + - name: ENFORCE_EMAIL_VERIFICATION + value: {{ .Values.pixelfed.enforce_email_verification }} + - name: IMAGE_QUALITY + value: {{ .Values.pixelfed.image_quality }} + - name: ACCOUNT_DELETION + value: {{ .Values.pixelfed.account_deletion }} + - name: OAUTH_ENABLED + value: {{ .Values.pixelfed.oauth_enabled }} + - name: MIN_PASSWORD_LENGTH + value: {{ .Values.pixelfed.min_password_length }} + - name: MAX_ACCOUNT_SIZE + value: {{ .Values.pixelfed.max_account_size }} + - name: MAX_PHOTO_SIZE + value: {{ .Values.pixelfed.max_photo_size }} + - name: MAX_AVATAR_SIZE + value: {{ .Values.pixelfed.max_avatar_size }} + - name: MAX_CAPTION_LENGTH + value: {{ .Values.pixelfed.max_caption_length }} + - name: MAX_BIO_LENGTH + value: {{ .Values.pixelfed.max_bio_length }} + - name: MAX_NAME_LENGTH + value: {{ .Values.pixelfed.max_name_length }} + - name: MAX_ALBUM_LENGTH + value: {{ .Values.pixelfed.max_album_length }} + - name: FORCE_HTTPS_URLS + value: {{ .Values.pixelfed.force_https_urls }} + - name: STORIES_ENABLED + value: {{ .Values.pixelfed.stories_enabled }} + - name: ENABLE_CONFIG_CACHE + value: {{ .Values.pixelfed.enable_config_cache }} + - name: INSTANCE_DESCRIPTION + value: {{ .Values.pixelfed.instance.description }} + - name: INSTANCE_CONTACT_FORM + value: {{ .Values.pixelfed.instance.contact_form | quote }} + - name: INSTANCE_DISCOVER_PUBLIC + value: {{ .Values.pixelfed.instance.discover_public | quote }} + - name: INSTANCE_PUBLIC_HASHTAGS + value: {{ .Values.pixelfed.instance.public_hashtags | quote }} + {{- with .Values.pixelfed.instance.contact_email }} + - name: INSTANCE_CONTACT_EMAIL + value: {{ .Values.pixelfed.instance.contact_email }} + {{- end }} + - name: INSTANCE_PROFILE_EMBEDS + value: {{ .Values.pixelfed.instance.profile_embeds | quote }} + - name: INSTANCE_POST_EMBEDS + value: {{ .Values.pixelfed.instance.post_embeds | quote }} + - name: INSTANCE_REPORTS_EMAIL_ENABLED + value: {{ .Values.pixelfed.instance.reports.email_enabled | quote }} + - name: INSTANCE_REPORTS_EMAIL_ADDRESSES + value: {{ join "," .Values.pixelfed.instance.reports.email_addresses }} + - name: INSTANCE_REPORTS_EMAIL_AUTOSPAM + value: {{ .Values.pixelfed.instance.reports.email_autospam | quote }} + - name: INSTANCE_LANDING_SHOW_DIRECTORY + value: {{ .Values.pixelfed.instance.landing.show_directory | quote }} + - name: INSTANCE_LANDING_SHOW_EXPLORE + value: {{ .Values.pixelfed.instance.landing.show_explore | quote }} + - name: INSTANCE_CUR_REG + value: {{ .Values.pixelfed.instance.cur_reg | quote }} + - name: INSTANCE_SHOW_PEERS + value: {{ .Values.pixelfed.instance.show_peers | quote }} + - name: PF_HIDE_NSFW_ON_PUBLIC_FEEDS + value: {{ .Values.pixelfed.pf.hide_nsfw_on_public_feeds | quote }} + - name: PF_LOCAL_AVATAR_TO_CLOUD + value: {{ .Values.pixelfed.pf.local_avatar_to_cloud | quote }} + - name: PF_ADMIN_INVITES_ENABLED + value: {{ .Values.pixelfed.pf.admin_invites_enabled | quote }} + - name: PF_MAX_USER_BLOCKS + value: {{ .Values.pixelfed.pf.max_user_blocks | quote }} + - name: PF_MAX_USER_MUTES + value: {{ .Values.pixelfed.pf.max_user_mutes | quote }} + - name: PF_MAX_DOMAIN_BLOCKS + value: {{ .Values.pixelfed.pf.max_domain_blocks | quote }} + - name: PF_ENABLE_CLOUD + value: {{ .Values.pixelfed.pf.enable_cloud | quote }} + - name: PF_MAX_USERS + value: {{ .Values.pixelfed.pf.max_users | quote }} + - name: PF_ENFORCE_MAX_USERS + value: {{ .Values.pixelfed.pf.enforce_max_users | quote }} + - name: PF_OPTIMIZE_IMAGES + value: {{ .Values.pixelfed.pf.optimize_images | quote }} + - name: PF_OPTIMIZE_VIDEOS + value: {{ .Values.pixelfed.pf.optimize_videos | quote }} + - name: PF_MAX_COLLECTION_LENGTH + value: {{ .Values.pixelfed.pf.max_collection_length | quote }} livenessProbe: {{- toYaml .Values.livenessProbe | nindent 12 }} readinessProbe: diff --git a/charts/pixelfed/values.yaml b/charts/pixelfed/values.yaml index 927c6b5..32954fc 100644 --- a/charts/pixelfed/values.yaml +++ b/charts/pixelfed/values.yaml @@ -157,7 +157,7 @@ pixelfed: stories_enabled: false # -- Enable the config cache to allow you to manage settings via the admin dashboard - config_cache: true + enable_config_cache: true # -- Set the image optimization quality, between 1-100. Lower uses less space, higher more quality image_quality: 80 From 3d76d3799b4a4e8b4ae2b5162c3fa3075336adfa Mon Sep 17 00:00:00 2001 From: jessebot Date: Sun, 29 Dec 2024 20:03:42 +0100 Subject: [PATCH 04/20] add image registry to deployment --- charts/pixelfed/templates/deployment.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/pixelfed/templates/deployment.yaml b/charts/pixelfed/templates/deployment.yaml index e9d6594..b6363be 100644 --- a/charts/pixelfed/templates/deployment.yaml +++ b/charts/pixelfed/templates/deployment.yaml @@ -34,7 +34,7 @@ spec: - name: {{ .Chart.Name }} securityContext: {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + image: "{{ .Values.image.registry }}/{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" imagePullPolicy: {{ .Values.image.pullPolicy }} ports: - name: http From 97c0db9db7ad4d5f320072b9d0b8b6abcf78aedc Mon Sep 17 00:00:00 2001 From: jessebot Date: Sun, 29 Dec 2024 20:04:58 +0100 Subject: [PATCH 05/20] we don't support user creation yet --- .github/workflows/ci-helm-lint-test.yml | 34 ------------------------- 1 file changed, 34 deletions(-) diff --git a/.github/workflows/ci-helm-lint-test.yml b/.github/workflows/ci-helm-lint-test.yml index 864f25c..f03fa4d 100644 --- a/.github/workflows/ci-helm-lint-test.yml +++ b/.github/workflows/ci-helm-lint-test.yml @@ -70,37 +70,3 @@ jobs: if: steps.list-changed.outputs.changed == 'true' run: | ct install --target-branch ${{ github.event.repository.default_branch }} - - test_user_creation: - name: Test chart with user creation - runs-on: ubuntu-latest - needs: lint - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: "0" - - - name: Install Helm - uses: azure/setup-helm@v4 - - - name: Set up chart-testing - uses: helm/chart-testing-action@v2.6.1 - - - name: Run chart-testing (list-changed) - id: list-changed - run: | - changed=$(ct list-changed --target-branch ${{ github.event.repository.default_branch }}) - if [[ -n "$changed" ]]; then - echo "changed=true" >> "$GITHUB_OUTPUT" - fi - - - name: Create kind cluster - uses: helm/kind-action@v1.10.0 - if: steps.list-changed.outputs.changed == 'true' - - - name: Run chart-testing (install with user creation) - id: install - if: steps.list-changed.outputs.changed == 'true' - run: | - ct install --target-branch ${{ github.event.repository.default_branch }} From f79765cf1a2da196b33c6a4c7d6a86de6652964a Mon Sep 17 00:00:00 2001 From: jessebot Date: Sun, 29 Dec 2024 20:10:15 +0100 Subject: [PATCH 06/20] fix INSTANCE_REPORTS_EMAIL_ADDRESSES env var templating --- charts/pixelfed/templates/deployment.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/charts/pixelfed/templates/deployment.yaml b/charts/pixelfed/templates/deployment.yaml index b6363be..bd289c6 100644 --- a/charts/pixelfed/templates/deployment.yaml +++ b/charts/pixelfed/templates/deployment.yaml @@ -103,8 +103,10 @@ spec: value: {{ .Values.pixelfed.instance.post_embeds | quote }} - name: INSTANCE_REPORTS_EMAIL_ENABLED value: {{ .Values.pixelfed.instance.reports.email_enabled | quote }} + {{- with .Values.pixelfed.instance.reports.email_addresses }} - name: INSTANCE_REPORTS_EMAIL_ADDRESSES - value: {{ join "," .Values.pixelfed.instance.reports.email_addresses }} + value: {{ join "," . }} + {{- end }} - name: INSTANCE_REPORTS_EMAIL_AUTOSPAM value: {{ .Values.pixelfed.instance.reports.email_autospam | quote }} - name: INSTANCE_LANDING_SHOW_DIRECTORY From b323f6383a49523252d5b8546e09675bac07a6f8 Mon Sep 17 00:00:00 2001 From: jessebot Date: Sun, 29 Dec 2024 20:39:08 +0100 Subject: [PATCH 07/20] clean up quotes for deployment template --- charts/pixelfed/README.md | 2 +- charts/pixelfed/templates/deployment.yaml | 28 +++++++++++------------ 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/charts/pixelfed/README.md b/charts/pixelfed/README.md index 1d77769..869a7ac 100644 --- a/charts/pixelfed/README.md +++ b/charts/pixelfed/README.md @@ -102,4 +102,4 @@ A Helm chart for deploying Pixelfed on Kubernetes | volumes | list | `[]` | Additional volumes on the output Deployment definition. | ---------------------------------------------- -Autogenerated from chart metadata using [helm-docs v1.11.0](https://github.com/norwoodj/helm-docs/releases/v1.11.0) +Autogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2) diff --git a/charts/pixelfed/templates/deployment.yaml b/charts/pixelfed/templates/deployment.yaml index bd289c6..850aff2 100644 --- a/charts/pixelfed/templates/deployment.yaml +++ b/charts/pixelfed/templates/deployment.yaml @@ -54,37 +54,37 @@ spec: value: {{ . }} {{- end }} - name: OPEN_REGISTRATION - value: {{ .Values.pixelfed.open_registration }} + value: {{ .Values.pixelfed.open_registration | quote }} - name: ENFORCE_EMAIL_VERIFICATION value: {{ .Values.pixelfed.enforce_email_verification }} - name: IMAGE_QUALITY - value: {{ .Values.pixelfed.image_quality }} + value: {{ .Values.pixelfed.image_quality | quote }} - name: ACCOUNT_DELETION - value: {{ .Values.pixelfed.account_deletion }} + value: {{ .Values.pixelfed.account_deletion | quote }} - name: OAUTH_ENABLED - value: {{ .Values.pixelfed.oauth_enabled }} + value: {{ .Values.pixelfed.oauth_enabled | quote }} - name: MIN_PASSWORD_LENGTH - value: {{ .Values.pixelfed.min_password_length }} + value: {{ .Values.pixelfed.min_password_length | quote }} - name: MAX_ACCOUNT_SIZE - value: {{ .Values.pixelfed.max_account_size }} + value: {{ .Values.pixelfed.max_account_size | quote }} - name: MAX_PHOTO_SIZE - value: {{ .Values.pixelfed.max_photo_size }} + value: {{ .Values.pixelfed.max_photo_size | quote }} - name: MAX_AVATAR_SIZE - value: {{ .Values.pixelfed.max_avatar_size }} + value: {{ .Values.pixelfed.max_avatar_size | quote }} - name: MAX_CAPTION_LENGTH - value: {{ .Values.pixelfed.max_caption_length }} + value: {{ .Values.pixelfed.max_caption_length | quote }} - name: MAX_BIO_LENGTH - value: {{ .Values.pixelfed.max_bio_length }} + value: {{ .Values.pixelfed.max_bio_length | quote }} - name: MAX_NAME_LENGTH - value: {{ .Values.pixelfed.max_name_length }} + value: {{ .Values.pixelfed.max_name_length | quote }} - name: MAX_ALBUM_LENGTH - value: {{ .Values.pixelfed.max_album_length }} + value: {{ .Values.pixelfed.max_album_length | quote }} - name: FORCE_HTTPS_URLS value: {{ .Values.pixelfed.force_https_urls }} - name: STORIES_ENABLED - value: {{ .Values.pixelfed.stories_enabled }} + value: {{ .Values.pixelfed.stories_enabled | quote }} - name: ENABLE_CONFIG_CACHE - value: {{ .Values.pixelfed.enable_config_cache }} + value: {{ .Values.pixelfed.enable_config_cache | quote }} - name: INSTANCE_DESCRIPTION value: {{ .Values.pixelfed.instance.description }} - name: INSTANCE_CONTACT_FORM From 584a283940c8b6f463444a46ba1608c42a65aa02 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 29 Dec 2024 19:39:31 +0000 Subject: [PATCH 08/20] helm-docs: automated action --- charts/pixelfed/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/pixelfed/README.md b/charts/pixelfed/README.md index 869a7ac..1d77769 100644 --- a/charts/pixelfed/README.md +++ b/charts/pixelfed/README.md @@ -102,4 +102,4 @@ A Helm chart for deploying Pixelfed on Kubernetes | volumes | list | `[]` | Additional volumes on the output Deployment definition. | ---------------------------------------------- -Autogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2) +Autogenerated from chart metadata using [helm-docs v1.11.0](https://github.com/norwoodj/helm-docs/releases/v1.11.0) From de1c237f93368205a5129e4a0812b67012d1d9b4 Mon Sep 17 00:00:00 2001 From: jessebot Date: Sun, 29 Dec 2024 20:44:22 +0100 Subject: [PATCH 09/20] quote .Values.pixelfed.enforce_email_verification and .Values.pixelfed.force_https_urls --- charts/pixelfed/templates/deployment.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/charts/pixelfed/templates/deployment.yaml b/charts/pixelfed/templates/deployment.yaml index 850aff2..201ecd6 100644 --- a/charts/pixelfed/templates/deployment.yaml +++ b/charts/pixelfed/templates/deployment.yaml @@ -56,7 +56,7 @@ spec: - name: OPEN_REGISTRATION value: {{ .Values.pixelfed.open_registration | quote }} - name: ENFORCE_EMAIL_VERIFICATION - value: {{ .Values.pixelfed.enforce_email_verification }} + value: {{ .Values.pixelfed.enforce_email_verification | quote }} - name: IMAGE_QUALITY value: {{ .Values.pixelfed.image_quality | quote }} - name: ACCOUNT_DELETION @@ -80,7 +80,7 @@ spec: - name: MAX_ALBUM_LENGTH value: {{ .Values.pixelfed.max_album_length | quote }} - name: FORCE_HTTPS_URLS - value: {{ .Values.pixelfed.force_https_urls }} + value: {{ .Values.pixelfed.force_https_urls | quote }} - name: STORIES_ENABLED value: {{ .Values.pixelfed.stories_enabled | quote }} - name: ENABLE_CONFIG_CACHE From 1587568dd182b71550df903abc14189d44c1f497 Mon Sep 17 00:00:00 2001 From: jessebot Date: Sun, 29 Dec 2024 22:51:29 +0100 Subject: [PATCH 10/20] add everything to a config map and flesh fix default values a bit more for docker --- charts/pixelfed/README.md | 80 ++++++++- charts/pixelfed/templates/configmap.yaml | 115 +++++++++++++ charts/pixelfed/templates/deployment.yaml | 84 ++++++++++ charts/pixelfed/values.yaml | 188 +++++++++++++++++++++- 4 files changed, 464 insertions(+), 3 deletions(-) create mode 100644 charts/pixelfed/templates/configmap.yaml diff --git a/charts/pixelfed/README.md b/charts/pixelfed/README.md index 1d77769..8440beb 100644 --- a/charts/pixelfed/README.md +++ b/charts/pixelfed/README.md @@ -19,6 +19,26 @@ A Helm chart for deploying Pixelfed on Kubernetes | autoscaling.maxReplicas | int | `100` | | | autoscaling.minReplicas | int | `1` | | | autoscaling.targetCPUUtilizationPercentage | int | `80` | | +| externalDatabase.connection | string | `"psql"` | options: sqlite mysql pgsql sqlsrv | +| externalDatabase.database | string | `"pixelfed"` | | +| externalDatabase.existingSecret | string | `""` | get database credentials from an existing Kubernetes Secret | +| externalDatabase.existingSecretKeys.database | string | `"pixelfed"` | key in existing Kubernetes Secret for database. If set, ignores externalDatabase.database | +| externalDatabase.existingSecretKeys.host | string | `""` | key in existing Kubernetes Secret for host. If set, ignores externalDatabase.host | +| externalDatabase.existingSecretKeys.password | string | `""` | key in existing Kubernetes Secret for password. If set, ignores externalDatabase.password | +| externalDatabase.existingSecretKeys.port | string | `""` | key in existing Kubernetes Secret for port. If set, ignores externalDatabase.port | +| externalDatabase.existingSecretKeys.username | string | `""` | key in existing Kubernetes Secret for username. If set, ignores externalDatabase.username | +| externalDatabase.host | string | `""` | | +| externalDatabase.password | string | `""` | | +| externalDatabase.port | int | `3306` | | +| externalDatabase.username | string | `""` | | +| externalValkey.client | string | `"phpredis"` | | +| externalValkey.existingSecret | string | `""` | get valkey credentials from an existing Kubernetes Secret | +| externalValkey.existingSecretKeys.host | string | `""` | key in existing Kubernetes Secret for host. If set, ignores externalValkey.host | +| externalValkey.existingSecretKeys.password | string | `""` | key in existing Kubernetes Secret for password. If set, ignores externalValkey.password | +| externalValkey.host | string | `"valkey"` | | +| externalValkey.password | string | `"null"` | | +| externalValkey.port | string | `"6379"` | | +| externalValkey.scheme | string | `"tcp"` | | | fullnameOverride | string | `""` | | | image.pullPolicy | string | `"IfNotPresent"` | This sets the pull policy for images. | | image.registry | string | `"ghcr.io"` | | @@ -37,13 +57,21 @@ A Helm chart for deploying Pixelfed on Kubernetes | nameOverride | string | `""` | This is to override the chart name. | | nodeSelector | object | `{}` | | | pixelfed.account_deletion | bool | `true` | Enable account deletion (may be a requirement in some jurisdictions) | +| pixelfed.activity_pub.enabled | bool | `false` | | +| pixelfed.activity_pub.inbox | bool | `false` | | +| pixelfed.activity_pub.outbox | bool | `false` | | +| pixelfed.activity_pub.remote_follow | bool | `false` | | +| pixelfed.activity_pub.sharedinbox | bool | `false` | | +| pixelfed.admin_domain | string | `""` | domain of admin interface | | pixelfed.app.domain | string | `""` | The domain of your server, without https:// | | pixelfed.app.env | string | `"production"` | The app environment, keep it set to "production" | | pixelfed.app.locale | string | `"en"` | change this to the language code of your pixelfed instance | | pixelfed.app.name | string | `"Pixelfed"` | The name of your server/instance | | pixelfed.app.url | string | `"https://localhost"` | change this to the domain of your pixelfed instance | +| pixelfed.atom_feeds | string | `"true"` | https://docs.pixelfed.org/technical-documentation/config/#atom_feeds | | pixelfed.enable_config_cache | bool | `true` | Enable the config cache to allow you to manage settings via the admin dashboard | | pixelfed.enforce_email_verification | bool | `true` | Enforce email verification | +| pixelfed.exp_emc | bool | `true` | Experimental Configuration | | pixelfed.force_https_urls | bool | `true` | Force https url generation | | pixelfed.image_quality | int | `80` | Set the image optimization quality, between 1-100. Lower uses less space, higher more quality | | pixelfed.instance.contact_email | string | `""` | The public contact email for your server | @@ -60,6 +88,19 @@ A Helm chart for deploying Pixelfed on Kubernetes | pixelfed.instance.reports.email_autospam | bool | `false` | Enable autospam reports (require INSTANCE_REPORTS_EMAIL_ENABLED) | | pixelfed.instance.reports.email_enabled | bool | `false` | Send a report email to the admin account for new autospam/reports | | pixelfed.instance.show_peers | bool | `false` | Enable the api/v1/peers API endpoint | +| pixelfed.mail.driver | string | `"smtp"` | options: "smtp" (default), "sendmail", "mailgun", "mandrill", "ses" "sparkpost", "log", "array" | +| pixelfed.mail.encryption | string | `"tls"` | | +| pixelfed.mail.existingSecret | string | `""` | name of an existing Kubernetes Secret for mail credentials | +| pixelfed.mail.existingSecretKeys.host | string | `""` | key in existing Kubernetes Secret for host. If set, ignores mail.host | +| pixelfed.mail.existingSecretKeys.password | string | `""` | key in existing Kubernetes Secret for password. If set, ignores mail.password | +| pixelfed.mail.existingSecretKeys.port | string | `""` | key in existing Kubernetes Secret for port. If set, ignores mail.port | +| pixelfed.mail.existingSecretKeys.username | string | `""` | key in existing Kubernetes Secret for username. If set, ignores mail.username | +| pixelfed.mail.from_address | string | `"pixelfed@example.com"` | | +| pixelfed.mail.from_name | string | `"Pixelfed"` | | +| pixelfed.mail.host | string | `"smtp.mailtrap.io"` | | +| pixelfed.mail.password | string | `""` | | +| pixelfed.mail.port | int | `2525` | | +| pixelfed.mail.username | string | `""` | | | pixelfed.max_account_size | int | `1000000` | The max allowed account size in KB | | pixelfed.max_album_length | int | `6` | The max number of media per post album | | pixelfed.max_avatar_size | int | `2000` | The max user avatar size in KB | @@ -68,6 +109,7 @@ A Helm chart for deploying Pixelfed on Kubernetes | pixelfed.max_name_length | int | `32` | The max user display name length | | pixelfed.max_photo_size | int | `15000` | The max photo/video size in KB | | pixelfed.min_password_length | int | `16` | The min password length | +| pixelfed.nodeinfo | string | `"true"` | https://docs.pixelfed.org/technical-documentation/config/#nodeinfo | | pixelfed.oauth_enabled | bool | `true` | Enable oAuth support, required for mobile/3rd party apps | | pixelfed.open_registration | bool | `true` | Enable open registration for new accounts | | pixelfed.pf.admin_invites_enabled | bool | `true` | Enable the Admin Invites feature | @@ -82,10 +124,28 @@ A Helm chart for deploying Pixelfed on Kubernetes | pixelfed.pf.max_users | int | `1000` | Limit max user registrations | | pixelfed.pf.optimize_images | bool | `true` | Enable image optimization | | pixelfed.pf.optimize_videos | bool | `true` | Enable video optimization | +| pixelfed.s3.access_key_id | string | `""` | s3 access_key_id. ignored if s3.existingSecretKeys.access_key_id is set | +| pixelfed.s3.bucket | string | `""` | s3 bucket | +| pixelfed.s3.endpoint | string | `""` | s3 endpoint excluding protocol such as s3.domain.com | +| pixelfed.s3.existingSecret | string | `""` | name of an existing Kubernetes Secret for s3 credentials | +| pixelfed.s3.existingSecretKeys.access_key_id | string | `""` | key in existing Kubernetes Secret for access_key_id. If set, ignores s3.access_key_id | +| pixelfed.s3.existingSecretKeys.endpoint | string | `""` | key in existing Kubernetes Secret for endpoint. If set, ignores s3.endpoint | +| pixelfed.s3.existingSecretKeys.secret_access_key | string | `""` | key in existing Kubernetes Secret for secret_access_key. If set, ignores s3.secret_access_key | +| pixelfed.s3.existingSecretKeys.url | string | `""` | key in existing Kubernetes Secret for url. If set, ignores s3.url | +| pixelfed.s3.region | string | `""` | s3 region | +| pixelfed.s3.secret_access_key | string | `""` | s3 secret_access_key. ignored if s3.existingSecretKeys.secret_access_key is set | +| pixelfed.s3.url | string | `""` | s3 url including protocol such as https://s3.domain.com | +| pixelfed.s3.use_path_style_endpoint | bool | `false` | use S3 path type instead of using a DNS subdomain | +| pixelfed.session_domain | string | `""` | domain of session? | | pixelfed.stories_enabled | bool | `false` | Enable the Stories feature | +| pixelfed.timezone | string | `"europe/amsterdam"` | timezone for docker container | +| pixelfed.trusted_proxies | string | `"*"` | trusted proxies | +| pixelfed.webfinger | string | `"true"` | https://docs.pixelfed.org/technical-documentation/config/#webfinger | | podAnnotations | object | `{}` | This is for setting Kubernetes Annotations to a Pod. For more information checkout: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ | | podLabels | object | `{}` | This is for setting Kubernetes Labels to a Pod. For more information checkout: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ | | podSecurityContext | object | `{}` | | +| postgresql.enabled | bool | `false` | enable the bundled postgresql sub chart from Bitnami. Must set to true if externalDatabase.enabled=false | +| postgresql.fullnameOverride | string | `""` | | | readinessProbe.httpGet.path | string | `"/"` | | | readinessProbe.httpGet.port | string | `"http"` | | | replicaCount | int | `1` | This will set the replicaset count more information can be found here: https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/ | @@ -98,8 +158,26 @@ A Helm chart for deploying Pixelfed on Kubernetes | serviceAccount.create | bool | `true` | Specifies whether a service account should be created | | serviceAccount.name | string | `""` | The name of the service account to use. If not set and create is true, a name is generated using the fullname template | | tolerations | list | `[]` | | +| valkey.auth.enabled | bool | `true` | | +| valkey.auth.existingSecret | string | `""` | | +| valkey.auth.existingSecretPasswordKey | string | `"password"` | | +| valkey.auth.metrics.enabled | bool | `false` | | +| valkey.auth.persistentVolumeClaimRetentionPolicy.enabled | bool | `true` | | +| valkey.auth.persistentVolumeClaimRetentionPolicy.whenDeleted | string | `"Retain"` | | +| valkey.auth.persistentVolumeClaimRetentionPolicy.whenScaled | string | `"Retain"` | | +| valkey.auth.primary.persistence.enabled | bool | `true` | | +| valkey.auth.primary.persistence.existingClaim | string | `""` | | +| valkey.auth.replica.persistence.enabled | bool | `true` | | +| valkey.auth.replica.persistence.existingClaim | string | `""` | | +| valkey.auth.resourcesPreset | string | `"small"` | | +| valkey.auth.tls.authClients | bool | `true` | | +| valkey.auth.tls.autoGenerated | bool | `false` | | +| valkey.auth.tls.enabled | bool | `false` | | +| valkey.enabled | bool | `false` | enable the bundled valkey sub chart from Bitnami. Must set to true if externalValkey.enabled=false | +| valkey.fullnameOverride | string | `""` | | +| valkey.global.storageClass | string | `""` | | | volumeMounts | list | `[]` | Additional volumeMounts on the output Deployment definition. | | volumes | list | `[]` | Additional volumes on the output Deployment definition. | ---------------------------------------------- -Autogenerated from chart metadata using [helm-docs v1.11.0](https://github.com/norwoodj/helm-docs/releases/v1.11.0) +Autogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2) diff --git a/charts/pixelfed/templates/configmap.yaml b/charts/pixelfed/templates/configmap.yaml new file mode 100644 index 0000000..ef70150 --- /dev/null +++ b/charts/pixelfed/templates/configmap.yaml @@ -0,0 +1,115 @@ +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: pixelfed-env +data: + env: |- + # app config vars + APP_NAME={{ .Values.pixelfed.app.name }} + APP_ENV={{ .Values.pixelfed.app.env }} + APP_URL={{ .Values.pixelfed.app.url }} + APP_LOCALE={{ .Values.pixelfed.app.locale }} + {{- with .Values.pixelfed.app.domain }} + APP_DOMAIN={{ . }} + {{- end }} + + # registration related env vars + OPEN_REGISTRATION={{ .Values.pixelfed.open_registration | quote }} + ENFORCE_EMAIL_VERIFICATION={{ .Values.pixelfed.enforce_email_verification | quote }} + ACCOUNT_DELETION={{ .Values.pixelfed.account_deletion | quote }} + OAUTH_ENABLED={{ .Values.pixelfed.oauth_enabled | quote }} + + MIN_PASSWORD_LENGTH={{ .Values.pixelfed.min_password_length | quote }} + MAX_ACCOUNT_SIZE={{ .Values.pixelfed.max_account_size | quote }} + MAX_PHOTO_SIZE={{ .Values.pixelfed.max_photo_size | quote }} + MAX_AVATAR_SIZE={{ .Values.pixelfed.max_avatar_size | quote }} + MAX_CAPTION_LENGTH={{ .Values.pixelfed.max_caption_length | quote }} + MAX_BIO_LENGTH={{ .Values.pixelfed.max_bio_length | quote }} + MAX_NAME_LENGTH={{ .Values.pixelfed.max_name_length | quote }} + MAX_ALBUM_LENGTH={{ .Values.pixelfed.max_album_length | quote }} + FORCE_HTTPS_URLS={{ .Values.pixelfed.force_https_urls | quote }} + + # misc + STORIES_ENABLED={{ .Values.pixelfed.stories_enabled | quote }} + ENABLE_CONFIG_CACHE={{ .Values.pixelfed.enable_config_cache | quote }} + IMAGE_QUALITY={{ .Values.pixelfed.image_quality | quote }} + + # instance wide configuration + INSTANCE_DESCRIPTION={{ .Values.pixelfed.instance.description }} + INSTANCE_CONTACT_FORM={{ .Values.pixelfed.instance.contact_form | quote }} + INSTANCE_DISCOVER_PUBLIC={{ .Values.pixelfed.instance.discover_public | quote }} + INSTANCE_PUBLIC_HASHTAGS={{ .Values.pixelfed.instance.public_hashtags | quote }} + {{- with .Values.pixelfed.instance.contact_email }} + INSTANCE_CONTACT_EMAIL={{ .Values.pixelfed.instance.contact_email }} + {{- end }} + INSTANCE_PROFILE_EMBEDS={{ .Values.pixelfed.instance.profile_embeds | quote }} + INSTANCE_POST_EMBEDS={{ .Values.pixelfed.instance.post_embeds | quote }} + INSTANCE_REPORTS_EMAIL_ENABLED={{ .Values.pixelfed.instance.reports.email_enabled | quote }} + {{- with .Values.pixelfed.instance.reports.email_addresses }} + INSTANCE_REPORTS_EMAIL_ADDRESSES={{ join "," . }} + {{- end }} + INSTANCE_REPORTS_EMAIL_AUTOSPAM={{ .Values.pixelfed.instance.reports.email_autospam | quote }} + INSTANCE_LANDING_SHOW_DIRECTORY={{ .Values.pixelfed.instance.landing.show_directory | quote }} + INSTANCE_LANDING_SHOW_EXPLORE={{ .Values.pixelfed.instance.landing.show_explore | quote }} + INSTANCE_CUR_REG={{ .Values.pixelfed.instance.cur_reg | quote }} + INSTANCE_SHOW_PEERS={{ .Values.pixelfed.instance.show_peers | quote }} + + # pixelfed config + PF_HIDE_NSFW_ON_PUBLIC_FEEDS={{ .Values.pixelfed.pf.hide_nsfw_on_public_feeds | quote }} + PF_LOCAL_AVATAR_TO_CLOUD={{ .Values.pixelfed.pf.local_avatar_to_cloud | quote }} + PF_ADMIN_INVITES_ENABLED={{ .Values.pixelfed.pf.admin_invites_enabled | quote }} + PF_MAX_USER_BLOCKS={{ .Values.pixelfed.pf.max_user_blocks | quote }} + PF_MAX_USER_MUTES={{ .Values.pixelfed.pf.max_user_mutes | quote }} + PF_MAX_DOMAIN_BLOCKS={{ .Values.pixelfed.pf.max_domain_blocks | quote }} + PF_ENABLE_CLOUD={{ .Values.pixelfed.pf.enable_cloud | quote }} + PF_MAX_USERS={{ .Values.pixelfed.pf.max_users | quote }} + PF_ENFORCE_MAX_USERS={{ .Values.pixelfed.pf.enforce_max_users | quote }} + PF_OPTIMIZE_IMAGES={{ .Values.pixelfed.pf.optimize_images | quote }} + PF_OPTIMIZE_VIDEOS={{ .Values.pixelfed.pf.optimize_videos | quote }} + PF_MAX_COLLECTION_LENGTH={{ .Values.pixelfed.pf.max_collection_length | quote }} + + # Laravel Configuration + SESSION_DRIVER="redis" + CACHE_DRIVER="redis" + QUEUE_DRIVER="redis" + BROADCAST_DRIVER="log" + LOG_CHANNEL="stack" + HORIZON_PREFIX="horizon-" + + # activity pub + ACTIVITY_PUB="true" + AP_REMOTE_FOLLOW="true" + AP_SHAREDINBOX="true" + AP_INBOX="true" + AP_OUTBOX="true" + + # redis + {{- with .Values.externalValkey.host }} + REDIS_HOST={{ . }} + {{- end }} + {{- with .Values.externalValkey.port }} + REDIS_PORT={{ . }} + {{- end }} + {{- with .Values.externalValkey.password }} + REDIS_PASSWORD={{ . }} + {{- end }} + + # mail + MAIL_DRIVER="smtp" + MAIL_HOST="smtp.mailgun.org" + MAIL_PORT="587" + MAIL_FROM_ADDRESS="__CHANGE_ME__" + MAIL_FROM_NAME="${APP_NAME}" + MAIL_USERNAME="" + MAIL_PASSWORD="" + MAIL_ENCRYPTION="tls" + + # db + DB_CONNECTION="pgsql" + DB_HOST="db" + DB_USERNAME="pixelfed" + DB_PASSWORD= + DB_DATABASE="pixelfed_prod" + DB_PORT="3306" + DB_APPLY_NEW_MIGRATIONS_AUTOMATICALLY="false" diff --git a/charts/pixelfed/templates/deployment.yaml b/charts/pixelfed/templates/deployment.yaml index 201ecd6..2105b9f 100644 --- a/charts/pixelfed/templates/deployment.yaml +++ b/charts/pixelfed/templates/deployment.yaml @@ -41,6 +41,7 @@ spec: containerPort: {{ .Values.service.port }} protocol: TCP env: + # app data - name: APP_NAME value: {{ .Values.pixelfed.app.name }} - name: APP_ENV @@ -53,6 +54,8 @@ spec: - name: APP_DOMAIN value: {{ . }} {{- end }} + + # registration related - name: OPEN_REGISTRATION value: {{ .Values.pixelfed.open_registration | quote }} - name: ENFORCE_EMAIL_VERIFICATION @@ -63,6 +66,8 @@ spec: value: {{ .Values.pixelfed.account_deletion | quote }} - name: OAUTH_ENABLED value: {{ .Values.pixelfed.oauth_enabled | quote }} + + # limits - name: MIN_PASSWORD_LENGTH value: {{ .Values.pixelfed.min_password_length | quote }} - name: MAX_ACCOUNT_SIZE @@ -85,6 +90,8 @@ spec: value: {{ .Values.pixelfed.stories_enabled | quote }} - name: ENABLE_CONFIG_CACHE value: {{ .Values.pixelfed.enable_config_cache | quote }} + + # instance config - name: INSTANCE_DESCRIPTION value: {{ .Values.pixelfed.instance.description }} - name: INSTANCE_CONTACT_FORM @@ -117,6 +124,8 @@ spec: value: {{ .Values.pixelfed.instance.cur_reg | quote }} - name: INSTANCE_SHOW_PEERS value: {{ .Values.pixelfed.instance.show_peers | quote }} + + # public feed - name: PF_HIDE_NSFW_ON_PUBLIC_FEEDS value: {{ .Values.pixelfed.pf.hide_nsfw_on_public_feeds | quote }} - name: PF_LOCAL_AVATAR_TO_CLOUD @@ -141,6 +150,81 @@ spec: value: {{ .Values.pixelfed.pf.optimize_videos | quote }} - name: PF_MAX_COLLECTION_LENGTH value: {{ .Values.pixelfed.pf.max_collection_length | quote }} + + # Laravel Configuration + - name: SESSION_DRIVER + value: "database" + - name: CACHE_DRIVER + value: "redis" + - name: QUEUE_DRIVER + value: "redis" + - name: BROADCAST_DRIVER + value: "log" + - name: LOG_CHANNEL + value: "stack" + - name: HORIZON_PREFIX + value: "horizon-" + + # activity pub + - name: ACTIVITY_PUB + value: "true" + - name: AP_REMOTE_FOLLOW + value: "true" + - name: AP_SHAREDINBOX + value: "true" + - name: AP_INBOX + value: "true" + - name: AP_OUTBOX + value: "true" + + # redis + {{- with .Values.externalValkey.host }} + - name: REDIS_HOST + value: {{ . }} + {{- end }} + {{- with .Values.externalValkey.port }} + - name: REDIS_PORT + value: {{ . }} + {{- end }} + {{- with .Values.externalValkey.password }} + - name: REDIS_PASSWORD + value: {{ . }} + {{- end }} + + # mail + - name: MAIL_DRIVER + value: "smtp" + - name: MAIL_HOST + value: "smtp.mailgun.org" + - name: MAIL_PORT + value: "587" + - name: MAIL_FROM_ADDRESS + value: "__CHANGE_ME__" + - name: MAIL_FROM_NAME + value: "${APP_NAME}" + - name: MAIL_USERNAME + value: "" + - name: MAIL_PASSWORD + value: "" + - name: MAIL_ENCRYPTION + value: "tls" + + # db + - name: DB_CONNECTION + value: "pgsql" + - name: DB_HOST + value: "db" + - name: DB_USERNAME + value: "pixelfed" + - name: DB_PASSWORD + value: "" + - name: DB_DATABASE + value: "pixelfed_prod" + - name: DB_PORT + value: "3306" + - name: DB_APPLY_NEW_MIGRATIONS_AUTOMATICALLY + value: "false" + livenessProbe: {{- toYaml .Values.livenessProbe | nindent 12 }} readinessProbe: diff --git a/charts/pixelfed/values.yaml b/charts/pixelfed/values.yaml index 32954fc..cf47de8 100644 --- a/charts/pixelfed/values.yaml +++ b/charts/pixelfed/values.yaml @@ -62,8 +62,6 @@ ingress: enabled: false className: "" annotations: {} - # kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" hosts: - host: chart-example.local paths: @@ -124,7 +122,121 @@ tolerations: [] affinity: {} +externalDatabase: + # -- options: sqlite mysql pgsql sqlsrv + connection: psql + host: "" + port: 3306 + database: pixelfed + username: "" + password: "" + # options: disable, require, allow, prefer, verify-full + # ssl_mode: "" + # path to ssl root cert + # ssl_root_cert: + # path to ssl cert + # ssl_cert: "" + # path to ssl key + # ssl_key: "" + # -- get database credentials from an existing Kubernetes Secret + existingSecret: "" + existingSecretKeys: + # -- key in existing Kubernetes Secret for host. If set, ignores externalDatabase.host + host: "" + # -- key in existing Kubernetes Secret for port. If set, ignores externalDatabase.port + port: "" + # -- key in existing Kubernetes Secret for database. If set, ignores externalDatabase.database + database: pixelfed + # -- key in existing Kubernetes Secret for username. If set, ignores externalDatabase.username + username: "" + # -- key in existing Kubernetes Secret for password. If set, ignores externalDatabase.password + password: "" + +# External Redis Configuration. Use this if you set valkey.enabled: false +externalValkey: + client: "phpredis" + scheme: "tcp" + host: "valkey" + password: "null" + port: "6379" + # -- get valkey credentials from an existing Kubernetes Secret + existingSecret: "" + existingSecretKeys: + # -- key in existing Kubernetes Secret for host. If set, ignores externalValkey.host + host: "" + # -- key in existing Kubernetes Secret for password. If set, ignores externalValkey.password + password: "" + +# valkey is a fork of redis with a better license +valkey: + # -- enable the bundled valkey sub chart from Bitnami. + # Must set to true if externalValkey.enabled=false + enabled: false + fullnameOverride: "" + global: + storageClass: "" + + # for auth, we get the valkey credentials from an ExternalSecret + auth: + enabled: true + existingSecret: "" + existingSecretPasswordKey: "password" + # TLS settings + tls: + enabled: false + authClients: true + autoGenerated: false + + # primary (control plane) configuration + primary: + persistence: + enabled: true + existingClaim: "" + + # valkey replica configuration + replica: + persistence: + enabled: true + existingClaim: "" + + # persistnent volume retention policy for the StatefulSet + persistentVolumeClaimRetentionPolicy: + enabled: true + whenScaled: Retain + whenDeleted: Retain + + metrics: + # we use a grafana exporter that logs into valkey directly + enabled: false + + # definitions: https://github.com/bitnami/charts/blob/main/bitnami/common/templates/_resources.tpl#L15 + # Options: nano, micro, small, medium, large, xlarge, 2xlarge + # default: nano + resourcesPreset: "small" + + +postgresql: + # -- enable the bundled postgresql sub chart from Bitnami. + # Must set to true if externalDatabase.enabled=false + enabled: false + fullnameOverride: "" + pixelfed: + # -- timezone for docker container + timezone: "europe/amsterdam" + + # -- Experimental Configuration + exp_emc: true + + # -- domain of admin interface + admin_domain: "" + + # -- domain of session? + session_domain: "" + + # -- trusted proxies + trusted_proxies: "*" + # app specific settings app: # -- The name of your server/instance @@ -247,3 +359,75 @@ pixelfed: optimize_videos: true # -- Max collection post limit max_collection_length: 100 + + # ActivityPub Configuration + activity_pub: + enabled: false + remote_follow: false + inbox: false + outbox: false + sharedinbox: false + + ########################################################### + # Federation + ########################################################### + # -- https://docs.pixelfed.org/technical-documentation/config/#atom_feeds + atom_feeds: "true" + + # -- https://docs.pixelfed.org/technical-documentation/config/#nodeinfo + nodeinfo: "true" + + # -- https://docs.pixelfed.org/technical-documentation/config/#webfinger + webfinger: "true" + + # Mail Configuration (Post-Installer) + mail: + # -- options: "smtp" (default), "sendmail", "mailgun", "mandrill", "ses" + # "sparkpost", "log", "array" + driver: smtp + host: smtp.mailtrap.io + port: 2525 + username: "" + password: "" + encryption: "tls" + from_address: "pixelfed@example.com" + from_name: "Pixelfed" + # -- name of an existing Kubernetes Secret for mail credentials + existingSecret: "" + existingSecretKeys: + # -- key in existing Kubernetes Secret for host. If set, ignores mail.host + host: "" + # -- key in existing Kubernetes Secret for port. If set, ignores mail.port + port: "" + # -- key in existing Kubernetes Secret for username. If set, ignores mail.username + username: "" + # -- key in existing Kubernetes Secret for password. If set, ignores mail.password + password: "" + + # Mail Configuration (Post-Installer) + s3: + # -- s3 url including protocol such as https://s3.domain.com + url: "" + # -- s3 endpoint excluding protocol such as s3.domain.com + endpoint: "" + # -- s3 bucket + bucket: "" + # -- s3 region + region: "" + # -- s3 access_key_id. ignored if s3.existingSecretKeys.access_key_id is set + access_key_id: "" + # -- s3 secret_access_key. ignored if s3.existingSecretKeys.secret_access_key is set + secret_access_key: "" + # -- use S3 path type instead of using a DNS subdomain + use_path_style_endpoint: false + # -- name of an existing Kubernetes Secret for s3 credentials + existingSecret: "" + existingSecretKeys: + # -- key in existing Kubernetes Secret for url. If set, ignores s3.url + url: "" + # -- key in existing Kubernetes Secret for endpoint. If set, ignores s3.endpoint + endpoint: "" + # -- key in existing Kubernetes Secret for access_key_id. If set, ignores s3.access_key_id + access_key_id: "" + # -- key in existing Kubernetes Secret for secret_access_key. If set, ignores s3.secret_access_key + secret_access_key: "" From 5b579523037ac2a306b15d3ea35e21c8e74635aa Mon Sep 17 00:00:00 2001 From: jessebot Date: Sun, 29 Dec 2024 22:54:15 +0100 Subject: [PATCH 11/20] add postgresql and valkey officially and run helm dep update --- charts/pixelfed/Chart.lock | 9 +++++++++ charts/pixelfed/Chart.yaml | 11 +++++++++++ charts/pixelfed/README.md | 7 +++++++ charts/pixelfed/charts/postgresql-16.3.4.tgz | Bin 0 -> 81434 bytes charts/pixelfed/charts/valkey-2.2.1.tgz | Bin 0 -> 86025 bytes 5 files changed, 27 insertions(+) create mode 100644 charts/pixelfed/Chart.lock create mode 100644 charts/pixelfed/charts/postgresql-16.3.4.tgz create mode 100644 charts/pixelfed/charts/valkey-2.2.1.tgz diff --git a/charts/pixelfed/Chart.lock b/charts/pixelfed/Chart.lock new file mode 100644 index 0000000..0c37fbe --- /dev/null +++ b/charts/pixelfed/Chart.lock @@ -0,0 +1,9 @@ +dependencies: +- name: postgresql + repository: oci://registry-1.docker.io/bitnamicharts + version: 16.3.4 +- name: valkey + repository: oci://registry-1.docker.io/bitnamicharts + version: 2.2.1 +digest: sha256:6ddd2457b1d98b322978cb171e46195627cd3c46fb141e9f0a21b97ad54c4148 +generated: "2024-12-29T22:53:47.065327+01:00" diff --git a/charts/pixelfed/Chart.yaml b/charts/pixelfed/Chart.yaml index e9c6c6f..44daec9 100644 --- a/charts/pixelfed/Chart.yaml +++ b/charts/pixelfed/Chart.yaml @@ -25,3 +25,14 @@ maintainers: - name: "jessebot" email: "jessebot@linux.com" url: "https://github.com/jessebot" + +dependencies: + - name: postgresql + version: 16.3.4 + repository: oci://registry-1.docker.io/bitnamicharts + condition: postgresql.enabled + + - name: valkey + version: 2.2.1 + repository: oci://registry-1.docker.io/bitnamicharts + condition: valkey.enabled diff --git a/charts/pixelfed/README.md b/charts/pixelfed/README.md index 8440beb..4d5bc4d 100644 --- a/charts/pixelfed/README.md +++ b/charts/pixelfed/README.md @@ -10,6 +10,13 @@ A Helm chart for deploying Pixelfed on Kubernetes | ---- | ------ | --- | | jessebot | | | +## Requirements + +| Repository | Name | Version | +|------------|------|---------| +| oci://registry-1.docker.io/bitnamicharts | postgresql | 16.3.4 | +| oci://registry-1.docker.io/bitnamicharts | valkey | 2.2.1 | + ## Values | Key | Type | Default | Description | diff --git a/charts/pixelfed/charts/postgresql-16.3.4.tgz b/charts/pixelfed/charts/postgresql-16.3.4.tgz new file mode 100644 index 0000000000000000000000000000000000000000..66db70566af3bfd481f39e80e83ff61e22b9d493 GIT binary patch literal 81434 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

Lqmmp3a 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 literal 0 HcmV?d00001 diff --git a/charts/pixelfed/charts/valkey-2.2.1.tgz b/charts/pixelfed/charts/valkey-2.2.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..12cc106e5ae047c08ffabf0e9ae7ef73664e689e GIT binary patch literal 86025 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

e!-JtN!toPZ_abVZZa(8 zzlkc`x59gk>%UK`h#yuzEz)%41}Y?SZr}yP_xRvaZ~jKDm>03sL|fk4Qyl9zfDLDm zlT=G;^-l9(4jRt}3m-Vcy$wF6Y_%svbk zR>)NQ{DaK6hP?m+Eta3-ZK~;hk#M;(pe&#*6KcsSmsar9e*#O0xhaLw-0o-Te*)1k zK^1*tNn4^X`tHD5o;H7Apk_qP!;iyNPcaBwYSNh!Agh4))G&o(8!Yz_Zd)nZR0?|p zHB2njt-L_Y6y9DlmyF({e-psw0cFALr}l{#hevcjyJFk$)TQTsSI+avv6ReMyvBqZ zeX|i1-G0>JHERSvuY0$TmoEje<|&^$i4Qw72m+a(cd;|h?oOsTu)Id$kC1~mDEhS` zpjb>{cEmMq4rm#DmN$%Wor_=fqx|k;Uo#}iu-2msh3Mz=FMskd+2&EVMIr}U`2mrV zbbrZ%Yt_uMq`I zbqoh)gvqEI;Nj0Nhxk?(%=CAY+j{l!Z@OVs8Zal<;5?x3ERz*-txAaWf78V;uS%q? z!~{+QIU(HfN*6}g;xEf3<#+_*fS78H9a6XUo_5$p_GKkbOXx>$w#?%?nd+m5?i=jv z&$^`fHg;b+rgv)ch7Y_Re;a{dx06gG`QXFmx6ei)ZG$qi(7B>vX#5SYzQhqP%Se}| z@b+@)3(78^Y&LfdNF{5#?#%RdHjKI~^!JwA9jKTRTWL}NxAesrL1--!)q=RCWR%6T zYMEbQb{NM@x+C}Kp51lC-ewc+MZG41wf_7Z`|EA7E}1vBHAf;4VGyy`6;|NJAWJ$x zI8=M{Z=fvQT(togeVq0TqV$UM)xv5hw+STvbU%N-?wE-2CV%LEKlNp;@GdOGC+D~T zR;Mh~oc0QqMcRL1?K~9S9H!5e6TJnEv)o3sC@*uA^$awXebz&|mn{ z*o+&MYYS#!hi6=@T%IpxS0%C)n-yRRJ*B*0Q!ldZvisSpV&m;&K%q3{H-=y!T^!X@ zeqYK2`o7-um5qPv%45q0G22lGGTz2RRfFp%DlB8$Iif$yby}PJ6bfPozzCbcs7WQ> z(L;$ufr5Kh&a4bivgb9S-E01P`(@>&xO-1jjL&g&opag6t&XrD27F9n>vATzQQ{+%IwbKmRh|@j+pTiY{BFDz_>%$ID5Atst+zi`7fhh=*279Y|QRny8 z_@oDWE=S};prL4`1RQNMNX5MoaJeRBSzb+VxDwf5dDmW5 zEA8XHFCYr-yq7yXwrN_mLa1JSc{L^#^NBk&+t00Hw6DRet(NF|RdSy&PW5*$UX70$ ziW zAl98Y;9i%}T>4L^H^vO<`C5t=sWq*$Er8^bD)5x3XGN2(HblhN%fgS`0O}B8a#E(8 zhCa6Z*rbwFA) zVs*SLEb=g8EuI~1&rh!iL>8Y@Hxbg59k<&*ce=isflv{}p3mRp&v*;D=PM0}{;8eN zB~wG@LlYnyhp%44{~jOW*~mnmcw*gqY5@B)&6T7H>2zK}9K)fH!}ro!76t;cbLnXhMyeNC_pm@Znbu+)DG@|+E3@;m7R)=|ges??rPwu+vo!$*-qaaqSy=0>pCX7q7*yBI5SzHjL zzlvjf`sA`43ehvX>{t~&uBp>nn>N2u+&NLgnFaJM%-p!IN@%4x3bHhgSUTc(1MD2p zR5qGslon(QGn%H<;Pn0;UIHjrQ{FAdaePmAOMuiNQrDamXH5V?Ni$N2(*xEIv@xG@ zNXqQ7ua=zuA2tls{l|v4a%E=p|CiEj%^=tF#{H zaahU&VW=1vTZ-(hU4^uluT35uhyzwRTbrZGjI5!BtQF<{KMchVM(Qi-e+1v%raK>S zH9mo99`rC7Pk!x|k`6(iQ(%>#CrCsQLMP-(%w}d9r9dmv@!r6btEj%fg5Bxpl~!%8 ze$eV@eRvGyIuLZu$QpH=pe4bM>R=MYWFE-;GCc}7Wugv^giWGQ43T`8^$8!dWNs@5V=2oH9xt-g>pFMyNN`JOG-Y)&!H6s!F>t%<|a!X&;VO2mJ#os_Y zL2*Yokb%9=joWO_Y0}g~t2QT3o>#zdg=6_cXXDq+12!9b;3)B$(oISC-(j-u;a!{s zTBtzZxY5brBjDbx9o|IHKNZ71g21`@#YEULH#xSRG}sx~uO_^e2(DQnvBS%{{8 zaYvNwDRNM{e}o2~Du)X^zs5@tKk;uX zt1UF>#Jy78jpDpprzf%_wj=d0wwh_!vzHt5LrpX-fm>qf_Oxq> zMM?-Ld+Phq{SU^zF*=iA-8#0NOq@*YiEZ1qZN9N>+nCrBn-ffI+s+%`oOAE`et&;@ zbywG_YSikky=(91L5F~5Ay}u>AHd%Ht1!2!5K?u3$%QkWdZ%J0m!~z8T{^$PO_{Df z7b7>k;^wx>_6Be36rD``Tosi0_Fz2RRXLKwI%87Lf^%Q`I~&L$l%*wV=R+dKPKrtq zNmueyA+L}9?jU?Vdh))Pl;3$fZFFKnDhDd_a>JOmBq}v&EJ){(99C=f&C|*IMTyBp zLU&Da>#?R9ABw~84C5|Yttlx2M3Xuq-2(;M@8Gic6m8s(m; z5xI#*T_33H>=6v8G%}M`#oDN)lw`vq@FHA?c&;m(-qDa&p*>;)L=#rKsDFBuKJj?M z-)D58Sp33ev&Z&a2TE3ssFHl&xpUG@L+XY>`*0>!=)(z_C|j&LkD{2_o-E!r{MEzn zJDlqGH&%IkL!-aK3x;q0z{ib6zqrU>R=wLPqlSmE`H{@-xG^7|XAts!oa%&npu3Vg z1WgZ&2dw_-knarKPtU|1ac%nh(A4{fywCS27IXQ(_vR{ikF==`KSF*!{1E`DtnH_` zQZxdEdpi{cgf)mUj}32*DM&IQbhE1HyMguzk&IwvRDe@7j@s{eRa=wx# zj|Cetp>8$VFv1klo%9(-63qFnlfZr&vrdKG>ODkbn{G#UsL#z}Y;jFz-~hA}mUtLv zQLZtd6@w*98|dpZQFJsx+hjEyQTvzUdE#sYo9}p`XbYvn11MiWNkvK-8p;VXG~p8z zMErDd3x;zjS3#zgPeNfXv=<==jXQZC&%Yl|O7XB)DP5!U9_4#J^DUYX6pFDL(m<+Q zj+BqT^^Tbk&ff73)5Bo&o8=Cb7Jq%yof=QoVCWyF>YNgHD1fIjj|lFbzCws-r%E(f zVYT;6^cQkPo5Pq%{oHH|hc69$CB%ywt#0$(4d3M=t|85k$5faDTqq!=Dw{;F$1*#% zV6+u@)0r1$S}S@IyJr|OI(3X3u=|XjZv`}g< zAMgY%VbXS!tr}4~T>u;V{Ck|WNHFOJTn^cY7c2cArqr((X~$x|NPBwPF;|2e|1NVtoT$3B0T=o&>UDEiqJ0+omXfFQVluJigtvJmh-JVW|{Tt z9d25w_^q2isi_Z#uQ!QPW6~k$C}$+;K29Cb8cayavrzVW!%k4Baun!>$I|6bXECI- zBw<#Y%bH_SiLp2@7>0P{w5x7tb*+RhpGvTtNOBOGbs&q%VED|MU0Ib-Hxx4}yqrmn za_t;1ZeDsMGz=iS+cIhhjJ>mAi&-kRxx(OW|@$*H8OGK`URy3AjTvBjU4-nWTU zq(wifAuNvi;Nw4LJL}x9A-DDaLf2aw1`BaHjr`cqJB7$9bjL=6qNSYTpVNeSQLdv# z7RyRb#jSMx;hFi{Z#gqPN6O(%&Z|lbwqx09&may>fMD3Dl;~R#5pTw_kH>=Enp?KM zj;CIxGNk8VdI))_L&fd^Fgh21w zY&B_|vx0BC+BqK-NnE?$p`gueb$mnWvG20&4bHB1T^soAe)DKdk<zTfIZ*k3hxVKO%i-aqE!*yJ)vl`p zmps6ZTj#5mIWzdWwf^Pk%uA0OFj~FVn<@gprRM5V5~7_K1FM|q{Ie`1D$4`5B_@^L znKJ8pGM1QAb5M-kwXJY9pe{NDar?NM6>^+y|FF86m*dDB9dvwRAV!~2e|iV3$s~)@KpR84BM<$0d8LISCqZ8=~mD=Cq(8M2y6Brh3;|qZAp&%?) zaHM-eJ-y%z@Kk8Wu3@*I2MnOt4qgX4%^DiQ);{9)uM6_lNCu$oQ4kIs+w`w;X}+MP zF3Gy&xa*THWStgrk6Gtgu&aOii2cqDO{FOSE8^vP4K@IF=$H^DgZ6nQlgOXrvo8E@fo7dG)<8*MzyVS;*h`RV}RkA zf&76=r7T}A>cvjU(yc~p(_*iX$qyOC?J-9Tzgl{s>rBny{MzSdh$u^cam7wVqXTBB z{u)MUGFTVX3Tf|D$o?;L1OFIRZOcZA*>K3}gB!^z^2lLkr}-j+ra&oX-PDK{Nndjs zEgx-usD+<9>SSb)pPCx9f|lJo*4)>EcGbuK&CxV}z7apn`!M+Kfp*si`zLB^jtX22 zz1yUL+}AEX#}9;tmOwV5nf2+TZ8)=U04Y)CMGJcVGSU2w;6u|fm%2obW8>jWZyPma z1Tm?CcM5uIOjxRBjpPF(J5q35+qKv-yok;K^_3yyP)GV-K4&C8VABZgxN`=fdLgo3 z3g(25P{Ul>Q_dau>HFd=JE>CtiYcA#;dBvjBpfQK=5>3d)8GSPzuA+BDy%j8=F*)6d2)S^K#vUiP_JNzh{>8cjBlN|&4^(!~d!thbWmOBQgytt}57pFwe<-_lL)drSZ zM@@DAN;oc|ap-i7F1Rn=NR@m$v4B1pv^mz$jNt%3=p+Rq$4+QM-H5^5X_rKIyt#{k z*#fKmW%x?G)S@4&Rt_XJUURH(5aou6-LDz2jVM-vHNsM3xx5i9PTMepi9|!UX|hM_ zclnhK&GaqH2vX_;Q(NEINGy1yP>YXd+l5qCS?jie>#brzYt=C3GvS=^f|oqlwJUQ; zUPx%-^}0p*)s_|ude-h!ikBct#gfSriOik3ntZU&g|VZdic?pjwChcOiuJ8^o;2hi zU12nNlLlprMx&H^nO~N(IKHzJ6I^517zK7p=J>`~H&MBUZpFi|fP9Lgb+jJ;{{kgN zMSH?fP{!Bhwm*I9j6aLdc2353F&^(o}rZog=;RMaR;J&>VK2vy9+CZbn}tv8n#vKTc`hf8(Cfhfp{Ow)Td z?q&0{2tU*FoX=robY?|`_6*mxhmPS#*ud9kh(S5jQSiqmVR#}L4N*h2yw&Zv{_N5* z&{YE*28g}urSDQv>zv0+7ot7W1AxeUq0$OWPKOYyv(SCsYtvYrHjAy0smA4rrKnyy zVIoebIEwsfvSOCdmIYi}X*qXIB5FFeA4WFOUkh@T4$+2>tHaQawLS*!ZUDn;cqC66 z_u_>+(lS7d4=x109Oc&BQlPGUrHu?Dp>{TS{ncQS$gWCDc`Lmxv1E{tc6VNj_Gs-t zO9E;Z0lXqYhktgJd2fyMsU~(u%up}bTXf}qmH0L;u??YZ<+Ew9(kGVuKi5R8cl{QZ zX#~w>eFQvDAEiZC7{iY($}I%&Q??TsXUK1%3B{u4X72w(0`PJ6gcFXm<%@6CV25C+ z@eC|GES?u3sMyQY;1`=_C}Z|YuD*DLOBhG`<)~W9I3FUObr#(`LRQj^2g3P8WEGUu z^D1K}>J?F@*3gg1q?a8aO=uGdx>lFpiql=B3L6UG7ql6eAg{g-n_xpFj-F=@Wa(PM zS934Y2i7r?081lWLI}Ohd8kB>$f)_9TfSp!S@y#CXR39@2)vwRSyY=OWGb;*D~J8d z{HrpxM?~LA{|caPEfpd=j9O7TsX1&JUNH#MSd!N8^99WD2yk(C@p74W&ps;?4c0zU zvZx}@1}DoHv~SL#J6j&;h-STP4IC*H(rc}Fj&Ss1y-gmz!M98bXwk$lTf!4Plg%aZ z=vwFeP&T7Enu1C3uTT7jugz;X=NXnV@4-Ybk?C9_SA!fJcR$!~k`b=nyDpTj+vq+> zMaH;>@@VVEX+CpiS(F@28o&7|PMo+&D_bMEuvS5#o%;FaKRe43UNy5al-89mx~5f@ zlkuP3GA@5xZ{qWs`7rIcxLwb1x6%fW=h@O)5hN;@6bQ8M`-qbXQ*MC-BS0ua0l&V8 zWRh`+Q`aDAme1D-@aW${OuKsn##7^utp%@N!JKDP9-xL;w>b>pX~}oAVOhMFj6@ez zUypJOb|q4jYJ~J5gE<1QB^2C<{ja z4=IlSA{3~34f$kC)Y)doy)s+B_+~RhJ!P@Lwp2pC+**fzy>MoR8Rb3#3K4jS0>@~6 z%$!HMoctFh-cmKj*TeD8C60|()`!KrvT7%8mT+@r|B~j%3VMudtcJK#Vi1`qxn^MW z!2>~*9z9Rw4FBwEy9Rk7d1()k>=w>Wt@Vs4aCe@O$rqg->qUCCoy#Rq|SsG=~%LRf-@skmgolrlXf@v#Ka^o3=yu`klk1o-JmNKsI z%5fScOK*Q===5!}lH(ZzJ-<&HF#d$QK66;9c|K1^=~`Ow*6$tKZYf)Odz87+v&r)C z1w?kqz`oP{XXg6dk9)fE`7IF5WjQNHuR@N$2V#T11oyjTyS9Y2duGD;?ut_183`{X z#ususkGoD06wyrL>DDr8(U-z@0Sq4voQD0_%O+6ADV1{{jmFmYkTI^+&Xw`9y+DGZ z7KjW|I7wYbWBmwwf86}@JI!Bv4|#L)?r}q07$e|}_>1*J%^cugtAht+Y5_z8^ZQ-- zalVnbbe@z`2CcV+U#mY9gue_?<$M;tZzH+W+4Zd{y?tMghys=<9)_3dJ)?M?IFf9K zrt>igByRfvn@M!^9xVCT?(lB@;t9h=R7&|mE1ycL<`ILDB&pge?8CbUC~0rvbht;x z*BY5rz?}3#k=UZYFlGFX z5x0w|P$Y#K--L4@-6rbPsm}ev&A+MZL0;^M!L^Ig!Q=F`eVPn_s^cCTgfp?!U)VGZ zk77fnxkQtn4yf_R%#J14IY+t6LPN`KIzA|gT?jkHf5*FI>y@n9FqeK!JudF*=k-nd zwHb}p?31 z`tA)jZNUCHd(Kl#dFPEE-jJ+rEXPP;T0)uG;kawFqM-`GZwR6>O4ofrw3CbI!Ji(# zh$K(*)LCiyAg7n7s&W$T@@+iF@A0sQIhr_g(M|G>+2$j6_{79Eky>qe<^D6YosxL9 z=QEY~&lpx1+A_R1SzeO(6I!x{>oa-1RRP>psFTV0*^;-6?v{C4Qe41dO4a|kpd>iK zwNN*$(l4=0Yg<}A%aF1xB>`Ib*tG;aDf+Ht{eXezprQ7kqCblJ#nEv=6Q2K64D;al zJ5H!7VzBujk1BWmKZ_AK_{2grA1>T563iRO?25me*MGpsD7Wr)pH))CW%P#o`+XhQ z1dyq>Mdf|GvF9c&|JNO1aJ+S(Kz>*)FkXTMuciKqInvQ7!aWs}->Qu$o`UGO6`ZQx zRc&VFa^@EWkwtfYB9a3nd#$ZC<8ubU6&AME@ega^HS=JjfVi^`5wjq9KvR(kqgPw^ zP-G6rpP@KgiaRu2=d|Vo_jx#xxM4m4TxcsesP3yCGdM2og1PZOV&w~{c;@?!1lzZx zJRC49q(Su0eppWXrw22otv$k{TrbN#&w{akw(q7KdKO0jBCvKVco0GxFUav&YGOkg$o5EhsF@80r z=!RUIle+!&h-lLqe0PIu){;g>O616nWM%Fpk+eX+Unb|ap#Br_G9`NP*FzlNtCo|D zO-?z24AJXogfKJvMQ-7XpijznTufewr#UCj4BSsvk*oy6+#JoSKH^F-F7Eduv&$Q8f0>#;;{H?mUL3 zd(lR$Y~C~YPr5E-{JrJ7)XFKGF8KvXg0>rt;(qznw6t`XpmE}_1E=*byvpKfgN>RB#!4u*fk!tU@+2X7qh9#H0hsl?|iuk-G8rT z(fFH_-;ngb-wP^n4_1bNL`Y~C`qIxvVLfM|cpHknp?Cl5dW6>Ib`f>5`)p$_&e+!$ zZVNunp`Vr%d(-b(AShRV4NCiv-A)@a4ba&Ja$kO9&=)cA?PYCaSPw+L&|(`GG05P`wmrA6%p9O1k#=fV*n=7Rg;)Ch2qB|M;sgNU39@XhW#B@CDpb!*iMoa_T z#urL?sGvJcDXO>SD<^4ZBT{|Lo~rnNH+ymkSoCxu+LAM7#;?9`aa@Nz9(@I6#D_J{ zF9@K5%#T`NH{s6llVxjh{8IPeS+p=sI#b8YQZ=trr;bb+rWB=*EvJ^beqnu)#me_M z=@d1fLAaY{8i)nITI`I;t$YK`2oVBXLI)yMQwC8@wdcq<+X1Ftxf6SC=Ch5f18a*B ztZa0yLJUJn6mRX>Y;}~#HP_xnMmVSz;P@62wW9Aq-Lq?#S}P~MPHZ?3o39QTad&39 zIih9Yakbk7djm^r4SBbYBX*Fv*R64H4bz4cB$5-CKT332I)%FC+gj;!^$no&Wo!#u z`;|p;wO!M3Vwv3g+lKOiiH@=q(s1`5c=ljS>dj0B@_?@Ev$VA%N3Wq}rBjkipWwtJ zJh>iK7?$nRfL)~PGKYWGC(Cw^l-T;FlI9mN-!|~Wg;S5!XD{BP%h*`I-WiWZR-_L^ zKB6Dn9-`KD6e~fUE6`SbgX-9CyF2qZfUe7M{*(GR{Srhje z4(BJNHBKBasWgK{@W}VG71M;S8GH~j&t*S}iD$clva`u>qeA^{>Al?UD<(p~9Xh}D zW$K6e$$f*eRc~iQ;ICVnp2tN@3Akq&ZC*wYyPzBPq{rDwa|aND>9zQDO6UtR7LYOu zwwy2K2TCKrHL};+4M%=v%r9a@!y;#E)9iRLutp)KKCd@O?Zy`?ID0D*mU!tlFOOU1 zv%q2^S+a;jtYf$RYpYqXzsF z^|Ozh9*X$q-#%x|wzQ9S;V`!&_9B}Fy%TbsSx`nxyC0W`qe2kf68$?(oJgp0+nwL4 z&*!w**g;-xfM@Si_?iK-K-cKK06jLCltDX3f}X)uNf|lmX^4Q--nwA~t#ZH>8Yk?b z?r7OxCMTZdqJyh$4kUxJqYagN#*0Zt#^CXE12mO_`vXn9Ijh`{DyR20`o0r+u6YN~ z;&Khg?aJEgh!goV;OBG(5%~iASr9?&v`xbARWmdN5`=fEIHRV`6(IkP8zK6{7+VNw zzt)gOoK;xdz9ZgqcLFB^o%{!RBzi)Puq*AM7Q{LbVvGl*F4eDebAv8*Q}%^(>cQk@`Ww8z5?50gBPrXZ!H%2vm+p6#kaa`w;<tI6p?*pC-Hm{;PuI2TQv%97|UHefV4jCFyuNDOH}0yd7$Dm zpX=)94}mro-KF>Jx8T@Vq+QyV@eE(7kX}&RLKs;U{2mO>=LV($yfwhs4cM^DF1ZI2ip9wzm`>8I!zmu}{L&AP_P)o6{F`0?k>E(-%9z%y4$ zNKtCWs9XYxzwAp6_#1*6|IYTz2oXVbX@2TBQ=_L9qY`0!&vgh}*b>F#>eiUu+no1% z_w2^`E(3s=<&E@d>#T!pKTVkF>%Hx`?muP#rVywrY4dLey=2a7%e{8pMJ(L!MiRUL zM0AXX1W&zb-#^Yze*8tT*~^%%XaGsF@U^MmO8?Ge{&m>3AWSkZsloUh^T0cpMhQb+9b_>nfbkFgD`e~NSL{YqiNo@#RU7(j@$huIogBU2 z-yS+2Ir4owAOE^*l%Mef=KgwWOV8~R9`i$?`{Q8@`!;8Kp8hhfAn;IGsLN(*73G`h z@mpL{>Ryth0`H;Sqz4&_-yqj8F>8aee~QZFi)+XKlVg2*^DD|XeP}CzQDqYlx}7q^ zUODJ!l`ykn#d;#V=4iU8h&bT8*>B7!mc8w=4l$q1S9-SliS%C;$gm|+T= zrxg;Hefam(@>e&gETPYHyW*VeVKPjp+1GtvzNzW(z^E_?YPxe84BBRFFC5q{=7}z7 zL9_gfAg*IV*rRDbUF@Dbw5cIkb8UCw~aG^f>2wQ*-xlN$!TMSE65+c zanI5)QR5* zveLH>Rk%UJR{jRfmkPNkK*xJ|b$R9Yv8Z9|;o)(e-R5({NdD^am0jn)4H$gtc|DrC z`doJK*!|ejaCrWfWUuQ1)F!MZ(q9jdI~7N}I{=Oxy3bpd7+)TRsk-{!!*`1kwdCu~ zDfo8;H~9J>>ZI1Rz#G6YgZJpyI;u&fOH{b8pSV2IiqZAW3Bk0q?$)OO2~|CjqUtia ztS2oY;eHY$VnHlEU&D&Hv~M`A{AyPhkl9u&*fFZsTV&zsHa4~{aNTj!gkD1C>KzVFTwqBOsy@7}O44;q(G(mtLlOe$(K^5w;QEXt5 zyh_E~J`>Bz|4opCAsb@w4ZIA-y2x+oFov~&!oOR|Y2wF6cr?qs|HvO(ES%bw)=j3k z$=B~EZ@rBF+dUk=1$CE{J0(ti*{YXKSYrC=IBpGRrOUUKR2()b9u~3`E^Uv}5R7Q< zehj+4aWLaqNV%EK@S%3_1j=V#Jvj1wH%Rp1s+L<9&?N z-Alxw2pVUBZYF{4vXce za73h>q>@rqM|Ew1U%GG`dquEmF;&`&d|g1EYyQJkRn=R1KNwNORv_`ryY^!;aBvA( zRl{VP3+;3DwYG?{)A7g8pIhU1lxr8LjtCEe+x6}QK+a75ukXVbw7)ZWQJgG^LY z#yb)GI6)Ax-BUjoLEnyhr6F3P_1rDDj=2+;dZ=g1?HV)r55c2K8Kc=6V=vgrz5@R)BJKxbTbnY2Ju&OW;17r+MI-X3O#MV;F;|peaY6`nW(8}fH zhQy<9OFf+$ucW<#(Vh!NwqGSya%mK%r2TTs>snOvOoTo1NAE>|7+xSHhm%u zAOp(nRffzPk0LF4Ipr~TR~*F~pfyG@wxvwlLRmX=I9&FZ7z>WUt~V{am5L%AiH4Ru zlHd@@$a*($!ZJUHDCW6b(4X4Huqew(^CKkf zs7sfI&*PrWroih)yEies=}uzct9e8I%i6mb1Xz&?gejwrAqPMWGASKnmWmITHxeOb zaJd3ywwl48%CGD_>INgB^cPmwugM*Dc!R1Jrhg114NoF7E%Ym4qgcsB>u`9b3r;)OnC|BkR=AZJT`6wsi`P29=?g~!MULq?-6yuzNM8M( z#p#xlwd7Ni=K_`2x$bsJo%hlIkn3R4IZe{(h=6rgW>rOQ|1%_<8_0jsV=oj_o^9#&ItTC7BcWl?}k%Ph_lfoYBH%w<_Cuif_vJFiyz-G)80T z4#czUG*e%p+}E8EME-q3>kY|PMp9D5Wdd=&;6#E5lQqZ(D{Np~!0KO$;64tI{7;2wMto#GA; z_8ZHC2QoLw{3e~utFnig=1BP^uVC_6AlbjzmlC&*B7pdEyD9;}eExw#QnrCwFZ+Ss z4D+nEp|er`iNX74)$x46AihS)HFf$M2~7 zf!4)PG+SmQZ>+VcG83>VaX*`#331_%>sa0Wlh0sWv`V-3M+rB4L`Bg^Z~C)SmIw<^ z57yQoIr5U}@Ov?44I5(*Bh>1e#1^l+$QUeTCC7&qB(@)@=W{L8<%0be~u%O|SU zDXz+P*@NO^bUJ`P9eH6T8HK5;f05AY432$8%guf=VNDFpJIMtCxBjs5(raLf(FVf| zfAB}}m)6hkVS267C_{8E4xT{#+m@t^m7&7!>6Ns3j&t_Hq88UW{Xbt=7;2S5Kfuzt z0kLru=Lz8|*{P7FJSj=j*?I9Dq;%uC(8J^}Y@I6SzDT@-Rz?G_SF}WQP8F|~>xy~# zuP1(VeRByzh0T$j9Q4;*I(Ux9ocbQuK61Jk2X3nycDabt}sOBKR_v^M8FmwXauTf6R$ec~w>uxpl5863gq}#?S z8f`ulVO|uz(5&@yE=#3i>|gig=w_%V`V z^1&KBT8B3A1`2v@_Tfj;x7R5S|1{cOPB)qEXYyVU)pg0McYLTeKZqno+@`>BmUmLK zV^aCI7Z)v63C#IIV|RTkA{$6-&q&&F48UHUG@j0f9zBswWYAnv^zNwNNuV|;+e-NZ z0)VZ{r*v6--u80de2sW;NJOe7y!VKhQg}?-Tddp1CurGKW7gGcHqMe;Y&$FG1d`8^ z6pp3gDQ3i5%4a&GbP#FflcDDq4$?C8&8%rQK)aekDmn(!OZa8dE{$xRn>9AQW~5B2 zb#sTc$E{$ClXo4>6{o;XiW}))t0@7rRVLk6{B1pxY$(j5t$3xjd(GeiVBI{eTvf5tW8dS1S>B2NIDqBn9l(BZj?B+#mc|B1cEI z9oO3Um1*gbg-XJ1f39Owbuerhj_st`$Jj7@?We_++>PQ|sW-?o()BYA(0&YI+4RZb zEikq@myRL{?vgP{vPv}=pZrLq$+O~&Qnph=fjiIcm_;87MTW#4dws)l z9`A(Pr@gNY^{h{RF=6uB4|=-h0?4w%8gy^_WHZ7;<-Y_%d720;9N2k105Mea(VZK) z63CQM)JAo*P#*(kg2q!A4PP8+lIwVU-iW|nGR}10&*WZcIZvWzT(=JAX#_$a_l$5& z?NFgTJ~VC!BZ-CMR~b5(G@7ape+`jqM^`Z`BcgR=^BO`}~A&3$SY%F+36B(Y;_ zB%{^JRXEuD80ghpAf!^Y?7&aa4XEg~Bh42_?2SG_c|`A3)*2#xg_ps3JRADYQi&m( zzQ1Rj7cQ8iO@wc$g3gG)3XlY9^@J!mS>94FFxrZ(BBrr=*+|LTXc;8#S`b>bRe2u| z5g^r(u8+{}owjNvBUiaq3itNiht-Qx^U8L-s!bAs56W7uH@kmQd%{RhOx`AxHVtXF zj`0=q?ZO>lZyVXxi7z6oR88*X!n#!Hrwe?3KSfrqncbpBA*ih`%M}84L9ylrYVI{fx^~O!5bVba zf?J1-4%x;6MhUTNir}}Md=$$Oe&Q7^DxrmwWDt}V;q=g6jQNFF6P#ey|7L_H^XEJi zy;&0!-g68T;&0nT3gBHZ*GabI^_xRYyI7OwIHH3E=B+DoQPqHLaibB3|Z2P{RYb6uWL0(mx3$Q61M#_78Usw?)rZ&<{h8}5eF^Z zt^#T`JhOdc;$S_jWN4os*?FGFFHoV%@EhtlST%kyD@;r=-sF2Q;J2mTo$CRh%ToVr zO$MU|GrU%^Xo4jt(25f6lCh0SMFFLorovQMfmz>9r!R~sF2hcDFLZljqgAkcF8oDx ztDY3O@w8#=)O{q~IHsPKc4_{DXv8l!T>m>VBR%phrrW4C!YwB!aX8C&0XI`ybGb&( z8%j?`(j8wGHm`S*@5c)v)kFej0jWI3$^%*gjs6++giD@YLBZ5 z5JXtqg9j|qKP{S1bW0`jik$HfQk2h=+BbIxRd_iFQ8A7HF|SZlTbh~3h6Ip?V4EsdKWtnFY{v4HezAh;e&i( zT_g$gzm9Dm6THWF-xd3IqbAL$VR<#unyFN|6Nr<^di|dA4p+jfKy;DG$atpJ*!*mL zX=H_egQ#7oyK3)gyh&L`_2^LQNva%@NaZ0_?AbBCCEn-#DcHH>s_r z&KLbcB0NTrzP2qxh*-~Iv2yPPsXE-ktroXUmp5btaPembJ^hNXI0Pdq&t&l)c#wD+ z`MZ_&P7K8x_~mNq%T0}id>2lqzcF=~K$PmX+}+$YgPs4*W9A(@Sp-D#{U%sLL+cDT zJ~2vjtWMdqxe4p{fppUhLzx^Fc546BVhF`6+sy?p{9fm$XIo8HojG?(cLlMorK?q1 zxC|v+fnS6O48o$w$n<QPxFJ0kdl9w(`YBbk|9Xq%-TUi{{K^ zk-G#=nWJBjWKywmMO{^9BnY)1{U5{++rziz_!aHa^f0d)_0^$+lvJQG;|vN%Ah}^w z(*y5Kxt9-0C?TH9^sHkEL0TxdMK4xpyd&^n4xOZd}L|H)Lgt(MAqvgDWY z?}7JbhEOmB4sJYYErt@A9GW|M5KRD-r-9HnDR?!ZSW`RBK> z^&eS#b=~4ASY%5IYk|4g&<=l{6}PK&fOl>#UsD=q5tOw0!%QpR__z#X1(%R8gK!e-T2#MlHd)tFnSm11j?D^j?UKMZVNMbeXMbCp<1qCVcO_ zl0bZ2y+{gOxlwRTiumBIqxB`I7F+VT=?uJ-BbRLhG{b{7PT5w@Ko1^TL9Hd=p1%GO zeTcn@Z&=#8v)kp{-If1m6+VgIo%+WXnK;v+B?8C_WWoa%Ux3K4HcDTO9~os7m^v4k%Y%of9Am=_!UB=As4++#Ih zkmEVhfrESe5g;xv^%1BpU9mHz7;Q=|F#$!MKR)PJi#KpRBq#cb;aiVP%mVYZd;+ba zH>+x)$;mi&poX&ww!>!JoUD{D&ogr&xf#Gb%HzcNED{`K*(&{x3ENrZs5#WIAH`@W z;?k{VKg)&|*kCnpU%N~xV0hFBgJ=)%y&44HivA_E&Z+xwR63{37ohyYtbk#Y>a1s7 z1yMvslL@vdDuO^fkSXsejp1WKRi|zwTcv`Z=Z+@_nR5o#`7+!mg3hANsS56O9oMDf zm^@6MpKvm3mizCpVr9%V8FET>kD8>^ z?%{BP%dKzOawTKYL`moJ<#*CyhoUS7qzfnazib*M?XK2rDVQQHd!2x<1b2f92YDaF z6v~ck3$+$6LXp}@UtSsgJU6pIfCDgV?hvs(Q(Ld-_**j?J4Prj_FP%YAjIa~iF$L*FgtAhs$nY(6K1q(caw`-Ms%V6&tqp_#xSnB#B3V7b zttC&O?f3 z2v%YLNnl{@t}jJ(9Y+kV{>sgGz!&T;uJ}BzcFAg=@$BCD(7T!YQCG$JomRCgVcZSa ztTC>F+mWh3jIG`gi_sDak-RX1Qlsxqh=YCk)>&`uzI_lMD+d+9+Ela&yEI+>1g)** zeP-f{?RM=i)GH?fVwaDyZ8tfal5OF1;4m=K;1%+AWu+ijJ8yGIGBO5|juw+8<>PvF zlqLd78PZ19d`4|4;eG4aa6W98V5))#;dxHyLBZe24_&rZ+?NmTF8*0S?@42i^PR9& zUzG+T{zc3$qzz?m|V?ffD|x?uGX_@4^yu!9_7VrI91na4AOG-pLp9zg!X+Q^(C7)w96^aNE<~tTzJC<2jMJ7y`W`Vq!JaVkOC?SD zJR6A3n~yKb?>b}pPpisO-}!_ZU5==VsApHbQUyGHf)#Aa+~%xP3L${)U?YZfYctkg zWmA@Zy5Ygb@MKqgu*8A0y=KSDN>in7jpS-azSlD22(ZnR1v!{04)rw(Y}%KYTBUu!@BbA874>{ae5?*j34{_U5tkLd6y(w@4X%+L2T1`KzpF{dH zvtZE>2~vBj!lIwFu@&U*BQ&`h%K{mAQr00q4RNK`g9&(2mDZ;% ziqw5WFI+@P=^Blw@_9C<7&(30A!MR!D5_Md_g~yZReE%!gc7y|Y!E4J5ns@R61N45 zaB{n&h`5sS`)>z`t5>l>qAd@!t6J2&Yz3WFLqSRGu$GWiZkAf0^qIQxBa8z>BZADC zdKqL|vsfj&?%aqo?RN(3zn3(4^j!6-Im+QmdeJIpOUP`3rLmY5kThS?m=(W#6YlTEzoD`mq*?m{`=pDaP2ce6}-?}oV;og(dC)T}EQ%UP$rW^* zTePG7tKue_jd{N?lG*~rmx`Ya{jf06jJ+_gy)eHuUyw)B&_I7yX+_&kyrQCGmj>!% zO>6N|U+z{q6Xs+6XC*0=9ul}P(Uuvgpl2iS>&{Bf4Lc5?y@}JEggINj6xAb`&w%#2 zFtR5R#9yOrcNDI2CUA4Mqj*H^-0=ElxetA@5qIK5yWg@DIm(1p+@jy_#iZoFgiPzF_w*eWuUf+o;K4Hzl;oB1rYlBSF+!r*WsaLZiE{&Y_iYk z)fK0I%3IWxAI#8xSAcpBq-TUgLZ(juq8oMnGy+~YccfOTYd z^KmqKZqw6d2loySRN)r3P5M}*V0CT!jjHT_w81Ipz7w5zKF31CNPmsh*c?MK04q{G zOOZw+=XyC*hgs%Z8X{9Z*EQp11(jlLXZ4~{BR$zSB>=wsAoC92z3@jD4eASJwiK?X zMYH79H4IE30lkY#<=tB40-Cw5wARfJ<|63e&J$$?6S58;!d;94qL07~9;9Igs~S|quCVKnrK-NnPs1tL%~2B% zODqFH^+goS+@#5$g~91}1VT$GSz%>Vj`EV1D#-PYz>v2CN|?xGs*4{^2`TUU=yw#G z4NX{+ClsHE0u_#a?=)#0;O>5RgQvrXF9!c4?%JX{#;?z;z>{aKMa#GT*FrwaxYXXk zDUcH3%#{SHjRVmC1vn2?D9R(MjAZS?b z9Hum-G)>}j@j+aAGw2u4lFn|9qvQ`sEtxY60TXjduqJQ1o^Kz`$RiYN00;Di!sg}` z;dWUa7~|Q+rAHD6Fs?%sTb?20wnn4b#1}}RSU-F{U8ix9+0iLh}m6I!n*P>vM__Fycpba=x{-3G+zIzf_&XK9%g`GQ8SfmFbHm zvlx;k(7&Bx)Wo9npsyZ%XoS^9Narc_O+h=edA-X**S5=@SO|{QUj2bOXhm&s&%c4p z>3O1<wvk|M?3*ZT*{)5NVFI5r{m2iKNNk? zy}Qetx?uol*Qkkr7kq@yAJHCAAkl-^ad=%w+W4%@FS8ZY@5L3+8t#qYfS%yZp@y~7 zsmm9JxSp{R2QaDw;09=dI2C+5N`yM<69JI|vnSV9(CSa{i_o!Nl@QQ6p72@dn*_zW zEzN**8%!|~nhGOA)r9nKEfQ}Oivb7$lqEFS{{V16kH3Tf-H+~m<%d`Kpd_sdG~I(* z!Ac_ZJ+eT&RE=V^u@bE!y8&$5HD55MiJzN2d2DkS-$jSumhl0wBLvRGCh2)t2nK}Rc&=KN__iBpP7|sdQJ5#1 zTmXoa>3+dbUl&%1;A_>I>YC}%7Ze3PC8($A;tkdXdyB0MRxqpxA;?$d0S+inRun8Z z&@_mDY$q$5E(z%b`2hsL6^SB_BlK?)U&sbqD|W!X24j*9#tH=-u)RNtH@1b3|K$5( zcyS*MQY|cu61{Pli;FXu=VH&n-AjHf^cw=b z#AS>wC(cL(`8fiOR8X8N(ntl(xkHUq(0xv^Miw+&zqYq~#%Loh<8@i#Myd*!C*DXE z&G`b3R8gHj;z$+cbqqODF>)U}=18I7M-4hsDErZ(j_4o<1uv?{0y)SJyKPYpQe%y3 zKsjJrC!b;T5`4btw^2R?G*s`!{d=MA-&P(!lK;28f7>{K=jNMDEn2P*xV6khJAvET z^~}A%t(9J!8@QGHGLTU!$Li9cQC_Wrr+AqyPv|P%t}>6~E8f0N>*Fk5x+7;#9Z*dZ z?N=e9TDiI^q?-NJipEs4H0C9!T4PYPT+{t5V@s7a^^U=%%9rm=!KIpuT5NQw=JKrJ zrJNd85njr%$WnZ%7G;*>OF0&52{6^7SX+Q8hk}Gxt>zt?FJ6-DJDRudR?1qLVuj z)iRSzp&`!)5lUqL?w*CdcPozIsq*N(3ccvlHaxpmkQBM!;MG0#Mu*mpu_yIJ)DuFh ziZ(aWK7E@_$RPrX^T9$Bekvp0uK4!|58nU9_CPF?^>6MwI54<$4%mNspM0_G}+e_cgx0=M~0Rv zRiT6}Rq6~EY^lalkm1sGK;G0SPXf7g24YZ>Z8Mje@Te^FZTXg483}lKM9vWR=+U>=CkR8%EbuX?>&C4kD|TB{qz#hF*Wc$ZB4A=JR4| z4U$zV{{$RRTeS=93H-Wx`9$J43~vD%LJmOFYak zyK;^huZkux5?lhb0B3r}TtBZ4_ysjoRSBp?Qs()`=y@o-?c|b1VFIC(cuON+cOCm> zgl8X=#gL!d3{{#4A)$oYL7c!EXwt*=aRdh~Q6Xv0A=b$pqd>*MNKpmiqgzBAb*XfM zjuBaqDA1W?dS%HA62nsGF0yQ^RKcMSUKj!of|sBB+8JzW$JCRX1e%42UJ??F(bmU1L9AboJcd^btNn3k7Nf>C*?nv+Z}>J2R&ds6IIf2M9dnYCB5_@z&s z`t-!5OU0x-yZDgviM=n_Q7KP&sYb!|EylfAp(>;{sHQ6TPtDk>A6>5yN=#nY%`N8%AbJXrDNGO~I6bfGq*#Q?N#mHO*f$%X1~l2ID+bHphg6a>#j!yjHZ&0F(;g~JL-X3B zo3*t0%lA=yr|qELB*44e;w~z!Dj}6Ed(=j!hfVd9t748DSpoR~gk#w*stRm1uNtr? z^HY+BJ6SrxEe37UV7bNPeGYudSIb71#JX$9l9lydFrK9IwMesH?jq47b3BzsB*|({ z&5s{xMLI%d!7xbwGx2Z!+X+O{naQ;fk~^B_ga2g5C%yBNqr=OSV+pkeU?Kg9^kW}h zm0=P4@_I9f_)*sz;)XK3lI^;De^H*lnG&T%;ru~yIff6#=3BA$776gq9g(h+FWiP~ zm5Sjz0`=5Dn;zOHmiaA+#y_a(C+Y?d^Eo*H#oRU0P4$7MKC7y*1W^ze3dN;EVJrx( z69K%?G$GF^WUi%jlW=MNL)q{d7}#KeM>!3&>(bG*^o*61e)R9H#Q1Y7K`nnJ&7;Gd zQ4&Pz=1c)B z^F-3pq87IT$&{6`fMhD!yB$WRStUD0W|6czM5e57b#XR`OtU-a%#E2*E)&>IRX<}k1i9Sne*JZKS4X+r$Cm|^ z%NL-@1p-Z$2SfpY2AZXo$#<8RJ}<`F!P_%KJ&4l zW<+rka>mNC831O?aO%xe7lbckr9C^mjFsFx=rUG<^McD*i7p3QCbyM-d~lh!)<(|+ zE#ojcmxC;0r#=U;jGf?IxH5K$^bH4LF#XhT^MRJS zFBpvc!KV%{k4XU-AO{l8qg0fgZq8rV$qm#_m+*2yCg#g8hJ- zYgOR^tVZOsLCwj}FRK8WQ>v}P%(1>%QOKNfTV4=zDiCuD9OGi3FqtEvUqj<7&cNIn z$a$v0Iqo*_?{i8>)(a>0;p) zn5L?_ABBCgr0^k*;J!{dun82S*I^t=Txkd6P$WIcZ>}oY zUND_CuojGatJ*%Ob5}2wxu)*w7N$J1w|cP#b{FhYe>{5^?7DW52X;f7*3JXFjw3b) z><0e4IAAxR6Cck6=)*6qhtBC4Dbh)s&lggL0W6g; zI}4E71Ga?D8ganK=r1k?R%xbF<$a9)o1=Nq1k5S6>fDU#Ur`f!+py+n zBxW2}Ct|dwOdngmdYW%WTU^>v2oZTFs$dLgrd6~R*o7!u%`VILG3Eje9%U&qUVc<;jY-KRsGh?l8q!?lj+T#I?qviHzE$rpx&h zoWyVlix_9K$|diXV17C4I%yVf06u7PuLP}-YF^dZ3iCnfbiL4r$wQ}*Xd-vu`#qflb|U(AZgZlL@7-(j2n{py}?gLC!DmtY`O zC}^j);Ia34{&EW?{DuA5tb}E7*hfd*@TeIdGY^nJu4Y-x&)HKH{>S7itdloJ%|qcO zo4HV#5AQF<+drbyDOjv1fE=n)w|dFCw*jslO!#f)Aha(FZ2l zzh|7o;XFg(*SF)}Uh@%P8323f^BVvokDs%M0f5YwF16$J!fbtyHIRP8A)x=iW#b^4 zW`!7u2EL90CjhS`&DgvQi~0o_>h%C)l_2WAkbV!!MOXib9gXOA6sp4)J^FQqjbbi>CBb}{m~{PJJyrwr^z@7tp`#Azo5 z8Wy;Qa+_U&8>%X1$8M-D#{tDb*1xt;8-hbssesr}NvbuRLscmPyP>k6$H8`}s-1@N zP+7w&pocn|67ry)=weVGkL? zT~lvmq1}*YMQyd~TJ>VJU17CtPQd5pOK5kzD|hrGdHl5~*!2AiipyM+!yknQLKEkl zl9;~IyB9oTP`KX&0J+WWqKt|AJIG-GxjNzkChQ<`h+q`>>o^?daE*NTqwoj_9qA|k ziPGq{bWkQ&WIlBI!H{*P{R8~>2ll`Q(~Nb7n{1PHuJ`-01gaI@Gl}Ywg{^co{y6cY zi&1bbZ^hv7k`4xRS3SIk6=Hz(V8Jlut0teSyFd+4FvSw8`AOF~hc&x`?c(_bt_lWO zh;u?s1bBgW99LQ#7eMBm484rRrXZCeqUefU95?9jwsra8HTenfntq}Z#Ke`*YO-9C zac<$n6WhQsD}{7H)*_>eH_no|Srw}|UL@%tgo{tg zDIe!jaj%sFf-dL@pVA$|PeA8_4m8srl5}g{=e-E=%Rp?C15ct{h~EnJ0zEDupi~aF zq2MhxclhS3)-%$HrE+w2K^-)=d#O+d4rA92b>PH- z8i<3&g6$9oPQ|`J8_WZ3P?VIPjh09bnOt!p)Cpi=peqrSjsXOK@`!05s+vh;@dw`) z@&XztZxli?C=G%dJ5muLkl59w4?p_I2rkEG7llioyvk;_;^hZGCdE^Jyu0VM`YfV6 zqsb9vR1ThGb+K_>8rIP8L6%Ya;szdKC;;e15VQrinyJxzxg?t^r%0_;_T3x^0-1vP3gv zf}S`<7_2-n#t`2rCnK+G&if7Bbmp+&_VwlxXHHo4mHU5d&2s}*PDua z^p!A?+!SZ&P4*w`H7_#a90VQSS5zzmlm5a=&o{ZO6JJYHM4qeAJyd|c<0CE87u?d0 zY!cF~9hb;>Et0$;__){ty?};hKxwdR@*kjcg8nN+gJec<$vQS``4+H(eyC$woN-1$jeaDp$xD?Ha{=4=lVY=d}=V<5zWGSws=X zUYd!)brqR|!?v`jXw z2a;Heb)odh6RZ!l)n33l(VqTltrso&@Nw3SRu!6qEp{spz`uUvn~wFg4tn`k(akbkRY3`P1eD; zrB#3|on)phS^)4DT-WA{02Q=(6UJ9wm_Mf9ul4!eX|A=hiFByGI{YoB9VWTC85`7`URO3u?LiA^mqBeQ%_>+5lU;LXk{dQRHMqiyXYQs~(4CD5@-m#9-m02n z*h|jc0E61xeRqronCujZN#i_WXUM=dFRfoHG%H2fva;|Xnnsd?@rB+@_=&L@%vGdf zF4~83LodJ9WsujZzLiY!Ccvg7K%|LDKt^9M#Cy4)r;v2YY?_qvND>;Sz-D)R>nBI? zcmg)Yn}7Lsue|ne=JkE)v6{YRJ(0%P^$@VDJI#Yh?FfIC^p1)t?!0>;YCg zGe0o`&A-;gO02(oYY{^h+bGsBu!9i$Q7O!QRckZZ&NI~AX>F~pH0F|(rVeY!Y;?2n zFQsk9CRGZ3l<+cZNsmdimYLHi_RCd%`Y5lMpoC*&*?=r_H#oUbfw?SQ%FU`ZaDzN zca8%<u$ifQlklY5+8}q1^z`HVMP1Ui=z+lX~rt%2wISQocS?1k3XHRyGN1 zKG4sVbz-^RfJF=F>adnGX2!FcYL~$-K4`N08XmMic>UlD>}W4d@8V=Aj$hR~ep-LB z;wQyX)oIDnjkfHzj?_M1NQaf0EdbN6U|GwOz`vD%t>WqljgW$-HAUHR)4ea22^3#sP5d9Xwaa(xAl7@*@4tAh&PTyVf&#HA< zcU}U@0KT%R+(o_jEMFG1TeFZbHDR+*sM3wvcjI_G3BUm)44I?~K)EqrcEBATVgJ(9 z13VcRcLT_H?FC`=;N|}W;D1Zi$@}0x1fdk}Xi-IIedA5gEhK+dI(C@_bhCI8hw;t* z#RR<0`0|xzi3i}n#_XN14BcpSfn>|dMOv>HSVR^sk`Gk9o|J^E=z=2;V9MtYH_PJy zGX5>*Gkf#@_|}o}?|(YEVEmuc~;6PcGV=8#m>rt zv0SR`0jtb~5&*=zxD+`UWnnrcs3*GX=2)SeGr%SGmv0%=AIW?l@aByRkWdirz{USk zK_=~hbu|2^BP-pZE&^dpR%vIB4o6r95eJX2g4mJFuo`#lb92!sc5{^9bC@RSJPI!eXKxL7LQJ}&wfqQH#kG47;e5XD8 zcJnh&o3BfKQ;=y&rowndu;paK{~GTLDmn2JLcH8cDNI~R^HG?$n2*q*F9C$o=>+5U z4GDtdGUi=A3FG@BiETEK`~a?^uwwca09B+R7_(_`M$5WgZ2q@sAYA5}`-m>xbBSYv z>p-sFrYd@{>I3t#r<_Z)*yzJ5T4H49!IK6moQ#=&o88A#il7wv6v%YMqLW(IlFW8K~byNvOfyqPSbj&qJQe2v8^~UJ0!XC1|m}FwfAXWkCszHCxeC_Tuhi*@KMWFB#1xtU?(IUCFF6W9Qf>oJ57b#6BS>4! zOK3H+tx#hqTl!lQ1YjzAF0v^S@r~ ze;*^k{9L~OzrL^*J%ftRE5cQCYC0f*7@rU%kD@st_UG-MKoT&6-!9Vszv1>-2LgEA z)V4g<(&|74RC;b6k#;j4$L#Se{0v&h5Q ziR%$)@k1k?Yz6TO-*5C9Mzg|>0_t8v59$`+qj>^GZK(qwhucD+~P9s6}tM19x7X#EPj zOT}|)GX#qd(rj~^^A$vfO}&yGoA8J;o?>(7uV)>V8nLS3xL+EM{|2&!MgLFTzcZS6 z3z7pG_W!TA1W?%jzxjH1|7HJwjP&^WfBkM7f+>IsAI4hcI#h83&?GPbOsCw zl?d@JPJ(}c2}jtAhliqSe#Om!wlYWY(05&y*GbOMPGX`%*HR#n3U?e0q+>YuuMb39 z-3KF?(T#Z_Wf>M|iCZgPK?nqR;Zqop1q`@x5SI_+ z+eQ}NpZ!;075B#KjbzJt?eSjkUd2`$pE{0@<)nL0+s~yX+Tw;HwIpT7ZT-K07`zC8 z0AHdMI~Dg4iv$J(U@({$25ET)fGX-re&Qk^)EM%P-YY5$vFy4OCT0kGBK?`#zv!sZ zt3DMgRyJ?N|Ma@M&mq`2U&#EF1|O#*OCO499|Lu+U2-e)Z|ruM5@TiRrZA~#x$0lsfnT=F)_XaU%Z&vhMoHK6d&4W@YmK z^A|5O^8fCuwfw(|XLa)bmU^J4e|p4taNK>1Wrdc^zdrqq$c{I??T-){J<_D|R`%SF zT>GYmHeqa?=>|p|%$h-=ShiLJG&Mji@Iqi<95};ti3M(spdS|*6Js{q#2nR37;vn8FfJ0{HI1gOU z-23EtD)sU=wrT1}Y^N~m?z zq5a1d^+#xDy|Xv>*!O=P{;{|WP;mc8@A>P@`M;Mt>-&FK@~p=G2S%PVcBlDK{9$$- zIb&Bz_L7M@0*?r4o#6EjcY3wj_L2cBBW`8XQ_qx?Ao5IwgtbB&kSGufGh2Qbewxql zCev%77R@2}4)P6_IuN*bxpaMMf!zpxHa*4kj7i;D>hvotME=ux|F$~h1nis&i}^oonS;p&{0STgAI6;h7UtWyC{Tc~D;4}OZPF4je-`HL;r916+=64z*tFLhqNLy~S_ zwIZ*Nc4{pou2~c&;VAU?(D}h>GZf3aKp9)T4wT%*DqvpKa~6)7{iMOju@tD$Qe(6-2*1pNZWyUY4OoOq<*zP%lC;z5R5i=B%G%|`nc1(~ zK({u%txa!h)7#qgwl=-3O>b+{+k@5o)~2@wRg6b5t83HSm(yLmnCTT*M<6%ItP|3g zd2X!nUohz%MjG)#QD6n}-!EVGcD4Ag-m9H;{~TrS2@#>{YJW9K74wNIoFL z7iX`s8m4<*WDkISEDRnkP9};Fz2%I@)xh9Y(i16NW(~p7J)H`UM&H&f_p7EFW&JUl zs+7e%*O{cclB&*#s+H864hCbv$uL35pNgz%lBev}o`w=CYraR)pr_4hPWH0Nrv~Ds zH2OwITRp`TvlG#=o9KHiXY{-a7y1 zN}k7a{^!dc0IG6oSYA1nqr-Bh$MuonWoZX?Av-hGOVtT-TYF?K@F*`CsB8jx&_OkX zm>N9nT*6Xa>4-Dp*9M;$7{bJL#=aYuymi;)735<`bE*szxP|&!$>74@8L#27RIlv8 z<#0&SS!aAVbn)1YW3;8^_58;^s+HMO&ViePH&U*SLZM?-BExr1;9R?q+*i(oWB6cf z*#y8IgTVzgM#0k70Z$XgonlIs(iWBF+nNK9k3rF0peZg=iwk9e$U-jF%Zx8mX2W_9 zQyQgv5{r8~5GGhH>Fj9Yjy}cn>9#P^(iQKGK1oJiYRtr1(K#c5?i(ylox-JKt+XZ) z)j^iQJ-Ld)DOtCe7Xp>E@H@7W|3LA?*?sv6x0>5c2|3Jle0J4Y70hV0PD2O^Y~oSm z&62n>I;>vv__%nIlj`V@YKu>rnK5PJ`x;n47Vz~}QC+66jE-5r*XbCSl`=Rne&9_p zyFbO7^pH${+_K$%2r1I0AWShgLVq-ZU+3W`*PaC0Rv{Bgp;v~R==;8hsZ+TlQoLL& z6v)(yMfxnt&1a@|epk-{g{fZmL#9P7VD1j=UU=$>NO8xyq(K%v!~n&sVub4SHddzb zBx|{16qPL}T`piBw8#qyf)Hv5m82LU{gYXC$pFaQDp_^{9VMiV5Wf@=w>a4e_$6mS zIoBjm5i1_JL@s`;3e6%mjs<#P*D!Na2JSR+W0w#M6Qf$FMNI&uBsIBDy&aiJ5yqBy zO`|P=TpH>Cq%_`8xCn6>AjO&)oWRLjrZkwDgoaw8JS}SLVcA6jfcf2@YIxQ#H{`17 zVo};@j!7q>??(EzExl|8dAXG)ai4{LczrjVVPSrZS$d4sUiqSE=!vCBQ~k1G&|ELE zfEl@`Q8;obKPN^)X*)7~Htq}sfJ)5hjRJ7Yh($lU+uD z%dMiKyBWCdIQ|&=^C=XYdL-1G7#(H(;zlo!(KN*N2BxGqaRWFkV=H49JgxrALP<4i z!sakwPdVUlVr!QLB(;3TR8auFx^9(Ae;V{+BFs}63%f2kvPq%NEG;F9;1L34O!bv8 zp*l+_q^u%Y3kaaj8Tf()Mt3HPn=fLA5ynI--w_1;*}n9G?Mo+~Xzx4jNPF{#@>@Pz zy@f<*+g1*qR%(srK|lV0H4fBn(`!3gD((dTNq8He&KdgE8>7zr*FEy@_qem8d4f7) zgk?h1x!V2Js8&epZU%;u4EU^wo@qGmgn_+F_xF2d8?9dDDkc}8;tC7&Kqc&zPLfd> z4&gfb>aC%cXihO#2~l@9+s*9k88NDXOj!ghgKuv!%HDnek96;?!B>(8ro;$ggd{I{ z4lu5J1z7QFU{MVYYSzbyp>l8I*$}tBSVm)KCeDej7c^vPtpLC#ri{R87*z%KLNi5h z(X};QSu4S}=r1tLmf%@#aAOvz-W;8u^xqv_91h-m_+De7WC+++8U;>t#}3k>)|G?1 z)uKo0l&x~?Ue2!zsHkn;MN^zU_K$xU{NKgt+0ncH8UFYE+4;rEhj(uVXI2EuMTQr& z+dn>j|Kr8r-RU`Qv_BmF`2Os$ct`@QNVV={t3Ot*CSu80+SJyYQl&)EIRp&E@ogB5 zzw>-u0m%*}>&?Y?N5=zmms$$R(E(%82r>KFnXx8YrKW9}ZQ9g*OTSIce;0+*tfWC( z|G~Wzm#wLf;jDo0xI)d0r&WG%vAnu`Mt>kKr?RW#E9#<=by;6)19E;mycnGH-y9E0 zELyT&$? zpY`7jtD|=KmNr*$$(7)*OC#!XYkr97`{-nF{E!#Ff@2j~rtoZD$wjFk@P!zIg2Pfd zgwoQIS%uoG2gWlLuM8aAIQiV1UDa@D5Lx|63(nN zV2kw0JQ46H%&Jb3J88Tc@-NW9%OO~g=Cji%ywts}(wBw|oY@u| zu=2@xTFmJS_hd`)f16rHE!K3aUA9wZ?}yd*fr&or@-R9)I*1*v*`9g9^@Z=^ft zTmy?ygV@Mw)L=f0G9Z>7FJ@_R2~lE-qf{daIZ~|9 z$!dg7=_v=Sp+F}2SALk8!7nB*EZcSymCP6M4{A=fN*D=GT@`!F%{t2Ni$vMUb3iry zYI99KyW@^dd{qK74PbR}(o{IJ899`14cJ^lENFEjKcnZ78$rse5oAoOHUdynuLAqe z`@p}$NJewF%<{@JseF|98rN-GQ5%Zv#`>5~)ODeS}5qde8BD+>1%jjkZx)7I9X zJK!@-8`nt4XVyXSaAH0Saa#v{>f^MmsLxCj>#)xS!#>j_dP|7=RDnOBz|RWYYx%*S z+77x<6zEqJ8TluSQmh#gP(JjQ#H3WwIM<;<>rkN*Ev-X^)}cbBbn7&)#VTWYtgS9T zn8(`m;?X=Z=;eg-m|JK(p2ygX6wqV*UN@r0)>x&G9z(!PNw^D4Z4+TV6#zFF*V8dr zqu{Xz_>{e@Lm9oMj7qBu^2uwm38ilJVLryDA8?$HqzM}7ui5AVZN66%#VAhQ-s6j0Su>}^03&j>#U_Ol4f)%Vo+v03?+gMe|P=2#bEbC#M*8$aL5MqajfoD#0*J|)d(6g)UF&gl!dYMupwKMk1M;>!wX5W(H6f% zi{4SebbX6q0q*%2C4Pq_cg>3)a+A@vp-_S8b{#FXj+T0i(NZb(*}|s2mOvxb7_+oU zqnu_IGUaK#(JvY?1SPQ|65yPeBo427NRm>sY($b?`2hx^6ruKKjzg&%*kOz#(6jyG zarx;d)VV@WZLaI5=$Bvqj*^KRWJF<*v5B$&Y;brq6b{<`%`MD_kPTp4gLCC&xX;*& zFDPg?f^mqP;Mzr-7|JtpJ@ed!T-}-F2~40*gFR4(T*XVzOzyK=o#!x^wWaLG5d>2@ z$b-&V|M;k%=fy3!_}J>-q|gWd0#DN5?Bd74n~US4;rZa?qJMaJHW=F59%>BgF%$96oF$#_C{8s-gK^}!7LkU@jkt`-4^E^>h z$X2fGZpeUGy0^j7;^S~Otj4xo#gP5A z*f|w}Z)s*udn*fDIr9yl`OY7c9n|Xi$uWnrIyKCpO3l(&Wto@~hs2F^`O8`wqO{_J zGpZJ$wvb(^n2{~&1kAvxbzsPSKoNi_DY;WC;V4zeWn>nqrv-E_cia2sT+$R5_J?)Imz^tu^ei9xk5Y ztP7cExq6V-eUs10NI7NsnAKfgL|FPIo3#AYnHk2*V6YMk$8N} zd-G|2nb`ZyJ@!B$G!Ji{pqbaGHqG>{IfTwoyP1PJCHjfi1OHHrTneKKeoLfZlUlZ> zjXxP}s_KkA3jS`ZDzE|S* zhIz7uB4zEqd}Z#6VOPz&@Z8?9!Y$PVR^yt+@Vy0?W=@mEJTs?qBU$Vh;F$R!R>LsM z#&Noz@n2qWec(IZv^@O?5D8tTq`ErUBY1U^)lu;B#~h&oQd~n(2cvMOlQBDU;e{6l z)HbEAmohbI*KQ|naOnE@ljV3ssm3KJe8Az=aOC(4!=*r^@#6Gwlh!+DiVM?hI>?!M zAEALTz|-AhllaL4Gu^4F;SIhh69>p5opw9L_|7GsIEt!#=|t;+cG~#vw<0U@MWd)ih`?xAnBDI$Rw>h$e1j;8dw)PBGX02e+!5Ch>em z+zegBFm0_Dv1`1zMz|Td8h=;XhnO!F8k@7(a`UIsEHtrU>S8V$$HHI z?RJr3_G*SbDLq^|TQc^)CSNLqwOqzzZvG)~CadyWf;E}zE{`|mx3>^;D(Dof^&uH% zxn}ydp|i-ACchBdHKA3R@2c`T{bBy|FMs(9^P+RZbG$9iGLZ^idF6#R}I)e`} zI&;BU<&L`>!_&imb&kD}8^mts2q@6I@?6Yo`ltPaw}Z}ZcW2|Vb(y6EDF`WFBGqX2J&S3az%ma>L{V89>H=24Ov@b%HrNM89G%TSl(|FCMUhA`-mK zm&W$Di2CA?LuG>`M4w!DhLXq`eL~?C4c$ezE*ee35UY;3z#RWWIt(XL@N3*2Ern&0 zEdqtW=M8-CCKNV?=HLOw)yHICrj-OFcyEG}?sl8N06srMo2+BBU>JUy&oIyHwNPtF zKj6RMzwIvZKc)PEfa$^x+odgO0vsQxl*tjfE5!`Ahs6zGDAG$&tzCgJvC-K8wn^gc zlZlg1S2Mcxk_mc(984~hvEu>r0yw^e!g(^ACq&&vci|k7Y^2Xn9FkunCqO>l^9c#Y zE)X8N!dn-vIo%*}+zbqB6}N;ZGqHQhP^S!{ImJwxv2kvmKHWa0XFqIiwliHGMAkGkXI zamSsz4O6^>`4o%3;T2imr)~sHVVEwDT^Tcg?%udjiW*1d8N$m5ulh+izn%~b$SS4S zV>GYv8phNx55#MZfmoaWhUVs&^Z4L0Pw+w+V=gwGv!A-I#r{2j$d`6*H`-{oEg7(I zKc4)X9ESTheo4__>s0g#_yRPKi#&(@NvbXiUE!9;P?Dtl)p!JEHSkHDV7{^e1CL{burZK_GC3Yu@^HCHpdMbxw)=`2o0-V#5^1e_DRmX?8#ydpeJi{B(9d0PZ zq!}%Ya1C^>BA4%dd&HR_@B@t%uL&3gcyAt442tRz0^&1L1G6-|PVxF6kjK)FD0NTX zVx#7x%?4$?5Ty_M(lhjLELNi1FoKOD5*!3> zB7i+#@LI-4@IUY>fZ#pR5*-~Z6R8Wrw26wPQaFuuM^E3T)h(M^;sukWAYepfkicrm z=5q}znDi-c?|35D)y1m&duY7V>1=3rW@=$R;4vs0vPsEsfHLR!Ye&<67=U=@j5Oz* z0z{N)>E?tI_8=_l1Y;)}H)5-P!RI_{4VpppUU

Ih|hAGC?SZu*gpJ}Hl`YhB1T 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 Date: Sun, 29 Dec 2024 22:55:27 +0100 Subject: [PATCH 12/20] default deploy valkey and postgresql for testing locally --- charts/pixelfed/README.md | 8 ++++---- charts/pixelfed/values.yaml | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/charts/pixelfed/README.md b/charts/pixelfed/README.md index 4d5bc4d..a9fdad9 100644 --- a/charts/pixelfed/README.md +++ b/charts/pixelfed/README.md @@ -151,8 +151,8 @@ A Helm chart for deploying Pixelfed on Kubernetes | podAnnotations | object | `{}` | This is for setting Kubernetes Annotations to a Pod. For more information checkout: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ | | podLabels | object | `{}` | This is for setting Kubernetes Labels to a Pod. For more information checkout: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ | | podSecurityContext | object | `{}` | | -| postgresql.enabled | bool | `false` | enable the bundled postgresql sub chart from Bitnami. Must set to true if externalDatabase.enabled=false | -| postgresql.fullnameOverride | string | `""` | | +| postgresql.enabled | bool | `true` | enable the bundled postgresql sub chart from Bitnami. Must set to true if externalDatabase.enabled=false | +| postgresql.fullnameOverride | string | `"postgresql"` | | | readinessProbe.httpGet.path | string | `"/"` | | | readinessProbe.httpGet.port | string | `"http"` | | | replicaCount | int | `1` | This will set the replicaset count more information can be found here: https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/ | @@ -180,8 +180,8 @@ A Helm chart for deploying Pixelfed on Kubernetes | valkey.auth.tls.authClients | bool | `true` | | | valkey.auth.tls.autoGenerated | bool | `false` | | | valkey.auth.tls.enabled | bool | `false` | | -| valkey.enabled | bool | `false` | enable the bundled valkey sub chart from Bitnami. Must set to true if externalValkey.enabled=false | -| valkey.fullnameOverride | string | `""` | | +| valkey.enabled | bool | `true` | enable the bundled valkey sub chart from Bitnami. Must set to true if externalValkey.enabled=false | +| valkey.fullnameOverride | string | `"valkey"` | | | valkey.global.storageClass | string | `""` | | | volumeMounts | list | `[]` | Additional volumeMounts on the output Deployment definition. | | volumes | list | `[]` | Additional volumes on the output Deployment definition. | diff --git a/charts/pixelfed/values.yaml b/charts/pixelfed/values.yaml index cf47de8..e4232ce 100644 --- a/charts/pixelfed/values.yaml +++ b/charts/pixelfed/values.yaml @@ -171,8 +171,8 @@ externalValkey: valkey: # -- enable the bundled valkey sub chart from Bitnami. # Must set to true if externalValkey.enabled=false - enabled: false - fullnameOverride: "" + enabled: true + fullnameOverride: "valkey" global: storageClass: "" @@ -218,8 +218,8 @@ valkey: postgresql: # -- enable the bundled postgresql sub chart from Bitnami. # Must set to true if externalDatabase.enabled=false - enabled: false - fullnameOverride: "" + enabled: true + fullnameOverride: "postgresql" pixelfed: # -- timezone for docker container From f2f9f8f9989f37e4857d33ee593bae2e7309e729 Mon Sep 17 00:00:00 2001 From: jessebot Date: Sun, 29 Dec 2024 22:58:03 +0100 Subject: [PATCH 13/20] add the bitnami charts to the helm dep udpates in ci --- .github/workflows/ci-helm-lint-test.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/ci-helm-lint-test.yml b/.github/workflows/ci-helm-lint-test.yml index f03fa4d..88b5978 100644 --- a/.github/workflows/ci-helm-lint-test.yml +++ b/.github/workflows/ci-helm-lint-test.yml @@ -21,6 +21,10 @@ jobs: - name: Install Helm uses: azure/setup-helm@v4 + - name: Add dependency chart repos + run: | + helm repo add bitnami https://charts.bitnami.com/bitnami + - name: Set up chart-testing uses: helm/chart-testing-action@v2.6.1 @@ -50,6 +54,10 @@ jobs: - name: Install Helm uses: azure/setup-helm@v4 + - name: Add dependency chart repos + run: | + helm repo add bitnami https://charts.bitnami.com/bitnami + - name: Set up chart-testing uses: helm/chart-testing-action@v2.6.1 From 386b87d5bbb269e3e79e4f959d8df819115ac378 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 29 Dec 2024 21:58:33 +0000 Subject: [PATCH 14/20] helm-docs: automated action --- charts/pixelfed/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/pixelfed/README.md b/charts/pixelfed/README.md index a9fdad9..dec06df 100644 --- a/charts/pixelfed/README.md +++ b/charts/pixelfed/README.md @@ -187,4 +187,4 @@ A Helm chart for deploying Pixelfed on Kubernetes | volumes | list | `[]` | Additional volumes on the output Deployment definition. | ---------------------------------------------- -Autogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2) +Autogenerated from chart metadata using [helm-docs v1.11.0](https://github.com/norwoodj/helm-docs/releases/v1.11.0) From 98d9d7958817bddc71d2085942c10fe1209e39f5 Mon Sep 17 00:00:00 2001 From: jessebot Date: Sun, 29 Dec 2024 23:26:24 +0100 Subject: [PATCH 15/20] update env vars and how they render again --- charts/pixelfed/README.md | 1 + charts/pixelfed/templates/configmap.yaml | 10 +-- charts/pixelfed/templates/deployment.yaml | 89 +++++++++++++++++------ charts/pixelfed/values.yaml | 3 + 4 files changed, 77 insertions(+), 26 deletions(-) diff --git a/charts/pixelfed/README.md b/charts/pixelfed/README.md index dec06df..440fc6c 100644 --- a/charts/pixelfed/README.md +++ b/charts/pixelfed/README.md @@ -76,6 +76,7 @@ A Helm chart for deploying Pixelfed on Kubernetes | pixelfed.app.name | string | `"Pixelfed"` | The name of your server/instance | | pixelfed.app.url | string | `"https://localhost"` | change this to the domain of your pixelfed instance | | pixelfed.atom_feeds | string | `"true"` | https://docs.pixelfed.org/technical-documentation/config/#atom_feeds | +| pixelfed.db_apply_new_migrations_automatically | bool | `false` | | | pixelfed.enable_config_cache | bool | `true` | Enable the config cache to allow you to manage settings via the admin dashboard | | pixelfed.enforce_email_verification | bool | `true` | Enforce email verification | | pixelfed.exp_emc | bool | `true` | Experimental Configuration | diff --git a/charts/pixelfed/templates/configmap.yaml b/charts/pixelfed/templates/configmap.yaml index ef70150..43f1948 100644 --- a/charts/pixelfed/templates/configmap.yaml +++ b/charts/pixelfed/templates/configmap.yaml @@ -78,11 +78,11 @@ data: HORIZON_PREFIX="horizon-" # activity pub - ACTIVITY_PUB="true" - AP_REMOTE_FOLLOW="true" - AP_SHAREDINBOX="true" - AP_INBOX="true" - AP_OUTBOX="true" + ACTIVITY_PUB={{ .Values.pixelfed.activity_pub.enabled | quote }} + AP_REMOTE_FOLLOW={{ .Values.pixelfed.activity_pub.remote_follow | quote }} + AP_SHAREDINBOX={{ .Values.pixelfed.activity_pub.sharedinbox | quote }} + AP_INBOX={{ .Values.pixelfed.activity_pub.inbox | quote }} + AP_OUTBOX={{ .Values.pixelfed.activity_pub.outbox | quote }} # redis {{- with .Values.externalValkey.host }} diff --git a/charts/pixelfed/templates/deployment.yaml b/charts/pixelfed/templates/deployment.yaml index 2105b9f..d09e968 100644 --- a/charts/pixelfed/templates/deployment.yaml +++ b/charts/pixelfed/templates/deployment.yaml @@ -167,15 +167,15 @@ spec: # activity pub - name: ACTIVITY_PUB - value: "true" + value: {{ .Values.pixelfed.activity_pub.enabled | quote }} - name: AP_REMOTE_FOLLOW - value: "true" + value: {{ .Values.pixelfed.activity_pub.remote_follow | quote }} - name: AP_SHAREDINBOX - value: "true" + value: {{ .Values.pixelfed.activity_pub.sharedinbox | quote }} - name: AP_INBOX - value: "true" + value: {{ .Values.pixelfed.activity_pub.inbox | quote }} - name: AP_OUTBOX - value: "true" + value: {{ .Values.pixelfed.activity_pub.outbox | quote }} # redis {{- with .Values.externalValkey.host }} @@ -193,37 +193,84 @@ spec: # mail - name: MAIL_DRIVER - value: "smtp" + value: "{{ .Values.pixelfed.mail.driver }}" - name: MAIL_HOST - value: "smtp.mailgun.org" + valueFrom: + secretKeyRef: + {{- if .Values.pixelfed.mail.existingSecret }} + name: {{ .Values.pixelfed.mail.existingSecret }} + key: {{ .Values.pixelfed.mail.existingSecretKeys.host }} + {{- else }} + name: mail-secret + key: host + {{- end }} - name: MAIL_PORT - value: "587" + valueFrom: + secretKeyRef: + {{- if .Values.pixelfed.mail.existingSecret }} + name: {{ .Values.pixelfed.mail.existingSecret }} + key: {{ .Values.pixelfed.mail.existingSecretKeys.port }} + {{- else }} + name: mail-secret + key: port + {{- end }} - name: MAIL_FROM_ADDRESS - value: "__CHANGE_ME__" + value: "{{ .Values.pixelfed.mail.from_address }}" - name: MAIL_FROM_NAME - value: "${APP_NAME}" + value: "{{ .Values.pixelfed.mail.from_name }}" - name: MAIL_USERNAME - value: "" + valueFrom: + secretKeyRef: + {{- if .Values.pixelfed.mail.existingSecret }} + name: {{ .Values.pixelfed.mail.existingSecret }} + key: {{ .Values.pixelfed.mail.existingSecretKeys.username }} + {{- else }} + name: mail-secret + key: username + {{- end }} - name: MAIL_PASSWORD - value: "" + valueFrom: + secretKeyRef: + {{- if .Values.pixelfed.mail.existingSecret }} + name: {{ .Values.pixelfed.mail.existingSecret }} + key: {{ .Values.pixelfed.mail.existingSecretKeys.password }} + {{- else }} + name: mail-secret + key: password + {{- end }} - name: MAIL_ENCRYPTION - value: "tls" + value: "{{ .Values.pixelfed.mail.encryption }}" - # db + # database configuration - name: DB_CONNECTION - value: "pgsql" + value: {{ .Values.externalDatabase.connection }} - name: DB_HOST - value: "db" + valueFrom: + secretKeyRef: + name: {{ .Values.externalDatabase.existingSecret }} + key: {{ .Values.externalDatabase.existingSecretKeys.host }} - name: DB_USERNAME - value: "pixelfed" + valueFrom: + secretKeyRef: + name: {{ .Values.externalDatabase.existingSecret }} + key: {{ .Values.externalDatabase.existingSecretKeys.username }} - name: DB_PASSWORD - value: "" + valueFrom: + secretKeyRef: + name: {{ .Values.externalDatabase.existingSecret }} + key: {{ .Values.externalDatabase.existingSecretKeys.password }} - name: DB_DATABASE - value: "pixelfed_prod" + valueFrom: + secretKeyRef: + name: {{ .Values.externalDatabase.existingSecret }} + key: {{ .Values.externalDatabase.existingSecretKeys.database }} - name: DB_PORT - value: "3306" + valueFrom: + secretKeyRef: + name: {{ .Values.externalDatabase.existingSecret }} + key: {{ .Values.externalDatabase.existingSecretKeys.port }} - name: DB_APPLY_NEW_MIGRATIONS_AUTOMATICALLY - value: "false" + value: "{{ .Values.pixelfed.db_apply_new_migrations_automatically }}" livenessProbe: {{- toYaml .Values.livenessProbe | nindent 12 }} diff --git a/charts/pixelfed/values.yaml b/charts/pixelfed/values.yaml index e4232ce..1f5f99e 100644 --- a/charts/pixelfed/values.yaml +++ b/charts/pixelfed/values.yaml @@ -222,6 +222,9 @@ postgresql: fullnameOverride: "postgresql" pixelfed: + # -- Automatically run [artisan migrate --force] if new migrations are detected. + db_apply_new_migrations_automatically: false + # -- timezone for docker container timezone: "europe/amsterdam" From f2b1290d9af49a279326f090010c9e6b1a8acd61 Mon Sep 17 00:00:00 2001 From: jessebot Date: Sun, 29 Dec 2024 23:44:37 +0100 Subject: [PATCH 16/20] adding secrets for mail valkey and database --- charts/pixelfed/README.md | 4 +++- charts/pixelfed/templates/secret_database.yaml | 13 +++++++++++++ charts/pixelfed/templates/secret_mail.yaml | 12 ++++++++++++ charts/pixelfed/templates/secret_valkey.yaml | 11 +++++++++++ charts/pixelfed/values.yaml | 4 ++++ 5 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 charts/pixelfed/templates/secret_database.yaml create mode 100644 charts/pixelfed/templates/secret_mail.yaml create mode 100644 charts/pixelfed/templates/secret_valkey.yaml diff --git a/charts/pixelfed/README.md b/charts/pixelfed/README.md index 440fc6c..8f37cdf 100644 --- a/charts/pixelfed/README.md +++ b/charts/pixelfed/README.md @@ -28,6 +28,7 @@ A Helm chart for deploying Pixelfed on Kubernetes | autoscaling.targetCPUUtilizationPercentage | int | `80` | | | externalDatabase.connection | string | `"psql"` | options: sqlite mysql pgsql sqlsrv | | externalDatabase.database | string | `"pixelfed"` | | +| externalDatabase.enabled | bool | `false` | enable using an external mysql or postgresql cluster | | externalDatabase.existingSecret | string | `""` | get database credentials from an existing Kubernetes Secret | | externalDatabase.existingSecretKeys.database | string | `"pixelfed"` | key in existing Kubernetes Secret for database. If set, ignores externalDatabase.database | | externalDatabase.existingSecretKeys.host | string | `""` | key in existing Kubernetes Secret for host. If set, ignores externalDatabase.host | @@ -39,6 +40,7 @@ A Helm chart for deploying Pixelfed on Kubernetes | externalDatabase.port | int | `3306` | | | externalDatabase.username | string | `""` | | | externalValkey.client | string | `"phpredis"` | | +| externalValkey.enabled | bool | `false` | enable using an external valkey or redis cluster | | externalValkey.existingSecret | string | `""` | get valkey credentials from an existing Kubernetes Secret | | externalValkey.existingSecretKeys.host | string | `""` | key in existing Kubernetes Secret for host. If set, ignores externalValkey.host | | externalValkey.existingSecretKeys.password | string | `""` | key in existing Kubernetes Secret for password. If set, ignores externalValkey.password | @@ -188,4 +190,4 @@ A Helm chart for deploying Pixelfed on Kubernetes | volumes | list | `[]` | Additional volumes on the output Deployment definition. | ---------------------------------------------- -Autogenerated from chart metadata using [helm-docs v1.11.0](https://github.com/norwoodj/helm-docs/releases/v1.11.0) +Autogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2) diff --git a/charts/pixelfed/templates/secret_database.yaml b/charts/pixelfed/templates/secret_database.yaml new file mode 100644 index 0000000..d4767c6 --- /dev/null +++ b/charts/pixelfed/templates/secret_database.yaml @@ -0,0 +1,13 @@ +{{- if and .Values.externalDatabase.enabled ( not .Values.externalDatabase.existingSecret ) }} +--- +apiVersion: v1 +kind: Secret +metadata: + name: pixelfed-database +data: + host: {{ .Values.externalDatabase.host }} + port: {{ .Values.externalDatabase.port }} + database: {{ .Values.externalDatabase.database }} + username: {{ .Values.externalDatabase.username }} + password: {{ .Values.externalDatabase.password }} +{{- end }} diff --git a/charts/pixelfed/templates/secret_mail.yaml b/charts/pixelfed/templates/secret_mail.yaml new file mode 100644 index 0000000..7bd73cc --- /dev/null +++ b/charts/pixelfed/templates/secret_mail.yaml @@ -0,0 +1,12 @@ +{{- if not .Values.externalDatabase.existingSecret }} +--- +apiVersion: v1 +kind: Secret +metadata: + name: pixelfed-mail +data: + host: {{ .Values.pixelfed.mail.host }} + port: {{ .Values.pixelfed.mail.port }} + username: {{ .Values.pixelfed.mail.username }} + password: {{ .Values.pixelfed.mail.password }} +{{- end }} diff --git a/charts/pixelfed/templates/secret_valkey.yaml b/charts/pixelfed/templates/secret_valkey.yaml new file mode 100644 index 0000000..42daf3c --- /dev/null +++ b/charts/pixelfed/templates/secret_valkey.yaml @@ -0,0 +1,11 @@ +{{- if and .Values.externalValkey.enabled ( not .Values.externalValkey.existingSecret ) }} +--- +apiVersion: v1 +kind: Secret +metadata: + name: pixelfed-database +data: + host: {{ .Values.externalValkey.host }} + port: {{ .Values.externalValkey.port }} + password: {{ .Values.externalValkey.password }} +{{- end }} diff --git a/charts/pixelfed/values.yaml b/charts/pixelfed/values.yaml index 1f5f99e..677c869 100644 --- a/charts/pixelfed/values.yaml +++ b/charts/pixelfed/values.yaml @@ -123,6 +123,8 @@ tolerations: [] affinity: {} externalDatabase: + # -- enable using an external mysql or postgresql cluster + enabled: false # -- options: sqlite mysql pgsql sqlsrv connection: psql host: "" @@ -154,6 +156,8 @@ externalDatabase: # External Redis Configuration. Use this if you set valkey.enabled: false externalValkey: + # -- enable using an external valkey or redis cluster + enabled: false client: "phpredis" scheme: "tcp" host: "valkey" From 3f8d4f7a8b86877d25796c65307c0b396b831e3e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 29 Dec 2024 22:44:58 +0000 Subject: [PATCH 17/20] helm-docs: automated action --- charts/pixelfed/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/pixelfed/README.md b/charts/pixelfed/README.md index 8f37cdf..8643049 100644 --- a/charts/pixelfed/README.md +++ b/charts/pixelfed/README.md @@ -190,4 +190,4 @@ A Helm chart for deploying Pixelfed on Kubernetes | volumes | list | `[]` | Additional volumes on the output Deployment definition. | ---------------------------------------------- -Autogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2) +Autogenerated from chart metadata using [helm-docs v1.11.0](https://github.com/norwoodj/helm-docs/releases/v1.11.0) From 79da014aff7d9d3303e1ec325f51951d8af26f75 Mon Sep 17 00:00:00 2001 From: jessebot Date: Sun, 29 Dec 2024 23:45:11 +0100 Subject: [PATCH 18/20] fix valkey secret name --- charts/pixelfed/templates/secret_valkey.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/pixelfed/templates/secret_valkey.yaml b/charts/pixelfed/templates/secret_valkey.yaml index 42daf3c..5e39bc5 100644 --- a/charts/pixelfed/templates/secret_valkey.yaml +++ b/charts/pixelfed/templates/secret_valkey.yaml @@ -3,7 +3,7 @@ apiVersion: v1 kind: Secret metadata: - name: pixelfed-database + name: pixelfed-valkey data: host: {{ .Values.externalValkey.host }} port: {{ .Values.externalValkey.port }} From 260c104527fc7d7668fb43f19d67de3580ef2bcc Mon Sep 17 00:00:00 2001 From: jessebot Date: Sun, 29 Dec 2024 23:49:14 +0100 Subject: [PATCH 19/20] properly use external secrets for mail and database --- charts/pixelfed/templates/deployment.yaml | 41 ++++++++++++++++++----- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/charts/pixelfed/templates/deployment.yaml b/charts/pixelfed/templates/deployment.yaml index d09e968..81cdf14 100644 --- a/charts/pixelfed/templates/deployment.yaml +++ b/charts/pixelfed/templates/deployment.yaml @@ -201,7 +201,7 @@ spec: name: {{ .Values.pixelfed.mail.existingSecret }} key: {{ .Values.pixelfed.mail.existingSecretKeys.host }} {{- else }} - name: mail-secret + name: pixelfed-mail key: host {{- end }} - name: MAIL_PORT @@ -211,7 +211,7 @@ spec: name: {{ .Values.pixelfed.mail.existingSecret }} key: {{ .Values.pixelfed.mail.existingSecretKeys.port }} {{- else }} - name: mail-secret + name: pixelfed-mail key: port {{- end }} - name: MAIL_FROM_ADDRESS @@ -225,7 +225,7 @@ spec: name: {{ .Values.pixelfed.mail.existingSecret }} key: {{ .Values.pixelfed.mail.existingSecretKeys.username }} {{- else }} - name: mail-secret + name: pixelfed-mail key: username {{- end }} - name: MAIL_PASSWORD @@ -235,7 +235,7 @@ spec: name: {{ .Values.pixelfed.mail.existingSecret }} key: {{ .Values.pixelfed.mail.existingSecretKeys.password }} {{- else }} - name: mail-secret + name: pixelfed-mail key: password {{- end }} - name: MAIL_ENCRYPTION @@ -247,28 +247,53 @@ spec: - name: DB_HOST valueFrom: secretKeyRef: + {{- if .Values.externalDatabase.existingSecret }} name: {{ .Values.externalDatabase.existingSecret }} - key: {{ .Values.externalDatabase.existingSecretKeys.host }} + key: {{ .Values.externalDatabase.existingSecretKeys.username }} + {{- else }} + name: pixelfed-database + key: host + {{- end }} - name: DB_USERNAME valueFrom: secretKeyRef: + {{- if .Values.externalDatabase.existingSecret }} name: {{ .Values.externalDatabase.existingSecret }} key: {{ .Values.externalDatabase.existingSecretKeys.username }} + {{- else }} + name: pixelfed-database + key: username + {{- end }} - name: DB_PASSWORD valueFrom: secretKeyRef: + {{- if .Values.externalDatabase.existingSecret }} name: {{ .Values.externalDatabase.existingSecret }} - key: {{ .Values.externalDatabase.existingSecretKeys.password }} + key: {{ .Values.externalDatabase.existingSecretKeys.username }} + {{- else }} + name: pixelfed-database + key: password + {{- end }} - name: DB_DATABASE valueFrom: secretKeyRef: + {{- if .Values.externalDatabase.existingSecret }} name: {{ .Values.externalDatabase.existingSecret }} - key: {{ .Values.externalDatabase.existingSecretKeys.database }} + key: {{ .Values.externalDatabase.existingSecretKeys.username }} + {{- else }} + name: pixelfed-database + key: database + {{- end }} - name: DB_PORT valueFrom: secretKeyRef: + {{- if .Values.externalDatabase.existingSecret }} name: {{ .Values.externalDatabase.existingSecret }} - key: {{ .Values.externalDatabase.existingSecretKeys.port }} + key: {{ .Values.externalDatabase.existingSecretKeys.username }} + {{- else }} + name: pixelfed-database + key: port + {{- end }} - name: DB_APPLY_NEW_MIGRATIONS_AUTOMATICALLY value: "{{ .Values.pixelfed.db_apply_new_migrations_automatically }}" From 6cbd9a3f09d619533f327d62666ca7cb27c6c036 Mon Sep 17 00:00:00 2001 From: jessebot Date: Sun, 29 Dec 2024 23:52:31 +0100 Subject: [PATCH 20/20] clean up valkey secret reference in deployment --- charts/pixelfed/templates/deployment.yaml | 36 +++++++++++++++++------ 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/charts/pixelfed/templates/deployment.yaml b/charts/pixelfed/templates/deployment.yaml index 81cdf14..84c6105 100644 --- a/charts/pixelfed/templates/deployment.yaml +++ b/charts/pixelfed/templates/deployment.yaml @@ -178,18 +178,36 @@ spec: value: {{ .Values.pixelfed.activity_pub.outbox | quote }} # redis - {{- with .Values.externalValkey.host }} - name: REDIS_HOST - value: {{ . }} - {{- end }} - {{- with .Values.externalValkey.port }} + valueFrom: + secretKeyRef: + {{- if .Values.externalValkey.existingSecret }} + name: {{ .Values.externalValkey.existingSecret }} + key: {{ .Values.externalValkey.existingSecretKeys.host }} + {{- else }} + name: pixelfed-valkey + key: host + {{- end }} - name: REDIS_PORT - value: {{ . }} - {{- end }} - {{- with .Values.externalValkey.password }} + valueFrom: + secretKeyRef: + {{- if .Values.externalValkey.existingSecret }} + name: {{ .Values.externalValkey.existingSecret }} + key: {{ .Values.externalValkey.existingSecretKeys.port }} + {{- else }} + name: pixelfed-valkey + key: port + {{- end }} - name: REDIS_PASSWORD - value: {{ . }} - {{- end }} + valueFrom: + secretKeyRef: + {{- if .Values.externalValkey.existingSecret }} + name: {{ .Values.externalValkey.existingSecret }} + key: {{ .Values.externalValkey.existingSecretKeys.password }} + {{- else }} + name: pixelfed-valkey + key: password + {{- end }} # mail - name: MAIL_DRIVER