Compare commits

...

12 Commits

Author SHA1 Message Date
79c629162f Мини правки 2025-11-05 19:29:20 +03:00
ed53bc8658 Новый тестирующий модуль 2025-11-02 21:08:59 +03:00
e7e3cb8c23 Updates services and ingress configurations
Updates the chart and app versions.

Modifies service configurations to use port 80 for both the testing module gateway and worker services.

Updates ingress to include a host for the tester, directing traffic to the testing module gateway service on port 80.

Updates backend deployment to include the correct URL for the testing module and the base service URL.

Disables database dropping on application startup.
2025-11-02 16:58:54 +03:00
da3d72422a Возвращен публичный бакет 2025-10-29 17:54:12 +03:00
6b84adbed2 Задеплоен тестирующий модуль 2025-10-27 23:57:03 +03:00
0bf26af326 Задеплоен фронтенд 2025-10-27 18:21:10 +03:00
f9d1623232 Не дропать базу 2025-10-23 22:58:22 +03:00
e07967ee31 Обновление деплоймента при каждом применении helm 2025-10-23 16:21:40 +03:00
8977be4b80 Костыль с разрешением создания БД 2025-10-23 00:18:11 +03:00
52c0211436 Переименовано 2025-10-22 19:16:22 +03:00
b9881ea0f2 Убраны штуки 2025-10-21 20:42:01 +03:00
e41ede3d3d Переименован ключ секрета 2025-10-21 20:26:36 +03:00
26 changed files with 188 additions and 133 deletions

33
README.md Normal file
View File

@@ -0,0 +1,33 @@
# Установка
## Установка первой ноды
```
curl -sfL https://get.k3s.io | sh -s - --cluster-init --tls-san 10.90.90.99
```
## Добавление серверной ноды
```
curl -sfL https://get.k3s.io | K3S_TOKEN=<token> K3S_URL=https://10.90.90.99:6443 sh -s - server --server https://10.90.90.99:6443
```
## Добавление агента
```
curl -sfL https://get.k3s.io | K3S_TOKEN=<token> K3S_URL=https://10.90.90.99:6443 sh -s - agent --server https://10.90.90.99:6443
```
# Секреты
## JWT secrets
```
kubectl create secret generic jwt-secrets \
--from-literal=JWT_ISSUER="liquid" \
--from-literal=JWT_AUDIENCE="audience"\
--from-literal=JWT_SINGING_KEY="supersecretkey_supersecretkey_supersecretkey_supersecretkey"
```
## S3 secrets
```
kubectl create secret generic s3-credentials \
--from-literal=ACCESS_KEY_ID="accesskey" \
--from-literal=ACCESS_SECRET_KEY="secretkey"
```

View File

@@ -15,10 +15,10 @@ type: application
# This is the chart version. This version number should be incremented each time you make changes # 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. # to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/) # Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 0.1.0 version: 1.0.1
# This is the version number of the application being deployed. This version number should be # This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to # incremented each time you make changes to the application. Versions are not expected to
# follow Semantic Versioning. They should reflect the version the application is using. # follow Semantic Versioning. They should reflect the version the application is using.
# It is recommended to use it with quotes. # It is recommended to use it with quotes.
appVersion: "1.16.0" appVersion: "1.0.1"

View File

