++
This commit is contained in:
parent
9c36b4caa3
commit
9015487e7f
110
apps/eav/base/backend-deployment.yaml
Normal file
110
apps/eav/base/backend-deployment.yaml
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: backend
|
||||||
|
namespace: eav
|
||||||
|
labels:
|
||||||
|
app: backend
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: backend
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: backend
|
||||||
|
spec:
|
||||||
|
volumes:
|
||||||
|
defaultMode: 420
|
||||||
|
items:
|
||||||
|
- key: production.py
|
||||||
|
path: production.py
|
||||||
|
name: django-configmap
|
||||||
|
containers:
|
||||||
|
- name: backend
|
||||||
|
image: cr.yandex/crp3ccidau046kdj8g9q/eav:prod_0fb73247
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
containerPort: 8000
|
||||||
|
protocol: TCP
|
||||||
|
env:
|
||||||
|
- name: KAFKA_ENABLED
|
||||||
|
value: "False"
|
||||||
|
- name: ASSETS_TOPIC
|
||||||
|
value: sarex
|
||||||
|
- name: DJANGO_SETTINGS_MODULE
|
||||||
|
value: config.settings.production
|
||||||
|
- name: DJANGO_POSTGRES_DATABASE
|
||||||
|
value: eav_db
|
||||||
|
- name: YC_S3_ENDPOINT_URL
|
||||||
|
value: http://minio-svc.minio.svc.cluster.local:9000
|
||||||
|
- name: YC_S3_BUCKET_NAME
|
||||||
|
value: eav
|
||||||
|
- name: DJANGO_POSTGRES_HOST
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
key: hostname
|
||||||
|
name: postgresql-secret
|
||||||
|
- name: DJANGO_POSTGRES_USER
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
key: username
|
||||||
|
name: postgresql-secret
|
||||||
|
- name: DJANGO_POSTGRES_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
key: password
|
||||||
|
name: postgresql-secret
|
||||||
|
- name: DJANGO_POSTGRES_PORT
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
key: port
|
||||||
|
name: postgresql-secret
|
||||||
|
- name: JWT_PRIVATE_KEY
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
key: ssh_private.key
|
||||||
|
name: backend-secret
|
||||||
|
- name: JWT_PUBLIC_KEY
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
key: ssh_public.key
|
||||||
|
name: backend-secret
|
||||||
|
- name: YC_S3_ACCESS_KEY_ID
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
key: login
|
||||||
|
name: s3-secret
|
||||||
|
- name: YC_S3_SECRET_ACCESS_KEY
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
key: password
|
||||||
|
name: s3-secret
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 100Mi
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /server/config/settings/production.py
|
||||||
|
name: django-configmap
|
||||||
|
subPath: production.py
|
||||||
|
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /ping
|
||||||
|
port: 8000
|
||||||
|
initialDelaySeconds: 10
|
||||||
|
periodSeconds: 60
|
||||||
|
failureThreshold: 10
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /ping
|
||||||
|
port: 8000
|
||||||
|
initialDelaySeconds: 5
|
||||||
|
periodSeconds: 5
|
||||||
|
failureThreshold: 20
|
||||||
|
imagePullSecrets:
|
||||||
|
- name: regcred
|
||||||
15
apps/eav/base/backend-service.yaml
Normal file
15
apps/eav/base/backend-service.yaml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: backend-service
|
||||||
|
namespace: eav
|
||||||
|
spec:
|
||||||
|
type: ClusterIP
|
||||||
|
selector:
|
||||||
|
app: backend
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
port: 8000
|
||||||
|
targetPort: 8000
|
||||||
|
protocol: TCP
|
||||||
193
apps/eav/base/django-configmap.yaml
Normal file
193
apps/eav/base/django-configmap.yaml
Normal file
@ -0,0 +1,193 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: django-configmap
|
||||||
|
namespace: eav
|
||||||
|
data:
|
||||||
|
production.py: |
|
||||||
|
# production.py
|
||||||
|
|
||||||
|
|
||||||
|
from .base import *
|
||||||
|
|
||||||
|
from datetime import timedelta
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
|
|
||||||
|
|
||||||
|
INSTALLED_APPS.append("corsheaders")
|
||||||
|
|
||||||
|
#MIDDLEWARE = ["corsheaders.middleware.CorsMiddleware"] + MIDDLEWARE
|
||||||
|
|
||||||
|
|
||||||
|
# DEBUG SETTINGS START
|
||||||
|
|
||||||
|
#
|
||||||
|
---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
DEBUG = True
|
||||||
|
|
||||||
|
ALLOWED_HOSTS = ['*']
|
||||||
|
|
||||||
|
#
|
||||||
|
---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# DEBUG SETTINGS END
|
||||||
|
|
||||||
|
|
||||||
|
# DATABASE SETTINGS START
|
||||||
|
|
||||||
|
#
|
||||||
|
---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
DATABASES = {
|
||||||
|
"default": {
|
||||||
|
"ENGINE": "django.db.backends.postgresql",
|
||||||
|
"NAME": os.getenv("DJANGO_POSTGRES_DATABASE"),
|
||||||
|
"USER": os.getenv("DJANGO_POSTGRES_USER"),
|
||||||
|
"PASSWORD": os.getenv("DJANGO_POSTGRES_PASSWORD"),
|
||||||
|
"HOST": os.getenv("DJANGO_POSTGRES_HOST"),
|
||||||
|
"PORT": "5432",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# DATABASE SETTINGS END
|
||||||
|
|
||||||
|
|
||||||
|
# RESPONSE HEADERS START
|
||||||
|
|
||||||
|
#
|
||||||
|
---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
CORS_ORIGIN_ALLOW_ALL = True
|
||||||
|
|
||||||
|
|
||||||
|
CORS_ALLOWED_ORIGINS = [
|
||||||
|
"https://srx.wb.ru",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
CORS_TRUSTED_ORIGINS = [
|
||||||
|
"https://srx.wb.ru",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
CSRF_TRUSTED_ORIGINS = [
|
||||||
|
"https://srx.wb.ru",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
CORS_ALLOW_METHODS = (
|
||||||
|
'DELETE',
|
||||||
|
'GET',
|
||||||
|
'OPTIONS',
|
||||||
|
'PATCH',
|
||||||
|
'POST',
|
||||||
|
'PUT',
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
CORS_ALLOW_HEADERS = (
|
||||||
|
'accept',
|
||||||
|
'accept-encoding',
|
||||||
|
'authorization',
|
||||||
|
'content-type',
|
||||||
|
'user-agent',
|
||||||
|
'x-csrftoken',
|
||||||
|
'x-requested-with',
|
||||||
|
'x-token',
|
||||||
|
'Bearer'
|
||||||
|
)
|
||||||
|
|
||||||
|
#
|
||||||
|
---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# RESPONSE HEADERS END
|
||||||
|
|
||||||
|
|
||||||
|
REST_FRAMEWORK = {
|
||||||
|
"DEFAULT_PAGINATION_CLASS": (
|
||||||
|
"rest_framework.pagination.LimitOffsetPagination"
|
||||||
|
),
|
||||||
|
"DEFAULT_SCHEMA_CLASS": "rest_framework.schemas.coreapi.AutoSchema",
|
||||||
|
"PAGE_SIZE": 10000,
|
||||||
|
"DEFAULT_FILTER_BACKENDS": [
|
||||||
|
"django_filters.rest_framework.DjangoFilterBackend"
|
||||||
|
],
|
||||||
|
"DEFAULT_AUTHENTICATION_CLASSES": [
|
||||||
|
"core.auth.ZitadelJWTAuthentication",
|
||||||
|
"rest_framework_simplejwt.authentication.JWTAuthentication",
|
||||||
|
"rest_framework.authentication.SessionAuthentication",
|
||||||
|
"rest_framework.authentication.BasicAuthentication",
|
||||||
|
],
|
||||||
|
"DEFAULT_PERMISSION_CLASSES": [
|
||||||
|
"rest_framework.permissions.AllowAny",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# JWT SETTINGS START
|
||||||
|
|
||||||
|
#
|
||||||
|
---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
def get_env_variable(var_name, default=None):
|
||||||
|
try:
|
||||||
|
return os.getenv(var_name, default)
|
||||||
|
except KeyError:
|
||||||
|
error_msg = f"Set the {var_name} environment variable"
|
||||||
|
if default:
|
||||||
|
return default
|
||||||
|
raise ImproperlyConfigured(error_msg)
|
||||||
|
|
||||||
|
SIMPLE_JWT_ISSUER = get_env_variable("SIMPLE_JWT_ISSUER", default="django")
|
||||||
|
|
||||||
|
|
||||||
|
SIMPLE_JWT = {
|
||||||
|
"ACCESS_TOKEN_LIFETIME": timedelta(minutes=5),
|
||||||
|
"REFRESH_TOKEN_LIFETIME": timedelta(days=1),
|
||||||
|
"ROTATE_REFRESH_TOKENS": False,
|
||||||
|
"UPDATE_LAST_LOGIN": False,
|
||||||
|
|
||||||
|
"ALGORITHM": "RS512",
|
||||||
|
"SIGNING_KEY": get_env_variable("JWT_PRIVATE_KEY").replace("\\\n", "\n"),
|
||||||
|
"VERIFYING_KEY": get_env_variable("JWT_PUBLIC_KEY").replace("\\\n", "\n"),
|
||||||
|
"AUDIENCE": None,
|
||||||
|
"ISSUER": SIMPLE_JWT_ISSUER,
|
||||||
|
|
||||||
|
"AUTH_HEADER_TYPES": ("Bearer",),
|
||||||
|
"AUTH_HEADER_NAME": "HTTP_AUTHORIZATION",
|
||||||
|
"USER_ID_FIELD": "id",
|
||||||
|
"USER_ID_CLAIM": "user_id",
|
||||||
|
|
||||||
|
"AUTH_TOKEN_CLASSES": ("rest_framework_simplejwt.tokens.AccessToken",),
|
||||||
|
"TOKEN_TYPE_CLAIM": "token_type",
|
||||||
|
|
||||||
|
"JTI_CLAIM": "jti",
|
||||||
|
|
||||||
|
"SLIDING_TOKEN_REFRESH_EXP_CLAIM": "refresh_exp",
|
||||||
|
"SLIDING_TOKEN_LIFETIME": timedelta(minutes=5),
|
||||||
|
"SLIDING_TOKEN_REFRESH_LIFETIME": timedelta(days=1),
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# JWT SETTINGS END
|
||||||
|
|
||||||
|
|
||||||
|
STATIC_ROOT = '/static/'
|
||||||
|
|
||||||
|
STATIC_URL = '/static/'
|
||||||
|
|
||||||
|
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
|
||||||
|
|
||||||
|
|
||||||
|
SESSION_COOKIE_NAME = 'eav-sessionid'
|
||||||
|
|
||||||
|
CSRF_COOKIE_NAME = 'eav-csrftoken'
|
||||||
9
apps/eav/base/kustomization.yaml
Normal file
9
apps/eav/base/kustomization.yaml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
namespace: eav
|
||||||
|
resources:
|
||||||
|
- namespace.yaml
|
||||||
|
- backend-deployment.yaml
|
||||||
|
- backend-service.yaml
|
||||||
|
- django-configmap.yaml
|
||||||
7
apps/eav/base/namespace.yaml
Normal file
7
apps/eav/base/namespace.yaml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: eav
|
||||||
|
labels:
|
||||||
|
istio-injection: enabled
|
||||||
11
apps/eav/yc-k8s-test/kustomization.yaml
Normal file
11
apps/eav/yc-k8s-test/kustomization.yaml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
resources:
|
||||||
|
- ../base
|
||||||
|
- postgresql.yaml
|
||||||
|
patches:
|
||||||
|
- path: replicas.yaml
|
||||||
|
target:
|
||||||
|
kind: Deployment
|
||||||
|
name: comparisons
|
||||||
113
apps/eav/yc-k8s-test/postgresql.yaml
Normal file
113
apps/eav/yc-k8s-test/postgresql.yaml
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||||
|
kind: HelmRelease
|
||||||
|
metadata:
|
||||||
|
name: postgresql
|
||||||
|
namespace: eav
|
||||||
|
spec:
|
||||||
|
interval: 5m
|
||||||
|
timeout: 2h
|
||||||
|
chart:
|
||||||
|
spec:
|
||||||
|
chart: postgresql-contour
|
||||||
|
version: "17.0.2"
|
||||||
|
sourceRef:
|
||||||
|
kind: HelmRepository
|
||||||
|
name: yc-oci-charts
|
||||||
|
namespace: flux-system
|
||||||
|
|
||||||
|
install:
|
||||||
|
timeout: 2h
|
||||||
|
remediation:
|
||||||
|
retries: 3
|
||||||
|
|
||||||
|
upgrade:
|
||||||
|
timeout: 2h
|
||||||
|
remediation:
|
||||||
|
retries: 3
|
||||||
|
|
||||||
|
values:
|
||||||
|
global:
|
||||||
|
security:
|
||||||
|
allowInsecureImages: true
|
||||||
|
defaultStorageClass: local-path
|
||||||
|
postgresql:
|
||||||
|
auth:
|
||||||
|
username: ""
|
||||||
|
database: ""
|
||||||
|
secretKeys:
|
||||||
|
userPasswordKey: "postgres-password"
|
||||||
|
auth:
|
||||||
|
username: ""
|
||||||
|
database: ""
|
||||||
|
secretKeys:
|
||||||
|
userPasswordKey: "postgres-password"
|
||||||
|
image:
|
||||||
|
registry: cr.yandex/crp3ccidau046kdj8g9q
|
||||||
|
repository: contour/postgresql
|
||||||
|
tag: 17.0.2
|
||||||
|
pullPolicy: Always
|
||||||
|
metrics:
|
||||||
|
enabled: false
|
||||||
|
prometheusRule:
|
||||||
|
enabled: false
|
||||||
|
primary:
|
||||||
|
containerSecurityContext:
|
||||||
|
readOnlyRootFilesystem: false
|
||||||
|
persistence:
|
||||||
|
storageClass: local-path
|
||||||
|
size: 20Gi
|
||||||
|
customLivenessProbe:
|
||||||
|
exec:
|
||||||
|
command:
|
||||||
|
- /bin/sh
|
||||||
|
- -c
|
||||||
|
- exec pg_isready -U "sarex" -d postgres -h 127.0.0.1 -p 5432
|
||||||
|
initialDelaySeconds: 30
|
||||||
|
periodSeconds: 10
|
||||||
|
timeoutSeconds: 5
|
||||||
|
successThreshold: 1
|
||||||
|
failureThreshold: 6
|
||||||
|
customReadinessProbe:
|
||||||
|
exec:
|
||||||
|
command:
|
||||||
|
- /bin/sh
|
||||||
|
- -c
|
||||||
|
- exec pg_isready -U "sarex" -d postgres -h 127.0.0.1 -p 5432
|
||||||
|
initialDelaySeconds: 5
|
||||||
|
periodSeconds: 10
|
||||||
|
timeoutSeconds: 5
|
||||||
|
successThreshold: 1
|
||||||
|
failureThreshold: 6
|
||||||
|
customStartupProbe:
|
||||||
|
exec:
|
||||||
|
command:
|
||||||
|
- /bin/sh
|
||||||
|
- -c
|
||||||
|
- exec pg_isready -U "sarex" -d postgres -h 127.0.0.1 -p 5432
|
||||||
|
initialDelaySeconds: 30
|
||||||
|
periodSeconds: 10
|
||||||
|
timeoutSeconds: 5
|
||||||
|
successThreshold: 1
|
||||||
|
failureThreshold: 6
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: 512Mi
|
||||||
|
nodeSelector:
|
||||||
|
dedicated: db
|
||||||
|
tolerations:
|
||||||
|
- key: dedicated
|
||||||
|
operator: Equal
|
||||||
|
value: db
|
||||||
|
effect: NoSchedule
|
||||||
|
contour:
|
||||||
|
enabled: true
|
||||||
|
adminUser: ""
|
||||||
|
adminPasswordSecretKey: ""
|
||||||
|
sharedPreloadLibraries: "pg_stat_statements,uuid-ossp,ltree,postgis"
|
||||||
|
databases:
|
||||||
|
- name: eav_db
|
||||||
|
user: eav
|
||||||
|
extensions: []
|
||||||
|
restoreFromDump: false
|
||||||
|
s3-proxy:
|
||||||
|
endpointUrl: "s3-proxy-service.postgresql.svc.cluster.local"
|
||||||
8
apps/eav/yc-k8s-test/replicas.yaml
Normal file
8
apps/eav/yc-k8s-test/replicas.yaml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: backend
|
||||||
|
namespace: eav
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
Loading…
Reference in New Issue
Block a user