Add Debian Apache setup script for einkauf.pauker.at
Made-with: Cursor
This commit is contained in:
parent
0a07894d55
commit
2c48f68190
107
scripts/apache-einkauf-debian-setup.sh
Normal file
107
scripts/apache-einkauf-debian-setup.sh
Normal file
@ -0,0 +1,107 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Einmaliges Setup auf Debian mit Apache: DocumentRoot /web/einkauf/html, Host einkauf.pauker.at
|
||||
#
|
||||
# Voraussetzungen:
|
||||
# - Root oder sudo
|
||||
# - Laravel-Projekt liegt unter APP_ROOT (Standard: /web/einkauf), mit Unterordner "public"
|
||||
# - DNS: einkauf.pauker.at zeigt auf diese Maschine
|
||||
#
|
||||
# Nutzung:
|
||||
# sudo bash scripts/apache-einkauf-debian-setup.sh
|
||||
# sudo APP_ROOT=/pfad/zur/app bash scripts/apache-einkauf-debian-setup.sh
|
||||
#
|
||||
# Danach (TLS):
|
||||
# sudo certbot --apache -d einkauf.pauker.at
|
||||
#
|
||||
# App-Deploy (Composer, npm, migrate) siehe deploy.sh im Projektroot.
|
||||
#
|
||||
set -euo pipefail
|
||||
|
||||
APP_ROOT="${APP_ROOT:-/web/einkauf}"
|
||||
DOMAIN="${DOMAIN:-einkauf.pauker.at}"
|
||||
DOCROOT="${DOCROOT:-${APP_ROOT}/html}"
|
||||
PUBLIC_DIR="${APP_ROOT}/public"
|
||||
SITE_CONF="/etc/apache2/sites-available/${DOMAIN}.conf"
|
||||
|
||||
if [[ "${EUID:-0}" -ne 0 ]]; then
|
||||
echo "Bitte mit sudo oder als root ausfuehren." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v apache2ctl >/dev/null 2>&1; then
|
||||
echo "Apache (apache2) ist nicht installiert. Zuerst: apt install apache2" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "==> Apache-Module: rewrite, ssl"
|
||||
a2enmod rewrite
|
||||
a2enmod ssl
|
||||
|
||||
echo "==> App-Verzeichnis pruefen: ${APP_ROOT}"
|
||||
if [[ ! -d "${APP_ROOT}" ]]; then
|
||||
mkdir -p "${APP_ROOT}"
|
||||
echo " Hinweis: ${APP_ROOT} war neu angelegt. Laravel-Code hierher legen (git clone / rsync)."
|
||||
fi
|
||||
|
||||
if [[ ! -f "${APP_ROOT}/artisan" ]]; then
|
||||
echo "WARNUNG: ${APP_ROOT}/artisan nicht gefunden – ist das Laravel-Root? Fortfahren trotzdem (Symlink/Apache)." >&2
|
||||
fi
|
||||
|
||||
if [[ ! -d "${PUBLIC_DIR}" ]]; then
|
||||
echo "FEHLER: ${PUBLIC_DIR} fehlt. Laravel braucht den Ordner 'public'." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "==> DocumentRoot: ${DOCROOT} -> Symlink auf ${PUBLIC_DIR}"
|
||||
if [[ -e "${DOCROOT}" && ! -L "${DOCROOT}" ]]; then
|
||||
if [[ -d "${DOCROOT}" ]] && [[ -z "$(ls -A "${DOCROOT}" 2>/dev/null)" ]]; then
|
||||
rmdir "${DOCROOT}"
|
||||
else
|
||||
echo "FEHLER: ${DOCROOT} existiert und ist kein Symlink (und nicht leer). Bitte umbenennen/entfernen." >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
ln -sfn "${PUBLIC_DIR}" "${DOCROOT}"
|
||||
echo " OK: $(ls -la "${DOCROOT}")"
|
||||
|
||||
echo "==> VirtualHost schreiben: ${SITE_CONF}"
|
||||
cat >"${SITE_CONF}" <<EOF
|
||||
# ${DOMAIN} – Laravel (DocumentRoot = public via Symlink html)
|
||||
# TLS: nach diesem Script: certbot --apache -d ${DOMAIN}
|
||||
|
||||
<VirtualHost *:80>
|
||||
ServerName ${DOMAIN}
|
||||
DocumentRoot ${DOCROOT}
|
||||
|
||||
<Directory ${DOCROOT}>
|
||||
Options -Indexes +FollowSymLinks
|
||||
AllowOverride All
|
||||
Require all granted
|
||||
</Directory>
|
||||
|
||||
ErrorLog \${APACHE_LOG_DIR}/${DOMAIN}-error.log
|
||||
CustomLog \${APACHE_LOG_DIR}/${DOMAIN}-access.log combined
|
||||
</VirtualHost>
|
||||
EOF
|
||||
|
||||
echo "==> Site aktivieren"
|
||||
a2ensite "$(basename "${SITE_CONF}")"
|
||||
|
||||
echo "==> Konfiguration testen"
|
||||
apachectl configtest
|
||||
|
||||
echo "==> Apache neu laden"
|
||||
systemctl reload apache2
|
||||
|
||||
echo ""
|
||||
echo "Fertig (HTTP)."
|
||||
echo ""
|
||||
echo "Naechste Schritte:"
|
||||
echo " 1) TLS: sudo certbot --apache -d ${DOMAIN}"
|
||||
echo " (passt SSL-Zertifikat und leitet HTTP->HTTPS an; Pfade in sites-available werden ergaenzt)"
|
||||
echo " 2) App: cd ${APP_ROOT} && cp .env.example .env && php artisan key:generate"
|
||||
echo " Dann .env (APP_URL=https://${DOMAIN}, DB, MAIL) und:"
|
||||
echo " composer install --no-dev && npm ci && npm run build && php artisan migrate --force && php artisan storage:link"
|
||||
echo " 3) Rechte: chown -R www-data:www-data ${APP_ROOT}/storage ${APP_ROOT}/bootstrap/cache"
|
||||
echo ""
|
||||
Loading…
Reference in New Issue
Block a user