复现已有算法

This commit is contained in:
cloud
2026-07-14 15:43:18 +08:00
parent abebd2a683
commit 50b8111fd9
860 changed files with 182250 additions and 18 deletions
Executable
+130
View File
@@ -0,0 +1,130 @@
#!/usr/bin/env bash
# =====================================================
# deploy.sh — 打包并部署 wind_power 到远端主机
#
# 远端变更:
# 1. 本地执行 package.sh 生成 runtime/wind_power/
# 2. rsync runtime/wind_power/ → ~/wind_power/
# 3. 安装/更新 systemd 服务 wind_power.service
# 4. 重启 wind_power,并验证 8848 直连接口
#
# 不安装、不配置 nginx;不修改 gitea。
#
# 用法:
# ./deploy.sh
# ./deploy.sh ubuntu@1.2.3.4
# ./deploy.sh --dry-run
# =====================================================
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
DEFAULT_TARGET="ubuntu@82.157.83.226"
SERVICE_NAME="wind_power"
LOCAL_APP_DIR="${ROOT_DIR}/runtime/wind_power"
DEPLOY_STAGE="${ROOT_DIR}/runtime/deploy"
SSH_PASSWORD="i7568737i~"
TARGET="${DEFAULT_TARGET}"
DRY_RUN=false
for arg in "$@"; do
case "${arg}" in
--dry-run) DRY_RUN=true ;;
-*) echo "[deploy] 未知选项: ${arg}" >&2; exit 1 ;;
*) TARGET="${arg}" ;;
esac
done
REMOTE_USER="${TARGET%%@*}"
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
CYAN='\033[0;36m'
NC='\033[0m'
info(){ echo -e "${GREEN}[INFO]${NC} $*"; }
step(){ echo -e "${CYAN}[STEP]${NC} $*"; }
warn(){ echo -e "${YELLOW}[WARN]${NC} $*"; }
err(){ echo -e "${RED}[ERROR]${NC} $*" >&2; exit 1; }
command -v sshpass >/dev/null 2>&1 || err "缺少 sshpasssudo apt install -y sshpass"
SSH_OPTS=(-o StrictHostKeyChecking=accept-new -o ConnectTimeout=15)
ssh_cmd() {
sshpass -p "${SSH_PASSWORD}" ssh "${SSH_OPTS[@]}" "${TARGET}" "$@"
}
step "1/5 本地打包..."
bash "${ROOT_DIR}/package.sh" --build-type Release
[ -f "${LOCAL_APP_DIR}/wind_server" ] || err "打包产物缺失: ${LOCAL_APP_DIR}/wind_server"
step "2/5 准备远端配置..."
REMOTE_HOME="$(ssh_cmd 'echo $HOME')"
REMOTE_APP_PATH="${REMOTE_HOME}/wind_power"
info "远端应用目录: ${REMOTE_APP_PATH}"
mkdir -p "${DEPLOY_STAGE}"
cat > "${DEPLOY_STAGE}/${SERVICE_NAME}.service" <<SVCEOF
[Unit]
Description=Wind Power Calculation Server
After=network.target
[Service]
Type=simple
User=${REMOTE_USER}
WorkingDirectory=${REMOTE_APP_PATH}
Environment=LD_LIBRARY_PATH=${REMOTE_APP_PATH}/libs
ExecStart=${REMOTE_APP_PATH}/wind_server
Restart=on-failure
RestartSec=3
StandardOutput=append:${REMOTE_APP_PATH}/logs/server.log
StandardError=append:${REMOTE_APP_PATH}/logs/server.log
[Install]
WantedBy=multi-user.target
SVCEOF
if [ "${DRY_RUN}" = true ]; then
warn "DRY-RUN:跳过远端变更。systemd 配置已生成于 ${DEPLOY_STAGE}/"
exit 0
fi
step "3/5 上传应用与 systemd 配置..."
ssh_cmd 'command -v rsync >/dev/null || (sudo apt-get update -qq && sudo apt-get install -y -qq rsync >/dev/null)'
sshpass -p "${SSH_PASSWORD}" rsync -az --delete -e "ssh ${SSH_OPTS[*]}" \
"${LOCAL_APP_DIR}/" "${TARGET}:${REMOTE_APP_PATH}/"
sshpass -p "${SSH_PASSWORD}" scp "${SSH_OPTS[@]}" \
"${DEPLOY_STAGE}/${SERVICE_NAME}.service" \
"${TARGET}:/tmp/${SERVICE_NAME}.service"
info "✅ 已上传"
step "4/5 安装并重启 systemd 服务..."
ssh_cmd "SERVICE_NAME='${SERVICE_NAME}'" 'bash -s' <<'REMOTE'
set -euo pipefail
SERVICE_NAME="${SERVICE_NAME}"
mkdir -p "$HOME/wind_power/logs"
sudo cp "/tmp/${SERVICE_NAME}.service" "/etc/systemd/system/${SERVICE_NAME}.service"
sudo apt-get update -qq 2>/dev/null || true
sudo apt-get install -y -qq libjsoncpp25 libc-ares2 >/dev/null 2>&1 || true
sudo systemctl daemon-reload
sudo systemctl enable "${SERVICE_NAME}" >/dev/null 2>&1 || true
sudo systemctl restart "${SERVICE_NAME}"
echo "[remote] systemd ${SERVICE_NAME} 已安装并启动"
REMOTE
step "5/5 校验 8848 直连服务..."
sleep 2
ssh_cmd "SERVICE_NAME='${SERVICE_NAME}'" 'bash -s' <<'REMOTE' | sed 's/^/[remote] /'
set +e
echo "service: $(systemctl is-active ${SERVICE_NAME})"
echo "health: $(curl -s -m 5 localhost:8848/api/system/health)"
echo "version: $(curl -s -m 5 localhost:8848/api/system/version)"
echo "listen: $(ss -tlnp 2>/dev/null | grep ':8848' | head -1 | sed 's/.*users://')"
REMOTE
echo ""
info "✅ 部署完成"
echo -e " wind_power: ${GREEN}http://${TARGET#*@}:8848/${NC}"
echo " 查看服务: ssh ${TARGET} 'systemctl status ${SERVICE_NAME}'"