15 Commits

Author SHA1 Message Date
Valeriy Petrov 7967df9b42 Fix adminpanel API URL for remote test contour.
Use runtimeEnv instead of env so Helm template picks up api.dev.sovamed.ru.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-09 17:59:41 +03:00
Valeriy Petrov afebdb54d1 Escape percent signs in Symfony DSN env vars.
Symfony treats single % as parameter placeholders; double %% for URL-encoded passwords in REDIS_URL and DATABASE_URL.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-09 17:44:14 +03:00
Valeriy Petrov 9452c65bf4 Rotate test contour secrets and database passwords.
Update PostgreSQL, MySQL, Redis, app secrets, and connection URLs for the remote test environment.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-09 17:31:28 +03:00
sova-ci c8a6d8f433 fix(ingress): restore TLS for app ingresses on test contour 2026-06-09 16:37:44 +03:00
sova-ci 63e6446422 chore(docs): bump test to docs-v1.0.12-test 2026-06-09 13:31:33 +00:00
sova-ci 140bd582ef chore(cabinet): bump test to cabinet-v1.0.12-test 2026-06-09 13:30:57 +00:00
sova-ci e6f9dcd5ba chore(adminpanel): bump test to adminpanel-v1.0.12-test 2026-06-09 13:28:12 +00:00
sova-ci e26931850f chore(docs): bump test to docs-v1.0.11-test 2026-06-09 13:27:48 +00:00
sova-ci edcd138d0f chore(backend): bump test to backend-v1.0.12-test 2026-06-09 13:27:16 +00:00
sova-ci 3c30b86826 chore: remove redmine-test from ArgoCD (SKIP_REDMINE=1) 2026-06-09 16:13:32 +03:00
Valeriy Petrov 558f955af0 fix: dev.sovamed.ru hosts for remote test contour
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-09 14:53:20 +03:00
Valeriy Petrov 6f2ec4f944 issues/27: adminpanel test image v1.0.11-test
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 15:28:15 +03:00
Valeriy Petrov 8a9a96d8bc issues/27: sync test contour image tags from test branch CI
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 15:23:57 +03:00
Valeriy Petrov b16e3eaace issues/27: ArgoCD tracks prod branch; test apps use test branch
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 15:09:48 +03:00
Valeriy Petrov a99498db80 issues/27: ArgoCD test apps track sova-deploy test branch
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 14:46:09 +03:00
22 changed files with 194 additions and 38 deletions
+11
View File
@@ -77,8 +77,19 @@ kind: Ingress
metadata:
name: adminpanel
namespace: {{ .Values.namespace }}
{{- if .Values.ingress.tls.enabled }}
annotations:
cert-manager.io/cluster-issuer: {{ .Values.ingress.tls.clusterIssuer | quote }}
nginx.ingress.kubernetes.io/ssl-redirect: "true"
{{- end }}
spec:
ingressClassName: {{ .Values.ingress.className }}
{{- if .Values.ingress.tls.enabled }}
tls:
- hosts:
- {{ .Values.ingress.host }}
secretName: {{ .Values.ingress.tls.secretName }}
{{- end }}
rules:
- host: {{ .Values.ingress.host }}
http:
+7 -3
View File
@@ -1,9 +1,13 @@
ingress:
host: admin.test.sova.local
host: adm.dev.sovamed.ru
tls:
enabled: true
clusterIssuer: letsencrypt-prod
secretName: adminpanel-tls
runtimeEnv:
API_BASE_URL: http://api.test.sova.local
API_BASE_URL: https://api.dev.sovamed.ru
image:
tag: adminpanel-v1.0.4-test
tag: adminpanel-v1.0.12-test
pullPolicy: IfNotPresent
repository: git.sova.local/sova/adminpanel
imagePullSecrets:
+11
View File
@@ -193,8 +193,19 @@ kind: Ingress
metadata:
name: backend
namespace: {{ .Values.namespace }}
{{- if .Values.ingress.tls.enabled }}
annotations:
cert-manager.io/cluster-issuer: {{ .Values.ingress.tls.clusterIssuer | quote }}
nginx.ingress.kubernetes.io/ssl-redirect: "true"
{{- end }}
spec:
ingressClassName: {{ .Values.ingress.className }}
{{- if .Values.ingress.tls.enabled }}
tls:
- hosts:
- {{ .Values.ingress.host }}
secretName: {{ .Values.ingress.tls.secretName }}
{{- end }}
rules:
- host: {{ .Values.ingress.host }}
http:
+8 -4
View File
@@ -1,11 +1,15 @@
ingress:
host: api.test.sova.local
host: api.dev.sovamed.ru
tls:
enabled: true
clusterIssuer: letsencrypt-prod
secretName: backend-tls
image:
tag: backend-v1.0.4-test
tag: backend-v1.0.12-test
pullPolicy: IfNotPresent
repository: git.sova.local/sova/backend
imagePullSecrets:
- name: gitea-registry
env:
API_PUBLIC_URL: http://api.test.sova.local
API_BASE_URL: http://api.test.sova.local
API_PUBLIC_URL: https://api.dev.sovamed.ru
API_BASE_URL: https://api.dev.sovamed.ru
+6 -6
View File
@@ -50,13 +50,13 @@ env:
CORS_ALLOW_ORIGIN: "['http://admin.test.sova.local','https://admin.test.sova.local']"
secrets:
APP_SECRET: change-me-test-secret
DATABASE_URL: postgresql://sova_test:sova_test_pass@postgresql-test.sova-data-test.svc.cluster.local:5432/sova_backend_test?serverVersion=16&charset=utf8
DATABASE_CABINET_URL: postgresql://sova_test:sova_test_pass@postgresql-test.sova-data-test.svc.cluster.local:5432/sova_cabinet_test?serverVersion=16&charset=utf8
DATABASE_BITRIX_URL: mysql://bitrix_test:bitrix_test_pass@mysql-bitrix-test.sova-data-test.svc.cluster.local:3306/sova_bitrix_test?serverVersion=8.0
REDIS_URL: redis://:redis_test_pass@redis-test-master.sova-data-test.svc.cluster.local:6379/0
APP_SECRET: In-brrZjIpzgCNAMq_CqBv-1VxOiS7h_1gDAUd7OkpI
DATABASE_URL: postgresql://sova_test:c%%25EDQxAr91khfvhle3CV4Mxg@postgresql-test.sova-data-test.svc.cluster.local:5432/sova_backend_test?serverVersion=16&charset=utf8
DATABASE_CABINET_URL: postgresql://sova_test:c%%25EDQxAr91khfvhle3CV4Mxg@postgresql-test.sova-data-test.svc.cluster.local:5432/sova_cabinet_test?serverVersion=16&charset=utf8
DATABASE_BITRIX_URL: mysql://bitrix_test:xEpMvDAaCb%%21U1U%%2AwBOg8GAk%%2B@mysql-bitrix-test.sova-data-test.svc.cluster.local:3306/sova_bitrix_test?serverVersion=8.0
REDIS_URL: redis://:u96%%3Dbi6a%%21weD6xW3n%%23GGZQTZ@redis-test-master.sova-data-test.svc.cluster.local:6379/0
JWT_PASSPHRASE: ""
AES_SECRET_KEY: test-aes-secret-key-32bytes-min!!
AES_SECRET_KEY: o*HTus#3tw^%#sT*z_ZvY#!Uf46AFXRg
MAILER_ACCESS_TOKEN: test-mailer-token
SMSRU_URL: http://noop.invalid
SMSRU_TOKEN: noop
+11
View File
@@ -177,8 +177,19 @@ kind: Ingress
metadata:
name: cabinet
namespace: {{ .Values.namespace }}
{{- if .Values.ingress.tls.enabled }}
annotations:
cert-manager.io/cluster-issuer: {{ .Values.ingress.tls.clusterIssuer | quote }}
nginx.ingress.kubernetes.io/ssl-redirect: "true"
{{- end }}
spec:
ingressClassName: {{ .Values.ingress.className }}
{{- if .Values.ingress.tls.enabled }}
tls:
- hosts:
- {{ .Values.ingress.host }}
secretName: {{ .Values.ingress.tls.secretName }}
{{- end }}
rules:
- host: {{ .Values.ingress.host }}
http:
+6 -2
View File
@@ -1,7 +1,11 @@
ingress:
host: cabinet.test.sova.local
host: cabinet.dev.sovamed.ru
tls:
enabled: true
clusterIssuer: letsencrypt-prod
secretName: cabinet-tls
image:
tag: cabinet-v1.0.3-test
tag: cabinet-v1.0.12-test
pullPolicy: IfNotPresent
repository: git.sova.local/sova/cabinet
imagePullSecrets:
+4 -4
View File
@@ -44,10 +44,10 @@ env:
CORS_ALLOW_ORIGIN: "^https?://(cabinet\\.test\\.sova\\.local|localhost)(:[0-9]+)?$"
secrets:
APP_SECRET: change-me-cabinet-test-secret
DATABASE_URL: postgresql://sova_test:sova_test_pass@postgresql-test.sova-data-test.svc.cluster.local:5432/sova_cabinet_test?serverVersion=16&charset=utf8
DATABASE_BITRIX_URL: mysql://bitrix_test:bitrix_test_pass@mysql-bitrix-test.sova-data-test.svc.cluster.local:3306/sova_bitrix_test?serverVersion=8.0
REDIS_URL: redis://:redis_test_pass@redis-test-master.sova-data-test.svc.cluster.local:6379/1
APP_SECRET: sUkQq2K4-57_woq1NgLTuApbRZNGayc41QY3j5CI1Y4
DATABASE_URL: postgresql://sova_test:c%%25EDQxAr91khfvhle3CV4Mxg@postgresql-test.sova-data-test.svc.cluster.local:5432/sova_cabinet_test?serverVersion=16&charset=utf8
DATABASE_BITRIX_URL: mysql://bitrix_test:xEpMvDAaCb%%21U1U%%2AwBOg8GAk%%2B@mysql-bitrix-test.sova-data-test.svc.cluster.local:3306/sova_bitrix_test?serverVersion=8.0
REDIS_URL: redis://:u96%%3Dbi6a%%21weD6xW3n%%23GGZQTZ@redis-test-master.sova-data-test.svc.cluster.local:6379/1
MAILER_DSN: smtp://mailpit.sova-mocks.svc.cluster.local:1025
SMSRU_KEY_API: noop
SMSRU_FROM_SOVAMED: noop
+11
View File
@@ -47,8 +47,19 @@ kind: Ingress
metadata:
name: docs
namespace: {{ .Values.namespace }}
{{- if .Values.ingress.tls.enabled }}
annotations:
cert-manager.io/cluster-issuer: {{ .Values.ingress.tls.clusterIssuer | quote }}
nginx.ingress.kubernetes.io/ssl-redirect: "true"
{{- end }}
spec:
ingressClassName: {{ .Values.ingress.className }}
{{- if .Values.ingress.tls.enabled }}
tls:
- hosts:
- {{ .Values.ingress.host }}
secretName: {{ .Values.ingress.tls.secretName }}
{{- end }}
rules:
- host: {{ .Values.ingress.host }}
http:
+6 -2
View File
@@ -1,7 +1,11 @@
ingress:
host: docs.sova.local
host: docs.dev.sovamed.ru
tls:
enabled: true
clusterIssuer: letsencrypt-prod
secretName: docs-tls
image:
tag: docs-v1.0.8-test
tag: docs-v1.0.12-test
pullPolicy: IfNotPresent
repository: git.sova.local/sova/docs
imagePullSecrets:
+1 -1
View File
@@ -7,7 +7,7 @@ spec:
project: default
source:
repoURL: http://gitea-http.gitea.svc.cluster.local:3000/sova/sova-deploy.git
targetRevision: main
targetRevision: prod
path: argocd/apps
destination:
server: https://kubernetes.default.svc
@@ -1,3 +1,4 @@
# Только для локальной фермы (Multipass). На удалённом test — не применять.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
@@ -7,7 +8,7 @@ spec:
project: sova
source:
repoURL: http://gitea-http.gitea.svc.cluster.local:3000/sova/sova-deploy.git
targetRevision: main
targetRevision: prod
path: apps/redmine
helm:
valueFiles:
+1 -1
View File
@@ -7,7 +7,7 @@ spec:
project: default
source:
repoURL: http://gitea-http.gitea.svc.cluster.local:3000/sova/sova-deploy.git
targetRevision: main
targetRevision: prod
path: argocd/projects
destination:
server: https://kubernetes.default.svc
+6 -6
View File
@@ -7,7 +7,7 @@ spec:
project: sova
source:
repoURL: http://gitea-http.gitea.svc.cluster.local:3000/sova/sova-deploy.git
targetRevision: main
targetRevision: test
path: data/test
helm:
valueFiles:
@@ -31,7 +31,7 @@ spec:
project: sova
source:
repoURL: http://gitea-http.gitea.svc.cluster.local:3000/sova/sova-mocks.git
targetRevision: main
targetRevision: prod
path: charts/mocks
destination:
server: https://kubernetes.default.svc
@@ -52,7 +52,7 @@ spec:
project: sova
source:
repoURL: http://gitea-http.gitea.svc.cluster.local:3000/sova/sova-deploy.git
targetRevision: main
targetRevision: test
path: apps/backend
helm:
valueFiles:
@@ -77,7 +77,7 @@ spec:
project: sova
source:
repoURL: http://gitea-http.gitea.svc.cluster.local:3000/sova/sova-deploy.git
targetRevision: main
targetRevision: test
path: apps/adminpanel
helm:
valueFiles:
@@ -102,7 +102,7 @@ spec:
project: sova
source:
repoURL: http://gitea-http.gitea.svc.cluster.local:3000/sova/sova-deploy.git
targetRevision: main
targetRevision: test
path: apps/docs
helm:
valueFiles:
@@ -127,7 +127,7 @@ spec:
project: sova
source:
repoURL: http://gitea-http.gitea.svc.cluster.local:3000/sova/sova-deploy.git
targetRevision: main
targetRevision: test
path: apps/cabinet
helm:
valueFiles:
+2 -2
View File
@@ -3,10 +3,10 @@ namespace: sova-data-test
postgres:
host: postgresql-test.sova-data-test.svc.cluster.local
user: sova_test
password: sova_test_pass
password: c%EDQxAr91khfvhle3CV4Mxg
mysql:
host: mysql-bitrix-test.sova-data-test.svc.cluster.local
user: bitrix_test
password: bitrix_test_pass
password: xEpMvDAaCb!U1U*wBOg8GAk+
database: sova_bitrix_test
@@ -1,4 +1,2 @@
SELECT 'CREATE DATABASE sova_cabinet_test OWNER sova_test'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'sova_cabinet_test')\gexec
SELECT 'CREATE DATABASE redmine_test OWNER sova_test'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'redmine_test')\gexec
+4 -4
View File
@@ -5,7 +5,7 @@ postgresql:
fullnameOverride: postgresql-test
auth:
username: sova_test
password: sova_test_pass
password: c%EDQxAr91khfvhle3CV4Mxg
database: sova_backend_test
primary:
persistence:
@@ -28,9 +28,9 @@ mysql:
enabled: true
fullnameOverride: mysql-bitrix-test
auth:
rootPassword: bitrix_root_test
rootPassword: NTv$fys*Y$m1sKcH+@F^^77F
username: bitrix_test
password: bitrix_test_pass
password: xEpMvDAaCb!U1U*wBOg8GAk+
database: sova_bitrix_test
primary:
persistence:
@@ -46,7 +46,7 @@ redis:
enabled: true
fullnameOverride: redis-test
auth:
password: redis_test_pass
password: u96=bi6a!weD6xW3n#GGZQTZ
master:
persistence:
enabled: false
@@ -0,0 +1,14 @@
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: devops@sovamed.ru
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx
@@ -0,0 +1,14 @@
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-staging
spec:
acme:
server: https://acme-staging-v02.api.letsencrypt.org/directory
email: devops@sovamed.ru
privateKeySecretRef:
name: letsencrypt-staging
solvers:
- http01:
ingress:
class: nginx
+20
View File
@@ -0,0 +1,20 @@
# Single-node test (812 GB): SQLite, без PostgreSQL HA
postgresql:
enabled: false
postgresql-ha:
enabled: false
gitea:
config:
database:
DB_TYPE: sqlite3
actions:
ENABLED: true
packages:
ENABLED: true
resources:
requests:
memory: 128Mi
limits:
memory: 512Mi
+25
View File
@@ -0,0 +1,25 @@
# Remote test server — 12 GB RAM (kube-prometheus-stack)
grafana:
enabled: true
resources:
requests:
memory: 128Mi
limits:
memory: 256Mi
prometheus:
prometheusSpec:
retention: 3d
scrapeInterval: 60s
evaluationInterval: 60s
resources:
requests:
memory: 512Mi
limits:
memory: 1Gi
# Раскомментировать при нехватке RAM:
# kubeStateMetrics:
# enabled: false
# nodeExporter:
# enabled: false
+24
View File
@@ -0,0 +1,24 @@
---
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: sova-critical
value: 1000000
globalDefault: false
description: "API, PostgreSQL, MySQL — не убивать при OOM"
---
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: sova-normal
value: 100000
globalDefault: true
description: "Gitea, ArgoCD, ingress"
---
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: sova-low
value: 10000
globalDefault: false
description: "Runner, Grafana, Loki — жертвы OOM"