#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ROOT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)" REMOTE_HOST="${REMOTE_HOST:?REMOTE_HOST is required, example: player@shineup.me}" TARGET_DOMAIN="${TARGET_DOMAIN:?TARGET_DOMAIN is required, example: shineup.me}" REMOTE_SERVER_DIR="${REMOTE_SERVER_DIR:?REMOTE_SERVER_DIR is required}" REMOTE_LOGS_DIR="${REMOTE_LOGS_DIR:-$REMOTE_SERVER_DIR/logs}" REMOTE_DATA_DIR="${REMOTE_DATA_DIR:-$REMOTE_SERVER_DIR/data}" REMOTE_SERVICE_NAME="${REMOTE_SERVICE_NAME:?REMOTE_SERVICE_NAME is required}" SERVER_PORT="${SERVER_PORT:?SERVER_PORT is required}" LOCAL_JAR="${LOCAL_JAR:-$ROOT_DIR/SHiNE-server/build/libs/shine-server.jar}" BUILD_JAR="${BUILD_JAR:-1}" REQUIRE_BACKUP="${REQUIRE_BACKUP:-0}" BACKUP_DIR="${BACKUP_DIR:-$ROOT_DIR/deploy/backup/archive}" if [[ "$REQUIRE_BACKUP" == "1" ]]; then if ! find "$BACKUP_DIR" -mindepth 2 -maxdepth 2 -name MANIFEST.txt -print -quit 2>/dev/null | grep -q .; then echo "ERROR: для production deploy сначала положите свежий бэкап в $BACKUP_DIR//MANIFEST.txt" >&2 exit 1 fi fi if [[ "$BUILD_JAR" == "1" ]]; then echo "==> Building server jar" (cd "$ROOT_DIR" && ./gradlew shadowJar) fi if [[ ! -f "$LOCAL_JAR" ]]; then echo "ERROR: локальный jar не найден: $LOCAL_JAR" >&2 exit 1 fi echo "==> Deploy server to $TARGET_DOMAIN ($REMOTE_HOST)" ssh -o BatchMode=yes -o ConnectTimeout=20 "$REMOTE_HOST" "echo SSH OK" >/dev/null ssh "$REMOTE_HOST" "sudo -n true" ssh "$REMOTE_HOST" "java -version >/dev/null 2>&1" TMP_DIR="$(mktemp -d)" cleanup() { rm -rf "$TMP_DIR" } trap cleanup EXIT cat >"$TMP_DIR/$REMOTE_SERVICE_NAME.service" </dev/null" echo "Всё хорошо: сервер $TARGET_DOMAIN обновлён и сервис $REMOTE_SERVICE_NAME перезапущен"