diff --git a/deploy_dev.sh b/deploy_dev.sh
old mode 100644
new mode 100755
diff --git a/deploy_prod.sh b/deploy_prod.sh
index 45e4fab1c7546f4fee910569eb5e392d76010c58..145fd9f2f00a5aebcc4d42cda275fb26d9d32f49 100755
--- a/deploy_prod.sh
+++ b/deploy_prod.sh
@@ -1,2 +1,9 @@
-docker build -t gitlab.rrz.uni-hamburg.de:4567/cosy-bio/drugst.one/backend:prod -f ./Dockerfile .
-docker push gitlab.rrz.uni-hamburg.de:4567/cosy-bio/drugst.one/backend:prod
\ No newline at end of file
+#!/bin/bash
+
+branch=$(git rev-parse --abbrev-ref HEAD)
+if [ "$branch" == "production" ]; then
+	docker build -t gitlab.rrz.uni-hamburg.de:4567/cosy-bio/drugst.one/backend:prod -f ./Dockerfile .
+	docker push gitlab.rrz.uni-hamburg.de:4567/cosy-bio/drugst.one/backend:prod
+else 
+	echo "DENIED: Your are not in the production branch. Do not push to production from the ${branch} branch."
+fi
diff --git a/docker-compose-prod.yml b/docker-compose-prod.yml
new file mode 100755
index 0000000000000000000000000000000000000000..cb01d8975c389a6f3d57b3e3046e6ab395d7b833
--- /dev/null
+++ b/docker-compose-prod.yml
@@ -0,0 +1,122 @@
+version: '3.3'
+
+services:
+  frontend:
+    container_name: drugstone_frontend
+    image: gitlab.rrz.uni-hamburg.de:4567/cosy-bio/drugst.one/website:prod
+    restart: always
+    ports:
+      - 8031:80
+    networks:
+      - drugstone
+    labels:
+      - "com.centurylinklabs.watchtower.enable=true"
+  backend:
+    image: gitlab.rrz.uni-hamburg.de:4567/cosy-bio/drugst.one/backend:prod
+    container_name: drugstone_backend
+    command: 
+      - "sh"
+      - "scripts/docker-entrypoint.sh"
+    env_file:
+      - 'docker-django.env'
+    restart: always
+    volumes:
+      - drugstone_db_schema_volume:/usr/src/drugstone/drugstone/migrations
+      - drugstone_data_volume:/usr/src/drugstone/data
+    ports:
+      - 8032:8000
+    networks:
+      - drugstone
+    depends_on:
+      - db
+      - redis
+    labels:
+      - "com.centurylinklabs.watchtower.enable=true"
+  db:
+    image: postgres
+    container_name: drugstone_postgres
+    restart: always
+    hostname: drugstone_postgres
+#    ports:
+#      - 5432:5432
+    networks:
+      - drugstone
+    volumes:
+      - drugstone_db_volume:/var/lib/postgresql/data
+    environment:
+      - POSTGRES_DB=drugstone
+      - POSTGRES_USER=drugstone
+      - POSTGRES_PASSWORD=t6278yczAH7rPKVMxaDD
+    command: 
+      - "postgres"
+      - "-c" 
+      - "max_connections=10000"
+      - "-c"
+      - "shared_buffers=2GB"
+  redis:
+    image: redis
+    container_name: drugstone_redis
+    restart: always
+    command: ["redis-server"]
+    networks:
+      - drugstone
+#    ports:
+#      - 6379:6379
+  celery:
+    image: gitlab.rrz.uni-hamburg.de:4567/cosy-bio/drugst.one/backend:prod
+    command:
+      - "sh"
+      - "scripts/start_celery_worker.sh"
+    restart: always
+    container_name: drugstone_celery
+    hostname: drugstone_celery
+    volumes:
+      - drugstone_data_volume:/usr/src/drugstone/data
+    env_file:
+      - './docker-django.env'
+    depends_on:
+      - redis
+      - db
+    networks:
+      - drugstone
+    labels:
+      - "com.centurylinklabs.watchtower.enable=true"
+  celery-beat:
+    image: gitlab.rrz.uni-hamburg.de:4567/cosy-bio/drugst.one/backend:prod
+    command:
+      - "sh"
+      - "scripts/start_celery_beat.sh"
+    container_name: drugstone_celery_beat
+    hostname: drugstone_celery_beat
+    restart: always
+    env_file:
+      - './docker-django.env'
+    depends_on:
+      - redis
+      - db
+    networks:
+      - drugstone
+    labels:
+      - "com.centurylinklabs.watchtower.enable=true"
+  cdn:
+    build: cdn
+    image: drugstone_cdn
+    container_name: drugstone_cdn
+    restart: always
+    volumes:
+      - drugstone_cdn_volume:/app/files
+    ports:
+      - 8033:80
+
+networks:
+  drugstone:
+
+volumes:
+  drugstone_db_volume:
+    external: true
+  drugstone_db_schema_volume:
+    external: true
+  drugstone_data_volume:
+    external: true
+  drugstone_cdn_volume:
+    external: true
\ No newline at end of file
diff --git a/docker-compose.yml b/docker-compose.yml
index 3b0d7a3f1faf7e7e38c1603be71a306914b77660..4e8688633619205a4b2cba1d6684d1a05feab2d7 100755
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,7 +1,7 @@
 version: '3.3'
 
 services:
