diff --git a/README.MD b/README.MD index 9ce5114..d56c6fc 100644 --- a/README.MD +++ b/README.MD @@ -1,8 +1,8 @@ # Стартовые скрипты для настройки серверов -Этот репозиторий содержит скрипт `core.sh` для базовой подготовки Ubuntu/Debian сервера. Скрипт автоматизирует установку полезных пакетов, создание пользователя, настройку сетевой безопасности и журналирования. +Этот репозиторий содержит скрипт `setup.sh` для базовой подготовки Ubuntu/Debian сервера. Скрипт автоматизирует установку полезных пакетов, создание пользователя, настройку сетевой безопасности и журналирования. -## Возможности `core.sh` +## Возможности `setup.sh` - обновление пакетов и установка базового софта; - создание нового пользователя с `sudo` без пароля; - настройка SSH‑доступа только по указанному ключу; @@ -12,7 +12,8 @@ - включение автоматических обновлений `unattended-upgrades`; - установка часового пояса Europe/Moscow; - ротация логов и их отправка через Vector, включая логи Docker; -- установка и запуск Netbird по ключу с добавлением правила UFW для центрального сервера. +- установка и запуск Netbird по ключу с добавлением правила UFW для центрального сервера; + - проверка наличия роли в репозитории, копирование её в `/opt/` и запуск `init.sh` (если есть) для старта первого Docker Compose стека; если роль не найдена, выводится предупреждение. - проверки запуска UFW, Docker, Vector, Netbird и конфигурации SSH. ## Требования @@ -24,11 +25,11 @@ Запуск осуществляется одной командой: ```bash -curl -fsSL https://raw.githubusercontent.com/deadcxap/init_scripts/main/core.sh | \ +curl -fsSL https://raw.githubusercontent.com/deadcxap/init_scripts/main/setup.sh | \ sudo bash -s -- --user --sshkey "" \ [--ssh-ip ] [--monitor-ip ] \ [--vector ] \ - [--compose-url --compose-dir ] \ + [--role ] \ [--netbird-key [--netbird-ip --netbird-port ]] ``` @@ -38,8 +39,7 @@ curl -fsSL https://raw.githubusercontent.com/deadcxap/init_scripts/main/core.sh - `-s, --ssh-ip` — IP‑адрес, с которого разрешён SSH‑доступ (если не указан — порт открыт всем); - `-m, --monitor-ip` — IP‑адрес сервера мониторинга для порта 45876/tcp (если не указан — порт не открывается); - `-v, --vector` — URL приёмника логов Vector (если не указан — Vector не устанавливается); -- `-c, --compose-url` — ссылка на `docker-compose.yml` (например с GitHub); -- `-d, --compose-dir` — каталог, куда сохранить и запустить композ (указывается вместе с `--compose-url`). + - `-r, --role` — имя роли из [репозитория](https://github.com/deadcxap/init_scripts); перед запуском проверяется наличие папки, после чего её содержимое копируется в `/opt/` и при наличии выполняется `init.sh`; если папка отсутствует, выводится предупреждение и шаг пропускается; - `-n, --netbird-key` — ключ настройки Netbird; - `-i, --netbird-ip` — IP центрального сервера Netbird (если указан вместе с портом, добавляется правило UFW); - `-p, --netbird-port` — порт центрального сервера Netbird (используется вместе с IP). diff --git a/setup.sh b/setup.sh index f070593..acdee70 100644 --- a/setup.sh +++ b/setup.sh @@ -53,8 +53,7 @@ Usage: $0 --user NAME --sshkey KEY [options] -s, --ssh-ip IP (optional) IP allowed to access SSH -m, --monitor-ip IP (optional) IP allowed to access Beszel port 45876/tcp -v, --vector URL (optional) URL of Vector sink - -c, --compose-url URL (optional) URL of docker-compose.yaml - -d, --compose-dir DIR (optional) Directory to place compose file + -r, --role NAME (optional) Role name to bootstrap -n, --netbird-key KEY (optional) Netbird setup key -i, --netbird-ip IP (optional) Netbird central server IP -p, --netbird-port PORT (optional) Netbird central server port @@ -66,8 +65,7 @@ SSH_KEY="" SSH_ALLOWED_IP="" MONITOR_IP="" VECTOR_ENDPOINT="" -COMPOSE_URL="" -COMPOSE_DIR="" +ROLE="" NETBIRD_KEY="" NETBIRD_IP="" NETBIRD_PORT="" @@ -79,8 +77,7 @@ while [[ $# -gt 0 ]]; do -s|--ssh-ip) SSH_ALLOWED_IP="$2"; shift 2;; -m|--monitor-ip) MONITOR_IP="$2"; shift 2;; -v|--vector) VECTOR_ENDPOINT="$2"; shift 2;; - -c|--compose-url) COMPOSE_URL="$2"; shift 2;; - -d|--compose-dir) COMPOSE_DIR="$2"; shift 2;; + -r|--role) ROLE="$2"; shift 2;; -n|--netbird-key) NETBIRD_KEY="$2"; shift 2;; -i|--netbird-ip) NETBIRD_IP="$2"; shift 2;; -p|--netbird-port) NETBIRD_PORT="$2"; shift 2;; @@ -94,11 +91,6 @@ if [[ -z "$USERNAME" || -z "$SSH_KEY" ]]; then exit 1 fi -if [[ -n "$COMPOSE_URL" && -z "$COMPOSE_DIR" ]] || [[ -z "$COMPOSE_URL" && -n "$COMPOSE_DIR" ]]; then - log "Both --compose-url and --compose-dir must be provided together" - exit 1 -fi - if [[ $(id -u) -ne 0 ]]; then echo "This script must be run as root" >&2 exit 1 @@ -230,12 +222,42 @@ EOF" run "Checking Vector service" systemctl is-active --quiet vector } -setup_compose() { - [[ -z "$COMPOSE_URL" ]] && return - run "Creating directory $COMPOSE_DIR" mkdir -p "$COMPOSE_DIR" - run "Downloading compose file" curl -fsSL "$COMPOSE_URL" -o "$COMPOSE_DIR/docker-compose.yml" - run "Setting ownership for compose dir" chown -R "$USERNAME:$USERNAME" "$COMPOSE_DIR" - run "Starting docker compose" bash -c "cd '$COMPOSE_DIR' && docker compose up -d" +setup_role() { + [[ -z "$ROLE" ]] && return + local TEMP_DIR ROLE_SRC ROLE_TARGET INIT_SCRIPT REPO_URL ROLE_URL + REPO_URL="https://github.com/deadcxap/init_scripts.git" + ROLE_URL="https://api.github.com/repos/deadcxap/init_scripts/contents/$ROLE" + log "Checking role $ROLE exists in repository" + if curl -fsSL -o /dev/null "$ROLE_URL"; then + log "OK: role $ROLE exists in repository" + SUMMARY+=("Role check: OK") + else + log "WARN: role $ROLE not found in repository, skipping" + SUMMARY+=("Role check: WARN") + return + fi + TEMP_DIR=$(mktemp -d) + run "Cloning role repository" git clone --depth=1 "$REPO_URL" "$TEMP_DIR" + ROLE_SRC="$TEMP_DIR/$ROLE" + if [[ ! -d "$ROLE_SRC" ]]; then + log "WARN: role directory $ROLE_SRC not found after clone, skipping" + SUMMARY+=("Role copy: WARN") + run "Cleaning up role repository" rm -rf "$TEMP_DIR" + return + fi + run "Copying role files" cp -r "$ROLE_SRC" /opt/ + ROLE_TARGET="/opt/$ROLE" + run "Setting ownership for $ROLE_TARGET" chown -R "$USERNAME:$USERNAME" "$ROLE_TARGET" + INIT_SCRIPT="$ROLE_TARGET/init.sh" + if [[ -f "$INIT_SCRIPT" ]]; then + run "Running init.sh for $ROLE" bash "$INIT_SCRIPT" + run "Checking $ROLE stack" bash -c "cd '$ROLE_TARGET' && docker compose ps | grep -q 'Up'" + run "Removing init.sh for $ROLE" rm -f "$INIT_SCRIPT" + else + log "WARN: init.sh not found in $ROLE_TARGET, skipping" + SUMMARY+=("init.sh for $ROLE: MISSING") + fi + run "Cleaning up role repository" rm -rf "$TEMP_DIR" } main() { @@ -250,7 +272,7 @@ main() { configure_logrotate install_netbird setup_vector - setup_compose + setup_role } main