diff --git a/.gitignore b/.gitignore
index 9a158e3fea691f124d92f47dddb66e24aa597332..3e606be37a3ea2a89d23f65796e6ae4cea4176be 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
 # Byte-compiled / optimized / DLL files
 .vscode/
+.idea/
 .gen.env
 __pycache__/
 *.py[cod]
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 18b724d922ba7f5a3fb557cfbafc22e5ee547c24..92548c579023b71d377f0740f69fb5ec934d4caf 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,70 +1,78 @@
 stages:
-  - tools
   - test
-  - cleanup_tests
   - build
   - deploy
 
-build_test:
-  stage: tools
+variables:
+  APP_VERSION: ${CI_COMMIT_REF_SLUG}
+
+.test-template:
+  image: python:3.9-buster
+  stage: test
   tags:
-    - bots-deployer
-  script:
-    - make build-test
+    - kube
+  except:
+    - tags
+  before_script:
+    - echo "${DOCKER_REGISTRY}"
+    - pip install poetry==1.1.6
+    - poetry config virtualenvs.create false
+    - poetry install
 
 flake8:
   stage: test
-  tags:
-    - bots-deployer
+  extends:
+    - .test-template
   script:
-    - make flake8
+    - flake8 --count .
 
 pytest:
-  stage: test
-  tags:
-    - bots-deployer
+  extends:
+    - .test-template
   script:
-    - make pytest
+    - pytest -vv
 
 black:
-  stage: test
-  tags:
-    - bots-deployer
+  extends:
+    - .test-template
   script:
-    - make black
+    - black --check .
 
 mypy:
   stage: test
-  tags:
-    - bots-deployer
-  script:
-    - make mypy
-
-cleanup_tests:
-  stage: cleanup_tests
-  tags:
-    - bots-deployer
-  when: always
+  extends:
+    - .test-template
   script:
-    - make clear-test
+    - mypy .
 
-build:
+image-builder:
   stage: build
+  image:
+    name: gcr.io/kaniko-project/executor:v1.6.0-debug
+    entrypoint: [ "" ]
+  tags:
+    - kube
   only:
-    - master
     - tags
-  tags:
-    - bots-deployer
   script:
-    - make build push
+    - mkdir -p /kaniko/.docker
+    - echo "{\"auths\":{\"$DOCKER_REGISTRY\":{\"username\":\"$DOCKER_USER\",\"password\":\"$DOCKER_PASSWORD\"}}}" > /kaniko/.docker/config.json
+    - /kaniko/executor --context .
+      --dockerfile deploy/Dockerfile
+      --destination "$IMAGE_NAME:$APP_VERSION"
+      --force
 
 deploy:
   stage: deploy
+  image: dtzar/helm-kubectl:3.6.3
+  tags:
+    - kube
   only:
-    - master
     - tags
-  when: manual
-  tags:
-    - bots-deployer
   script:
-    - make deploy-prod
+    - export KUBECONFIG=$KUBE_CONF
+    - 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
diff --git a/deploy/dockerfiles/Dockerfile b/deploy/Dockerfile
similarity index 65%
rename from deploy/dockerfiles/Dockerfile
rename to deploy/Dockerfile
index 86a3ce2936d12a369b02bbe920a84089b648bc59..b41a18ccbae60213b42296a01f504e0d764c61e7 100644
--- a/deploy/dockerfiles/Dockerfile
+++ b/deploy/Dockerfile
@@ -1,16 +1,11 @@
-FROM python:3.9-alpine3.13
+FROM python:3.9.6-slim-buster
 
-RUN adduser --disabled-password lenochka
-
-RUN apk add --no-cache curl gcc musl-dev
-
-ENV POETRY_VERSION 1.1.6
+RUN useradd -m lenochka
 
 USER lenochka
-RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -
+RUN pip install poetry==1.1.6
 
 ENV PATH="${PATH}:/home/lenochka/.poetry/bin:/home/lenochka/.local/bin"
-RUN source "/home/lenochka/.poetry/env"
 
 # Installing requirements
 RUN poetry config virtualenvs.create false
