#!/bin/bash set -e # ============================================= # SESE 安装脚本 # ============================================= APP_NAME="SESE" APP_PATH="/opt/$APP_NAME" SERVICE_FILE="/etc/systemd/system/$APP_NAME.service" LOG_PATH="/var/log/$APP_NAME" # 检测是否在工程目录内 if [ -d ".git" ] && [ -f "main.go" ]; then echo "==> 检测到工程目录,直接使用当前代码" PROJECT_DIR="$(pwd)" else echo "==> 拉取工程代码..." cd /opt if [ -d "$APP_NAME" ]; then echo "工程已存在,更新代码..." cd "$APP_NAME" PROJECT_DIR="$(pwd)" git pull origin master git submodule update --init --recursive else git clone https://git.lmve.net/kevin/sese-engine-go.git "$APP_NAME" cd "$APP_NAME" PROJECT_DIR="$(pwd)" git submodule update --init --recursive fi fi echo "==> 检查并停止旧版本..." if systemctl is-active --quiet "$APP_NAME" 2>/dev/null; then echo "停止旧服务..." systemctl stop "$APP_NAME" systemctl disable "$APP_NAME" 2>/dev/null || true fi # 清理旧进程 pkill -f "$APP_PATH/$APP_NAME" 2>/dev/null || true echo "==> 安装依赖..." # 安装必要工具 if command -v apt-get &> /dev/null; then apt-get update apt-get install -y git nodejs npm golang-go make elif command -v yum &> /dev/null; then yum install -y git nodejs npm golang make elif command -v pacman &> /dev/null; then pacman -Sy --noconfirm git nodejs npm go make fi echo "==> 创建目录..." mkdir -p "$APP_PATH" mkdir -p "$(dirname "$LOG_PATH")" echo "==> 编译前端..." cd "$PROJECT_DIR/sese-engine-ui" npm install npm run build echo "==> 编译后端..." cd "$PROJECT_DIR" go mod download CGO_ENABLED=0 go build -o "$APP_NAME" . echo "==> 部署到 $APP_PATH..." mkdir -p "$APP_PATH" cp "$PROJECT_DIR/$APP_NAME" "$APP_PATH/" cp -r "$PROJECT_DIR/dist" "$APP_PATH/" echo "==> 配置用户..." if id -u www &> /dev/null; then echo "用户 www 已存在,跳过创建" else echo "创建用户 www..." useradd -r -s /usr/sbin/nologin -d /var/www -M www fi echo "==> 配置权限..." chown -R www:www "$APP_PATH" chown -R www:www "$LOG_PATH" chmod +x "$APP_PATH/$APP_NAME" echo "==> 创建 systemd 服务..." cat > "$SERVICE_FILE" < 重新加载 systemd 并启动服务..." systemctl daemon-reload systemctl enable "$APP_NAME" systemctl restart "$APP_NAME" echo "" echo "==> 安装完成!" echo " 服务状态: systemctl status $APP_NAME" echo " 日志查看: journalctl -u $APP_NAME -f" echo " 应用日志: tail -f $LOG_PATH/stdout.log"