Refactor: Installer-Reihenfolge korrigiert (Git-Clone zuerst, dann .env/composer/migrate)
- composer create-project entfernt (wir klonen das eigene Repo) - .env wird nach dem Clone auf dem echten Codebase gesetzt - composer install, key:generate, migrate und storage:link nach Clone - nodesource curl|bash durch Datei-Download ersetzt (stdin-safe) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>main
parent
a07a0d1a98
commit
b9c2eb5eef
80
installer.sh
80
installer.sh
|
|
@ -462,20 +462,34 @@ while [[ $# -gt 0 ]]; do
|
||||||
shift
|
shift
|
||||||
done
|
done
|
||||||
|
|
||||||
# ===== Laravel installieren (als eigener User) =====
|
# ===== Node/NPM installieren (für Vite/Tailwind Build) =====
|
||||||
log "Laravel installieren…"
|
log "Node/NPM installieren…"
|
||||||
mkdir -p "$(dirname "$APP_DIR")"
|
if [ "$NODE_SETUP" = "nodesource" ]; then
|
||||||
chown -R "$APP_USER":$APP_GROUP "$(dirname "$APP_DIR")"
|
curl -fsSL https://deb.nodesource.com/setup_22.x -o /tmp/nodesource_setup.sh
|
||||||
|
bash /tmp/nodesource_setup.sh
|
||||||
if [ ! -d "${APP_DIR}" ] || [ -z "$(ls -A "$APP_DIR" 2>/dev/null || true)" ]; then
|
rm -f /tmp/nodesource_setup.sh
|
||||||
sudo -u "$APP_USER" -H bash -lc "cd /var/www && COMPOSER_ALLOW_SUPERUSER=0 composer create-project laravel/laravel ${APP_USER} --no-interaction"
|
apt-get install -y nodejs
|
||||||
|
else
|
||||||
|
apt-get install -y nodejs npm
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# ===== Projekt aus Git holen =====
|
||||||
|
log "Projekt aus Git klonen…"
|
||||||
|
mkdir -p "$(dirname "$APP_DIR")"
|
||||||
|
chown "$APP_USER":$APP_GROUP "$(dirname "$APP_DIR")"
|
||||||
|
|
||||||
|
if [ ! -d "${APP_DIR}/.git" ]; then
|
||||||
|
rm -rf "${APP_DIR}"
|
||||||
|
sudo -u "$APP_USER" -H bash -lc "git clone --depth=1 -b ${GIT_BRANCH} ${GIT_REPO} ${APP_DIR}"
|
||||||
|
else
|
||||||
|
sudo -u "$APP_USER" -H bash -lc "cd ${APP_DIR} && git fetch --depth=1 origin ${GIT_BRANCH} && git checkout ${GIT_BRANCH} && git pull --ff-only"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ===== .env erstellen und befüllen =====
|
||||||
|
log ".env konfigurieren…"
|
||||||
APP_URL="http://${SERVER_IP}"
|
APP_URL="http://${SERVER_IP}"
|
||||||
sudo -u "$APP_USER" -H bash -lc "cd ${APP_DIR} && cp -n .env.example .env || true"
|
sudo -u "$APP_USER" -H bash -lc "cd ${APP_DIR} && cp -n .env.example .env || true"
|
||||||
sudo -u "$APP_USER" -H bash -lc "cd ${APP_DIR} && php artisan key:generate --force"
|
|
||||||
|
|
||||||
# .env befüllen (MariaDB & Redis Sessions)
|
|
||||||
sed -i "s|^APP_NAME=.*|APP_NAME=${APP_NAME}|g" "${APP_DIR}/.env"
|
sed -i "s|^APP_NAME=.*|APP_NAME=${APP_NAME}|g" "${APP_DIR}/.env"
|
||||||
sed -i "s|^APP_URL=.*|APP_URL=${APP_URL}|g" "${APP_DIR}/.env"
|
sed -i "s|^APP_URL=.*|APP_URL=${APP_URL}|g" "${APP_DIR}/.env"
|
||||||
sed -i "s|^APP_ENV=.*|APP_ENV=${APP_ENV}|g" "${APP_DIR}/.env"
|
sed -i "s|^APP_ENV=.*|APP_ENV=${APP_ENV}|g" "${APP_DIR}/.env"
|
||||||
|
|
@ -496,51 +510,43 @@ sed -i "s|^REDIS_HOST=.*|REDIS_HOST=127.0.0.1|g" "${APP_DIR}/.env"
|
||||||
sed -i "s|^REDIS_PASSWORD=.*|REDIS_PASSWORD=null|g" "${APP_DIR}/.env"
|
sed -i "s|^REDIS_PASSWORD=.*|REDIS_PASSWORD=null|g" "${APP_DIR}/.env"
|
||||||
sed -i "s|^REDIS_PORT=.*|REDIS_PORT=6379|g" "${APP_DIR}/.env"
|
sed -i "s|^REDIS_PORT=.*|REDIS_PORT=6379|g" "${APP_DIR}/.env"
|
||||||
|
|
||||||
|
# Bootstrap-Admin für den ersten Login
|
||||||
# === Bootstrap-Admin für den ersten Login (nur .env, kein DB-User) ===
|
|
||||||
BOOTSTRAP_USER="${APP_USER}"
|
BOOTSTRAP_USER="${APP_USER}"
|
||||||
BOOTSTRAP_EMAIL="${APP_USER}@localhost"
|
BOOTSTRAP_EMAIL="${APP_USER}@localhost"
|
||||||
BOOTSTRAP_PASS="$(openssl rand -base64 18 | LC_ALL=C tr -dc 'A-Za-z0-9' | head -c 12)"
|
BOOTSTRAP_PASS="$(openssl rand -base64 18 | LC_ALL=C tr -dc 'A-Za-z0-9' | head -c 12)"
|
||||||
BOOTSTRAP_HASH="$(php -r 'echo password_hash($argv[1], PASSWORD_BCRYPT);' "$BOOTSTRAP_PASS")"
|
BOOTSTRAP_HASH="$(php -r 'echo password_hash($argv[1], PASSWORD_BCRYPT);' "$BOOTSTRAP_PASS")"
|
||||||
|
|
||||||
grep -q '^SETUP_PHASE=' "${APP_DIR}/.env" || echo "SETUP_PHASE=bootstrap" >> "${APP_DIR}/.env"
|
grep -q '^SETUP_PHASE=' "${APP_DIR}/.env" \
|
||||||
|
|| echo "SETUP_PHASE=bootstrap" >> "${APP_DIR}/.env"
|
||||||
sed -i "s|^SETUP_PHASE=.*|SETUP_PHASE=bootstrap|g" "${APP_DIR}/.env"
|
sed -i "s|^SETUP_PHASE=.*|SETUP_PHASE=bootstrap|g" "${APP_DIR}/.env"
|
||||||
|
|
||||||
grep -q '^BOOTSTRAP_ADMIN_USER=' "${APP_DIR}/.env" || echo "BOOTSTRAP_ADMIN_USER=${BOOTSTRAP_USER}" >> "${APP_DIR}/.env"
|
grep -q '^BOOTSTRAP_ADMIN_USER=' "${APP_DIR}/.env" \
|
||||||
|
|| echo "BOOTSTRAP_ADMIN_USER=${BOOTSTRAP_USER}" >> "${APP_DIR}/.env"
|
||||||
sed -i "s|^BOOTSTRAP_ADMIN_USER=.*|BOOTSTRAP_ADMIN_USER=${BOOTSTRAP_USER}|g" "${APP_DIR}/.env"
|
sed -i "s|^BOOTSTRAP_ADMIN_USER=.*|BOOTSTRAP_ADMIN_USER=${BOOTSTRAP_USER}|g" "${APP_DIR}/.env"
|
||||||
|
|
||||||
grep -q '^BOOTSTRAP_ADMIN_EMAIL=' "${APP_DIR}/.env" || echo "BOOTSTRAP_ADMIN_EMAIL=${BOOTSTRAP_EMAIL}" >> "${APP_DIR}/.env"
|
grep -q '^BOOTSTRAP_ADMIN_EMAIL=' "${APP_DIR}/.env" \
|
||||||
|
|| echo "BOOTSTRAP_ADMIN_EMAIL=${BOOTSTRAP_EMAIL}" >> "${APP_DIR}/.env"
|
||||||
sed -i "s|^BOOTSTRAP_ADMIN_EMAIL=.*|BOOTSTRAP_ADMIN_EMAIL=${BOOTSTRAP_EMAIL}|g" "${APP_DIR}/.env"
|
sed -i "s|^BOOTSTRAP_ADMIN_EMAIL=.*|BOOTSTRAP_ADMIN_EMAIL=${BOOTSTRAP_EMAIL}|g" "${APP_DIR}/.env"
|
||||||
|
|
||||||
grep -q '^BOOTSTRAP_ADMIN_PASSWORD_HASH=' "${APP_DIR}/.env" || echo "BOOTSTRAP_ADMIN_PASSWORD_HASH=${BOOTSTRAP_HASH}" >> "${APP_DIR}/.env"
|
grep -q '^BOOTSTRAP_ADMIN_PASSWORD_HASH=' "${APP_DIR}/.env" \
|
||||||
|
|| echo "BOOTSTRAP_ADMIN_PASSWORD_HASH=${BOOTSTRAP_HASH}" >> "${APP_DIR}/.env"
|
||||||
sed -i "s|^BOOTSTRAP_ADMIN_PASSWORD_HASH=.*|BOOTSTRAP_ADMIN_PASSWORD_HASH=${BOOTSTRAP_HASH}|g" "${APP_DIR}/.env"
|
sed -i "s|^BOOTSTRAP_ADMIN_PASSWORD_HASH=.*|BOOTSTRAP_ADMIN_PASSWORD_HASH=${BOOTSTRAP_HASH}|g" "${APP_DIR}/.env"
|
||||||
|
|
||||||
# ===== Node/NPM installieren (für Vite/Tailwind Build) =====
|
# ===== Composer Dependencies =====
|
||||||
if [ "$NODE_SETUP" = "nodesource" ]; then
|
log "Composer install…"
|
||||||
# LTS via NodeSource (empfohlen für aktuelle LTS)
|
sudo -u "$APP_USER" -H bash -lc "cd ${APP_DIR} && COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev --optimize-autoloader --no-interaction"
|
||||||
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
|
|
||||||
apt-get install -y nodejs
|
|
||||||
else
|
|
||||||
# Debian-Repo (ok für Basics, aber u.U. älter)
|
|
||||||
apt-get install -y nodejs npm
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ===== Projekt aus Git holen (PLATZHALTER) =====
|
# ===== App-Key & Migrations =====
|
||||||
# Falls dein Repo später bereitsteht, überschreibt dieser Block das leere/Standard-Laravel.
|
log "App-Key generieren und Datenbank migrieren…"
|
||||||
if [ "${GIT_REPO}" != "https://example.com/your-repo-placeholder.git" ]; then
|
sudo -u "$APP_USER" -H bash -lc "cd ${APP_DIR} && php artisan key:generate --force"
|
||||||
if [ ! -d "${APP_DIR}/.git" ]; then
|
sudo -u "$APP_USER" -H bash -lc "cd ${APP_DIR} && php artisan migrate --force"
|
||||||
rm -rf "${APP_DIR}"
|
sudo -u "$APP_USER" -H bash -lc "cd ${APP_DIR} && php artisan storage:link --force || true"
|
||||||
sudo -u "$APP_USER" -H bash -lc "git clone --depth=1 -b ${GIT_BRANCH} ${GIT_REPO} ${APP_DIR}"
|
|
||||||
else
|
|
||||||
sudo -u "$APP_USER" -H bash -lc "cd ${APP_DIR} && git fetch --depth=1 origin ${GIT_BRANCH} && git checkout ${GIT_BRANCH} && git pull --ff-only"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ===== Frontend Build (nur wenn package.json existiert) =====
|
# ===== Frontend Build =====
|
||||||
if [ -f "${APP_DIR}/package.json" ]; then
|
if [ -f "${APP_DIR}/package.json" ]; then
|
||||||
|
log "Frontend bauen…"
|
||||||
sudo -u "$APP_USER" -H bash -lc "cd ${APP_DIR} && npm ci --no-audit --no-fund || npm install"
|
sudo -u "$APP_USER" -H bash -lc "cd ${APP_DIR} && npm ci --no-audit --no-fund || npm install"
|
||||||
# Prod-Build (Vite/Tailwind)
|
sudo -u "$APP_USER" -H bash -lc "cd ${APP_DIR} && npm run build"
|
||||||
sudo -u "$APP_USER" -H bash -lc "cd ${APP_DIR} && npm run build || npm run build:prod || true"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue