diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 92548c579023b71d377f0740f69fb5ec934d4caf..2afb9c980591a209194e53d776769a84143206f5 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -5,6 +5,7 @@ stages:
 
 variables:
   APP_VERSION: ${CI_COMMIT_REF_SLUG}
+  DOCKER_AUTH_CONFIG: "{\"auths\":{\"$DOCKER_REGISTRY\":{\"username\":\"$DOCKER_USER\",\"password\":\"$DOCKER_PASSWORD\"}}}"
 
 .test-template:
   image: python:3.9-buster
@@ -14,7 +15,6 @@ variables:
   except:
     - tags
   before_script:
-    - echo "${DOCKER_REGISTRY}"
     - pip install poetry==1.1.6
     - poetry config virtualenvs.create false
     - poetry install
@@ -56,7 +56,9 @@ image-builder:
     - tags
   script:
     - mkdir -p /kaniko/.docker
-    - echo "{\"auths\":{\"$DOCKER_REGISTRY\":{\"username\":\"$DOCKER_USER\",\"password\":\"$DOCKER_PASSWORD\"}}}" > /kaniko/.docker/config.json
+    # Create authentication rule to publish image.
+    - echo "$DOCKER_AUTH_CONFIG" > /kaniko/.docker/config.json
+    # Build actual image.
     - /kaniko/executor --context .
       --dockerfile deploy/Dockerfile
       --destination "$IMAGE_NAME:$APP_VERSION"
@@ -64,15 +66,26 @@ image-builder:
 
 deploy:
   stage: deploy
-  image: dtzar/helm-kubectl:3.6.3
+  image: docker.le-memese.com/kubectl:1.22.0
   tags:
     - kube
   only:
     - tags
+  environment:
+    name: production
+    kubernetes:
+      namespace: $NAMESPACE
   script:
-    - export KUBECONFIG=$KUBE_CONF
+    # Save all lenochka's variables in a file.
     - env | grep "^LENOCHKA_" > .deploy-env
