From ae4cf5d3c8718d07b031806c5f14062805ea9615 Mon Sep 17 00:00:00 2001 From: aszerW Date: Thu, 7 May 2026 22:15:17 +0800 Subject: [PATCH] =?UTF-8?q?build:=20=E6=B7=BB=E5=8A=A0=20Flask=20=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E6=9E=84=E5=BB=BA=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 build-flask-and-push.sh:一键构建和推送 Flask API 镜像 - 支持自定义镜像名称和标签 - 自动检查基础镜像、构建、打标签、推送 - 提供运行示例和测试命令 --- build-flask-and-push.sh | 118 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 build-flask-and-push.sh diff --git a/build-flask-and-push.sh b/build-flask-and-push.sh new file mode 100644 index 0000000..c7e7e9c --- /dev/null +++ b/build-flask-and-push.sh @@ -0,0 +1,118 @@ +#!/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 "========================================="