#!/usr/bin/env bash set -euo pipefail echo "[AbyssInfo] Server environment installer" echo "[AbyssInfo] User: $(whoami)" echo "[AbyssInfo] OS:" cat /etc/os-release if [[ "$(id -u)" != "0" ]]; then echo "[AbyssInfo] Please run as root." >&2 exit 1 fi echo "[AbyssInfo] Installing base packages ..." dnf install -y dnf-plugins-core ca-certificates curl git tar gzip unzip policycoreutils-python-utils if ! command -v docker >/dev/null 2>&1; then echo "[AbyssInfo] Adding Docker CE repository ..." rm -f /etc/yum.repos.d/docker-ce.repo dnf clean all if ! dnf config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo; then echo "[AbyssInfo] Aliyun Docker repository failed, using official repository ..." dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo fi dnf clean all dnf makecache --disablerepo='*' --enablerepo='docker-ce-stable' || true echo "[AbyssInfo] Installing Docker Engine and Compose plugin ..." dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin else echo "[AbyssInfo] Docker already installed." fi systemctl enable --now docker if ! command -v nginx >/dev/null 2>&1; then echo "[AbyssInfo] Installing Nginx ..." dnf install -y nginx else echo "[AbyssInfo] Nginx already installed." fi mkdir -p /opt/abyssinfo-home-vpn if systemctl is-active --quiet firewalld; then echo "[AbyssInfo] Configuring running firewalld ..." firewall-cmd --permanent --add-service=ssh firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload else echo "[AbyssInfo] firewalld is not running; skipping OS firewall changes." fi echo "[AbyssInfo] Versions:" docker --version docker compose version git --version nginx -v echo "[AbyssInfo] Environment ready."