-    - kubectl delete configmap --namespace "$NAMESPACE" "$ENVCONF" || true
-    - kubectl create configmap --namespace "$NAMESPACE" "$ENVCONF" --from-env-file=.deploy-env
-    - envsubst < "$HELM_VALUES" > deploy-values.yml
-    - helm upgrade lenocka deploy/charts/lenocka/ -f deploy-values.yml --namespace "$NAMESPACE"
\ No newline at end of file
+    # Recreate envconfig for pod.
+    - kubectl delete configmap "$ENVCONF" || true
+    - kubectl create configmap "$ENVCONF" --from-env-file=.deploy-env
+    # Create secret for pulling images.
+    - echo "$DOCKER_AUTH_CONFIG" > .dockerauth.json
+    - kubectl delete secret "$PULL_SECRET" || true
+    - kubectl create secret generic "$PULL_SECRET"
+      --from-file=.dockerconfigjson=.dockerauth.json
+      --type=kubernetes.io/dockerconfigjson
+    # Substitute env variables and apply them in kubectl.
+    - find deploy/kube -name "*.yml" | xargs cat | envsubst | kubectl apply -f -
diff --git a/deploy/charts/lenocka/.helmignore b/deploy/charts/lenocka/.helmignore
deleted file mode 100644
index 0e8a0eb36f4ca2c939201c0d54b5d82a1ea34778..0000000000000000000000000000000000000000
--- a/deploy/charts/lenocka/.helmignore
+++ /dev/null
@@ -1,23 +0,0 @@
-# Patterns to ignore when building packages.
-# This supports shell glob matching, relative path matching, and
-# negation (prefixed with !). Only one pattern per line.
-.DS_Store
-# Common VCS dirs
-.git/
-.gitignore
-.bzr/
-.bzrignore
-.hg/
-.hgignore
-.svn/
-# Common backup files
-*.swp
-*.bak
-*.tmp
-*.orig
-*~
-# Various IDEs
-.project
-.idea/
-*.tmproj
-.vscode/
diff --git a/deploy/charts/lenocka/Chart.yaml b/deploy/charts/lenocka/Chart.yaml
deleted file mode 100644
index e27ae98902dfc96a9a537dc27026d2af45faf99a..0000000000000000000000000000000000000000
--- a/deploy/charts/lenocka/Chart.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-apiVersion: v2
-name: lenocka
-description: A Helm chart for Kubernetes
-
-type: application
-
-version: "0.1.0"
-appVersion: "0.1.0"
\ No newline at end of file
diff --git a/deploy/charts/lenocka/templates/NOTES.txt b/deploy/charts/lenocka/templates/NOTES.txt
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/deploy/charts/lenocka/templates/_helpers.tpl b/deploy/charts/lenocka/templates/_helpers.tpl
deleted file mode 100644
index ca3747e6bd289812e9774474c437aadf6af8b18f..0000000000000000000000000000000000000000
--- a/deploy/charts/lenocka/templates/_helpers.tpl
+++ /dev/null
@@ -1,62 +0,0 @@
-{{/*
-Expand the name of the chart.
-*/}}
-{{- define "lenocka.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 "lenocka.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 "lenocka.chart" -}}
-{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
-{{- end }}
-
-{{/*
-Common labels
-*/}}
-{{- define "lenocka.labels" -}}
-helm.sh/chart: {{ include "lenocka.chart" . }}
-{{ include "lenocka.selectorLabels" . }}
-{{- if .Chart.AppVersion }}
-app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
-{{- end }}
-app.kubernetes.io/managed-by: {{ .Release.Service }}
-{{- end }}
-
-{{/*
-Selector labels
-*/}}
-{{- define "lenocka.selectorLabels" -}}
-app.kubernetes.io/name: {{ include "lenocka.name" . }}
-app.kubernetes.io/instance: {{ .Release.Name }}
-{{- end }}
-
-{{/*
-Create the name of the service account to use
-*/}}
-{{- define "lenocka.serviceAccountName" -}}
-{{- if .Values.serviceAccount.create }}
-{{- default (include "lenocka.fullname" .) .Values.serviceAccount.name }}
-{{- else }}
-{{- default "default" .Values.serviceAccount.name }}
-{{- end }}
-{{- end }}
diff --git a/deploy/charts/lenocka/templates/deployment.yaml b/deploy/charts/lenocka/templates/deployment.yaml
deleted file mode 100644
index ab42ffd2af1a294ef7ed6c4bffadb5783618a834..0000000000000000000000000000000000000000
--- a/deploy/charts/lenocka/templates/deployment.yaml
+++ /dev/null
@@ -1,47 +0,0 @@
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: {{ include "lenocka.fullname" . }}
-  namespace: {{ .Release.Namespace }}
-  labels:
-  {{- include "lenocka.labels" . | nindent 4 }}
-spec:
-  replicas: {{ .Values.replicaCount }}
-  selector:
-    matchLabels:
-  {{- include "lenocka.selectorLabels" . | nindent 6 }}
-  template:
-    metadata:
-      namespace: {{ .Release.Namespace }}
-      {{- with .Values.podAnnotations }}
-      annotations:
-      {{- toYaml . | nindent 8 }}
-      {{- end }}
-      labels:
-    {{- include "lenocka.selectorLabels" . | nindent 8 }}
-    spec:
-      {{- with .Values.imagePullSecrets }}
-      imagePullSecrets:
-      {{- toYaml . | nindent 8 }}
-      {{- end }}
-      containers:
-        - name: {{ .Chart.Name }}
-          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
-          imagePullPolicy: Always
-          envFrom:
-            - configMapRef:
-                name: {{ .Values.image.envConfig }}
-          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 }}
diff --git a/deploy/charts/lenocka/values.yaml b/deploy/charts/lenocka/values.yaml
deleted file mode 100644
index 4557ea839ea0dcab8da3d842f8972d1e8e511c58..0000000000000000000000000000000000000000
--- a/deploy/charts/lenocka/values.yaml
+++ /dev/null
@@ -1,11 +0,0 @@
-replicaCount: 1
-
-image:
-  repository: repo
-  tag: tag
-  envConfig: config
-
-resources:
-  limits:
-    cpu: 100m
-    memory: 100Mi
diff --git a/deploy/kube/deployment.yml b/deploy/kube/deployment.yml
new file mode 100644
index 0000000000000000000000000000000000000000..bf6ed131c2332dcc70bc98241cd85802301a170d
--- /dev/null
+++ b/deploy/kube/deployment.yml
@@ -0,0 +1,31 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: lenochka
+  annotations:
+    app.gitlab.com/env: $CI_ENVIRONMENT_SLUG
+    app.gitlab.com/app: $CI_PROJECT_PATH_SLUG
+spec:
+  selector:
+    matchLabels:
+      app: lenochka-bot
+  template:
+    metadata:
+      annotations:
+        app.gitlab.com/env: $CI_ENVIRONMENT_SLUG
+        app.gitlab.com/app: $CI_PROJECT_PATH_SLUG
+      labels:
+        app: lenochka-bot
+    spec:
+      imagePullSecrets:
+        - name: "$PULL_SECRET"
+      containers:
+        - name: lenochka-bot
+          image: docker.le-memese.com/bots/lenochka-bot:$APP_VERSION
+          resources:
+            limits:
+              cpu: 10m
+              memory: 60Mi
+          envFrom:
+            - configMapRef:
+                name: "$ENVCONF"