Merge pull request #3 from deadcxap/codex/refactor-setup.sh-for-new-role-parameter

feat: добавить поддержку роли
This commit is contained in:
deadcxap
2025-08-24 04:05:40 +03:00
committed by GitHub
2 changed files with 47 additions and 25 deletions
+7 -7
View File
@@ -1,8 +1,8 @@
# Стартовые скрипты для настройки серверов # Стартовые скрипты для настройки серверов
Этот репозиторий содержит скрипт `core.sh` для базовой подготовки Ubuntu/Debian сервера. Скрипт автоматизирует установку полезных пакетов, создание пользователя, настройку сетевой безопасности и журналирования. Этот репозиторий содержит скрипт `setup.sh` для базовой подготовки Ubuntu/Debian сервера. Скрипт автоматизирует установку полезных пакетов, создание пользователя, настройку сетевой безопасности и журналирования.
## Возможности `core.sh` ## Возможности `setup.sh`
- обновление пакетов и установка базового софта; - обновление пакетов и установка базового софта;
- создание нового пользователя с `sudo` без пароля; - создание нового пользователя с `sudo` без пароля;
- настройка SSH‑доступа только по указанному ключу; - настройка SSH‑доступа только по указанному ключу;
@@ -12,7 +12,8 @@
- включение автоматических обновлений `unattended-upgrades`; - включение автоматических обновлений `unattended-upgrades`;
- установка часового пояса Europe/Moscow; - установка часового пояса Europe/Moscow;
- ротация логов и их отправка через Vector, включая логи Docker; - ротация логов и их отправка через Vector, включая логи Docker;
- установка и запуск Netbird по ключу с добавлением правила UFW для центрального сервера. - установка и запуск Netbird по ключу с добавлением правила UFW для центрального сервера;
- проверка наличия роли в репозитории, копирование её в `/opt/` и запуск `init.sh` (если есть) для старта первого Docker Compose стека; если роль не найдена, выводится предупреждение.
- проверки запуска UFW, Docker, Vector, Netbird и конфигурации SSH. - проверки запуска UFW, Docker, Vector, Netbird и конфигурации SSH.
## Требования ## Требования
@@ -24,11 +25,11 @@
Запуск осуществляется одной командой: Запуск осуществляется одной командой:
```bash ```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 <username> --sshkey "<ssh_pubkey>" \ sudo bash -s -- --user <username> --sshkey "<ssh_pubkey>" \
[--ssh-ip <ssh_allowed_ip>] [--monitor-ip <monitor_ip>] \ [--ssh-ip <ssh_allowed_ip>] [--monitor-ip <monitor_ip>] \
[--vector <vector_endpoint>] \ [--vector <vector_endpoint>] \
[--compose-url <compose_url> --compose-dir <compose_dir>] \ [--role <name>] \
[--netbird-key <key> [--netbird-ip <ip> --netbird-port <port>]] [--netbird-key <key> [--netbird-ip <ip> --netbird-port <port>]]
``` ```
@@ -38,8 +39,7 @@ curl -fsSL https://raw.githubusercontent.com/deadcxap/init_scripts/main/core.sh
- `-s, --ssh-ip` — IP‑адрес, с которого разрешён SSH‑доступ (если не указан — порт открыт всем); - `-s, --ssh-ip` — IP‑адрес, с которого разрешён SSH‑доступ (если не указан — порт открыт всем);
- `-m, --monitor-ip` — IP‑адрес сервера мониторинга для порта 45876/tcp (если не указан — порт не открывается); - `-m, --monitor-ip` — IP‑адрес сервера мониторинга для порта 45876/tcp (если не указан — порт не открывается);
- `-v, --vector` — URL приёмника логов Vector (если не указан — Vector не устанавливается); - `-v, --vector` — URL приёмника логов Vector (если не указан — Vector не устанавливается);
- `-c, --compose-url` — ссылка на `docker-compose.yml` (например с GitHub); - `-r, --role` — имя роли из [репозитория](https://github.com/deadcxap/init_scripts); перед запуском проверяется наличие папки, после чего её содержимое копируется в `/opt/` и при наличии выполняется `init.sh`; если папка отсутствует, выводится предупреждение и шаг пропускается;
- `-d, --compose-dir` — каталог, куда сохранить и запустить композ (указывается вместе с `--compose-url`).
- `-n, --netbird-key` — ключ настройки Netbird; - `-n, --netbird-key` — ключ настройки Netbird;
- `-i, --netbird-ip` — IP центрального сервера Netbird (если указан вместе с портом, добавляется правило UFW); - `-i, --netbird-ip` — IP центрального сервера Netbird (если указан вместе с портом, добавляется правило UFW);
- `-p, --netbird-port` — порт центрального сервера Netbird (используется вместе с IP). - `-p, --netbird-port` — порт центрального сервера Netbird (используется вместе с IP).
+40 -18
View File
@@ -53,8 +53,7 @@ Usage: $0 --user NAME --sshkey KEY [options]
-s, --ssh-ip IP (optional) IP allowed to access SSH -s, --ssh-ip IP (optional) IP allowed to access SSH
-m, --monitor-ip IP (optional) IP allowed to access Beszel port 45876/tcp -m, --monitor-ip IP (optional) IP allowed to access Beszel port 45876/tcp
-v, --vector URL (optional) URL of Vector sink -v, --vector URL (optional) URL of Vector sink
-c, --compose-url URL (optional) URL of docker-compose.yaml -r, --role NAME (optional) Role name to bootstrap
-d, --compose-dir DIR (optional) Directory to place compose file
-n, --netbird-key KEY (optional) Netbird setup key -n, --netbird-key KEY (optional) Netbird setup key
-i, --netbird-ip IP (optional) Netbird central server IP -i, --netbird-ip IP (optional) Netbird central server IP
-p, --netbird-port PORT (optional) Netbird central server port -p, --netbird-port PORT (optional) Netbird central server port
@@ -66,8 +65,7 @@ SSH_KEY=""
SSH_ALLOWED_IP="" SSH_ALLOWED_IP=""
MONITOR_IP="" MONITOR_IP=""
VECTOR_ENDPOINT="" VECTOR_ENDPOINT=""
COMPOSE_URL="" ROLE=""
COMPOSE_DIR=""
NETBIRD_KEY="" NETBIRD_KEY=""
NETBIRD_IP="" NETBIRD_IP=""
NETBIRD_PORT="" NETBIRD_PORT=""
@@ -79,8 +77,7 @@ while [[ $# -gt 0 ]]; do
-s|--ssh-ip) SSH_ALLOWED_IP="$2"; shift 2;; -s|--ssh-ip) SSH_ALLOWED_IP="$2"; shift 2;;
-m|--monitor-ip) MONITOR_IP="$2"; shift 2;; -m|--monitor-ip) MONITOR_IP="$2"; shift 2;;
-v|--vector) VECTOR_ENDPOINT="$2"; shift 2;; -v|--vector) VECTOR_ENDPOINT="$2"; shift 2;;
-c|--compose-url) COMPOSE_URL="$2"; shift 2;; -r|--role) ROLE="$2"; shift 2;;
-d|--compose-dir) COMPOSE_DIR="$2"; shift 2;;
-n|--netbird-key) NETBIRD_KEY="$2"; shift 2;; -n|--netbird-key) NETBIRD_KEY="$2"; shift 2;;
-i|--netbird-ip) NETBIRD_IP="$2"; shift 2;; -i|--netbird-ip) NETBIRD_IP="$2"; shift 2;;
-p|--netbird-port) NETBIRD_PORT="$2"; shift 2;; -p|--netbird-port) NETBIRD_PORT="$2"; shift 2;;
@@ -94,11 +91,6 @@ if [[ -z "$USERNAME" || -z "$SSH_KEY" ]]; then
exit 1 exit 1
fi 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 if [[ $(id -u) -ne 0 ]]; then
echo "This script must be run as root" >&2 echo "This script must be run as root" >&2
exit 1 exit 1
@@ -230,12 +222,42 @@ EOF"
run "Checking Vector service" systemctl is-active --quiet vector run "Checking Vector service" systemctl is-active --quiet vector
} }
setup_compose() { setup_role() {
[[ -z "$COMPOSE_URL" ]] && return [[ -z "$ROLE" ]] && return
run "Creating directory $COMPOSE_DIR" mkdir -p "$COMPOSE_DIR" local TEMP_DIR ROLE_SRC ROLE_TARGET INIT_SCRIPT REPO_URL ROLE_URL
run "Downloading compose file" curl -fsSL "$COMPOSE_URL" -o "$COMPOSE_DIR/docker-compose.yml" REPO_URL="https://github.com/deadcxap/init_scripts.git"
run "Setting ownership for compose dir" chown -R "$USERNAME:$USERNAME" "$COMPOSE_DIR" ROLE_URL="https://api.github.com/repos/deadcxap/init_scripts/contents/$ROLE"
run "Starting docker compose" bash -c "cd '$COMPOSE_DIR' && docker compose up -d" 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() { main() {
@@ -250,7 +272,7 @@ main() {
configure_logrotate configure_logrotate
install_netbird install_netbird
setup_vector setup_vector
setup_compose setup_role
} }
main main