140 lines
5.1 KiB
Bash
140 lines
5.1 KiB
Bash
#!/usr/bin/env bash
|
||
set -euo pipefail
|
||
source ./lib.sh
|
||
|
||
log "Laravel bereitstellen…"
|
||
mkdir -p "$(dirname "$APP_DIR")"; chown -R "$APP_USER":"$APP_GROUP" "$(dirname "$APP_DIR")"
|
||
|
||
if [[ ! -d "${APP_DIR}/.git" ]]; then
|
||
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 "
|
||
set -e
|
||
cd ${APP_DIR}
|
||
git fetch --depth=1 origin ${GIT_BRANCH} || true
|
||
git checkout ${GIT_BRANCH} 2>/dev/null || git checkout -B ${GIT_BRANCH}
|
||
if git merge-base --is-ancestor HEAD origin/${GIT_BRANCH}; then git pull --ff-only; else git reset --hard origin/${GIT_BRANCH}; git clean -fd; fi
|
||
"
|
||
fi
|
||
|
||
if [[ -f "${APP_DIR}/composer.json" ]]; then
|
||
sudo -u "$APP_USER" -H bash -lc "cd ${APP_DIR} && composer install --no-interaction --prefer-dist --no-dev"
|
||
fi
|
||
|
||
# .env
|
||
ENV_FILE="${APP_DIR}/.env"
|
||
sudo -u "$APP_USER" -H bash -lc "cd ${APP_DIR} && cp -n .env.example .env || true"
|
||
grep -q '^APP_KEY=' "${ENV_FILE}" || sudo -u "$APP_USER" -H bash -lc "cd ${APP_DIR} && php artisan key:generate --force || true"
|
||
|
||
upsert_env(){
|
||
local k="$1" v="$2"
|
||
local ek ev; ek="$(printf '%s' "$k" | sed -e 's/[.[\*^$(){}+?|/]/\\&/g')"; ev="$(printf '%s' "$v" | sed -e 's/[&/]/\\&/g')"
|
||
if grep -qE "^[#[:space:]]*${ek}=" "$ENV_FILE"; then
|
||
sed -Ei "s|^[#[:space:]]*${ek}=.*|${k}=${ev}|g" "$ENV_FILE"
|
||
else
|
||
printf '%s=%s\n' "$k" "$v" >> "$ENV_FILE"
|
||
fi
|
||
}
|
||
|
||
# APP_URL/Host
|
||
APP_HOST_VAL="$SERVER_PUBLIC_IPV4"
|
||
UI_LE_CERT="/etc/letsencrypt/live/${UI_HOST}/fullchain.pem"
|
||
UI_LE_KEY="/etc/letsencrypt/live/${UI_HOST}/privkey.pem"
|
||
if [[ "$BASE_DOMAIN" != "example.com" && -n "$UI_HOST" ]] && ( resolve_ok "$UI_HOST" || [[ -f "$UI_LE_CERT" && -f "$UI_LE_KEY" ]] ); then
|
||
APP_HOST_VAL="$UI_HOST"
|
||
fi
|
||
if [[ "$APP_HOST_VAL" = "$UI_HOST" && -f "$UI_LE_CERT" && -f "$UI_LE_KEY" ]]; then
|
||
APP_URL_VAL="https://${UI_HOST}"
|
||
else
|
||
if [[ -f "/etc/ssl/ui/fullchain.pem" && -f "/etc/ssl/ui/privkey.pem" ]]; then
|
||
APP_URL_VAL="https://${SERVER_PUBLIC_IPV4}"
|
||
else
|
||
APP_URL_VAL="http://${SERVER_PUBLIC_IPV4}"
|
||
fi
|
||
fi
|
||
|
||
# .env schreiben
|
||
upsert_env APP_URL "${APP_URL_VAL}"
|
||
upsert_env APP_HOST "${APP_HOST_VAL}"
|
||
upsert_env APP_NAME "${APP_NAME}"
|
||
upsert_env APP_ENV "${APP_ENV}"
|
||
upsert_env APP_DEBUG "${APP_DEBUG}"
|
||
upsert_env APP_LOCALE "de"
|
||
upsert_env APP_FALLBACK_LOCALE "en"
|
||
|
||
upsert_env SERVER_PUBLIC_IPV4 "${SERVER_PUBLIC_IPV4}"
|
||
upsert_env SERVER_PUBLIC_IPV6 "${SERVER_PUBLIC_IPV6:-}"
|
||
|
||
upsert_env BASE_DOMAIN "${BASE_DOMAIN}"
|
||
upsert_env UI_SUB "${UI_SUB}"
|
||
upsert_env WEBMAIL_SUB "${WEBMAIL_SUB}"
|
||
upsert_env SYSTEM_SUB "${SYSTEM_SUB}"
|
||
upsert_env MTA_SUB "${MTA_SUB}"
|
||
upsert_env LE_EMAIL "${LE_EMAIL}"
|
||
|
||
upsert_env DB_CONNECTION "mysql"
|
||
upsert_env DB_HOST "127.0.0.1"
|
||
upsert_env DB_PORT "3306"
|
||
upsert_env DB_DATABASE "${DB_NAME}"
|
||
upsert_env DB_USERNAME "${DB_USER}"
|
||
upsert_env DB_PASSWORD "${DB_PASS}"
|
||
|
||
upsert_env CACHE_SETTINGS_STORE "redis"
|
||
upsert_env CACHE_STORE "redis"
|
||
upsert_env CACHE_DRIVER "redis"
|
||
upsert_env CACHE_PREFIX "${APP_USER_PREFIX}_cache:"
|
||
upsert_env SESSION_DRIVER "redis"
|
||
upsert_env SESSION_SECURE_COOKIE "true"
|
||
upsert_env SESSION_SAMESITE "lax"
|
||
upsert_env REDIS_CLIENT "phpredis"
|
||
upsert_env REDIS_HOST "127.0.0.1"
|
||
upsert_env REDIS_PORT "6379"
|
||
upsert_env REDIS_PASSWORD "${REDIS_PASS}"
|
||
upsert_env REDIS_DB "0"
|
||
upsert_env REDIS_CACHE_DB "1"
|
||
upsert_env REDIS_CACHE_CONNECTION "cache"
|
||
upsert_env REDIS_CACHE_LOCK_CONNECTION "default"
|
||
|
||
# Reverb / Queue (wie bei dir)
|
||
upsert_env BROADCAST_DRIVER "reverb"
|
||
upsert_env QUEUE_CONNECTION "redis"
|
||
upsert_env LOG_CHANNEL "daily"
|
||
upsert_env REVERB_APP_ID "${APP_USER_PREFIX}"
|
||
upsert_env REVERB_APP_KEY "${APP_USER_PREFIX}_$(openssl rand -hex 16)"
|
||
upsert_env REVERB_APP_SECRET "${APP_USER_PREFIX}_$(openssl rand -hex 32)"
|
||
upsert_env REVERB_HOST "\${APP_HOST}"
|
||
upsert_env REVERB_PORT "443"
|
||
upsert_env REVERB_SCHEME "https"
|
||
upsert_env REVERB_PATH "/ws"
|
||
upsert_env REVERB_SCALING_ENABLED "true"
|
||
upsert_env REVERB_SCALING_CHANNEL "reverb"
|
||
upsert_env VITE_REVERB_APP_KEY "\${REVERB_APP_KEY}"
|
||
upsert_env VITE_REVERB_HOST "\${REVERB_HOST}"
|
||
upsert_env VITE_REVERB_PORT "\${REVERB_PORT}"
|
||
upsert_env VITE_REVERB_SCHEME "\${REVERB_SCHEME}"
|
||
upsert_env VITE_REVERB_PATH "\${REVERB_PATH}"
|
||
upsert_env REVERB_SERVER_APP_KEY "\${REVERB_APP_KEY}"
|
||
upsert_env REVERB_SERVER_HOST "127.0.0.1"
|
||
upsert_env REVERB_SERVER_PORT "8080"
|
||
upsert_env REVERB_SERVER_PATH ""
|
||
upsert_env REVERB_SERVER_SCHEME "http"
|
||
|
||
# Optimize + Migrate + Seed
|
||
sudo -u "$APP_USER" -H bash -lc "cd ${APP_DIR} && php artisan optimize:clear && php artisan config:cache"
|
||
sudo systemctl restart php*-fpm || true
|
||
|
||
sudo -u "$APP_USER" -H bash -lc "
|
||
set -e
|
||
cd ${APP_DIR}
|
||
php artisan optimize:clear
|
||
php artisan migrate --force
|
||
php artisan config:cache
|
||
php artisan optimize:clear
|
||
"
|
||
|
||
if [[ "$BASE_DOMAIN" != "example.com" ]]; then
|
||
sudo -u "$APP_USER" -H bash -lc "cd ${APP_DIR} && php artisan db:seed --class=SystemDomainSeeder --no-interaction || true"
|
||
else
|
||
echo "[i] BASE_DOMAIN=example.com – Seeder übersprungen."
|
||
fi
|