#!/usr/bin/env bash set -euo pipefail # Deployment-Script für 1Panel/Python-Runtime. # Im Container/auf dem Server im Projektverzeichnis ausführen: # ./deploy.sh # # Optional: # DEPLOY_REMOTE=origin DEPLOY_BRANCH=main ./deploy.sh # ./deploy.sh workspace-tenancy # echo workspace-tenancy > .deploy-branch # SKIP_PIP=1 ./deploy.sh # SKIP_COLLECTSTATIC=1 ./deploy.sh # DEPLOY_RESTART_CMD="..." ./deploy.sh cd "$(dirname "$0")" REMOTE="${DEPLOY_REMOTE:-origin}" BRANCH_SOURCE="current branch" if [[ $# -gt 0 && -n "${1:-}" ]]; then BRANCH="$1" BRANCH_SOURCE="command line" elif [[ -n "${DEPLOY_BRANCH:-}" ]]; then BRANCH="$DEPLOY_BRANCH" BRANCH_SOURCE="DEPLOY_BRANCH" elif [[ -f ".deploy-branch" && -n "$(tr -d '[:space:]' < .deploy-branch)" ]]; then BRANCH="$(tr -d '[:space:]' < .deploy-branch)" BRANCH_SOURCE=".deploy-branch" else BRANCH="$(git branch --show-current 2>/dev/null || echo main)" fi if [[ -x ".venv/bin/python" ]]; then PY=".venv/bin/python" elif command -v python3 >/dev/null 2>&1; then PY="python3" elif command -v python >/dev/null 2>&1; then PY="python" else echo "Fehler: python/python3 wurde nicht gefunden." >&2 exit 1 fi echo "==> Deploy $(pwd)" echo "==> Branch: ${BRANCH} (${BRANCH_SOURCE})" echo "==> Python: $($PY --version)" echo "==> Git Update: ${REMOTE}/${BRANCH}" git fetch "$REMOTE" "$BRANCH" CURRENT_BRANCH="$(git branch --show-current 2>/dev/null || true)" if [[ "$CURRENT_BRANCH" != "$BRANCH" ]]; then if git show-ref --verify --quiet "refs/heads/$BRANCH"; then git checkout "$BRANCH" else git checkout -b "$BRANCH" --track "$REMOTE/$BRANCH" fi fi git pull --ff-only "$REMOTE" "$BRANCH" if [[ "${SKIP_PIP:-0}" != "1" ]]; then echo "==> Dependencies installieren/aktualisieren" "$PY" -m pip install -r requirements.txt fi if [[ -d "locale" ]]; then if ! command -v msgfmt >/dev/null 2>&1; then if command -v apt-get >/dev/null 2>&1 && [[ "$(id -u)" == "0" ]]; then echo "==> msgfmt/gettext fehlt, installiere gettext" apt-get update DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends gettext else echo "==> msgfmt/gettext fehlt und kann nicht automatisch installiert werden" fi fi if command -v msgfmt >/dev/null 2>&1; then echo "==> Übersetzungen kompilieren" "$PY" manage.py compilemessages else echo "==> Übersetzungen überspringen: msgfmt/gettext ist nicht installiert" fi fi echo "==> Django Checks" "$PY" manage.py check echo "==> Datenbank-Migrationen" "$PY" manage.py migrate --noinput if [[ "${SKIP_COLLECTSTATIC:-0}" != "1" ]]; then echo "==> Static Files sammeln" "$PY" manage.py collectstatic --noinput fi if [[ -n "${DEPLOY_RESTART_CMD:-}" ]]; then echo "==> Runtime neu starten" bash -lc "$DEPLOY_RESTART_CMD" else echo "==> Fertig. Bitte die Python Runtime in 1Panel neu starten, falls sie nicht automatisch reloadet." fi