@@ -31,7 +26,6 @@ USER root
 RUN rm -rf /home/lenochka/app/src
 RUN chown -R lenochka /home/lenochka
 RUN chmod -R 700 /home/lenochka
-RUN apk del curl gcc musl-dev
 USER lenochka
 
 CMD "lenochka_wake_up"
diff --git a/deploy/charts/lenocka/.helmignore b/deploy/charts/lenocka/.helmignore
new file mode 100644
index 0000000000000000000000000000000000000000..0e8a0eb36f4ca2c939201c0d54b5d82a1ea34778
--- /dev/null
+++ b/deploy/charts/lenocka/.helmignore
@@ -0,0 +1,23 @@
+# 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
new file mode 100644
index 0000000000000000000000000000000000000000..e27ae98902dfc96a9a537dc27026d2af45faf99a
--- /dev/null
+++ b/deploy/charts/lenocka/Chart.yaml
@@ -0,0 +1,8 @@
+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
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/deploy/charts/lenocka/templates/_helpers.tpl b/deploy/charts/lenocka/templates/_helpers.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..ca3747e6bd289812e9774474c437aadf6af8b18f
--- /dev/null
+++ b/deploy/charts/lenocka/templates/_helpers.tpl
@@ -0,0 +1,62 @@
+{{/*
+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
new file mode 100644
index 0000000000000000000000000000000000000000..ab42ffd2af1a294ef7ed6c4bffadb5783618a834
--- /dev/null
+++ b/deploy/charts/lenocka/templates/deployment.yaml
@@ -0,0 +1,47 @@
+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
new file mode 100644
index 0000000000000000000000000000000000000000..4557ea839ea0dcab8da3d842f8972d1e8e511c58
--- /dev/null
+++ b/deploy/charts/lenocka/values.yaml
@@ -0,0 +1,11 @@
+replicaCount: 1
+
+image:
+  repository: repo
+  tag: tag
+  envConfig: config
+
+resources:
+  limits:
+    cpu: 100m
+    memory: 100Mi
diff --git a/deploy/docker-compose.test.yml b/deploy/docker-compose.test.yml
deleted file mode 100644
index 2270002aee833a6d48f72ccecc73e66cc6940cdb..0000000000000000000000000000000000000000
--- a/deploy/docker-compose.test.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-version: '3.7'
-
-services:
-    test_lenochka:
-        container_name: the_test_lenochka
-        build:
-            dockerfile: ./deploy/dockerfiles/test.Dockerfile
-            context: .
-        networks:
-          - lenochka_test_network
-
-networks:
-  lenochka_test_network:
-    name: lenochka_test_network
diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml
deleted file mode 100644
index 5051abba7d85a4b06a56c1e80ad4bc635570c43e..0000000000000000000000000000000000000000
--- a/deploy/docker-compose.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-version: '3.7'
-
-services:
-    lenochka:
-        container_name: the_lenochka
-        build:
-            dockerfile: ./deploy/dockerfiles/Dockerfile
-            context: .
-        image: docker.le-memese.com/bots/lenochka-bot:${CI_COMMIT_REF_SLUG:-latest}
-        env_file:
-            - .gen.env
diff --git a/deploy/dockerfiles/test.Dockerfile b/deploy/dockerfiles/test.Dockerfile
deleted file mode 100644
index c0b27c0a6691f3265b5376d77c364ad4a60c9c44..0000000000000000000000000000000000000000
--- a/deploy/dockerfiles/test.Dockerfile
+++ /dev/null
@@ -1,17 +0,0 @@
-FROM python:3.9-alpine3.13
-
-RUN apk add --no-cache curl gcc musl-dev
-ENV POETRY_VERSION 1.1.6
-
-RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -
-
-ENV PATH="${PATH}:/root/.local/bin:/root/.poetry/bin"
-RUN source "/root/.poetry/env"
-
-# Installing requirements
-RUN poetry config virtualenvs.create false
-
-COPY . /app/
-WORKDIR /app/
-
-RUN poetry install