-  app:
+  backend:
     image: drugstone_backend
     container_name: drugstone_backend
     command: 
@@ -72,6 +72,7 @@ services:
     command:
       - "sh"
       - "scripts/start_celery_beat.sh"
+    restart: always
     image: drugstone_backend
     container_name: drugstone_celery_beat
     hostname: drugstone_celery_beat
diff --git a/docker-django.env b/docker-django.env
index b4216e4c78942ead06292499cbfe65d298f1c067..9bf4bf33e4554aafa7a51088eb57885b753ab769 100755
--- a/docker-django.env
+++ b/docker-django.env
@@ -10,4 +10,6 @@ SQL_HOST=drugstone_postgres
 SQL_PORT=5432
 REDIS_HOST=redis
 REDIS_PORT=6379
-GT_THREADS=16
\ No newline at end of file
+GT_THREADS=16
+DJANGO_SETTINGS_MODULE=drugstone.settings
+CELERY_BROKER_URL=redis://redis:6379/0
\ No newline at end of file
diff --git a/drugstone/management/includes/DatasetLoader.py b/drugstone/management/includes/DatasetLoader.py
index ad23f090d31a05b8a509d36cf01821f16c1ed7b2..804a3df0136edeaca6ce41444f0b1a12c48f4fb2 100644
--- a/drugstone/management/includes/DatasetLoader.py
+++ b/drugstone/management/includes/DatasetLoader.py
@@ -146,7 +146,7 @@ def get_drug_target_drugbank():
         name='DrugBank',
         link='https://go.drugbank.com/',
         version='5.1.7',
-        licenced=False
+        licenced=True
     )
     return dataset
 
diff --git a/drugstone/views.py b/drugstone/views.py
index 1b5ae628cb5fe16db6925d68f63398b5b98f0794..b2ef1ea245a923e0cf3d469d3245fe723a539bc4 100755
--- a/drugstone/views.py
+++ b/drugstone/views.py
@@ -225,7 +225,7 @@ def create_network(request) -> Response:
     while True:
         try:
             Network.objects.create(id=id, nodes=request.data['network']['nodes'],
-                                   edges=request.data['network']['edges'], config=request.data['config'], 
+                                   edges=request.data['network']['edges'], config=request.data['config'],
                                    groups=request.data['groups'])
             break
         except IntegrityError:
@@ -248,9 +248,9 @@ def load_network(request) -> Response:
     network = NetworkSerializer().to_representation(Network.objects.get(id=request.query_params.get('id')))
     result = {'network': {'nodes': json.loads(network['nodes'].replace("'", '"')),
                           'edges': json.loads(network['edges'].replace("'", '"'))},
-                'config': json.loads(
+              'config': json.loads(
                   network['config'].replace("'", '"').replace('True', 'true').replace('False', 'false')),
-                'groups': json.loads(
+              'groups': json.loads(
                   network['groups'].replace("'", '"').replace('True', 'true').replace('False', 'false'))}
     return Response(result)
 
@@ -375,7 +375,9 @@ def result_view(request) -> Response:
                 detail['ensg'] = list(set(detail['ensg']))
 
     edges = parameters['input_network']['edges']
+
     edge_endpoint_ids = set()
+
     # TODO check for custom edges when working again with ensemble gene ids
     for edge in edges:
         edge_endpoint_ids.add(edge['from'])
@@ -383,11 +385,10 @@ def result_view(request) -> Response:
 
     nodes_mapped, id_key = query_proteins_by_identifier(edge_endpoint_ids, identifier)
 
-
     if 'autofill_edges' in parameters['config'] and parameters['config']['autofill_edges']:
-
         prots = list(filter(lambda n: n['drugstone_type'] == 'protein',
-                filter(lambda n: 'drugstone_type' in n and node_name_attribute in n, parameters['input_network']['nodes'])))
+                            filter(lambda n: 'drugstone_type' in n and node_name_attribute in n,
+                                   parameters['input_network']['nodes'])))
 
         proteins = {node_name[1:] for node in prots for node_name in node[node_name_attribute]}
         dataset = DEFAULTS['ppi'] if 'interaction_protein_protein' not in parameters['config'] else \
