diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 6e6bc04dfae4bab790f78467c967c5775f02a3eb..f44cc942ff1547e00edba886525deb0907b41f47 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -79,3 +79,15 @@ build:tagged:
     - docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD
     - docker push cylab/mark-web:$CI_COMMIT_TAG
     - docker push cylab/mark-web:latest
+
+deploy:
+  image: cylab/php72
+  stage: deploy
+  script:
+    # import ssh private key
+    - eval $(ssh-agent -s)
+    - ssh-add <(echo "$SSH_PRIVATE_KEY")
+    - mkdir -p ~/.ssh
+    - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
+    # in cylab/php72, envoy is already installed...
+    - ~/.composer/vendor/bin/envoy run deploy --commit="$CI_COMMIT_SHA"
diff --git a/Envoy.blade.php b/Envoy.blade.php
new file mode 100644
index 0000000000000000000000000000000000000000..f51dc0e1b7819c78428ad3f242f2777c4a5806b6
--- /dev/null
+++ b/Envoy.blade.php
@@ -0,0 +1,51 @@
+@servers(['web' => 'deployer@172.20.115.101'])
+
+@setup
+    $repository = 'git@gitlab.cylab.be:a.croix/mark-web-webshells-test.git';
+    $root = '~';
+    $current_dir = $root . '/current';
+    $releases_dir = $root . '/releases';
+    $release = date('YmdHis');
+    $release_dir = $releases_dir .'/'. $release;
+    $env = $root . '/env.prod';
+@endsetup
+
+@story('deploy')
+    docker_stop
+    clone
+    composer
+    maven
+    docker
+@endstory
+
+@task('docker_stop')
+    docker stop $(docker ps -aq)
+    docker rm $(docker ps -aq)
+@endtask
+@task('clone')
+    echo 'clone {{ $repository }} ...'
+    [ -d {{ $releases_dir }} ] || mkdir {{ $releases_dir }}
+    git clone --depth 1 {{ $repository }} {{ $release_dir }}
+    cd {{ $release_dir }}
+    git reset --hard {{ $commit }}
+@endtask
+
+@task('composer')
+    echo "install composer dependencies ..."
+    cd {{ $release_dir }}
+    composer install --prefer-dist --no-dev -o
+@endtask
+
+@task('maven')
+    echo "Maven compile"
+    cd {{ $release_dir }}
+    mvn clean package
+    cp target/webshells-tests-1.0-SNAPSHOT.jar modules/
+@endtask
+
+@task('docker')
+    echo "Docker-compose"
+    cd {{ $release_dir }}
+    docker system prune --volumes -f
+    docker-compose up -d --build
+@endtask
diff --git a/composer.json b/composer.json
index 478678d31f76c4163abe00736b9e46f7c72c5f76..b4cd97a82c793c47fed34fc401c038f0305651e2 100644
--- a/composer.json
+++ b/composer.json
@@ -26,6 +26,7 @@
         "barryvdh/laravel-ide-helper": "^2.8",
         "facade/ignition": "^2.0",
         "fzaninotto/faker": "^1.9.1",
+        "laravel/envoy": "^2.5",
         "mockery/mockery": "^1.3.1",
         "nunomaduro/collision": "^4.1",
         "phpunit/phpunit": "^8.5",
diff --git a/composer.lock b/composer.lock
index 07c1c12ceffe5b2c55b9c74675d0e5ed40f02996..61ef9e51945aeb781bc3fac1105ba77bb260284f 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "f98567f66be7257f74cece18fe772cc7",
+    "content-hash": "577e187ae75c04c534580511015d2b16",
     "packages": [
         {
             "name": "asm89/stack-cors",
@@ -5684,6 +5684,68 @@
             ],
             "time": "2020-07-09T08:09:16+00:00"
         },
+        {
+            "name": "laravel/envoy",
+            "version": "v2.5.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/laravel/envoy.git",
+                "reference": "75cf048ed97e2e04622e51e703a065e7720ce729"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laravel/envoy/zipball/75cf048ed97e2e04622e51e703a065e7720ce729",
+                "reference": "75cf048ed97e2e04622e51e703a065e7720ce729",
+                "shasum": ""
+            },
+            "require": {
+                "guzzlehttp/guzzle": "^6.0|^7.0",
+                "illuminate/support": "^6.0|^7.0|^8.0",
+                "php": "^7.2|^8.0",
+                "symfony/console": "^4.3|^5.0",
+                "symfony/process": "^4.3|^5.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^8.0|^9.0"
+            },
+            "suggest": {
+                "ext-posix": "Required to determine the System user on Unix systems."
+            },
+            "bin": [
+                "bin/envoy"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Laravel\\Envoy\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Taylor Otwell",
+                    "email": "taylor@laravel.com"
+                }
+            ],
+            "description": "Elegant SSH tasks for PHP.",
+            "keywords": [
+                "laravel",
+                "ssh"
+            ],
+            "support": {
+                "issues": "https://github.com/laravel/envoy/issues",
+                "source": "https://github.com/laravel/envoy/tree/v2.5.0"
+            },
+            "time": "2021-01-05T16:21:50+00:00"
+        },
         {
             "name": "maximebf/debugbar",
             "version": "v1.16.3",