#!/bin/bash # 配置部分 BINARY_NAME="restful" # 二进制文件名 BUILD_OUTPUT_DIR="./.builds" # 构建输出目录 # 服务器配置 REMOTE_USER="root" # 服务器用户名 REMOTE_HOST="market.senlin.ai" # 服务器地址 REMOTE_DIR="/data/app" # 服务器部署目录 SERVICE_NAME="restful" # 服务名称(如果有systemd服务) echo "=== 开始部署流程 ===" # 1. 编译Linux二进制文件 echo "正在编译Linux二进制文件..." # 使用Go语言编译示例 (如果是其他语言请修改此部分) # 如果不是Go项目,请替换为你的构建命令,如make等 GOEXPERIMENT=jsonv2 GOOS=linux GOARCH=amd64 go build -o "${BUILD_OUTPUT_DIR}/${BINARY_NAME}" ./cmd/main if [ $? -ne 0 ]; then echo "编译失败!" exit 1 fi echo "编译成功: ${BUILD_OUTPUT_DIR}/${BINARY_NAME}" # 2. 停止远程服务 echo "正在停止远程服务..." ssh -p 3142 "${REMOTE_USER}@${REMOTE_HOST}" << EOF systemctl stop "${SERVICE_NAME}" EOF # 3. 上传到服务器 echo "正在上传文件到服务器..." scp -P 3142 "${BUILD_OUTPUT_DIR}/${BINARY_NAME}" "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/${BINARY_NAME}" scp -P 3142 ./etc/${SERVICE_NAME}_prod.yaml "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/etc/${SERVICE_NAME}_prod.yaml" scp -P 3142 ./etc/${SERVICE_NAME}.service "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/etc/${SERVICE_NAME}.service" # 4. 设置执行权限并启动服务 echo "正在设置权限并启动服务..." ssh -p 3142 "${REMOTE_USER}@${REMOTE_HOST}" << EOF chmod +x "${REMOTE_DIR}/${BINARY_NAME}" sudo ln -s ${REMOTE_DIR}/etc/${BINARY_NAME}.service /etc/systemd/system/${BINARY_NAME}.service rm -rf ${REMOTE_DIR}/logs/${BINARY_NAME}.log systemctl daemon-reload systemctl start "${BINARY_NAME}" systemctl status "${BINARY_NAME}" && echo "服务启动成功!" || echo "服务启动可能失败!" cat ${REMOTE_DIR}/logs/${BINARY_NAME}.log EOF echo "=== 部署完成 ==="