@@ -400,7 +401,6 @@ def result_view(request) -> Response:
                               interaction_objects))
         edges.extend(auto_edges)
 
-
     result['network']['edges'].extend(edges)
     uniq_edges = dict()
     for edge in result['network']['edges']:
@@ -530,10 +530,10 @@ def adjacent_disorders(request) -> Response:
     data = request.data
     if 'proteins' in data:
         drugstone_ids = data.get('proteins', [])
-        pdi_dataset = get_pdis_ds(data.get('dataset', DEFAULTS['pdis']), data.get('licenced', False))
+        pdis_dataset = get_pdis_ds(data.get('dataset', DEFAULTS['pdis']), data.get('licenced', False))
         # find adjacent drugs by looking at drug-protein edges
         pdis_objects = ProteinDisorderAssociation.objects.filter(protein__id__in=drugstone_ids,
-                                                                 pdis_dataset_id=pdi_dataset.id)
+                                                                 pdis_dataset_id=pdis_dataset.id)
         disorders = {e.disorder for e in pdis_objects}
         # serialize
         edges = ProteinDisorderAssociationSerializer(many=True).to_representation(pdis_objects)
diff --git a/scripts/docker-entrypoint.sh b/scripts/docker-entrypoint.sh
index db7a2d39ad5d4040b6dd34294c675ea20ae7b9bf..43bf32df3da5898d25d96f8abd734edf4872ea3c 100755
--- a/scripts/docker-entrypoint.sh
+++ b/scripts/docker-entrypoint.sh
@@ -4,7 +4,7 @@ python3 manage.py makemigrations drugstone
 python3 manage.py migrate
 python3 manage.py createfixtures
 python3 manage.py cleanuptasks
-#python3 manage.py populate_db --update -a
-#python3 manage.py make_graphs
+python3 manage.py populate_db --update -a
+python3 manage.py make_graphs
 
 /usr/bin/supervisord -c "/etc/supervisor/conf.d/supervisord.conf"
diff --git a/tasks/trust_rank.py b/tasks/trust_rank.py
index 8f5c40c55981f191fef0c63ea369b04710318945..2283d74337e88c1a7212252dd43b4c680902a332 100755
--- a/tasks/trust_rank.py
+++ b/tasks/trust_rank.py
@@ -208,7 +208,6 @@ def trust_rank(task_hook: TaskHook):
     if ppi_dataset['licenced'] or pdi_dataset['licenced']:
         filename += "_licenced"
     filename = os.path.join(task_hook.data_directory, filename+".gt")
-    print(filename)
     g, seed_ids, drug_ids = read_graph_tool_graph(filename, seeds, id_space, max_deg, include_indirect_drugs, include_non_approved_drugs, search_target)
     
     if custom_edges:
diff --git a/tasks/util/read_graph_tool_graph.py b/tasks/util/read_graph_tool_graph.py
index 2db32cfd3b1064fca2276d8f98db063ff018ef98..ca70eefd4dc5f3fd41a3324dc71f69dbb55bc7dc 100755
--- a/tasks/util/read_graph_tool_graph.py
+++ b/tasks/util/read_graph_tool_graph.py
@@ -125,11 +125,6 @@ def read_graph_tool_graph(file_path, seeds, id_space, max_deg, include_indirect_
     for edge in deleted_edges:
         g.remove_edge(edge)
     g.set_fast_edge_removal(fast=False)
-    # vertices = 0
-    # for _ in g.vertices():
-    #     vertices += 1
-    # edges = 0
-    # for _ in g.edges():
-    #     edges += 1
+
     # Return the graph and the indices of the seed_ids and the seeds.
     return g, list(seed_ids.keys()), drug_ids
diff --git a/tasks/util/scores_to_results.py b/tasks/util/scores_to_results.py
index 4db5e69078bd757f6ee62c9d96d9e8898054b28a..b690db510699139e7c8a368c80103a892018440b 100755
--- a/tasks/util/scores_to_results.py
+++ b/tasks/util/scores_to_results.py
@@ -45,7 +45,7 @@ def scores_to_results(
 
                 drug_in_path = False
                 for vertex in vertices:
-                    if g.vertex_properties["type"][int(vertex)] == "Drug" and vertex != candidate:
+                    if g.vertex_properties["type"][int(vertex)] == "drug" and vertex != candidate:
                         drug_in_path = True
                         break
                 if drug_in_path:
@@ -67,7 +67,7 @@ def scores_to_results(
 
                 drug_in_path = False
                 for vertex in vertices:
-                    if g.vertex_properties["type"][int(vertex)] == "Drug" and vertex != candidate:
+                    if g.vertex_properties["type"][int(vertex)] == "drug" and vertex != candidate:
                         drug_in_path = True
                         break
                 if drug_in_path: