From da823e7898a1415946090f1843e2dda68f1be1ca Mon Sep 17 00:00:00 2001 From: alxeg Date: Sun, 22 Mar 2026 19:29:27 +0300 Subject: [PATCH] Test local llm to generate some content --- README.md | 167 +++++++++++++++++++++++++++ helm-chart/Chart.yaml | 6 + helm-chart/README.md | 92 +++++++++++++++ helm-chart/templates/NOTES.txt | 29 +++++ helm-chart/templates/_helpers.tpl | 61 ++++++++++ helm-chart/templates/configmap.yaml | 47 ++++++++ helm-chart/templates/deployment.yaml | 151 ++++++++++++++++++++++++ helm-chart/templates/ingress.yaml | 41 +++++++ helm-chart/templates/secret.yaml | 13 +++ helm-chart/templates/service.yaml | 15 +++ helm-chart/values.yaml | 110 ++++++++++++++++++ 11 files changed, 732 insertions(+) create mode 100644 README.md create mode 100644 helm-chart/Chart.yaml create mode 100644 helm-chart/README.md create mode 100644 helm-chart/templates/NOTES.txt create mode 100644 helm-chart/templates/_helpers.tpl create mode 100644 helm-chart/templates/configmap.yaml create mode 100644 helm-chart/templates/deployment.yaml create mode 100644 helm-chart/templates/ingress.yaml create mode 100644 helm-chart/templates/secret.yaml create mode 100644 helm-chart/templates/service.yaml create mode 100644 helm-chart/values.yaml diff --git a/README.md b/README.md new file mode 100644 index 0000000..9fd4d77 --- /dev/null +++ b/README.md @@ -0,0 +1,167 @@ +# Payouts Service + +## API Endpoints + +### User Management + +#### Register User +- **Path**: `/api/v1/user/register` +- **Method**: POST +- **Request Parameters**: + ```json + { + "tin": "string", + "phone": "string", + "password": "string", + "password_cfm": "string" + } + ``` +- **Response Parameters**: + ```json + { + "status": "string" + } + ``` +- **Curl Example**: + ```bash + curl -X POST http://localhost:8080/api/v1/user/register \ + -H "Content-Type: application/json" \ + -d '{"tin":"1234567890","phone":"+79991234567","password":"password123","password_cfm":"password123"}' + ``` + +#### User Login +- **Path**: `/api/v1/user/login` +- **Method**: POST +- **Request Parameters**: + ```json + { + "phone": "string", + "password": "string" + } + ``` +- **Response Parameters**: + ```json + { + "token": "string", + "token_ttl": "integer" + } + ``` +- **Curl Example**: + ```bash + curl -X POST http://localhost:8080/api/v1/user/login \ + -H "Content-Type: application/json" \ + -d '{"phone":"+79991234567","password":"password123"}' + ``` + +### Payout Operations + +#### Get SBP Banks +- **Path**: `/api/v1/payout/sbp/banks` +- **Method**: GET +- **Request Parameters**: None +- **Response Parameters**: + ```json + { + "type": "string", + "items": [ + { + "bank_id": "string", + "name": "string", + "bic": "string" + } + ] + } + ``` +- **Curl Example**: + ```bash + curl -X GET http://localhost:8080/api/v1/payout/sbp/banks + ``` + +#### Create Payout +- **Path**: `/api/v1/payout/create` +- **Method**: POST +- **Request Parameters**: + ```json + { + "payout_type": "string (spb or yoo_money)", + "account_number": "string (required for yoo_money)", + "bank_id": "string (required for spb)", + "amount": "float" + } + ``` +- **Response Parameters**: + ```json + { + "payout_id": "string", + "payout_status": "string" + } + ``` +- **Curl Example**: + ```bash + curl -X POST http://localhost:8080/api/v1/payout/create \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer " \ + -d '{"payout_type":"spb","bank_id":"123456","amount":1000.00}' + ``` + +#### Payout Callback +- **Path**: `/api/v1/payout/callback` +- **Method**: POST +- **Request Parameters**: YooKassa webhook data (JSON) +- **Response Parameters**: None +- **Curl Example**: + ```bash + curl -X POST http://localhost:8080/api/v1/payout/callback \ + -H "Content-Type: application/json" \ + -d '{"id":"payout_123456","status":"succeeded","amount":{"value":"1000.00","currency":"RUB"}}' + ``` + +## Service Configuration + +### Server Configuration +| Property | Description | Default Value | +|----------|-------------|---------------| +| Server.Tls.Enabled | Enable TLS for the server | true | +| Server.Tls.CertFile | Path to TLS certificate file | ../server.pem | +| Server.Tls.KeyFile | Path to TLS key file | ../server-key.pem | +| Server.Port | Server port | :8080 | +| Server.WriteTimeout | Write timeout for requests | 30s | +| Server.ReadTimeout | Read timeout for requests | 30s | +| Server.EnablePProfEndpoints | Enable pprof debug endpoints | false | + +### Database Configuration +| Property | Description | Default Value | +|----------|-------------|---------------| +| Database.Type | Database type (sqlite, postgres, mysql) | sqlite | +| Database.Connection | Database connection string | ../payouts.db | +| Database.LogLevel | Database logging level | Debug | +| Database.TraceRequests | Enable request tracing | true | + +### YooKassa Configuration +| Property | Description | Default Value | +|----------|-------------|---------------| +| YooKassa.Test | Enable test mode | true | +| YooKassa.ApiBaseKey | YooKassa base API key | (empty) | +| YooKassa.ApiBaseSecret | YooKassa base API secret | (empty) | +| YooKassa.ApiPaymentKey | YooKassa payment API key | (empty) | +| YooKassa.ApiPaymentSecret | YooKassa payment API secret | (empty) | +| YooKassa.BaseUrl | YooKassa API base URL | https://api.yookassa.ru/v3 | +| YooKassa.Timeout | Request timeout | 30s | +| YooKassa.CheckAllowedCallbackAddress | Check callback IP addresses | false | +| YooKassa.AllowedCallbackSubnets | Allowed callback IP subnets | (empty) | +| YooKassa.CallbackProcessTimeout | Callback processing timeout | 5s | +| YooKassa.Retry.Enabled | Enable request retries | false | +| YooKassa.Retry.Count | Number of retry attempts | 3 | +| YooKassa.Retry.WaitTime | Initial wait time between retries | 1s | +| YooKassa.Retry.MaxWaitTime | Maximum wait time between retries | 30s | + +### Cache Configuration +| Property | Description | Default Value | +|----------|-------------|---------------| +| Cache.TTL | Session TTL | 1h | + +### Logging Configuration +| Property | Description | Default Value | +|----------|-------------|---------------| +| Log.Level | Log level | info | +| Log.Format | Log format (json, text) | json | \ No newline at end of file diff --git a/helm-chart/Chart.yaml b/helm-chart/Chart.yaml new file mode 100644 index 0000000..0365cc4 --- /dev/null +++ b/helm-chart/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v2 +name: payouts +description: A Helm chart for the payouts service +type: application +version: 0.1.0 +appVersion: "1.0.0" \ No newline at end of file diff --git a/helm-chart/README.md b/helm-chart/README.md new file mode 100644 index 0000000..9c43960 --- /dev/null +++ b/helm-chart/README.md @@ -0,0 +1,92 @@ +# Payouts Helm Chart + +This chart deploys the payouts service to a Kubernetes cluster using Helm. + +## Introduction + +This chart bootstraps a payouts service deployment on a Kubernetes cluster using the Helm package manager. + +## Prerequisites + +- Kubernetes 1.19+ +- Helm 3.0+ + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```bash +helm install my-release . +``` + +The command deploys the payouts service on the Kubernetes cluster in the default configuration. The [Values](#values) section lists the parameters that can be configured during installation. + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```bash +helm delete my-release +``` + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| replicaCount | int | `1` | Number of replicas | +| image.repository | string | `"payouts"` | Image repository | +| image.tag | string | `"latest"` | Image tag | +| image.pullPolicy | string | `"IfNotPresent"` | Image pull policy | +| service.type | string | `"ClusterIP"` | Service type | +| service.port | int | `8080` | Service port | +| ingress.enabled | bool | `false` | Enable ingress | +| ingress.className | string | `""` | Ingress class name | +| ingress.hosts[0].host | string | `"chart-example.local"` | Ingress host | +| ingress.hosts[0].paths[0].path | string | `"/"` | Ingress path | +| ingress.hosts[0].paths[0].pathType | string | `"ImplementationSpecific"` | Ingress path type | +| server.port | string | `":8080"` | Server port | +| server.writeTimeout | string | `"35s"` | Server write timeout | +| server.readTimeout | string | `"35s"` | Server read timeout | +| server.enablePProfEndpoints | bool | `false` | Enable pprof endpoints | +| database.type | string | `""` | Database type | +| database.connection | string | `""` | Database connection string | +| database.logLevel | string | `"Info"` | Database log level | +| database.traceRequests | bool | `false` | Trace database requests | +| cache.ttl | string | `"24h"` | Cache TTL | +| log.level | string | `"DEBUG"` | Log level | +| log.filePath | string | `"./logs/payouts.log"` | Log file path | +| log.textOutput | bool | `false` | Text output format | +| log.stdoutEnabled | bool | `true` | Enable stdout logging | +| log.fileEnabled | bool | `false` | Enable file logging | +| log.fluentEnabled | bool | `false` | Enable fluent logging | +| metrics.endpoint | string | `"/metrics"` | Metrics endpoint | +| metrics.histogramBuckets | string | `"0.001,0.002,0.005,0.01,0.025,0.05,0.1,0.25,0.5,1,2.5,5,10"` | Histogram buckets | +| metrics.http.histogramEnabled | bool | `true` | Enable HTTP histogram | +| metrics.http.buckets | string | `"0.001,0.002,0.005,0.01,0.025,0.05,0.1,0.25,0.5,1,2.5,5,10"` | HTTP buckets | +| yookassa.baseUrl | string | `"https://api.yookassa.ru/v3"` | YooKassa base URL | +| yookassa.timeout | string | `"2s"` | YooKassa timeout | +| yookassa.retry.enabled | bool | `false` | Enable retry | +| yookassa.retry.count | int | `3` | Retry count | +| yookassa.retry.waitTime | string | `"200ms"` | Retry wait time | +| yookassa.retry.maxWaitTime | string | `"5s"` | Max retry wait time | +| yookassa.test | bool | `false` | Test mode | +| yookassa.checkAllowedCallbackAddress | bool | `true` | Check callback address | +| yookassa.allowedCallbackSubnets | string | `"185.71.76.0/27,185.71.77.0/27,77.75.153.0/25,77.75.156.11/32,77.75.156.35/32,77.75.154.128/25,2a02:5180::/32"` | Allowed callback subnets | +| yookassa.callbackProcessTimeout | string | `"1s"` | Callback process timeout | + +## Secrets + +The following secrets are used for sensitive configuration and must be provided via Kubernetes secrets: + +- `yookassa-base-key`: YooKassa base API key +- `yookassa-base-secret`: YooKassa base API secret +- `yookassa-payment-key`: YooKassa payment API key +- `yookassa-payment-secret`: YooKassa payment API secret + +Example to create the secret: +```bash +kubectl create secret generic payouts-secrets \ + --from-literal=yookassa-base-key='YOUR_BASE_KEY' \ + --from-literal=yookassa-base-secret='YOUR_BASE_SECRET' \ + --from-literal=yookassa-payment-key='YOUR_PAYMENT_KEY' \ + --from-literal=yookassa-payment-secret='YOUR_PAYMENT_SECRET' \ No newline at end of file diff --git a/helm-chart/templates/NOTES.txt b/helm-chart/templates/NOTES.txt new file mode 100644 index 0000000..bf781f8 --- /dev/null +++ b/helm-chart/templates/NOTES.txt @@ -0,0 +1,29 @@ +Thank you for installing {{ .Chart.Name }}. + +Your release is named {{ .Release.Name }}. + +To get started with your service, you can: + +1. Check the status of your deployment: + helm status {{ .Release.Name }} + +2. Get the service URL: + kubectl get svc {{ include "payouts.fullname" . }} + +3. Access your service logs: + kubectl logs -l app={{ include "payouts.fullname" . }} + +4. To view the configuration, check the ConfigMap: + kubectl get configmap {{ include "payouts.fullname" . }}-config -o yaml + +5. To update your secrets (YooKassa API keys), create a secret with: + kubectl create secret generic {{ include "payouts.fullname" . }}-secrets \\ + --from-literal=yookassa-base-key='YOUR_BASE_KEY' \\ + --from-literal=yookassa-base-secret='YOUR_BASE_SECRET' \\ + --from-literal=yookassa-payment-key='YOUR_PAYMENT_KEY' \\ + --from-literal=yookassa-payment-secret='YOUR_PAYMENT_SECRET' + +6. To access your service via ingress (if enabled), check the ingress rules: + kubectl get ingress {{ include "payouts.fullname" . }} + +For more information, please refer to the documentation. \ No newline at end of file diff --git a/helm-chart/templates/_helpers.tpl b/helm-chart/templates/_helpers.tpl new file mode 100644 index 0000000..40582f3 --- /dev/null +++ b/helm-chart/templates/_helpers.tpl @@ -0,0 +1,61 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "payouts.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "payouts.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "payouts.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "payouts.labels" -}} +helm.sh/chart: {{ include "payouts.chart" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "payouts.selectorLabels" -}} +app.kubernetes.io/name: {{ include "payouts.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Service account name +*/}} +{{- define "payouts.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "payouts.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} \ No newline at end of file diff --git a/helm-chart/templates/configmap.yaml b/helm-chart/templates/configmap.yaml new file mode 100644 index 0000000..bec9e64 --- /dev/null +++ b/helm-chart/templates/configmap.yaml @@ -0,0 +1,47 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ include "payouts.fullname" . }}-config + labels: + {{- include "payouts.labels" . | nindent 4 }} +data: + # Server configuration + SERVER_PORT: {{ .Values.server.port | quote }} + SERVER_WRITETIMEOUT: {{ .Values.server.writeTimeout | quote }} + SERVER_READTIMEOUT: {{ .Values.server.readTimeout | quote }} + SERVER_ENABLEPPROFENDPOINTS: {{ .Values.server.enablePProfEndpoints | quote }} + + # Database configuration + DATABASE_TYPE: {{ .Values.database.type | quote }} + DATABASE_CONNECTION: {{ .Values.database.connection | quote }} + DATABASE_LOGLEVEL: {{ .Values.database.logLevel | quote }} + DATABASE_TRACEREQUESTS: {{ .Values.database.traceRequests | quote }} + + # Cache configuration + CACHE_TTL: {{ .Values.cache.ttl | quote }} + + # Logging configuration + LOG_LEVEL: {{ .Values.log.level | quote }} + LOG_FILEPATH: {{ .Values.log.filePath | quote }} + LOG_TEXTOUTPUT: {{ .Values.log.textOutput | quote }} + LOG_STDOUTENABLED: {{ .Values.log.stdoutEnabled | quote }} + LOG_FILEENABLED: {{ .Values.log.fileEnabled | quote }} + LOG_FLUENTENABLED: {{ .Values.log.fluentEnabled | quote }} + + # Metrics configuration + METRICS_ENDPOINT: {{ .Values.metrics.endpoint | quote }} + METRICS_HISTOGRAMBUCKETS: {{ .Values.metrics.histogramBuckets | quote }} + METRICS_HTTP_HISTOGRAMENABLED: {{ .Values.metrics.http.histogramEnabled | quote }} + METRICS_HTTP_BUCKETS: {{ .Values.metrics.http.buckets | quote }} + + # YooKassa configuration + YOOKASSA_BASEURL: {{ .Values.yookassa.baseUrl | quote }} + YOOKASSA_TIMEOUT: {{ .Values.yookassa.timeout | quote }} + YOOKASSA_RETRY_ENABLED: {{ .Values.yookassa.retry.enabled | quote }} + YOOKASSA_RETRY_COUNT: {{ .Values.yookassa.retry.count | quote }} + YOOKASSA_RETRY_WAITTIME: {{ .Values.yookassa.retry.waitTime | quote }} + YOOKASSA_RETRY_MAXWAITTIME: {{ .Values.yookassa.retry.maxWaitTime | quote }} + YOOKASSA_TEST: {{ .Values.yookassa.test | quote }} + YOOKASSA_CHECKALLOWEDCALLBACKADDRESS: {{ .Values.yookassa.checkAllowedCallbackAddress | quote }} + YOOKASSA_ALLOWEDCALLBACKSUBNETS: {{ .Values.yookassa.allowedCallbackSubnets | quote }} + YOOKASSA_CALLBACKPROCESSTIMEOUT: {{ .Values.yookassa.callbackProcessTimeout | quote }} \ No newline at end of file diff --git a/helm-chart/templates/deployment.yaml b/helm-chart/templates/deployment.yaml new file mode 100644 index 0000000..195bd86 --- /dev/null +++ b/helm-chart/templates/deployment.yaml @@ -0,0 +1,151 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "payouts.fullname" . }} + labels: + {{- include "payouts.labels" . | nindent 4 }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + {{- include "payouts.selectorLabels" . | nindent 6 }} + template: + metadata: + {{- with .Values.podAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + {{- include "payouts.selectorLabels" . | nindent 8 }} + spec: + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + serviceAccountName: {{ include "payouts.serviceAccountName" . }} + securityContext: + {{- toYaml .Values.podSecurityContext | nindent 8 }} + containers: + - name: {{ .Chart.Name }} + securityContext: + {{- toYaml .Values.securityContext | nindent 12 }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: {{ .Values.server.port | replace ":" "" }} + protocol: TCP + livenessProbe: + httpGet: + path: /health + port: http + readinessProbe: + httpGet: + path: /ready + port: http + env: + # Server configuration + - name: SERVER_PORT + value: {{ .Values.server.port | quote }} + - name: SERVER_WRITETIMEOUT + value: {{ .Values.server.writeTimeout | quote }} + - name: SERVER_READTIMEOUT + value: {{ .Values.server.readTimeout | quote }} + - name: SERVER_ENABLEPPROFENDPOINTS + value: {{ .Values.server.enablePProfEndpoints | quote }} + + # Database configuration + - name: DATABASE_TYPE + value: {{ .Values.database.type | quote }} + - name: DATABASE_CONNECTION + value: {{ .Values.database.connection | quote }} + - name: DATABASE_LOGLEVEL + value: {{ .Values.database.logLevel | quote }} + - name: DATABASE_TRACEREQUESTS + value: {{ .Values.database.traceRequests | quote }} + + # Cache configuration + - name: CACHE_TTL + value: {{ .Values.cache.ttl | quote }} + + # Logging configuration + - name: LOG_LEVEL + value: {{ .Values.log.level | quote }} + - name: LOG_FILEPATH + value: {{ .Values.log.filePath | quote }} + - name: LOG_TEXTOUTPUT + value: {{ .Values.log.textOutput | quote }} + - name: LOG_STDOUTENABLED + value: {{ .Values.log.stdoutEnabled | quote }} + - name: LOG_FILEENABLED + value: {{ .Values.log.fileEnabled | quote }} + - name: LOG_FLUENTENABLED + value: {{ .Values.log.fluentEnabled | quote }} + + # Metrics configuration + - name: METRICS_ENDPOINT + value: {{ .Values.metrics.endpoint | quote }} + - name: METRICS_HISTOGRAMBUCKETS + value: {{ .Values.metrics.histogramBuckets | quote }} + - name: METRICS_HTTP_HISTOGRAMENABLED + value: {{ .Values.metrics.http.histogramEnabled | quote }} + - name: METRICS_HTTP_BUCKETS + value: {{ .Values.metrics.http.buckets | quote }} + + # YooKassa configuration + - name: YOOKASSA_BASEURL + value: {{ .Values.yookassa.baseUrl | quote }} + - name: YOOKASSA_TIMEOUT + value: {{ .Values.yookassa.timeout | quote }} + - name: YOOKASSA_RETRY_ENABLED + value: {{ .Values.yookassa.retry.enabled | quote }} + - name: YOOKASSA_RETRY_COUNT + value: {{ .Values.yookassa.retry.count | quote }} + - name: YOOKASSA_RETRY_WAITTIME + value: {{ .Values.yookassa.retry.waitTime | quote }} + - name: YOOKASSA_RETRY_MAXWAITTIME + value: {{ .Values.yookassa.retry.maxWaitTime | quote }} + - name: YOOKASSA_TEST + value: {{ .Values.yookassa.test | quote }} + - name: YOOKASSA_CHECKALLOWEDCALLBACKADDRESS + value: {{ .Values.yookassa.checkAllowedCallbackAddress | quote }} + - name: YOOKASSA_ALLOWEDCALLBACKSUBNETS + value: {{ .Values.yookassa.allowedCallbackSubnets | quote }} + - name: YOOKASSA_CALLBACKPROCESSTIMEOUT + value: {{ .Values.yookassa.callbackProcessTimeout | quote }} + + # Secrets from Kubernetes secrets + - name: YOOKASSA_APIBASEKEY + valueFrom: + secretKeyRef: + name: {{ include "payouts.fullname" . }}-secrets + key: yookassa-base-key + - name: YOOKASSA_APIBASESECRET + valueFrom: + secretKeyRef: + name: {{ include "payouts.fullname" . }}-secrets + key: yookassa-base-secret + - name: YOOKASSA_APIPAYMENTKEY + valueFrom: + secretKeyRef: + name: {{ include "payouts.fullname" . }}-secrets + key: yookassa-payment-key + - name: YOOKASSA_APIPAYMENTSECRET + valueFrom: + secretKeyRef: + name: {{ include "payouts.fullname" . }}-secrets + key: yookassa-payment-secret + resources: + {{- toYaml .Values.resources | nindent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} \ No newline at end of file diff --git a/helm-chart/templates/ingress.yaml b/helm-chart/templates/ingress.yaml new file mode 100644 index 0000000..e5a4d8d --- /dev/null +++ b/helm-chart/templates/ingress.yaml @@ -0,0 +1,41 @@ +{{- if .Values.ingress.enabled -}} +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: {{ include "payouts.fullname" . }} + labels: + {{- include "payouts.labels" . | nindent 4 }} + {{- with .Values.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- if .Values.ingress.className }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} + {{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . | quote }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} + {{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ .host | quote }} + http: + paths: + {{- range .paths }} + - path: {{ .path }} + pathType: {{ .pathType }} + backend: + service: + name: {{ include "payouts.fullname" $ }} + port: + number: {{ $.Values.service.port }} + {{- end }} + {{- end }} +{{- end }} \ No newline at end of file diff --git a/helm-chart/templates/secret.yaml b/helm-chart/templates/secret.yaml new file mode 100644 index 0000000..cb534b1 --- /dev/null +++ b/helm-chart/templates/secret.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Secret +metadata: + name: {{ include "payouts.fullname" . }}-secrets + labels: + {{- include "payouts.labels" . | nindent 4 }} +type: Opaque +data: + # YooKassa API keys (these will be base64 encoded when applied) + yookassa-base-key: {{ .Values.secrets.yookassa.baseKey | b64enc | quote }} + yookassa-base-secret: {{ .Values.secrets.yookassa.baseSecret | b64enc | quote }} + yookassa-payment-key: {{ .Values.secrets.yookassa.paymentKey | b64enc | quote }} + yookassa-payment-secret: {{ .Values.secrets.yookassa.paymentSecret | b64enc | quote }} \ No newline at end of file diff --git a/helm-chart/templates/service.yaml b/helm-chart/templates/service.yaml new file mode 100644 index 0000000..fc8e81a --- /dev/null +++ b/helm-chart/templates/service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "payouts.fullname" . }} + labels: + {{- include "payouts.labels" . | nindent 4 }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + {{- include "payouts.selectorLabels" . | nindent 4 }} \ No newline at end of file diff --git a/helm-chart/values.yaml b/helm-chart/values.yaml new file mode 100644 index 0000000..18d6dc8 --- /dev/null +++ b/helm-chart/values.yaml @@ -0,0 +1,110 @@ +# Default values for payouts chart +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: payouts + tag: latest + pullPolicy: IfNotPresent + +service: + type: ClusterIP + port: 8080 + +ingress: + enabled: false + className: "" + hosts: + - host: chart-example.local + paths: + - path: / + pathType: ImplementationSpecific + tls: [] + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 100 + targetCPUUtilizationPercentage: 80 + +nodeSelector: {} + +tolerations: [] + +affinity: {} + +# Server configuration +server: + port: ":8080" + writeTimeout: "35s" + readTimeout: "35s" + enablePProfEndpoints: false + +# Database configuration +database: + type: "" + connection: "" + logLevel: "Info" + traceRequests: false + +# Cache configuration +cache: + ttl: "24h" + +# Logging configuration +log: + level: "DEBUG" + filePath: "./logs/payouts.log" + textOutput: false + stdoutEnabled: true + fileEnabled: false + fluentEnabled: false + +# Metrics configuration +metrics: + endpoint: "/metrics" + histogramBuckets: "0.001,0.002,0.005,0.01,0.025,0.05,0.1,0.25,0.5,1,2.5,5,10" + http: + histogramEnabled: true + buckets: "0.001,0.002,0.005,0.01,0.025,0.05,0.1,0.25,0.5,1,2.5,5,10" + +# YooKassa configuration +yookassa: + baseUrl: "https://api.yookassa.ru/v3" + timeout: "2s" + retry: + enabled: false + count: 3 + waitTime: "200ms" + maxWaitTime: "5s" + test: false + checkAllowedCallbackAddress: true + allowedCallbackSubnets: "185.71.76.0/27,185.71.77.0/27,77.75.153.0/25,77.75.156.11/32,77.75.156.35/32,77.75.154.128/25,2a02:5180::/32" + apiBaseKey: "" + apiBaseSecret: "" + apiPaymentKey: "" + apiPaymentSecret: "" + callbackProcessTimeout: "1s" + +# Secrets that should be stored in Kubernetes secrets +secrets: + # YooKassa API keys (these will be stored in Kubernetes secrets) + yookassa: + baseKey: "" + baseSecret: "" + paymentKey: "" + paymentSecret: "" \ No newline at end of file