diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 434bc8464d36294c1fcf61bac7fc986dfc0c4fd7..52d164a668f43054909942b730f365e460efd7d0 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -2,13 +2,14 @@ image: golang:alpine
 
 variables:
   CONTAINER_IMAGE: "mosogepsch-notification-server:$CI_COMMIT_REF_NAME"
+  MOSOGEPSCH_HOST: "root@mosogep-ng.sch.bme.hu"
 
 stages:
   - build
   - docker
   - deploy
 
-backend build:
+noti backend build:
   image: golang:alpine
   stage: build
   before_script:
@@ -24,6 +25,20 @@ backend build:
       - notifications/**/*
       - .gitlab-ci.yml
 
+backend build:
+  image: gradle:7.1
+  stage: build
+  script:
+    - cd backend
+    - ./gradlew shadowJar
+  artifacts:
+    paths:
+      - backend/build/libs/mosogepsch-backend.jar
+  only:
+    changes:
+      - backend/**/*
+      - .gitlab-ci.yml
+
 android-debug:
   variables:
     GRADLE_USER_HOME: /cache/gradle/android/mosogepsch
@@ -78,7 +93,7 @@ dockerhub:
     - echo "{\"auths\":{\"https://index.docker.io/v1/\":{\"username\":\"$DOCKERHUB_USER\",\"password\":\"$DOCKERHUB_PASSWORD\"}}}" > /kaniko/.docker/config.json
     - /kaniko/executor --force --context $CI_PROJECT_DIR/notifications --dockerfile $CI_PROJECT_DIR/notifications/Dockerfile --destination blintmester/$CONTAINER_IMAGE
   needs:
-    - backend build
+    - noti backend build
   only:
     changes:
       - notifications/**/*
@@ -104,3 +119,25 @@ k8s:
       - .gitlab-ci.yml
     refs:
       - main
+
+deploy backend:
+  stage: deploy
+  image: kroniak/ssh-client
+  before_script:
+    - eval $(ssh-agent -s)
+    - echo "$SSH" | tr -d '\r' | ssh-add -
+    - mkdir -p ~/.ssh
+    - chmod 700 ~/.ssh
+    - 'echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
+  needs:
+    - backend build
+  script:
+    - scp backend/mosogepch-backend.service $MOSOGEPSCH_HOST:/etc/systemd/system/
+    - scp backend/build/libs/mosogepsch-backend.jar $MOSOGEPSCH_HOST:/opt/mosogepsch/
+    - ssh $MOSOGEPSCH_HOST systemctl restart mosogepsch-backend.service
+  only:
+    changes:
+      - backend/**/*
+      - .gitlab-ci.yml
+    refs:
+      - main
\ No newline at end of file
diff --git a/backend/build.gradle.kts b/backend/build.gradle.kts
index 0c8856e5236af34a2b0bd626887399eb136e2ebd..9e6f4026dbf3d143026208d61ca30adf94f75436 100644
--- a/backend/build.gradle.kts
+++ b/backend/build.gradle.kts
@@ -6,8 +6,19 @@ plugins {
     application
     kotlin("jvm") version "1.6.10"
     id("org.jetbrains.kotlin.plugin.serialization") version "1.6.10"
+    id("com.github.johnrengelman.shadow") version "7.1.2"
 }
 
+tasks {
+    shadowJar {
+        archiveBaseName.set("mosogepsch-backend")
+        archiveClassifier.set("")
+        archiveVersion.set("")
+    }
+}
+
+
+
 group = "space.rethelyi"
 version = "0.0.1"
 application {
diff --git a/backend/mosogepsch-backend.service b/backend/mosogepsch-backend.service
new file mode 100644
index 0000000000000000000000000000000000000000..9e1fbd0808c5bd75b575038e3ea75e4774e1bbca
--- /dev/null
+++ b/backend/mosogepsch-backend.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=MosogepSCH backend
+
+[Service]
+Type=simple
+User=mosogepsch
+Group=mosogepsch
+ExecStart=java -jar /opt/mosogepsch/mosogepsch-backend.jar
+Restart=on-failure
+
+[Install]
+WantedBy=multi-user.target