From d4cd9ea1cf685b9ca78a4a8049134d6ec9d34141 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Agostinho=20de=20Sousa?= Date: Wed, 7 Oct 2026 11:36:46 +0200 Subject: [PATCH] tubylinxyz fix to solve neo4j enterprise edition errors (#80) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The previous version of the application was giving errors because it depended on an API only available in the Neo4j Enterprise Edition (see below.) ``` 2026-09-10 13:56:45.771+0000 ERROR Client triggered an unexpected error [Neo.DatabaseError.Schema.ConstraintCreationFailed]: Unable to create Constraint( type='NODE KEY', schema=(:Entity {parent_rcsb_id, entity_id}) ): Node Key constraint requires Neo4j Enterprise Edition. Note that only the first found violation is shown., reference 8954d204-b1d3-4966-afca-09e7639654ae. 2026-09-10 13:56:45.789+0000 ERROR Client triggered an unexpected error [Neo.DatabaseError.Schema.ConstraintCreationFailed]: Unable to create Constraint( type='NODE KEY', schema=(:Instance {parent_rcsb_id, asym_id}) ): Node Key constraint requires Neo4j Enterprise Edition. Note that only the first found violation is shown., reference 31e54bfc-f60d-4e20-8f62-74b3648bf995. ``` The developer solved those issues and created new docker images that were replaced in this PR. Reviewed-on: https://gitea.psi.ch/linux/WebHosting_DMZ/pulls/80 Reviewed-by: buchel_k Co-authored-by: João Pedro Agostinho de Sousa --- docker-compose.yaml | 312 +++++++++++++++++++++----------------------- 1 file changed, 150 insertions(+), 162 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 9140478..71a3094 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -512,168 +512,156 @@ services: networks: - backend -# # João Pedro Agostinho de Sousa -# # tubulin.xyz -# neo4j: -# image: neo4j:5 -# environment: -# NEO4J_AUTH: neo4j/${NEO4J_PASSWORD} -# NEO4J_server_memory_heap_initial__size: 1G -# NEO4J_server_memory_heap_max__size: 2G -# NEO4J_server_memory_pagecache_size: 1G -# volumes: -# - /mount/webhosting_dmz_write/tubulin/neo4j/data:/data -# - /mount/webhosting_dmz_write/tubulin/neo4j/logs:/logs -# healthcheck: -# test: -# [ -# "CMD", -# "cypher-shell", -# "-u", -# "neo4j", -# "-p", -# "${NEO4J_PASSWORD}", -# "RETURN 1", -# ] -# interval: 10s -# timeout: 5s -# retries: 10 -# start_period: 30s -# restart: always -# networks: -# - tubulinxyz_backend -# stop_grace_period: 60s -# logging: -# driver: json-file -# options: -# max-size: "50m" -# max-file: "5" -# deploy: -# resources: -# limits: -# memory: 4G -# -# bootstrap: -# image: ghcr.io/rtviii/tubulinxyz:latest -# pull_policy: always -# environment: -# NEO4J_URI: bolt://neo4j:7687 -# NEO4J_USER: neo4j -# NEO4J_PASSWORD: ${NEO4J_PASSWORD} -# NEO4J_CURRENTDB: neo4j -# TUBXZ_ROOT: /app -# TUBETL_DATA: /mnt/tubetl_data -# NCBI_TAXA_SQLITE: /app/.etetoolkit/taxa.sqlite -# volumes: -# - /mount/webhosting_dmz_write/tubulin/data:/mnt/tubetl_data -# - /mount/webhosting_dmz_write/tubulin/log:/var/log/tubxz -# depends_on: -# neo4j: -# condition: service_healthy -# entrypoint: ["/bin/sh", "/app/scripts/init_and_seed.sh"] -# restart: always -# networks: -# - tubulinxyz_backend -# logging: -# driver: json-file -# options: -# max-size: "50m" -# max-file: "3" -# deploy: -# resources: -# limits: -# memory: 4G -# -# backend: -# image: ghcr.io/rtviii/tubulinxyz:latest -# pull_policy: always -# environment: -# NEO4J_URI: bolt://neo4j:7687 -# NEO4J_USER: neo4j -# NEO4J_PASSWORD: ${NEO4J_PASSWORD} -# NEO4J_CURRENTDB: neo4j -# SECRET_KEY: ${SECRET_KEY} -# TUBXZ_ROOT: /app -# TUBETL_DATA: /mnt/tubetl_data -# NCBI_TAXA_SQLITE: /app/.etetoolkit/taxa.sqlite -# volumes: -# - /mount/webhosting_dmz_write/tubulin/data:/mnt/tubetl_data -# - /mount/webhosting_dmz_write/tubulin/log:/var/log/tubxz:ro -# depends_on: -# neo4j: -# condition: service_healthy -# healthcheck: -# test: ["CMD", "curl", "-f", "http://localhost:8000/health"] -# interval: 30s -# timeout: 5s -# retries: 3 -# start_period: 15s -# restart: always -# networks: -# - backend -# - tubulinxyz_backend -# stop_grace_period: 30s -# logging: -# driver: json-file -# options: -# max-size: "50m" -# max-file: "5" -# deploy: -# resources: -# limits: -# memory: 2G -# -# scheduler: -# image: ghcr.io/rtviii/tubulinxyz:latest -# pull_policy: always -# environment: -# NEO4J_URI: bolt://neo4j:7687 -# NEO4J_USER: neo4j -# NEO4J_PASSWORD: ${NEO4J_PASSWORD} -# NEO4J_CURRENTDB: neo4j -# TUBXZ_ROOT: /app -# TUBETL_DATA: /mnt/tubetl_data -# NCBI_TAXA_SQLITE: /app/.etetoolkit/taxa.sqlite -# volumes: -# - /mount/webhosting_dmz_write/tubulin/data:/mnt/tubetl_data -# - /mount/webhosting_dmz_write/tubulin/log:/var/log/tubxz -# depends_on: -# neo4j: -# condition: service_healthy -# entrypoint: ["/bin/sh", "/app/scripts/start_scheduler.sh"] -# restart: always -# networks: -# - tubulinxyz_backend -# logging: -# driver: json-file -# options: -# max-size: "50m" -# max-file: "5" -# deploy: -# resources: -# limits: -# memory: 4G -# -# frontend: -# image: ghcr.io/rtviii/tubulinxyz-frontend:latest -# pull_policy: always -# depends_on: -# backend: -# condition: service_healthy -# restart: always -# networks: -# - backend -# - tubulinxyz_backend -# logging: -# driver: json-file -# options: -# max-size: "50m" -# max-file: "3" -# deploy: -# resources: -# limits: -# memory: 512M -# + # João Pedro Agostinho de Sousa + # tubulin.xyz + neo4j: + image: neo4j:5.26-community + environment: + NEO4J_AUTH: neo4j/${NEO4J_PASSWORD} + NEO4J_server_memory_heap_initial__size: 1G + NEO4J_server_memory_heap_max__size: 2G + NEO4J_server_memory_pagecache_size: 1G + volumes: + - /mount/webhosting_dmz_write/tubulin/neo4j/data:/data + - /mount/webhosting_dmz_write/tubulin/neo4j/logs:/logs + healthcheck: + test: ["CMD", "cypher-shell", "-u", "neo4j", "-p", "${NEO4J_PASSWORD}", "RETURN 1"] + interval: 10s + timeout: 5s + retries: 10 + start_period: 30s + restart: always + networks: + - tubulinxyz_backend + stop_grace_period: 60s + logging: + driver: json-file + options: + max-size: "50m" + max-file: "5" + deploy: + resources: + limits: + memory: 4G + + bootstrap: + image: ghcr.io/rtviii/tubulinxyz:0.2.1 + pull_policy: always + environment: + NEO4J_URI: bolt://neo4j:7687 + NEO4J_USER: neo4j + NEO4J_PASSWORD: ${NEO4J_PASSWORD} + TUBXZ_ROOT: /app + TUBETL_DATA: /mnt/tubetl_data + NCBI_TAXA_SQLITE: /app/.etetoolkit/taxa.sqlite + volumes: + - /mount/webhosting_dmz_write/tubulin/data:/mnt/tubetl_data + - /mount/webhosting_dmz_write/tubulin/log:/var/log/tubxz + depends_on: + neo4j: + condition: service_healthy + entrypoint: ["/bin/sh", "/app/scripts/init_and_seed.sh"] + restart: always + networks: + - tubulinxyz_backend + logging: + driver: json-file + options: + max-size: "50m" + max-file: "3" + deploy: + resources: + limits: + memory: 4G + + backend: + image: ghcr.io/rtviii/tubulinxyz:0.2.1 + pull_policy: always + environment: + NEO4J_URI: bolt://neo4j:7687 + NEO4J_USER: neo4j + NEO4J_PASSWORD: ${NEO4J_PASSWORD} + SECRET_KEY: ${SECRET_KEY} + TUBXZ_ROOT: /app + TUBETL_DATA: /mnt/tubetl_data + NCBI_TAXA_SQLITE: /app/.etetoolkit/taxa.sqlite + volumes: + - /mount/webhosting_dmz_write/tubulin/data:/mnt/tubetl_data + - /mount/webhosting_dmz_write/tubulin/log:/var/log/tubxz:ro + depends_on: + neo4j: + condition: service_healthy + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8000/health"] + interval: 30s + timeout: 5s + retries: 3 + start_period: 15s + restart: always + networks: + - backend + - tubulinxyz_backend + stop_grace_period: 30s + logging: + driver: json-file + options: + max-size: "50m" + max-file: "5" + deploy: + resources: + limits: + memory: 2G + + scheduler: + image: ghcr.io/rtviii/tubulinxyz:0.2.1 + pull_policy: always + environment: + NEO4J_URI: bolt://neo4j:7687 + NEO4J_USER: neo4j + NEO4J_PASSWORD: ${NEO4J_PASSWORD} + TUBXZ_ROOT: /app + TUBETL_DATA: /mnt/tubetl_data + NCBI_TAXA_SQLITE: /app/.etetoolkit/taxa.sqlite + volumes: + - /mount/webhosting_dmz_write/tubulin/data:/mnt/tubetl_data + - /mount/webhosting_dmz_write/tubulin/log:/var/log/tubxz + depends_on: + neo4j: + condition: service_healthy + entrypoint: ["/bin/sh", "/app/scripts/start_scheduler.sh"] + restart: always + networks: + - tubulinxyz_backend + logging: + driver: json-file + options: + max-size: "50m" + max-file: "5" + deploy: + resources: + limits: + memory: 4G + + frontend: + image: ghcr.io/rtviii/tubulinxyz-frontend:0.2.0 + pull_policy: always + depends_on: + backend: + condition: service_healthy + restart: always + networks: + - backend + - tubulinxyz_backend + logging: + driver: json-file + options: + max-size: "50m" + max-file: "3" + deploy: + resources: + limits: + memory: 512M + networks: public: backend: