diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 55361ce9cf73c8dd8e7b4698ad944427ccfaf571..d89455b164d8ab29f8e21dd43faa6c96aa406183 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -18,10 +18,10 @@ check:test:
     - python manage.py test
 
 deploy:dev:
-  image: registry.blitzhub.io/docker
-  stage: deploy
   only:
     - development
+  image: registry.blitzhub.io/docker
+  stage: deploy
   services:
     - name: registry.blitzhub.io/docker:dind
       alias: docker
@@ -37,11 +37,11 @@ deploy:dev:
     - check:lint
     - check:test
 
-deploy:prod:
-  image: registry.blitzhub.io/docker
-  stage: deploy
+deploy:prod:  
   only:
     - production
+  image: registry.blitzhub.io/docker
+  stage: deploy
   when: manual
   services:
     - name: registry.blitzhub.io/docker:dind
diff --git a/docker-compose.yml b/docker-compose.yml
index fefe9aec25ca52e48cd000b43f3548c5539faea3..b4d7f5dba93ba3e8ef7485c7143983378768c0ea 100755
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -47,6 +47,27 @@ services:
     hostname: redis
     networks:
       - redis_net
+  celery:
+    restart: always
+    build: .
+    command: celery -A core worker -l info
+    volumes:
+      - ./:/usr/src/app/
+    depends_on:
+      - redis
+      - db
+    networks:
+      - redis_net
+  celery-beat:
+    build: .
+    command: celery -A core beat -l info
+    volumes:
+      - ./:/usr/src/app/
+    depends_on:
+      - redis
+      - db
+    networks:
+      - redis_net
 
 networks:
   db_net:
diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh
index 2b498754464761fb3a7e22bd4e0471dfb0b03723..28a92a0fb96e0cd2ee56b5f01f6abbbf445b98db 100755
--- a/docker-entrypoint.sh
+++ b/docker-entrypoint.sh
@@ -3,6 +3,12 @@
 python3 manage.py migrate --run-syncdb
 python3 manage.py createfixtures
 python3 manage.py cleanuptasks
-# sh import-data.sh
+
+file="docker-entrypoint.lock"
+# exit if entrypoint.lock exists to prevent new import of data every time docker is restarted
+if ! test -f "$file"; then
+    sh import-data.sh
+    touch $file
+fi
 
 /usr/bin/supervisord -c "/etc/supervisor/conf.d/supervisord.conf"
diff --git a/netex/settings.py b/netex/settings.py
index c8895ef0ed26cbec119bd3d7001a3829fb21840e..9fff6f667a3bd82e647c90d6bde519ebf7ce92de 100755
--- a/netex/settings.py
+++ b/netex/settings.py
@@ -12,6 +12,9 @@ https://docs.djangoproject.com/en/3.0/ref/settings/
 
 import os
 
+# celery beat
+from celery.schedules import crontab
+
 # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 
@@ -169,3 +172,13 @@ CACHES = {
         }
     }
 }
+
+CELERY_BROKER_URL = "redis://redis:6379"
+CELERY_RESULT_BACKEND = "redis://redis:6379"
+
+CELERY_BEAT_SCHEDULE = {
+    "update_db": {
+        "task": "control.celery_tasks.task_update_db_from_nedrex",
+        "schedule": crontab(minute="*/3"),
+    }
+}
diff --git a/requirements.txt b/requirements.txt
index 34ff3b679d5c7395c8e9d754895d1f753387cb5c..25c7c16152d39f4a5b04504e76122206731ad0c5 100755
--- a/requirements.txt
+++ b/requirements.txt
@@ -28,4 +28,5 @@ rq==1.3.0
 six==1.15.0
 sqlparse==0.3.1
 urllib3==1.25.10
-sqlalchemy==1.3.23
\ No newline at end of file
+sqlalchemy==1.3.23
+celery==5.1.2
\ No newline at end of file