From 542c5da12b057d8bacbe746c8f8a6dee66924092 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Agostinho=20de=20Sousa?= Date: Fri, 31 Jul 2026 17:42:24 +0200 Subject: [PATCH] add tubulin.xyz --- conf.d/tubulinxyz.conf | 29 ++++++++ docker-compose.yaml | 154 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 183 insertions(+) create mode 100644 conf.d/tubulinxyz.conf diff --git a/conf.d/tubulinxyz.conf b/conf.d/tubulinxyz.conf new file mode 100644 index 0000000..7f2094b --- /dev/null +++ b/conf.d/tubulinxyz.conf @@ -0,0 +1,29 @@ +server { + listen 80; + server_name tubulin.xyz; + return 301 https://$host$request_uri; +} + +server { + listen 443 ssl; + server_name tubulin.xyz; + + ssl_certificate /etc/nginx/certs/tubulin.xyz.crt; + ssl_certificate_key /etc/nginx/private/tubulin.xyz.key; + + location /api/ { + proxy_pass http://backend:8000/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location / { + proxy_pass http://frontend:3000; + proxy_set_header Host $host; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_cache_bypass $http_upgrade; + } +} diff --git a/docker-compose.yaml b/docker-compose.yaml index 303561b..4594eca 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -600,6 +600,159 @@ 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: + - /opt/webcontent/tubulin/neo4j/data:/data + - /opt/webcontent/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: + - /opt/webcontent/tubulin/data:/mnt/tubetl_data + - /opt/webcontent/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: + - /opt/webcontent/tubulin/data:/mnt/tubetl_data + - /opt/webcontent/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: + - /opt/webcontent/tubulin/data:/mnt/tubetl_data + - /opt/webcontent/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 + networks: public: backend: @@ -607,3 +760,4 @@ networks: it_strategy_dashboard_backend: panda_maintenance_backend: tomcatwiki_backend: + tubulinxyz_backend: