autoinstalatory
This commit is contained in:
@@ -0,0 +1,153 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
TARGET_DIR="www"
|
||||
SODEW_DIR="sodew"
|
||||
|
||||
# WordPress core (latest.zip)
|
||||
WP_URL_BASE="https://wordpress.org/latest.zip"
|
||||
|
||||
# Plugin slugs (WordPress.org)
|
||||
PLUGINS=(
|
||||
"litespeed-cache"
|
||||
)
|
||||
|
||||
need_cmd() {
|
||||
command -v "$1" >/dev/null 2>&1 || { echo "Chybí příkaz: $1" >&2; exit 1; }
|
||||
}
|
||||
need_cmd curl
|
||||
need_cmd unzip
|
||||
need_cmd rsync
|
||||
need_cmd mktemp
|
||||
need_cmd date
|
||||
need_cmd find
|
||||
need_cmd grep
|
||||
need_cmd sed
|
||||
|
||||
tmp="$(mktemp -d)"
|
||||
cleanup() { rm -rf "$tmp"; }
|
||||
trap cleanup EXIT
|
||||
|
||||
ts="$(date +%s)"
|
||||
echo "==> TMP: $tmp"
|
||||
mkdir -p "$tmp/downloads" "$tmp/extract" "$tmp/plugins"
|
||||
|
||||
# --- Helper: fresh download (no cache) ---
|
||||
fresh_curl() {
|
||||
local url="$1"
|
||||
local out="$2"
|
||||
curl -fsSL --retry 3 --retry-delay 1 \
|
||||
-H "Cache-Control: no-cache, no-store, must-revalidate" \
|
||||
-H "Pragma: no-cache" \
|
||||
-H "Expires: 0" \
|
||||
-o "$out" \
|
||||
"$url"
|
||||
}
|
||||
|
||||
# --- Helper: detekce verze WordPressu ---
|
||||
detect_wp_version() {
|
||||
local version_file="$1/wp-includes/version.php"
|
||||
if [[ -f "$version_file" ]]; then
|
||||
grep -E "^\\\$wp_version\s*=" "$version_file" \
|
||||
| head -n1 \
|
||||
| sed -E "s/.*=\s*'([^']+)'.*/\1/"
|
||||
else
|
||||
echo "neznámá"
|
||||
fi
|
||||
}
|
||||
|
||||
# --- Helper: detekce verze pluginu ---
|
||||
detect_plugin_version() {
|
||||
local plugin_dir="$1"
|
||||
# Zkus najít verzi v PHP hlavičce hlavního souboru pluginu
|
||||
local version
|
||||
version="$(grep -rhiE "^\s*\*?\s*Version:\s*" "$plugin_dir" --include="*.php" 2>/dev/null \
|
||||
| head -n1 \
|
||||
| sed -E "s/.*[Vv]ersion:\s*([0-9A-Za-z.\-]+).*/\1/")"
|
||||
if [[ -z "$version" ]]; then
|
||||
# Fallback: zkus readme.txt (Stable tag)
|
||||
local readme="$plugin_dir/readme.txt"
|
||||
if [[ -f "$readme" ]]; then
|
||||
version="$(grep -iE "^Stable tag:" "$readme" \
|
||||
| head -n1 \
|
||||
| sed -E "s/.*[Ss]table tag:\s*([0-9A-Za-z.\-]+).*/\1/")"
|
||||
fi
|
||||
fi
|
||||
echo "${version:-neznámá}"
|
||||
}
|
||||
|
||||
# --- Fail-fast: kontrola struktury SODEW ---
|
||||
echo "==> Kontroluju SODEW zdroj"
|
||||
[[ -d "$SODEW_DIR" ]] || { echo "Chybí složka: $SODEW_DIR" >&2; exit 1; }
|
||||
[[ -d "$SODEW_DIR/wp-content/mu-plugins" ]] || { echo "Chybí: $SODEW_DIR/wp-content/mu-plugins/" >&2; exit 1; }
|
||||
|
||||
echo "==> Stahuju WordPress (vždy fresh)"
|
||||
WP_URL="${WP_URL_BASE}?t=${ts}"
|
||||
fresh_curl "$WP_URL" "$tmp/downloads/wordpress.zip"
|
||||
|
||||
echo "==> Rozbaluju WordPress"
|
||||
unzip -q "$tmp/downloads/wordpress.zip" -d "$tmp/extract"
|
||||
WP_SRC="$tmp/extract/wordpress"
|
||||
if [[ ! -d "$WP_SRC/wp-admin" ]]; then
|
||||
echo "Chyba: WordPress nebyl správně rozbalen." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
WP_VERSION="$(detect_wp_version "$WP_SRC")"
|
||||
echo " WordPress verze: ${WP_VERSION}"
|
||||
|
||||
# Pole pro shrnutí na konci
|
||||
declare -A PLUGIN_VERSIONS
|
||||
|
||||
echo "==> Stahuju a rozbaluju pluginy (vždy fresh)"
|
||||
for slug in "${PLUGINS[@]}"; do
|
||||
url="https://downloads.wordpress.org/plugin/${slug}.zip?t=${ts}"
|
||||
zip="$tmp/downloads/${slug}.zip"
|
||||
echo " -> $slug"
|
||||
fresh_curl "$url" "$zip"
|
||||
unzip -q "$zip" -d "$tmp/plugins"
|
||||
|
||||
plugin_dir="$tmp/plugins/$slug"
|
||||
if [[ -d "$plugin_dir" ]]; then
|
||||
pv="$(detect_plugin_version "$plugin_dir")"
|
||||
else
|
||||
pv="neznámá"
|
||||
fi
|
||||
PLUGIN_VERSIONS["$slug"]="$pv"
|
||||
echo " verze: ${pv}"
|
||||
done
|
||||
|
||||
echo "==> Připravuju cílovou složku"
|
||||
mkdir -p "$TARGET_DIR"
|
||||
|
||||
echo "==> Clean deploy (mažu obsah cílové složky)"
|
||||
find "$TARGET_DIR" -mindepth 1 -maxdepth 1 -exec rm -rf {} +
|
||||
|
||||
echo "==> Nasazuju WordPress core"
|
||||
rsync -a --delete "$WP_SRC"/ "$TARGET_DIR"/
|
||||
|
||||
echo "==> Nasazuju pluginy do wp-content/plugins"
|
||||
mkdir -p "$TARGET_DIR/wp-content/plugins"
|
||||
rm -rf "$TARGET_DIR/wp-content/plugins/"* || true
|
||||
rsync -a "$tmp/plugins"/ "$TARGET_DIR/wp-content/plugins/"
|
||||
|
||||
echo "==> Includuju vše ze SODEW do rootu WP (kromě wp-content/)"
|
||||
rsync -a \
|
||||
--exclude "wp-content/" \
|
||||
"$SODEW_DIR"/ \
|
||||
"$TARGET_DIR"/
|
||||
|
||||
echo "==> Includuju mu-plugins ze SODEW do wp-content/mu-plugins"
|
||||
mkdir -p "$TARGET_DIR/wp-content/mu-plugins"
|
||||
rsync -a --delete \
|
||||
"$SODEW_DIR/wp-content/mu-plugins/" \
|
||||
"$TARGET_DIR/wp-content/mu-plugins/"
|
||||
|
||||
echo ""
|
||||
echo "==> Hotovo."
|
||||
echo ""
|
||||
echo "Nasazené verze:"
|
||||
echo " - WordPress: ${WP_VERSION}"
|
||||
for slug in "${PLUGINS[@]}"; do
|
||||
echo " - ${slug}: ${PLUGIN_VERSIONS[$slug]}"
|
||||
done
|
||||
Reference in New Issue
Block a user