@@ -20,10 +20,10 @@ spec:
s3Credentials: s3Credentials:
accessKeyId: accessKeyId:
name: {{ .Values.s3.secretName | quote}} name: {{ .Values.s3.secretName | quote}}
key: {{ .Values.s3.accessKeyKey | quote }} key: {{ .Values.s3.accessKeyRef | quote }}
secretAccessKey: secretAccessKey:
name: {{ .Values.s3.secretName | quote}} name: {{ .Values.s3.secretName | quote}}
key: {{ .Values.s3.secretKeyKey | quote }} key: {{ .Values.s3.secretKeyRef | quote }}
wal: wal:
maxParallel: 8 maxParallel: 8
@@ -31,6 +31,9 @@ spec:
{{ end }} {{ end }}
bootstrap: bootstrap:
initdb:
postInitSQL:
- ALTER ROLE app WITH CREATEDB;
{{ if .Values.cnpg.recovery.enable }} {{ if .Values.cnpg.recovery.enable }}
recovery: recovery:
source: {{ required "Old cluster name required" .Values.cnpg.recovery.oldClusterName }} source: {{ required "Old cluster name required" .Values.cnpg.recovery.oldClusterName }}
@@ -44,10 +47,10 @@ spec:
s3Credentials: s3Credentials:
accessKeyId: accessKeyId:
name: {{ .Values.s3.secretName | quote}} name: {{ .Values.s3.secretName | quote}}
key: {{ .Values.s3.accessKeyKey | quote }} key: {{ .Values.s3.accessKeyRef | quote }}
secretAccessKey: secretAccessKey:
name: {{ .Values.s3.secretName | quote}} name: {{ .Values.s3.secretName | quote}}
key: {{ .Values.s3.secretKeyKey | quote }} key: {{ .Values.s3.secretKeyRef | quote }}
wal: wal:
compression: bzip2 compression: bzip2
maxParallel: 8 maxParallel: 8

View File

@@ -1,15 +1,15 @@
s3: s3:
endpointUrl: https://storage.yandexcloud.net endpointUrl: https://storage.yandexcloud.net
secretName: s3-credentials secretName: s3-credentials
accessKeyKey: ACCESS_KEY_ID accessKeyRef: ACCESS_KEY_ID
secretKeyKey: ACCESS_SECRET_KEY secretKeyRef: ACCESS_SECRET_KEY
cnpg: cnpg:
clusterName: liquid-db clusterName: liquid-db
backup: backup:
enable: true enable: true
schedule: "0 0 0 * * *" schedule: "0 0 0 * * *"
destinationPath: "s3://liquid-code/backup-hexcore" destinationPath: "s3://liquid-code/backup"
recovery: recovery:
enable: true enable: false
oldClusterName: liquid-db oldClusterName: liquid-db
sourcePath: "s3://liquid-code/backup" sourcePath: "s3://liquid-code/backup"

View File

@@ -1,12 +0,0 @@
# For pull private dockerhub
```
kubectl create secret docker-registry regcred --docker-server=<registry> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>
```
# For jwt secrets
```
kubectl create secret generic jwt-secrets \
--from-literal=JWT_ISSUER="liquid" \
--from-literal=JWT_AUDIENCE="audience"\
--from-literal=JWT_SINGING_KEY="supersecretkey_supersecretkey_supersecretkey_supersecretkey"
```

View File

@@ -1,27 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-queue-deployment
labels:
app: {{ .Release.Name }}-queue
spec:
replicas: 1
selector:
matchLabels:
app: {{ .Release.Name }}-queue
template:
metadata:
labels:
app: {{ .Release.Name }}-queue
spec:
containers:
- name: {{ .Release.Name }}-queue
image: ghcr.io/nullptroma/liquid-queue:latest
imagePullPolicy: Always
ports:
- containerPort: 8080
securityContext:
privileged: true
imagePullSecrets:
- name: github-registry

View File

@@ -1,11 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: {{ .Release.Name }}-queue-service
spec:
selector:
app: {{ .Release.Name }}-queue
ports:
- protocol: TCP
port: 8080
targetPort: 8080

View File

@@ -1,21 +0,0 @@
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: {{ .Release.Name }}-certificate-issuer
spec:
acme:
{{ if .Values.staging }}
server: https://acme-staging-v02.api.letsencrypt.org/directory
{{ else }}
server: https://acme-v02.api.letsencrypt.org/directory
{{ end }}
# Email address used for ACME registration
email: mr.pytkov@gmail.com
# Name of a secret used to store the ACME account private key
privateKeySecretRef:
name: {{ .Release.Name }}-acme-private-key
# Enable the HTTP-01 challenge provider
solvers:
- http01:
ingress:
ingressClassName: traefik

