mirror of
https://github.com/deadcxap/init_scripts.git
synced 2026-07-02 05:43:40 +03:00
feat: warn if role missing
This commit is contained in:
@@ -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).
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user