mirror of
https://github.com/rnvm9wjdtj-bot/myaps_api.git
synced 2026-06-02 05:54:40 +00:00
20260510
This commit is contained in:
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"clawMode.mode": "editor",
|
||||||
|
"workbench.activityBar.location": "default"
|
||||||
|
}
|
||||||
@@ -393,4 +393,142 @@ sed -i 's/PROJECT_DIR=JYHDXS/PROJECT_DIR=CHANGDE/' .env
|
|||||||
- [ ] Redis 服务已启动且可连接
|
- [ ] Redis 服务已启动且可连接
|
||||||
- [ ] 执行 `deploy.sh -d` 部署成功(首次部署)
|
- [ ] 执行 `deploy.sh -d` 部署成功(首次部署)
|
||||||
- [ ] 执行 `deploy.sh -d -s` 部署成功(增量更新)
|
- [ ] 执行 `deploy.sh -d -s` 部署成功(增量更新)
|
||||||
- [ ] 服务状态正常(`systemctl --user status MyAPS_API` 或 `systemctl status MyAPS_API`)
|
- [ ] 服务状态正常(`systemctl --user status MyAPS_API` 或 `systemctl status MyAPS_API`)
|
||||||
|
|
||||||
|
## 🔄 无外网环境代码同步指南
|
||||||
|
|
||||||
|
### 首次获取代码:使用 Git Bundle 传输(推荐)
|
||||||
|
|
||||||
|
#### 步骤1:在外网机器上打包
|
||||||
|
```bash
|
||||||
|
# 从远程仓库拉取最新代码
|
||||||
|
git clone 远程仓库地址 myaps_api
|
||||||
|
cd myaps_api
|
||||||
|
|
||||||
|
# 打包成完整的 bundle 文件(包含所有分支和历史)
|
||||||
|
git bundle create myaps_api.bundle --all
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 步骤2:传输到内网机器
|
||||||
|
使用 U 盘、移动硬盘或其他物理介质将 `myaps_api.bundle` 传输到内网服务器。
|
||||||
|
|
||||||
|
#### 步骤3:在内网机器上从 bundle 创建仓库
|
||||||
|
```bash
|
||||||
|
# 从 bundle 文件克隆仓库
|
||||||
|
git clone myaps_api.bundle myaps_api
|
||||||
|
cd myaps_api
|
||||||
|
|
||||||
|
# 验证仓库状态
|
||||||
|
git log --oneline -10
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 更新代码:方法1 - 使用 Git Bundle 增量更新(推荐)
|
||||||
|
|
||||||
|
#### 步骤1:在外网机器上准备
|
||||||
|
```bash
|
||||||
|
# 进入外网仓库目录
|
||||||
|
cd myaps_api
|
||||||
|
|
||||||
|
# 拉取最新代码
|
||||||
|
git pull origin master
|
||||||
|
|
||||||
|
# 记录上次同步的 commit(或使用标签)
|
||||||
|
# 假设上次同步的 commit 是 abc1234
|
||||||
|
git bundle create update.bundle abc1234..HEAD
|
||||||
|
|
||||||
|
# 或者打包所有分支
|
||||||
|
git bundle create update.bundle --all
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 步骤2:传输到内网机器
|
||||||
|
将 `update.bundle` 传输到内网服务器。
|
||||||
|
|
||||||
|
#### 步骤3:在内网机器上更新
|
||||||
|
```bash
|
||||||
|
cd /opt/myaps_api/myaps_api
|
||||||
|
|
||||||
|
# 从 bundle 获取更新
|
||||||
|
git fetch /path/to/update.bundle
|
||||||
|
|
||||||
|
# 合并到本地分支
|
||||||
|
git merge FETCH_HEAD
|
||||||
|
|
||||||
|
# 或者直接 pull
|
||||||
|
git pull /path/to/update.bundle master
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 更新代码:方法2 - 使用补丁文件 (Patch)
|
||||||
|
|
||||||
|
适合小范围更新,文件体积小。
|
||||||
|
|
||||||
|
#### 步骤1:在外网机器上生成补丁
|
||||||
|
```bash
|
||||||
|
cd myaps_api
|
||||||
|
git pull origin master
|
||||||
|
|
||||||
|
# 生成从某个 commit 到最新的补丁
|
||||||
|
# 方法A:生成单个补丁文件
|
||||||
|
git format-patch start_commit..HEAD --stdout > updates.patch
|
||||||
|
|
||||||
|
# 方法B:生成多个独立补丁文件
|
||||||
|
git format-patch -n start_commit..HEAD
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 步骤2:传输补丁文件
|
||||||
|
将 `updates.patch` 或多个 `.patch` 文件传输到内网服务器。
|
||||||
|
|
||||||
|
#### 步骤3:在内网机器上应用补丁
|
||||||
|
```bash
|
||||||
|
cd /opt/myaps_api/myaps_api
|
||||||
|
|
||||||
|
# 方法A:应用单个补丁文件
|
||||||
|
git apply updates.patch
|
||||||
|
|
||||||
|
# 方法B:使用 git am 应用(会保留提交信息)
|
||||||
|
git am *.patch
|
||||||
|
|
||||||
|
# 如果有冲突,解决后继续
|
||||||
|
git am --continue
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 推荐工作流程
|
||||||
|
|
||||||
|
1. **在外网机器**:
|
||||||
|
- 定期从远程仓库拉取代码
|
||||||
|
- 使用 Git Bundle 打包(首次用完整 bundle,后续用增量 bundle)
|
||||||
|
|
||||||
|
2. **物理传输**:
|
||||||
|
- 通过 U 盘/移动硬盘传输 bundle 文件到内网
|
||||||
|
|
||||||
|
3. **在内网机器**:
|
||||||
|
- 从 bundle 更新本地仓库
|
||||||
|
- 执行增量部署:`./scripts/deploy_ubuntu/deploy.sh -d -s`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 实用技巧
|
||||||
|
|
||||||
|
#### 使用标签记录同步点
|
||||||
|
```bash
|
||||||
|
# 在外网机器:每次打包前打标签
|
||||||
|
git tag -a sync_20260510 -m "Sync point 2026-05-10"
|
||||||
|
git push origin sync_20260510
|
||||||
|
|
||||||
|
# 下次打包时使用标签
|
||||||
|
git bundle create update.bundle sync_20260510..HEAD
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 验证 bundle 完整性
|
||||||
|
```bash
|
||||||
|
# 验证 bundle 文件是否有效
|
||||||
|
git bundle verify myaps_api.bundle
|
||||||
|
|
||||||
|
# 查看 bundle 中包含的引用
|
||||||
|
git bundle list-heads myaps_api.bundle
|
||||||
|
```
|
||||||
@@ -5,29 +5,95 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
# 颜色输出
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
# 显示帮助
|
||||||
|
usage() {
|
||||||
|
echo "用法: $0 [选项]"
|
||||||
|
echo ""
|
||||||
|
echo "选项:"
|
||||||
|
echo " -h, --help 显示帮助信息"
|
||||||
|
echo ""
|
||||||
|
echo "说明:"
|
||||||
|
echo " 此脚本使用当前 Python 环境下载依赖包。"
|
||||||
|
echo " 请确保在与目标服务器相同 Python 版本的环境中运行此脚本。"
|
||||||
|
echo ""
|
||||||
|
echo "示例:"
|
||||||
|
echo " $0 # 使用当前 Python 版本下载"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 解析参数
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case $1 in
|
||||||
|
-h|--help)
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo -e "${RED}未知选项: $1${NC}"
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
echo " 准备离线依赖包"
|
echo " 准备离线依赖包"
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
|
|
||||||
# 检查 requirements.txt 是否存在
|
# 检查 requirements.txt 是否存在
|
||||||
if [ ! -f "requirements.txt" ]; then
|
if [ ! -f "requirements.txt" ]; then
|
||||||
echo "❌ 错误: requirements.txt 不存在"
|
echo -e "${RED}❌ 错误: requirements.txt 不存在${NC}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# 检测当前 Python 版本
|
||||||
|
PYTHON_MAJOR=$(python3 -c "import sys; print(sys.version_info.major)")
|
||||||
|
PYTHON_MINOR=$(python3 -c "import sys; print(sys.version_info.minor)")
|
||||||
|
PYTHON_VERSION="${PYTHON_MAJOR}${PYTHON_MINOR}"
|
||||||
|
echo -e "${GREEN}✅ 当前 Python 版本: ${PYTHON_MAJOR}.${PYTHON_MINOR} (cp${PYTHON_VERSION})${NC}"
|
||||||
|
|
||||||
|
# 检查 Python 版本警告
|
||||||
|
if [ "$PYTHON_VERSION" != "310" ] && [ "$PYTHON_VERSION" != "312" ]; then
|
||||||
|
echo -e "${YELLOW}⚠️ 警告: 目标服务器使用 Python 3.10 或 3.12,当前版本可能不兼容${NC}"
|
||||||
|
fi
|
||||||
|
|
||||||
# 创建离线包目录
|
# 创建离线包目录
|
||||||
|
echo ""
|
||||||
echo "[1/2] 创建离线包目录..."
|
echo "[1/2] 创建离线包目录..."
|
||||||
mkdir -p offline_packages
|
OFFLINE_DIR="offline_packages/ubuntu/python_pkg"
|
||||||
|
mkdir -p "$OFFLINE_DIR"
|
||||||
|
|
||||||
# 下载依赖
|
# 下载依赖
|
||||||
echo "[2/2] 下载 Python 依赖..."
|
echo "[2/2] 下载 Python 依赖..."
|
||||||
pip download -r requirements.txt -d offline_packages/
|
echo " 离线包目录: $OFFLINE_DIR"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 直接下载,使用当前 Python 环境的配置
|
||||||
|
echo " 正在下载依赖包..."
|
||||||
|
pip download -r requirements.txt -d "$OFFLINE_DIR"
|
||||||
|
|
||||||
|
# 统计下载结果
|
||||||
|
FILE_COUNT=$(ls -1 "$OFFLINE_DIR" 2>/dev/null | wc -l)
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
|
echo "========================================"
|
||||||
echo "✅ 离线依赖包准备完成!"
|
echo "✅ 离线依赖包准备完成!"
|
||||||
echo " 目录: $(pwd)/offline_packages/"
|
echo "========================================"
|
||||||
echo " 文件数: $(ls offline_packages/ | wc -l)"
|
echo " 目录: $(pwd)/$OFFLINE_DIR/"
|
||||||
|
echo " 文件数: $FILE_COUNT"
|
||||||
echo ""
|
echo ""
|
||||||
echo "使用方式:"
|
echo "使用方式:"
|
||||||
echo " 1. 将整个项目目录拷贝到离线服务器"
|
echo " 1. 将整个项目目录拷贝到离线服务器"
|
||||||
echo " 2. 运行 deploy.sh -d 进行部署"
|
echo " 2. 运行 deploy.sh -d 进行部署"
|
||||||
|
echo ""
|
||||||
|
echo "验证命令(在离线服务器上):"
|
||||||
|
echo " cd /opt/myaps_api/myaps_api"
|
||||||
|
echo " python3 -m venv venv"
|
||||||
|
echo " source venv/bin/activate"
|
||||||
|
echo " pip install --no-index --find-links=$OFFLINE_DIR -r requirements.txt"
|
||||||
|
echo ""
|
||||||
Reference in New Issue
Block a user