View File

@@ -1,5 +1,5 @@
apiVersion: v2 apiVersion: v2
name: liquid-code-chart name: liquid-code
description: A Helm chart for Kubernetes description: A Helm chart for Kubernetes
# A chart can be either an 'application' or a 'library' chart. # A chart can be either an 'application' or a 'library' chart.
@@ -15,10 +15,10 @@ type: application
# This is the chart version. This version number should be incremented each time you make changes # 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. # to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/) # Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 0.1.2 version: 1.0.3
# This is the version number of the application being deployed. This version number should be # This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to # incremented each time you make changes to the application. Versions are not expected to
# follow Semantic Versioning. They should reflect the version the application is using. # follow Semantic Versioning. They should reflect the version the application is using.
# It is recommended to use it with quotes. # It is recommended to use it with quotes.
appVersion: "1.16.6" appVersion: "1.0.3"

View File

@@ -13,10 +13,12 @@ spec:
metadata: metadata:
labels: labels:
app: {{ .Release.Name }}-backend app: {{ .Release.Name }}-backend
annotations:
redeploy-timestamp: "{{ now | unixEpoch }}"
spec: spec:
containers: containers:
- name: {{ .Release.Name }}-backend - name: {{ .Release.Name }}-backend
image: ghcr.io/nullptroma/liquid-backend:latest image: git.nullptr.top/liquidcode/liquidcode:latest
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 8080 - containerPort: 8080
@@ -31,14 +33,21 @@ spec:
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
name: {{ required "secretname!" .Values.s3.secretName | quote }} name: {{ required "secretname!" .Values.s3.secretName | quote }}
key: {{ required "acces-key-key!" .Values.s3.accessKeyKey | quote }} key: {{ required "acces-key-ref!" .Values.s3.accessKeyRef | quote }}
- name: S3_SECRET_KEY - name: S3_SECRET_KEY
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
name: {{ .Values.s3.secretName | quote }} name: {{ .Values.s3.secretName | quote }}
key: {{ required "secret-key-key!" .Values.s3.secretKeyKey | quote }} key: {{ required "secret-key-ref!" .Values.s3.secretKeyRef | quote }}
- name: SUBMIT_CALLBACK_SECRET
valueFrom:
secretKeyRef:
name: {{ .Values.tester.secretName | quote }}
key: {{ required "secret-key-ref!" .Values.tester.secretKeyRef | quote }}
- name: TESTING_MODULE_URL - name: TESTING_MODULE_URL
value: http://{{ .Release.Name }}-queue-service:8080/ value: http://{{ .Release.Name }}-testing-module-gateway-service/api/tester/submit
- name: SERVICE_BASE_URL
value: http://{{ .Release.Name }}-backend-service
- name: PG_URI - name: PG_URI
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
@@ -47,6 +56,3 @@ spec:
envFrom: envFrom:
- secretRef: - secretRef:
name: {{ required "" .Values.jwt.secretName }} name: {{ required "" .Values.jwt.secretName }}
imagePullSecrets:
- name: github-registry

View File

@@ -1,3 +1,4 @@
{{ if .Values.frontend.enable }}
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
@@ -13,13 +14,13 @@ spec:
metadata: metadata:
labels: labels:
app: {{ .Release.Name }}-frontend app: {{ .Release.Name }}-frontend
annotations:
redeploy-timestamp: "{{ now | unixEpoch }}"
spec: spec:
containers: containers:
- name: {{ .Release.Name }}-frontend - name: {{ .Release.Name }}-frontend
image: ghcr.io/nullptroma/liquid-frontend:latest image: git.nullptr.top/liquidcode/liquidcode-frontend:latest
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 8000 - containerPort: 3000
{{ end }}
imagePullSecrets:
- name: github-registry

