Initialisiere Explor.Code.Law mit RII-Pipeline und Strato-Deploy.
Some checks failed
Deploy explore / deploy (push) Failing after 18s

Entscheidungen als Markdown, Normen-Index und schlankes Git-Sync nach /opt/explore (Gitea Actions, ohne Docker).

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-17 12:03:40 +02:00
commit bdaa21dc31
30 changed files with 2652 additions and 0 deletions

150
setup-ssh-deploy.sh Executable file
View File

@@ -0,0 +1,150 @@
#!/bin/bash
# SSH Deploy Key Setup for explore
#
# Automatisiert:
# 1. Erzeugt ein SSH-Schlüsselpaar (nur für Deployment)
# 2. Hinterlegt den Public Key auf dem Server
# 3. Speichert den Private Key als Gitea Secret via API
#
# Voraussetzungen:
# - ssh-keygen, jq, curl
# - SSH-Zugang zum Server (z.B. ~/.ssh/gitea_deploy)
# - Gitea API-Token (mit repo-Rechten)
# - Repo michaelkole/explore muss bereits existieren
#
# Usage: ./setup-ssh-deploy.sh
set -euo pipefail
PROJECT_NAME="explore"
SERVER_IP="82.165.92.92"
SERVER_USER="root"
GITEA_HOST="git.coded.law"
GITEA_OWNER="michaelkole"
GITEA_REPO="explore"
KEY_FILE="$HOME/.ssh/deploy_${PROJECT_NAME}"
SECRET_NAME="SSH_PRIVATE_KEY"
echo ""
echo "SSH Deploy Key Setup für $PROJECT_NAME"
echo "========================================"
echo ""
if [ -z "${GITEA_TOKEN:-}" ]; then
echo "Gitea API-Token wird benötigt (mit repo-Rechten)."
echo "Erstellen unter: https://$GITEA_HOST/user/settings/applications"
echo ""
read -rsp "Gitea API-Token: " GITEA_TOKEN
echo ""
fi
if [ -z "$GITEA_TOKEN" ]; then
echo "Fehler: Kein Token angegeben."
exit 1
fi
echo "Prüfe Gitea-Zugang..."
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \
-H "Authorization: token $GITEA_TOKEN" \
"https://$GITEA_HOST/api/v1/repos/$GITEA_OWNER/$GITEA_REPO")
if [ "$HTTP_CODE" != "200" ]; then
echo "Fehler: Gitea API antwortet mit HTTP $HTTP_CODE."
echo "Prüfe Token und Repo-Pfad: $GITEA_OWNER/$GITEA_REPO"
echo "Repo ggf. zuerst anlegen unter https://$GITEA_HOST/repo/create"
exit 1
fi
echo " Gitea OK"
if [ -f "$KEY_FILE" ]; then
echo ""
echo "SSH Key existiert bereits: $KEY_FILE"
read -rp "Überschreiben? (j/N) " OVERWRITE
if [[ ! "$OVERWRITE" =~ ^[jJyY]$ ]]; then
echo "Verwende bestehenden Key."
else
rm -f "$KEY_FILE" "$KEY_FILE.pub"
fi
fi
if [ ! -f "$KEY_FILE" ]; then
echo "Erzeuge SSH-Schlüsselpaar..."
ssh-keygen -t ed25519 -C "deploy@$PROJECT_NAME" -f "$KEY_FILE" -N ""
chmod 600 "$KEY_FILE"
echo " Key erzeugt: $KEY_FILE"
fi
echo ""
echo "Hinterlege Public Key auf $SERVER_USER@$SERVER_IP..."
SSH_OPTS="-o StrictHostKeyChecking=accept-new -o ConnectTimeout=5"
EXISTING_KEY=""
if ! ssh $SSH_OPTS -o BatchMode=yes "$SERVER_USER@$SERVER_IP" "true" 2>/dev/null; then
echo " Direkter SSH-Zugang nicht möglich (nur Key-Auth?)."
echo " Suche bestehenden SSH-Key..."
for candidate in ~/.ssh/id_ed25519 ~/.ssh/id_rsa ~/.ssh/gitea_deploy; do
if [ -f "$candidate" ] && ssh -i "$candidate" $SSH_OPTS -o BatchMode=yes "$SERVER_USER@$SERVER_IP" "true" 2>/dev/null; then
EXISTING_KEY="$candidate"
echo " Gefunden: $candidate"
break
fi
done
if [ -z "$EXISTING_KEY" ]; then
echo ""
echo " Kein funktionierender SSH-Key gefunden."
echo " Bitte manuell:"
echo " cat $KEY_FILE.pub | ssh -i ~/.ssh/gitea_deploy $SERVER_USER@$SERVER_IP 'cat >> ~/.ssh/authorized_keys'"
exit 1
fi
fi
if [ -n "$EXISTING_KEY" ]; then
ssh -i "$EXISTING_KEY" "$SERVER_USER@$SERVER_IP" "mkdir -p ~/.ssh && chmod 700 ~/.ssh"
cat "$KEY_FILE.pub" | ssh -i "$EXISTING_KEY" "$SERVER_USER@$SERVER_IP" "cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
else
ssh "$SERVER_USER@$SERVER_IP" "mkdir -p ~/.ssh && chmod 700 ~/.ssh"
cat "$KEY_FILE.pub" | ssh "$SERVER_USER@$SERVER_IP" "cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
fi
echo " Public Key auf Server hinterlegt"
echo "Teste SSH-Verbindung mit Deploy Key..."
if ssh -i "$KEY_FILE" $SSH_OPTS -o BatchMode=yes "$SERVER_USER@$SERVER_IP" "echo 'SSH OK'" 2>/dev/null; then
echo " SSH-Verbindung OK"
else
echo " WARNUNG: SSH-Test fehlgeschlagen. Prüfe authorized_keys auf dem Server."
fi
if ! command -v jq &>/dev/null; then
echo "Fehler: jq fehlt (brew install jq)."
exit 1
fi
echo ""
echo "Speichere Private Key als Gitea Secret '$SECRET_NAME'..."
PRIVATE_KEY_CONTENT=$(cat "$KEY_FILE")
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \
-X PUT \
-H "Authorization: token $GITEA_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"data\": $(echo "$PRIVATE_KEY_CONTENT" | jq -Rs .)}" \
"https://$GITEA_HOST/api/v1/repos/$GITEA_OWNER/$GITEA_REPO/actions/secrets/$SECRET_NAME")
if [ "$HTTP_CODE" = "201" ] || [ "$HTTP_CODE" = "204" ]; then
echo " Secret '$SECRET_NAME' gespeichert"
else
echo " Fehler: Gitea API antwortet mit HTTP $HTTP_CODE"
echo " Manuell: https://$GITEA_HOST/$GITEA_OWNER/$GITEA_REPO/settings/actions/secrets"
exit 1
fi
echo ""
echo "========================================"
echo "SSH Deploy Key Setup abgeschlossen!"
echo "========================================"
echo ""
echo " Private Key: $KEY_FILE"
echo " Public Key: $KEY_FILE.pub"
echo " Server: $SERVER_USER@$SERVER_IP"
echo " Gitea Secret: $SECRET_NAME ($GITEA_OWNER/$GITEA_REPO)"
echo ""