Files
happy-life-star/packages/emotion-museum-1.0.0-20250713_111829/install-environment.sh
T

383 lines
10 KiB
Bash
Executable File

#!/bin/bash
# 情绪博物馆环境安装脚本
# 作者: EmotionMuseum Team
# 版本: 1.0.0
# 日期: 2025-07-13
# 说明: 安装部署所需的基础环境
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# 日志函数
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
log_step() {
echo -e "${BLUE}[STEP]${NC} $1"
}
# 检测操作系统
detect_os() {
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
if [ -f /etc/redhat-release ]; then
OS="centos"
PKG_MANAGER="yum"
elif [ -f /etc/debian_version ]; then
OS="ubuntu"
PKG_MANAGER="apt"
else
OS="linux"
PKG_MANAGER="unknown"
fi
elif [[ "$OSTYPE" == "darwin"* ]]; then
OS="macos"
PKG_MANAGER="brew"
else
log_error "不支持的操作系统: $OSTYPE"
exit 1
fi
log_info "检测到操作系统: $OS"
}
# 更新系统包管理器
update_package_manager() {
log_step "更新系统包管理器..."
case $PKG_MANAGER in
"yum")
sudo yum update -y
sudo yum install -y wget curl git unzip
;;
"apt")
sudo apt update
sudo apt upgrade -y
sudo apt install -y wget curl git unzip software-properties-common
;;
"brew")
if ! command -v brew &> /dev/null; then
log_info "安装Homebrew..."
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
fi
brew update
;;
*)
log_error "不支持的包管理器: $PKG_MANAGER"
exit 1
;;
esac
log_info "系统包管理器更新完成"
}
# 安装Java 17
install_java() {
log_step "安装Java 17..."
if command -v java &> /dev/null; then
JAVA_VERSION=$(java -version 2>&1 | head -n1 | cut -d'"' -f2 | cut -d'.' -f1)
if [ "$JAVA_VERSION" = "17" ]; then
log_info "Java 17已安装"
return
else
log_warn "检测到Java版本: $JAVA_VERSION,将安装Java 17"
fi
fi
case $PKG_MANAGER in
"yum")
sudo yum install -y java-17-openjdk java-17-openjdk-devel
;;
"apt")
sudo apt install -y openjdk-17-jdk openjdk-17-jre
;;
"brew")
brew install openjdk@17
echo 'export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"' >> ~/.zshrc
;;
esac
# 设置JAVA_HOME
JAVA_HOME_PATH=$(dirname $(dirname $(readlink -f $(which java))))
echo "export JAVA_HOME=$JAVA_HOME_PATH" >> ~/.bashrc
echo "export PATH=\$JAVA_HOME/bin:\$PATH" >> ~/.bashrc
if [ "$OS" = "macos" ]; then
echo "export JAVA_HOME=$JAVA_HOME_PATH" >> ~/.zshrc
echo "export PATH=\$JAVA_HOME/bin:\$PATH" >> ~/.zshrc
fi
log_info "Java 17安装完成"
}
# 安装Maven
install_maven() {
log_step "安装Maven..."
if command -v mvn &> /dev/null; then
MVN_VERSION=$(mvn -version | head -n1 | cut -d' ' -f3)
log_info "Maven已安装,版本: $MVN_VERSION"
return
fi
MAVEN_VERSION="3.9.6"
MAVEN_URL="https://archive.apache.org/dist/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz"
cd /tmp
wget $MAVEN_URL
sudo tar -xzf apache-maven-${MAVEN_VERSION}-bin.tar.gz -C /opt/
sudo ln -sf /opt/apache-maven-${MAVEN_VERSION} /opt/maven
echo "export MAVEN_HOME=/opt/maven" >> ~/.bashrc
echo "export PATH=\$MAVEN_HOME/bin:\$PATH" >> ~/.bashrc
if [ "$OS" = "macos" ]; then
echo "export MAVEN_HOME=/opt/maven" >> ~/.zshrc
echo "export PATH=\$MAVEN_HOME/bin:\$PATH" >> ~/.zshrc
fi
log_info "Maven安装完成"
}
# 安装Node.js和npm
install_nodejs() {
log_step "安装Node.js和npm..."
if command -v node &> /dev/null; then
NODE_VERSION=$(node -v)
log_info "Node.js已安装,版本: $NODE_VERSION"
if command -v npm &> /dev/null; then
NPM_VERSION=$(npm -v)
log_info "npm已安装,版本: $NPM_VERSION"
return
fi
fi
# 使用NodeSource安装最新LTS版本
case $PKG_MANAGER in
"yum")
curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash -
sudo yum install -y nodejs
;;
"apt")
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs
;;
"brew")
brew install node
;;
esac
# 配置npm镜像源
npm config set registry https://registry.npmmirror.com
log_info "Node.js和npm安装完成"
}
# 安装Docker
install_docker() {
log_step "安装Docker..."
if command -v docker &> /dev/null; then
DOCKER_VERSION=$(docker --version | cut -d' ' -f3 | cut -d',' -f1)
log_info "Docker已安装,版本: $DOCKER_VERSION"
else
case $PKG_MANAGER in
"yum")
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
;;
"apt")
sudo apt-get remove docker docker-engine docker.io containerd runc || true
sudo apt-get install -y ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
;;
"brew")
log_info "请手动安装Docker Desktop for Mac"
log_info "下载地址: https://www.docker.com/products/docker-desktop"
return
;;
esac
log_info "Docker安装完成"
fi
# 启动Docker服务
if [ "$OS" != "macos" ]; then
sudo systemctl start docker
sudo systemctl enable docker
# 将当前用户添加到docker组
sudo usermod -aG docker $USER
log_warn "请重新登录以使docker组权限生效"
fi
}
# 安装Docker Compose
install_docker_compose() {
log_step "安装Docker Compose..."
if command -v docker-compose &> /dev/null; then
COMPOSE_VERSION=$(docker-compose --version | cut -d' ' -f3 | cut -d',' -f1)
log_info "Docker Compose已安装,版本: $COMPOSE_VERSION"
return
fi
# 安装最新版本的Docker Compose
COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep 'tag_name' | cut -d'"' -f4)
sudo curl -L "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
log_info "Docker Compose安装完成"
}
# 配置系统优化
configure_system() {
log_step "配置系统优化..."
if [ "$OS" != "macos" ]; then
# 增加文件描述符限制
echo "* soft nofile 65536" | sudo tee -a /etc/security/limits.conf
echo "* hard nofile 65536" | sudo tee -a /etc/security/limits.conf
# 配置内核参数
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
echo "net.core.somaxconn=65535" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
fi
log_info "系统优化配置完成"
}
# 验证安装
verify_installation() {
log_step "验证安装结果..."
echo ""
echo "=== 环境验证结果 ==="
# 验证Java
if command -v java &> /dev/null; then
JAVA_VERSION=$(java -version 2>&1 | head -n1)
log_info "✅ Java: $JAVA_VERSION"
else
log_error "❌ Java未安装"
fi
# 验证Maven
if command -v mvn &> /dev/null; then
MVN_VERSION=$(mvn -version | head -n1)
log_info "✅ Maven: $MVN_VERSION"
else
log_error "❌ Maven未安装"
fi
# 验证Node.js
if command -v node &> /dev/null; then
NODE_VERSION=$(node -v)
log_info "✅ Node.js: $NODE_VERSION"
else
log_error "❌ Node.js未安装"
fi
# 验证npm
if command -v npm &> /dev/null; then
NPM_VERSION=$(npm -v)
log_info "✅ npm: $NPM_VERSION"
else
log_error "❌ npm未安装"
fi
# 验证Docker
if command -v docker &> /dev/null; then
DOCKER_VERSION=$(docker --version)
log_info "✅ Docker: $DOCKER_VERSION"
else
log_error "❌ Docker未安装"
fi
# 验证Docker Compose
if command -v docker-compose &> /dev/null; then
COMPOSE_VERSION=$(docker-compose --version)
log_info "✅ Docker Compose: $COMPOSE_VERSION"
else
log_error "❌ Docker Compose未安装"
fi
echo ""
log_info "环境验证完成"
}
# 主函数
main() {
echo "🚀 开始安装情绪博物馆部署环境..."
echo ""
detect_os
update_package_manager
install_java
install_maven
install_nodejs
install_docker
install_docker_compose
configure_system
verify_installation
echo ""
log_info "🎉 环境安装完成!"
log_warn "请重新登录或执行 'source ~/.bashrc' 以使环境变量生效"
if [ "$OS" = "macos" ]; then
log_warn "macOS用户请执行 'source ~/.zshrc' 以使环境变量生效"
fi
}
# 处理命令行参数
case "${1:-}" in
"java")
detect_os
install_java
;;
"maven")
detect_os
install_maven
;;
"node")
detect_os
install_nodejs
;;
"docker")
detect_os
install_docker
install_docker_compose
;;
"verify")
verify_installation
;;
*)
main
;;
esac