修改
This commit is contained in:
@@ -0,0 +1,3 @@
|
|||||||
|
* text=auto
|
||||||
|
*.sh text eol=lf
|
||||||
|
deploy/* text eol=lf
|
||||||
@@ -67,6 +67,7 @@ sudo usermod -aG docker $USER
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /opt/Binance_Altcoin_Monitor
|
cd /opt/Binance_Altcoin_Monitor
|
||||||
|
sed -i 's/\r$//' deploy/*.sh
|
||||||
chmod +x deploy/docker-deploy.sh
|
chmod +x deploy/docker-deploy.sh
|
||||||
./deploy/docker-deploy.sh
|
./deploy/docker-deploy.sh
|
||||||
```
|
```
|
||||||
@@ -120,6 +121,7 @@ sudo npm install -g pm2
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /opt/Binance_Altcoin_Monitor
|
cd /opt/Binance_Altcoin_Monitor
|
||||||
|
sed -i 's/\r$//' deploy/*.sh # 若从 Windows 克隆,先去掉 CRLF
|
||||||
chmod +x deploy/pm2-deploy.sh
|
chmod +x deploy/pm2-deploy.sh
|
||||||
./deploy/pm2-deploy.sh
|
./deploy/pm2-deploy.sh
|
||||||
```
|
```
|
||||||
@@ -280,6 +282,8 @@ pm2 restart binance-altcoin-monitor
|
|||||||
|
|
||||||
| 现象 | 处理 |
|
| 现象 | 处理 |
|
||||||
|------|------|
|
|------|------|
|
||||||
|
| `bash\r: No such file or directory` | 脚本为 Windows 换行,执行:`sed -i 's/\r$//' deploy/*.sh && chmod +x deploy/*.sh` |
|
||||||
|
| `cannot pull with rebase: unstaged changes` | 执行 `git stash` 后重试;或 `DEPLOY_SKIP_GIT_PULL=1 ./deploy/pm2-deploy.sh` 跳过拉取 |
|
||||||
| Web 无数据 | 检查能否访问币安;国内服务器尝试 `PROXY_ENABLED=true` |
|
| Web 无数据 | 检查能否访问币安;国内服务器尝试 `PROXY_ENABLED=true` |
|
||||||
| 企微收不到 | 检查 `WECOM_WEBHOOK_URL`;`curl -X POST .../api/push/test` |
|
| 企微收不到 | 检查 `WECOM_WEBHOOK_URL`;`curl -X POST .../api/push/test` |
|
||||||
| 08:10 未推送 | 确认容器/PM2 在 08:10 前已运行;查日志 |
|
| 08:10 未推送 | 确认容器/PM2 在 08:10 前已运行;查日志 |
|
||||||
|
|||||||
+51
-49
@@ -1,49 +1,51 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Docker 一键部署 — 安装目录 /opt/Binance_Altcoin_Monitor
|
# Docker 一键部署 — 安装目录 /opt/Binance_Altcoin_Monitor
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
INSTALL_DIR="/opt/Binance_Altcoin_Monitor"
|
INSTALL_DIR="/opt/Binance_Altcoin_Monitor"
|
||||||
REPO_URL="${REPO_URL:-https://git.bz121.com/dekun/Binance_Altcoin_Monitor.git}"
|
REPO_URL="${REPO_URL:-https://git.bz121.com/dekun/Binance_Altcoin_Monitor.git}"
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
echo "==> Docker 部署 Binance Altcoin Monitor"
|
# shellcheck source=lib.sh
|
||||||
echo " 目录: ${INSTALL_DIR}"
|
source "${SCRIPT_DIR}/lib.sh"
|
||||||
|
|
||||||
if ! command -v docker &>/dev/null; then
|
echo "==> Docker 部署 Binance Altcoin Monitor"
|
||||||
echo "错误: 未安装 docker,请先安装 Docker Engine 与 Compose 插件"
|
echo " 目录: ${INSTALL_DIR}"
|
||||||
exit 1
|
|
||||||
fi
|
if ! command -v docker &>/dev/null; then
|
||||||
|
echo "错误: 未安装 docker,请先安装 Docker Engine 与 Compose 插件"
|
||||||
if [ ! -d "${INSTALL_DIR}/.git" ]; then
|
exit 1
|
||||||
echo "==> 克隆仓库..."
|
fi
|
||||||
sudo mkdir -p /opt
|
|
||||||
sudo git clone "${REPO_URL}" "${INSTALL_DIR}"
|
if [ ! -d "${INSTALL_DIR}/.git" ]; then
|
||||||
sudo chown -R "$(whoami):$(whoami)" "${INSTALL_DIR}" 2>/dev/null || true
|
echo "==> 克隆仓库..."
|
||||||
else
|
sudo mkdir -p /opt
|
||||||
echo "==> 更新代码..."
|
sudo git clone "${REPO_URL}" "${INSTALL_DIR}"
|
||||||
cd "${INSTALL_DIR}"
|
sudo chown -R "$(whoami):$(whoami)" "${INSTALL_DIR}" 2>/dev/null || true
|
||||||
git pull --rebase
|
else
|
||||||
fi
|
echo "==> 更新代码..."
|
||||||
|
git_update_safe "${INSTALL_DIR}"
|
||||||
cd "${INSTALL_DIR}"
|
fi
|
||||||
|
|
||||||
if [ ! -f .env ]; then
|
cd "${INSTALL_DIR}"
|
||||||
echo "==> 创建 .env(请编辑 WECOM_WEBHOOK_URL 等)"
|
|
||||||
cp .env.example .env
|
if [ ! -f .env ]; then
|
||||||
fi
|
echo "==> 创建 .env(请编辑 WECOM_WEBHOOK_URL 等)"
|
||||||
|
cp .env.example .env
|
||||||
mkdir -p data logs
|
fi
|
||||||
|
|
||||||
echo "==> 构建并启动容器..."
|
mkdir -p data logs
|
||||||
docker compose build --no-cache
|
|
||||||
docker compose up -d
|
echo "==> 构建并启动容器..."
|
||||||
|
docker compose build --no-cache
|
||||||
echo ""
|
docker compose up -d
|
||||||
echo "部署完成。"
|
|
||||||
echo " Web: http://$(hostname -I | awk '{print $1}'):${PORT:-21450}"
|
echo ""
|
||||||
echo " 日志: docker compose -f ${INSTALL_DIR}/docker-compose.yml logs -f"
|
echo "部署完成。"
|
||||||
echo " 停止: docker compose -f ${INSTALL_DIR}/docker-compose.yml down"
|
echo " Web: http://$(hostname -I | awk '{print $1}'):${PORT:-21450}"
|
||||||
echo ""
|
echo " 日志: docker compose -f ${INSTALL_DIR}/docker-compose.yml logs -f"
|
||||||
echo "开启 SOCKS5 代理: 编辑 ${INSTALL_DIR}/.env"
|
echo " 停止: docker compose -f ${INSTALL_DIR}/docker-compose.yml down"
|
||||||
echo " PROXY_ENABLED=true"
|
echo ""
|
||||||
echo " PROXY_URL=socks5h://192.168.8.4:1081"
|
echo "开启 SOCKS5 代理: 编辑 ${INSTALL_DIR}/.env"
|
||||||
echo " 然后: docker compose up -d --force-recreate"
|
echo " PROXY_ENABLED=true"
|
||||||
|
echo " PROXY_URL=socks5h://192.168.8.4:1081"
|
||||||
|
echo " 然后: docker compose up -d --force-recreate"
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# 部署脚本公共函数(LF 换行)
|
||||||
|
|
||||||
|
# 安全拉取远程代码:有本地修改时先 stash,pull 失败不中断部署
|
||||||
|
git_update_safe() {
|
||||||
|
local repo_dir="${1:?}"
|
||||||
|
cd "$repo_dir"
|
||||||
|
|
||||||
|
if [ ! -d .git ]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${DEPLOY_SKIP_GIT_PULL:-}" = "1" ]; then
|
||||||
|
echo " 已跳过 git pull (DEPLOY_SKIP_GIT_PULL=1)"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
local stashed=0
|
||||||
|
if ! git diff --quiet 2>/dev/null || ! git diff --cached --quiet 2>/dev/null; then
|
||||||
|
echo " 检测到未提交修改,暂存到 git stash..."
|
||||||
|
if git stash push -m "deploy-auto-$(date +%Y%m%d%H%M%S)"; then
|
||||||
|
stashed=1
|
||||||
|
else
|
||||||
|
echo " 警告: stash 失败,将尝试直接 pull"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if git pull --rebase; then
|
||||||
|
echo " 代码已更新"
|
||||||
|
else
|
||||||
|
echo " 警告: git pull 失败,使用当前目录代码继续部署"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$stashed" = 1 ]; then
|
||||||
|
echo " 恢复本地修改 (git stash pop)..."
|
||||||
|
git stash pop || echo " 提示: stash 恢复冲突时可手动处理: git stash list"
|
||||||
|
fi
|
||||||
|
}
|
||||||
+70
-68
@@ -1,68 +1,70 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# PM2 一键部署 — 安装目录 /opt/Binance_Altcoin_Monitor
|
# PM2 一键部署 — 安装目录 /opt/Binance_Altcoin_Monitor
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
INSTALL_DIR="/opt/Binance_Altcoin_Monitor"
|
INSTALL_DIR="/opt/Binance_Altcoin_Monitor"
|
||||||
REPO_URL="${REPO_URL:-https://git.bz121.com/dekun/Binance_Altcoin_Monitor.git}"
|
REPO_URL="${REPO_URL:-https://git.bz121.com/dekun/Binance_Altcoin_Monitor.git}"
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
echo "==> PM2 部署 Binance Altcoin Monitor"
|
# shellcheck source=lib.sh
|
||||||
echo " 目录: ${INSTALL_DIR}"
|
source "${SCRIPT_DIR}/lib.sh"
|
||||||
|
|
||||||
if ! command -v python3 &>/dev/null; then
|
echo "==> PM2 部署 Binance Altcoin Monitor"
|
||||||
echo "错误: 未安装 python3"
|
echo " 目录: ${INSTALL_DIR}"
|
||||||
exit 1
|
|
||||||
fi
|
if ! command -v python3 &>/dev/null; then
|
||||||
|
echo "错误: 未安装 python3"
|
||||||
if ! command -v pm2 &>/dev/null; then
|
exit 1
|
||||||
echo "==> 安装 PM2..."
|
fi
|
||||||
if command -v npm &>/dev/null; then
|
|
||||||
sudo npm install -g pm2
|
if ! command -v pm2 &>/dev/null; then
|
||||||
else
|
echo "==> 安装 PM2..."
|
||||||
echo "错误: 请先安装 Node.js/npm,或手动: npm install -g pm2"
|
if command -v npm &>/dev/null; then
|
||||||
exit 1
|
sudo npm install -g pm2
|
||||||
fi
|
else
|
||||||
fi
|
echo "错误: 请先安装 Node.js/npm,或手动: npm install -g pm2"
|
||||||
|
exit 1
|
||||||
if [ ! -d "${INSTALL_DIR}/.git" ]; then
|
fi
|
||||||
echo "==> 克隆仓库..."
|
fi
|
||||||
sudo mkdir -p /opt
|
|
||||||
sudo git clone "${REPO_URL}" "${INSTALL_DIR}"
|
if [ ! -d "${INSTALL_DIR}/.git" ]; then
|
||||||
sudo chown -R "$(whoami):$(whoami)" "${INSTALL_DIR}" 2>/dev/null || true
|
echo "==> 克隆仓库..."
|
||||||
else
|
sudo mkdir -p /opt
|
||||||
echo "==> 更新代码..."
|
sudo git clone "${REPO_URL}" "${INSTALL_DIR}"
|
||||||
cd "${INSTALL_DIR}"
|
sudo chown -R "$(whoami):$(whoami)" "${INSTALL_DIR}" 2>/dev/null || true
|
||||||
git pull --rebase
|
else
|
||||||
fi
|
echo "==> 更新代码..."
|
||||||
|
git_update_safe "${INSTALL_DIR}"
|
||||||
cd "${INSTALL_DIR}"
|
fi
|
||||||
|
|
||||||
if [ ! -f .env ]; then
|
cd "${INSTALL_DIR}"
|
||||||
echo "==> 创建 .env"
|
|
||||||
cp .env.example .env
|
if [ ! -f .env ]; then
|
||||||
fi
|
echo "==> 创建 .env"
|
||||||
|
cp .env.example .env
|
||||||
mkdir -p data logs
|
fi
|
||||||
|
|
||||||
echo "==> 安装 Python 依赖..."
|
mkdir -p data logs
|
||||||
python3 -m pip install -U pip -q
|
|
||||||
python3 -m pip install -r backend/requirements.txt -q
|
echo "==> 安装 Python 依赖..."
|
||||||
|
python3 -m pip install -U pip -q
|
||||||
echo "==> 启动 PM2..."
|
python3 -m pip install -r backend/requirements.txt -q
|
||||||
pm2 delete binance-altcoin-monitor 2>/dev/null || true
|
|
||||||
pm2 start ecosystem.config.cjs
|
echo "==> 启动 PM2..."
|
||||||
pm2 save
|
pm2 delete binance-altcoin-monitor 2>/dev/null || true
|
||||||
|
pm2 start ecosystem.config.cjs
|
||||||
# 开机自启(可选)
|
pm2 save
|
||||||
if command -v pm2 &>/dev/null; then
|
|
||||||
pm2 startup 2>/dev/null | tail -1 | grep -q sudo && \
|
# 开机自启(可选)
|
||||||
echo "提示: 若需开机自启,请执行上一条 pm2 startup 输出的 sudo 命令" || true
|
if command -v pm2 &>/dev/null; then
|
||||||
fi
|
pm2 startup 2>/dev/null | tail -1 | grep -q sudo && \
|
||||||
|
echo "提示: 若需开机自启,请执行上一条 pm2 startup 输出的 sudo 命令" || true
|
||||||
echo ""
|
fi
|
||||||
echo "部署完成。"
|
|
||||||
echo " Web: http://$(hostname -I | awk '{print $1}'):21450"
|
echo ""
|
||||||
echo " 状态: pm2 status"
|
echo "部署完成。"
|
||||||
echo " 日志: pm2 logs binance-altcoin-monitor"
|
echo " Web: http://$(hostname -I | awk '{print $1}'):21450"
|
||||||
echo ""
|
echo " 状态: pm2 status"
|
||||||
echo "开启 SOCKS5 代理: 编辑 ${INSTALL_DIR}/.env 后执行"
|
echo " 日志: pm2 logs binance-altcoin-monitor"
|
||||||
echo " pm2 restart binance-altcoin-monitor"
|
echo ""
|
||||||
|
echo "开启 SOCKS5 代理: 编辑 ${INSTALL_DIR}/.env 后执行"
|
||||||
|
echo " pm2 restart binance-altcoin-monitor"
|
||||||
|
|||||||
Reference in New Issue
Block a user