diff --git a/yonote-chart/templates/traefic-http-to-https-redirect-middleware.yaml b/traefic-http-to-https-redirect-middleware.yaml similarity index 100% rename from yonote-chart/templates/traefic-http-to-https-redirect-middleware.yaml rename to traefic-http-to-https-redirect-middleware.yaml diff --git a/yonote-chart/templates/traefik-wss-headers-middleware.yaml b/traefik-wss-headers-middleware.yaml similarity index 100% rename from yonote-chart/templates/traefik-wss-headers-middleware.yaml rename to traefik-wss-headers-middleware.yaml diff --git a/yonote-chart/Chart.lock b/yonote-chart/Chart.lock index 80c7196..c67545f 100644 --- a/yonote-chart/Chart.lock +++ b/yonote-chart/Chart.lock @@ -20,11 +20,8 @@ dependencies: - name: redis repository: https://charts.bitnami.com/bitnami version: 16.12.1 -- name: app - repository: https://dysnix.github.io/charts - version: 0.3.15 - name: minio repository: https://charts.bitnami.com/bitnami version: 14.6.20 -digest: sha256:022c18f3135baeab718569f7118bbe95a3fe0171329f4617c2e8e99bbf5c5d6e -generated: "2024-07-15T18:23:07.749459565+03:00" +digest: sha256:ac298eab717f006b97255703008f8d675b5e0603afa5b755673455012d6d3693 +generated: "2024-07-16T12:06:23.7878103+03:00" diff --git a/yonote-chart/Chart.yaml b/yonote-chart/Chart.yaml index 3b84f88..25064f6 100644 --- a/yonote-chart/Chart.yaml +++ b/yonote-chart/Chart.yaml @@ -47,12 +47,6 @@ dependencies: condition: yonote-redis.enabled alias: yonote-redis - - name: app - version: "0.3.15" - repository: https://dysnix.github.io/charts - condition: keycloak.enabled - alias: keycloak - - name: minio version: "14.6.20" repository: https://charts.bitnami.com/bitnami diff --git a/yonote-chart/secret-values.yaml b/yonote-chart/secret-values.yaml index d767534..c21f90f 100644 --- a/yonote-chart/secret-values.yaml +++ b/yonote-chart/secret-values.yaml @@ -3,32 +3,29 @@ global: config: secret: stringData: - DATABASE_URL: 'postgres://{{ .Values.global.postgresql.auth.username }}:{{ .Values.global.postgresql.auth.password }}@yonote-db/{{ .Values.global.postgresql.auth.database }}' + DATABASE_URL: 'postgres://{{ .Values.global.postgresql.auth.username }}:{{ .Values.global.postgresql.auth.password }}@yonote-db:5432/{{ .Values.global.postgresql.auth.database }}' POSTGRES_PASSWORD: wsGZ6kXhr5 AWS_ACCESS_KEY_ID: "" # Ваш идентификатор ключа доступа к AWS. Поведение в SelfHosted: устанавливает логин сервис аккаунта для доступа приложения к Minio S3 хранилищу - AWS_SECRET_ACCESS_KEY: "" # Ваш секретный ключ доступа AWS. Поведение в SelfHosted: устанавливает пароль сервис аккаунта для доступа приложения к Minio S3 хранилищу - OIDC_CLIENT_SECRET: "" - SECRET_KEY: "" # Сгенерируйте 32-байтовый случайный ключ в шестнадцатеричном коде. Вам следует использовать `openssl rand -hex 32` в вашем терминале для генерации случайного значения. - SMTP_PASSWORD: "" - UTILS_SECRET: "" # Сгенерируйте уникальный случайный ключ. Формат не важен, но вы все равно можете использовать`openssl rand -hex 32` в вашем терминале, чтобы создать это. - TELEGRAM_BOT_TOKEN: "" - UNSPLASH_API_ACCESS_KEY: "" + AWS_SECRET_ACCESS_KEY: "minioadmin" # Ваш секретный ключ доступа AWS. Поведение в SelfHosted: устанавливает пароль сервис аккаунта для доступа приложения к Minio S3 хранилищу + OIDC_CLIENT_SECRET: "minioadminsecret" + SECRET_KEY: "659a8881b186198c3146e316f6dab67df25496534d1fa156d624b037260df688" # Сгенерируйте 32-байтовый случайный ключ в шестнадцатеричном коде. Вам следует использовать `openssl rand -hex 32` в вашем терминале для генерации случайного значения. + SMTP_PASSWORD: "1234" + UTILS_SECRET: "7bd5e9ac4415dd0dbf6b7721e2a21e9427b268cd0140c7516d13dece5024d479" # Сгенерируйте уникальный случайный ключ. Формат не важен, но вы все равно можете использовать`openssl rand -hex 32` в вашем терминале, чтобы создать это. + TELEGRAM_BOT_TOKEN: "1234" + UNSPLASH_API_ACCESS_KEY: "a-yGo6HpRP6jNfravx4Bz-oiPrRnH_5-24Xa9ZPlePE" LICENSE_KEY: "" # Обратитесь в отдел продаж для получения - SERVICE_WORKER_PUBLIC_KEY: "" - SERVICE_WORKER_PRIVATE_KEY: "" + SERVICE_WORKER_PUBLIC_KEY: "1234" + SERVICE_WORKER_PRIVATE_KEY: "1234" # Генерация ключей (web-push) Service Worker # 1) Установить Node.js и npm # 2) Выполнить команду для генерации ключей # npx web-push generate-vapid-keys # 3) Полученные значения ввести в .env файл (SERVICE_WORKER_PUBLIC_KEY, SERVICE_WORKER_PRIVATE_KEY) - keycloak: - config: - secret: - stringData: - KEYCLOAK_ADMIN_PASSWORD: 12345 - KC_DB_PASSWORD: 1234 postgresql: auth: - password: wsGZ6kXhr5 - postgresPassword: QQYw4UjOU \ No newline at end of file + password: "wsGZ6kXhr5" + postgresPassword: "QQYw4UjOU" + + + \ No newline at end of file diff --git a/yonote-chart/values.yaml b/yonote-chart/values.yaml index 2feee39..a183892 100644 --- a/yonote-chart/values.yaml +++ b/yonote-chart/values.yaml @@ -7,14 +7,10 @@ global: yonote: ingress: - ingressClassName: traefik + ingressClassName: nginx dbMigrationEnv: production-ssl-disabled # Режим подключения к базе данных при выполнении миграций. При использовании SSL подключения, установите значение `production` - keycloak: - hostName: auth.example.com - realmName: yonote - baseListenAddress: example.com config: @@ -32,8 +28,8 @@ global: DEFAULT_LANGUAGE: ru_RU # Язык по умолчанию ENABLE_UPDATES: "false" - AI_URL: 1234 - AI_API_KEY: 1234 + AI_URL: "1234" + AI_API_KEY: "1234" URL: 'http://app.{{ .Values.global.yonote.baseListenAddress }}' # Базовый url приложения COLLABORATION_URL: 'wss://app.{{ .Values.global.yonote.baseListenAddress }}' # Cервер, для нормальной работы это не нужно устанавливать @@ -41,19 +37,19 @@ global: OIDC_DISPLAY_NAME: email OIDC_SCOPES: openid email OIDC_CLIENT_ID: yonote - OIDC_AUTH_URI: 'http://{{ .Values.global.yonote.keycloak.hostName }}/realms/{{ .Values.global.yonote.keycloak.realmName }}/protocol/openid-connect/auth' - OIDC_LOGOUT_URI: 'http://{{ .Values.global.yonote.keycloak.hostName }}/realms/{{ .Values.global.yonote.keycloak.realmName }}/protocol/openid-connect/logout' - OIDC_TOKEN_URI: 'http://{{ .Values.global.yonote.keycloak.hostName }}/realms/{{ .Values.global.yonote.keycloak.realmName }}/protocol/openid-connect/token' - OIDC_USERINFO_URI: 'http://{{ .Values.global.yonote.keycloak.hostName }}/realms/{{ .Values.global.yonote.keycloak.realmName }}/protocol/openid-connect/userinfo' + OIDC_AUTH_URI: 'yonote-keycloak:8080/realms/yonote/protocol/openid-connect/auth' + OIDC_LOGOUT_URI: 'yonote-keycloak:8080/realms/yonote/protocol/openid-connect/logout' + OIDC_TOKEN_URI: 'yonote-keycloak:8080/realms/yonote/protocol/openid-connect/token' + OIDC_USERINFO_URI: 'yonote-keycloak:8080/realms/yonote/protocol/openid-connect/userinfo' AWS_S3_ACL: private - AWS_S3_UPLOAD_BUCKET_URL: example-url-s3 # Адрес S3 хранилища - AWS_S3_UPLOAD_BUCKET_NAME: yonote-bucket # Имя хранилища - полный URL = http://127.0.0.1:9000/yonote-bucket + AWS_S3_UPLOAD_BUCKET_URL: yonote-minio:9000 # Адрес S3 хранилища + AWS_S3_UPLOAD_BUCKET_NAME: yonote-bucket # Имя хранилища AWS_REGION: "" AWS_S3_UPLOAD_MAX_SIZE: "226214400" # Максимальный размер хранилища AWS_S3_FORCE_PATH_STYLE: "false" # Следует ли принудительно использовать URL-адреса стиля пути для объектов S3 - S3_PROXY_ENABLED: false # Включает или выключает проксирование загрузки/выгрузки файлов на S3 через бэкенд, принимает boolean - S3_MULTIPART_PART_SIZE: 1000 # Настройка размера частей для multipart загрузки на S3 хранилище, принимает число, по умолчанию 1000 (1GB), значение в мегабайтах. + S3_PROXY_ENABLED: "false" # Включает или выключает проксирование загрузки/выгрузки файлов на S3 через бэкенд, принимает boolean + S3_MULTIPART_PART_SIZE: "1000" # Настройка размера частей для multipart загрузки на S3 хранилище, принимает число, по умолчанию 1000 (1GB), значение в мегабайтах. SUBDOMAINS_ENABLED: "true" # Поддержка поддоменов для команд BASENAME_FOR_SUBDOMAIN: '{{ .Values.global.yonote.baseListenAddress }}' # Имя хоста @@ -137,12 +133,15 @@ yonote-web: name: yonote-secrets ingress: - enabled: true - hostname: '"*.yonote.example.com"' - ingressClassName: "" - path: '/' - pathType: Prefix - tls: false + hostname: '"*.example.com"' + ingressClassName: nginx + annotations: + nginx.ingress.kubernetes.io/force-ssl-redirect: "true" + nginx.ingress.kubernetes.io/configuration-snippet: | + more_set_headers "Host $http_host"; + more_set_headers "X-Real-IP $remote_addr"; + more_set_headers "X-Forwarded-Proto $scheme"; + more_set_headers "X-Forwarded-For $proxy_add_x_forwarded_for"; podLabels: redis-client: 'true' @@ -214,12 +213,15 @@ yonote-websocket: targetPort: app ingress: - enabled: true - hostname: '"*.yonote.example.com"' - ingressClassName: "" - path: '/realtime' - pathType: Prefix - tls: false + hostname: '"*.example.com"' + ingressClassName: nginx + annotations: + nginx.ingress.kubernetes.io/force-ssl-redirect: "true" + nginx.ingress.kubernetes.io/configuration-snippet: | + more_set_headers "Host $http_host"; + more_set_headers "X-Real-IP $remote_addr"; + more_set_headers "X-Forwarded-Proto $scheme"; + more_set_headers "X-Forwarded-For $proxy_add_x_forwarded_for"; podLabels: redis-client: 'true' @@ -291,12 +293,15 @@ yonote-whiteboard: targetPort: app ingress: - enabled: true - hostname: '"*.yonote.example.com"' - ingressClassName: "" - path: '/whiteboard' - pathType: Prefix - tls: false + hostname: '"*.example.com"' + ingressClassName: nginx + annotations: + nginx.ingress.kubernetes.io/force-ssl-redirect: "true" + nginx.ingress.kubernetes.io/configuration-snippet: | + more_set_headers "Host $http_host"; + more_set_headers "X-Real-IP $remote_addr"; + more_set_headers "X-Forwarded-Proto $scheme"; + more_set_headers "X-Forwarded-For $proxy_add_x_forwarded_for"; podLabels: redis-client: 'true' @@ -423,12 +428,15 @@ yonote-collaboration: targetPort: app ingress: - enabled: true - hostname: '"*.yonote.example.com"' - ingressClassName: "" - path: '/collaboration' - pathType: Prefix - tls: false + hostname: '"*.example.com"' + ingressClassName: nginx + annotations: + nginx.ingress.kubernetes.io/force-ssl-redirect: "true" + nginx.ingress.kubernetes.io/configuration-snippet: | + more_set_headers "Host $http_host"; + more_set_headers "X-Real-IP $remote_addr"; + more_set_headers "X-Forwarded-Proto $scheme"; + more_set_headers "X-Forwarded-For $proxy_add_x_forwarded_for"; envFrom: - configMapRef: @@ -516,17 +524,12 @@ minio: ingress: enabled: true annotations: - kubernetes.io/ingress.class: traefik + kubernetes.io/ingress.class: nginx hosts: - - host: minio.example.com + - host: s3.example.com paths: - path: / pathType: ImplementationSpecific - tls: - - secretName: minio-tls - hosts: - - minio.example.com - resources: requests: memory: 512Mi @@ -536,108 +539,5 @@ minio: cpu: 500m buckets: - - name: mybucket - policy: none - - name: anotherbucket - policy: none - -keycloak-database: - name: keycloak-db - enabled: true - fullnameOverride: yonote-keycloak-db - nameOverride: db - primary: - persistence: - size: 512Mi - -keycloak: - name: keycloack - enabled: true - nameOverride: keycloak - fullnameOverride: yonote-keycloak - image: - registry: images.updates.yonote.ru - repository: yonote-keycloak - tag: latest - - command: - - /bin/sh - - -c - - | - "/opt/keycloak/bin/kc.sh" "start" - - configMaps: - configs: - data: - KEYCLOAK_ADMIN: root - #KEYCLOAK_ADMIN_PASSWORD: ${KC_PASSWORD} - KC_PROXY: edge - KC_HOSTNAME_STRICT: "false" - KC_HOSTNAME_ADMIN: auth.yonote.develop.wilix.dev/admin - KC_HOSTNAME: auth.yonote.develop.wilix.dev - KC_DB: postgres - KC_DB_URL: postgres - KC_DB_URL_DATABASE: keycloak - KC_DB_USERNAME: keycloak - #KC_DB_PASSWORD: ${KC_DB_PASSWORD} - KC_HOSTNAME_STRICT_HTTPS: "false" - KC_HOSTNAME_PATH: "/" - - envFrom: - - configMapRef: - name: '{{ template "app.fullname" . }}-configs' - - secretRef: - name: '{{ template "app.fullname" . }}-secrets' - - checksums: - - secrets.yaml - - configmaps.yaml - - containerPorts: - - containerPort: 8080 - name: app - protocol: TCP - - resources: - limits: - cpu: 500m - memory: 512Mi - requests: - cpu: 150m - memory: 128Mi - - service: - service: - type: ClusterIP - port: 8080 - targetPort: 8080 - - ingress: - enabled: true - certManager: true - pathType: ImplementationSpecific - hostname: auth.example.com - path: / - tls: true - - livenessProbe: - enabled: true - failureThreshold: 6 - initialDelaySeconds: 60 - periodSeconds: 15 - successThreshold: 1 - timeoutSeconds: 5 - httpGet: - path: / - port: app - - readinessProbe: - enabled: true - failureThreshold: 6 - initialDelaySeconds: 60 - periodSeconds: 15 - successThreshold: 1 - timeoutSeconds: 5 - httpGet: - path: / - port: app \ No newline at end of file + - name: yonote-bucket + policy: none \ No newline at end of file diff --git a/yonote-keycloak-chart/Chart.lock b/yonote-keycloak-chart/Chart.lock new file mode 100644 index 0000000..41178bd --- /dev/null +++ b/yonote-keycloak-chart/Chart.lock @@ -0,0 +1,9 @@ +dependencies: +- name: app + repository: https://dysnix.github.io/charts + version: 0.3.15 +- name: postgresql + repository: https://charts.bitnami.com/bitnami + version: 11.6.2 +digest: sha256:4ff512f4cf7c217961e59af3e2cb656f4d6fc8441f17ce3da96ca1a03f58bf58 +generated: "2024-07-16T12:04:39.863844193+03:00" diff --git a/yonote-keycloak-chart/Chart.yaml b/yonote-keycloak-chart/Chart.yaml new file mode 100644 index 0000000..f24e283 --- /dev/null +++ b/yonote-keycloak-chart/Chart.yaml @@ -0,0 +1,13 @@ +apiVersion: v2 +name: yonote-keycloak-chart +version: 1.0.0 +dependencies: +- name: app + version: "0.3.15" + repository: https://dysnix.github.io/charts + alias: keycloak +- name: postgresql + version: "11.6.2" + repository: https://charts.bitnami.com/bitnami + condition: keycloak-database.enabled + alias: keycloak-database \ No newline at end of file diff --git a/yonote-keycloak-chart/charts/app-0.3.15.tgz b/yonote-keycloak-chart/charts/app-0.3.15.tgz new file mode 100644 index 0000000..b7125eb Binary files /dev/null and b/yonote-keycloak-chart/charts/app-0.3.15.tgz differ diff --git a/yonote-keycloak-chart/charts/postgresql-11.6.2.tgz b/yonote-keycloak-chart/charts/postgresql-11.6.2.tgz new file mode 100644 index 0000000..64e0267 Binary files /dev/null and b/yonote-keycloak-chart/charts/postgresql-11.6.2.tgz differ diff --git a/yonote-keycloak-chart/secret-values.yaml b/yonote-keycloak-chart/secret-values.yaml new file mode 100644 index 0000000..548e04f --- /dev/null +++ b/yonote-keycloak-chart/secret-values.yaml @@ -0,0 +1,6 @@ +keycloak: + secrets: + secrets: + stringData: + KEYCLOAK_ADMIN_PASSWORD: "12345" + KC_DB_PASSWORD: "3fWAxP6ZYp" \ No newline at end of file diff --git a/yonote-keycloak-chart/values.yaml b/yonote-keycloak-chart/values.yaml new file mode 100644 index 0000000..7725f23 --- /dev/null +++ b/yonote-keycloak-chart/values.yaml @@ -0,0 +1,101 @@ +global: + postgresql: + auth: + database: keycloak + username: keycloak + +keycloak-database: + enabled: true + fullnameOverride: yonote-keycloak-db + nameOverride: db + primary: + persistence: + size: 512Mi + +keycloak: + name: yonote-keycloak + fullnameOverride: yonote-keycloak + image: + registry: images.updates.yonote.ru + repository: yonote-keycloak + tag: latest + + command: + - /bin/sh + - -c + - | + "/opt/keycloak/bin/kc.sh" "start" + + configMaps: + configs: + data: + KEYCLOAK_ADMIN: root + KC_PROXY: edge + KC_HOSTNAME_STRICT: "false" + KC_HOSTNAME_ADMIN: auth.example.com/admin + KC_HOSTNAME: auth.example.com + KC_DB: postgres + KC_DB_URL: jdbc:postgresql://yonote-keycloak-db:5432/keycloak + KC_DB_URL_DATABASE: keycloak + KC_DB_USERNAME: keycloak + KC_HOSTNAME_STRICT_HTTPS: "false" + KC_HOSTNAME_PATH: "/" + + envFrom: + - configMapRef: + name: '{{ template "app.fullname" . }}-configs' + - secretRef: + name: '{{ template "app.fullname" . }}-secrets' + + checksums: + - secrets.yaml + - configmaps.yaml + + containerPorts: + - containerPort: 8080 + name: app + protocol: TCP + + resources: + limits: + cpu: 500m + memory: 512Mi + requests: + cpu: 150m + memory: 128Mi + + service: + service: + type: ClusterIP + port: 8080 + targetPort: 8080 + + ingress: + enabled: true + ingressClassName: nginx + pathType: ImplementationSpecific + hostname: auth.example.com + path: / + tls: false + + livenessProbe: + enabled: true + failureThreshold: 6 + initialDelaySeconds: 60 + periodSeconds: 15 + successThreshold: 1 + timeoutSeconds: 5 + httpGet: + path: / + port: app + + readinessProbe: + enabled: true + failureThreshold: 6 + initialDelaySeconds: 60 + periodSeconds: 15 + successThreshold: 1 + timeoutSeconds: 5 + httpGet: + path: / + port: app \ No newline at end of file