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 "========================================="