From b524f02ac09bb90107b105f0a55c5933f9f567fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80?= <78488229+viktor138irk@users.noreply.github.com> Date: Fri, 8 May 2026 23:31:02 +0900 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=83=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA?= =?UTF-8?q?=D0=B0=20Docker=20=D0=B2=20install.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/install.sh | 79 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 66 insertions(+), 13 deletions(-) diff --git a/scripts/install.sh b/scripts/install.sh index fc43c8d..5d3daa1 100644 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -12,19 +12,11 @@ COMPOSE_FILE="${COMPOSE_FILE:-$SOURCE_DIR/docker-compose.yml}" SERVER_NAME="${SERVER_NAME:-matrix.stackworks.ru}" REPORT_STATS="${REPORT_STATS:-no}" AUTO_START="${AUTO_START:-yes}" +AUTO_INSTALL_DOCKER="${AUTO_INSTALL_DOCKER:-yes}" -log() { - echo "[INFO] $*" -} - -warn() { - echo "[WARN] $*" -} - -fail() { - echo "[ERROR] $*" >&2 - exit 1 -} +log() { echo "[INFO] $*"; } +warn() { echo "[WARN] $*"; } +fail() { echo "[ERROR] $*" >&2; exit 1; } need_root() { if [ "$(id -u)" -ne 0 ]; then @@ -44,6 +36,62 @@ random_secret() { fi } +detect_os() { + [ -f /etc/os-release ] || fail "Cannot detect OS: /etc/os-release not found" + . /etc/os-release + OS_ID="${ID:-}" + OS_CODENAME="${VERSION_CODENAME:-}" + + case "$OS_ID" in + ubuntu|debian) ;; + *) fail "Unsupported OS for automatic Docker install: $OS_ID. Install Docker manually or use Ubuntu/Debian." ;; + esac + + [ -n "$OS_CODENAME" ] || fail "Cannot detect OS codename" +} + +install_docker() { + if command -v docker >/dev/null 2>&1 && docker compose version >/dev/null 2>&1; then + log "Docker and Docker Compose plugin already installed" + return + fi + + if [ "$AUTO_INSTALL_DOCKER" != "yes" ]; then + fail "Docker is not installed and AUTO_INSTALL_DOCKER is not yes" + fi + + detect_os + log "Installing Docker Engine and Docker Compose plugin for $OS_ID $OS_CODENAME" + + apt-get update + apt-get install -y ca-certificates curl gnupg lsb-release + + install -m 0755 -d /etc/apt/keyrings + + if [ ! -f /etc/apt/keyrings/docker.gpg ]; then + curl -fsSL "https://download.docker.com/linux/$OS_ID/gpg" | gpg --dearmor -o /etc/apt/keyrings/docker.gpg + chmod a+r /etc/apt/keyrings/docker.gpg + else + warn "Docker GPG key already exists, keeping it" + fi + + DOCKER_LIST="/etc/apt/sources.list.d/docker.list" + if [ ! -f "$DOCKER_LIST" ]; then + echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/$OS_ID $OS_CODENAME stable" > "$DOCKER_LIST" + else + warn "Docker apt source already exists, keeping it" + fi + + apt-get update + apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + + systemctl enable docker >/dev/null 2>&1 || true + systemctl start docker >/dev/null 2>&1 || true + + command -v docker >/dev/null 2>&1 || fail "Docker installation failed" + docker compose version >/dev/null 2>&1 || fail "Docker Compose plugin installation failed" +} + safe_mkdirs() { log "Creating project directories" mkdir -p "$INSTALL_DIR" "$SOURCE_DIR" "$DATA_DIR" "$BACKUP_DIR" @@ -59,6 +107,7 @@ check_protected_assets() { check_requirements() { log "Checking requirements" + install_docker need_command docker docker compose version >/dev/null 2>&1 || fail "Docker Compose plugin is required" need_command sed @@ -113,8 +162,12 @@ generate_synapse_config() { } patch_synapse_config() { - log "Patching Synapse config for PostgreSQL and reverse proxy" + if grep -q "SWChat managed PostgreSQL database config" "$DATA_DIR/synapse/homeserver.yaml" 2>/dev/null; then + warn "Synapse config already patched, skipping" + return + fi + log "Patching Synapse config for PostgreSQL and reverse proxy" cp "$DATA_DIR/synapse/homeserver.yaml" "$BACKUP_DIR/homeserver.yaml.$(date +%F_%H-%M-%S).bak" cat >> "$DATA_DIR/synapse/homeserver.yaml" <<'EOF'