Files
etf/build-flask-and-push.sh
aszerW ae4cf5d3c8 build: 添加 Flask 服务构建脚本
- 新增 build-flask-and-push.sh:一键构建和推送 Flask API 镜像
- 支持自定义镜像名称和标签
- 自动检查基础镜像、构建、打标签、推送
- 提供运行示例和测试命令
2026-05-07 22:15:17 +08:00

119 lines
3.2 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Flask API 服务构建和推送脚本
# =============================
set -e # 遇到错误立即退出
# 配置变量
IMAGE_NAME="${1:-etf-data-fetcher}"
REGISTRY="192.168.0.115:5000"
TAG="${2:-latest}"
FULL_IMAGE_NAME="${REGISTRY}/${IMAGE_NAME}:${TAG}"
DOCKERFILE="Dockerfile.flask"
echo "========================================="
echo "Flask API 服务 - 构建和推送脚本"
echo "========================================="
echo "镜像名称: ${IMAGE_NAME}"
echo "标签: ${TAG}"
echo "Dockerfile: ${DOCKERFILE}"
echo ""
# 检查 Dockerfile 是否存在
if [ ! -f "${DOCKERFILE}" ]; then
echo "❌ Dockerfile ${DOCKERFILE} 不存在"
exit 1
fi
# 检查并构建基础镜像(如果不存在)
echo "0. 检查基础镜像..."
if ! docker images --format "{{.Repository}}:{{.Tag}}" | grep -q "index-base:latest"; then
echo " 基础镜像不存在,开始构建..."
if [ -f "Dockerfile_base" ]; then
docker build --platform linux/arm64 -f Dockerfile_base -t index-base:latest .
echo " ✅ 基础镜像构建成功"
else
echo " ⚠️ 未找到 Dockerfile_base跳过基础镜像构建"
exit 1
fi
else
echo " ✅ 基础镜像已存在"
fi
# 构建镜像
echo ""
echo "1. 构建 Flask API 镜像..."
echo " 镜像名称: ${IMAGE_NAME}"
echo " 平台: linux/arm64"
docker build --platform linux/arm64 -f ${DOCKERFILE} -t ${IMAGE_NAME} .
if [ $? -eq 0 ]; then
echo " ✅ 镜像构建成功"
else
echo " ❌ 镜像构建失败"
exit 1
fi
# 打标签
echo ""
echo "2. 为镜像打标签..."
echo " 标签: ${FULL_IMAGE_NAME}"
docker tag ${IMAGE_NAME} ${FULL_IMAGE_NAME}
if [ $? -eq 0 ]; then
echo " ✅ 标签添加成功"
else
echo " ❌ 标签添加失败"
exit 1
fi
# 推送到私有仓库
echo ""
echo "3. 推送镜像到私有仓库..."
echo " 仓库地址: ${REGISTRY}"
docker push ${FULL_IMAGE_NAME}
if [ $? -eq 0 ]; then
echo " ✅ 镜像推送成功"
else
echo " ❌ 镜像推送失败"
exit 1
fi
# 清理本地镜像(可选)
echo ""
echo "4. 清理临时镜像..."
docker rmi ${IMAGE_NAME} || true
# 显示最终结果
echo ""
echo "========================================="
echo "🎉 构建和推送完成!"
echo "========================================="
echo "镜像地址: ${FULL_IMAGE_NAME}"
echo ""
echo "可以使用以下命令运行容器:"
echo ""
echo "# 基础运行仅A股数据"
echo "docker run -d --name ${IMAGE_NAME}-container \\"
echo " -p 5000:5000 \\"
echo " -v \$(pwd)/.env:/app/.env:ro \\"
echo " ${FULL_IMAGE_NAME}"
echo ""
echo "# 启用SSH隧道支持港美股"
echo "docker run -d --name ${IMAGE_NAME}-container \\"
echo " -p 5000:5000 \\"
echo " -v \$(pwd)/.env:/app/.env:ro \\"
echo " -v \$(pwd)/hk_ecs.pem:/app/hk_ecs.pem:ro \\"
echo " -e SSH_ENABLED=true \\"
echo " -e SSH_HOST=8.218.167.69 \\"
echo " -e SSH_USERNAME=root \\"
echo " -e SSH_KEY_PATH=hk_ecs.pem \\"
echo " ${FULL_IMAGE_NAME}"
echo ""
echo "# 测试API"
echo "curl http://localhost:5000/health"
echo "curl 'http://localhost:5000/api/v1/ohlcv?code=000300.SH&start=2024-01-01&end=2024-03-31'"
echo ""
echo "========================================="