From 3bce8dd3f86017ff22f6ec42ed2698959070cbc3 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Wed, 25 Mar 2026 16:43:07 +0100 Subject: [PATCH] fix(tubearchivist): use startup wrapper script like Docker Move Django management commands (migrate, collectstatic, ta_envcheck, ta_connection, ta_startup) into run.sh startup wrapper that: - Waits up to 60s for ElasticSearch to be healthy - Runs all init commands before starting uvicorn - Matches Docker's run.sh approach This fixes ta_startup failing during install because ES wasn't ready. The commands now run at every service start with ES readiness check. --- ct/tubearchivist.sh | 9 -------- install/tubearchivist-install.sh | 39 ++++++++++++++++++++------------ 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/ct/tubearchivist.sh b/ct/tubearchivist.sh index ba83b254..a1205ac2 100644 --- a/ct/tubearchivist.sh +++ b/ct/tubearchivist.sh @@ -59,15 +59,6 @@ function update_script() { mv /opt/tubearchivist_env.bak /opt/tubearchivist/.env msg_ok "Restored Configuration" - msg_info "Running Migrations" - set -a - source /opt/tubearchivist/.env - set +a - cd /opt/tubearchivist/backend - $STD /opt/tubearchivist/.venv/bin/python manage.py migrate - $STD /opt/tubearchivist/.venv/bin/python manage.py collectstatic --noinput -c - msg_ok "Ran Migrations" - msg_info "Starting Services" systemctl start tubearchivist tubearchivist-celery tubearchivist-beat systemctl reload nginx diff --git a/install/tubearchivist-install.sh b/install/tubearchivist-install.sh index 1f8a0b38..6052f449 100644 --- a/install/tubearchivist-install.sh +++ b/install/tubearchivist-install.sh @@ -182,19 +182,30 @@ EOF systemctl enable -q --now nginx msg_ok "Configured Nginx" -msg_info "Initializing Application" -set -a -source /opt/tubearchivist/.env -set +a -cd /opt/tubearchivist/backend -$STD /opt/tubearchivist/.venv/bin/python manage.py migrate -$STD /opt/tubearchivist/.venv/bin/python manage.py collectstatic --noinput -c -$STD /opt/tubearchivist/.venv/bin/python manage.py ta_envcheck -$STD /opt/tubearchivist/.venv/bin/python manage.py ta_connection -$STD /opt/tubearchivist/.venv/bin/python manage.py ta_startup -msg_ok "Initialized Application" - msg_info "Creating Services" +cat <<'RUNEOF' >/opt/tubearchivist/backend/run.sh +#!/bin/bash +set -e +cd /opt/tubearchivist/backend +PYTHON=/opt/tubearchivist/.venv/bin/python + +echo "Waiting for ElasticSearch..." +for i in $(seq 1 30); do + if curl -sf http://localhost:9200/_cluster/health >/dev/null 2>&1; then + break + fi + sleep 2 +done + +$PYTHON manage.py migrate +$PYTHON manage.py collectstatic --noinput -c +$PYTHON manage.py ta_envcheck +$PYTHON manage.py ta_connection +$PYTHON manage.py ta_startup + +exec $PYTHON backend_start.py +RUNEOF +chmod +x /opt/tubearchivist/backend/run.sh cat </etc/systemd/system/tubearchivist.service [Unit] Description=Tube Archivist Backend @@ -206,9 +217,9 @@ User=root WorkingDirectory=/opt/tubearchivist/backend EnvironmentFile=/opt/tubearchivist/.env Environment=PATH=/opt/tubearchivist/.venv/bin:/usr/local/bin:/usr/bin:/bin -ExecStart=/opt/tubearchivist/.venv/bin/python backend_start.py +ExecStart=/opt/tubearchivist/backend/run.sh Restart=on-failure -RestartSec=5 +RestartSec=10 [Install] WantedBy=multi-user.target