View File

@@ -0,0 +1,37 @@
{{ if .Values.testingModule.enable }}
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-testing-module-gateway-deployment
labels:
app: {{ .Release.Name }}-testing-module-gateway
spec:
replicas: 1
selector:
matchLabels:
app: {{ .Release.Name }}-testing-module-gateway
template:
metadata:
labels:
app: {{ .Release.Name }}-testing-module-gateway
annotations:
redeploy-timestamp: "{{ now | unixEpoch }}"
spec:
containers:
- name: {{ .Release.Name }}-testing-module-gateway
image: git.nullptr.top/liquidcode/liquidcode-tester-gateway-roman:latest
imagePullPolicy: Always
ports:
- containerPort: 8080
env:
- name: Workers__Cpp
value: http://{{ .Release.Name }}-testing-module-worker-service
- name: Workers__Java
value: http://{{ .Release.Name }}-testing-module-worker-service
- name: Workers__Kotlin
value: http://{{ .Release.Name }}-testing-module-worker-service
- name: Workers__CSharp
value: http://{{ .Release.Name }}-testing-module-worker-service
- name: Workers__Python
value: http://{{ .Release.Name }}-testing-module-worker-service
{{ end }}

View File

@@ -0,0 +1,28 @@
{{ if .Values.testingModule.enable }}
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-testing-module-worker-deployment
labels:
app: {{ .Release.Name }}-testing-module-worker
spec:
replicas: 1
selector:
matchLabels:
app: {{ .Release.Name }}-testing-module-worker
template:
metadata:
labels:
app: {{ .Release.Name }}-testing-module-worker
annotations:
redeploy-timestamp: "{{ now | unixEpoch }}"
spec:
containers:
- name: {{ .Release.Name }}-testing-module-worker
image: git.nullptr.top/liquidcode/liquidcode-tester-worker-roman:latest
imagePullPolicy: Always
ports:
- containerPort: 8080
securityContext:
privileged: true
{{ end }}

View File

@@ -1,3 +1,4 @@
{{ if .Values.frontend.enable }}
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
@@ -8,4 +9,6 @@ spec:
ports: ports:
- protocol: TCP - protocol: TCP
port: 80 port: 80
targetPort: 8000 targetPort: 3000
{{ end }}

View File

@@ -0,0 +1,14 @@
{{ if .Values.testingModule.enable }}
apiVersion: v1
kind: Service
metadata:
name: {{ .Release.Name }}-testing-module-gateway-service
spec:
selector:
app: {{ .Release.Name }}-testing-module-gateway
ports:
- name: http
protocol: TCP
port: 80
targetPort: 8080
{{ end }}

View File

@@ -0,0 +1,14 @@
{{ if .Values.testingModule.enable }}
apiVersion: v1
kind: Service
metadata:
name: {{ .Release.Name }}-testing-module-worker-service
spec:
selector:
app: {{ .Release.Name }}-testing-module-worker
ports:
- name: http
protocol: TCP
port: 80
targetPort: 8080
{{ end }}

View File

@@ -5,11 +5,6 @@ metadata:
annotations: annotations:
cert-manager.io/issuer: "{{ .Release.Name }}-certificate-issuer" cert-manager.io/issuer: "{{ .Release.Name }}-certificate-issuer"
spec: spec:
tls:
- hosts:
- liquidcode.ru
- api.liquidcode.ru
secretName: {{ .Release.Name }}-tls-secret
rules: rules:
- host: api.liquidcode.ru - host: api.liquidcode.ru
http: http:
@@ -31,3 +26,13 @@ spec:
name: {{ .Release.Name }}-frontend-service name: {{ .Release.Name }}-frontend-service
port: port:
number: 80 number: 80
- host: tester.liquidcode.ru
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: {{ .Release.Name }}-testing-module-gateway-service
port:
number: 80

View File

@@ -9,7 +9,7 @@ metadata:
app.kubernetes.io/version: {{ .Chart.AppVersion }} app.kubernetes.io/version: {{ .Chart.AppVersion }}
helm.sh/chart: "{{.Chart.Name}}-{{.Chart.Version}}" helm.sh/chart: "{{.Chart.Name}}-{{.Chart.Version}}"
annotations: annotations:
"helm.sh/hook": pre-install "helm.sh/hook": "pre-install,pre-upgrade"
"helm.sh/hook-weight": "-1" "helm.sh/hook-weight": "-1"
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
spec: spec:
@@ -24,7 +24,7 @@ spec:
restartPolicy: Never restartPolicy: Never
containers: containers:
- name: {{ .Release.Name }}-backend - name: {{ .Release.Name }}-backend
image: ghcr.io/nullptroma/liquid-backend:latest image: git.nullptr.top/liquidcode/liquidcode:latest
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 8080 - containerPort: 8080
@@ -36,6 +36,4 @@ spec:
key: uri key: uri
- name: DROP_DATABASE - name: DROP_DATABASE
value: "1" value: "1"
imagePullSecrets:
- name: github-registry
{{ end }} {{ end }}

View File

@@ -9,7 +9,7 @@ metadata:
app.kubernetes.io/version: {{ .Chart.AppVersion }} app.kubernetes.io/version: {{ .Chart.AppVersion }}
helm.sh/chart: "{{.Chart.Name}}-{{.Chart.Version}}" helm.sh/chart: "{{.Chart.Name}}-{{.Chart.Version}}"
annotations: annotations:
"helm.sh/hook": pre-install "helm.sh/hook": "pre-install,pre-upgrade"
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
spec: spec:
template: template:
@@ -23,7 +23,7 @@ spec:
restartPolicy: Never restartPolicy: Never
containers: containers:
- name: {{ .Release.Name }}-backend - name: {{ .Release.Name }}-backend
image: ghcr.io/nullptroma/liquid-backend:latest image: git.nullptr.top/liquidcode/liquidcode:latest
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 8080 - containerPort: 8080
@@ -35,6 +35,4 @@ spec:
key: uri key: uri
- name: MIGRATE_ONLY - name: MIGRATE_ONLY
value: "1" value: "1"
imagePullSecrets:
- name: github-registry
{{ end }} {{ end }}

View File

@@ -1,15 +1,20 @@
s3: s3:
endpointUrl: https://storage.yandexcloud.net endpointUrl: https://storage.yandexcloud.net
secretName: s3-credentials secretName: s3-credentials
accessKeyKey: ACCESS_KEY_ID accessKeyRef: ACCESS_KEY_ID
secretKeyKey: ACCESS_SECRET_KEY secretKeyRef: ACCESS_SECRET_KEY
privateBucket: liquid-code privateBucket: liquid-code
publicBucket: liquid-code-public publicBucket: liquid-code-public
tester:
secretName: tester-callback
secretKeyRef: SUBMIT_CALLBACK_SECRET
jwt: jwt:
secretName: jwt-secrets secretName: jwt-secrets
database: database:
secretName: liquid-db-app secretName: liquid-db-app
migrateDb: true migrateDb: true
dropDb: false dropDb: false
staging: false frontend:
imagePullSecret: github-registry enable: true
testingModule:
enable: true

View File

@@ -1,3 +0,0 @@
#!/bin/bash
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.5/cert-manager.yaml

View File

@@ -1,4 +0,0 @@
#!/bin/bash
kubectl apply --server-side -f \
https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/release-1.22/releases/cnpg-1.22.1.yaml

View File

@@ -1,2 +0,0 @@
#!/bin/bash
curl -sfL https://get.k3s.io | sh -s -

View File

@@ -1,10 +0,0 @@
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: traefik-close-secure-port-config
namespace: kube-system
spec:
valuesContent: |-
ports:
websecure:
expose: false