yue 3 주 전
부모
커밋
e776601981
19개의 변경된 파일116개의 추가작업 그리고 117개의 파일을 삭제
  1. 1 1
      SourceCode/IntelligentRailwayCosting/.script/cmd/BuildRcApp_1.0.0.run.xml
  2. 2 2
      SourceCode/IntelligentRailwayCosting/.script/cmd/BuildRcBase_1.0.0.run.xml
  3. 1 1
      SourceCode/IntelligentRailwayCosting/.script/cmd/RunRcApp.run.xml
  4. 1 1
      SourceCode/IntelligentRailwayCosting/.script/cmd/main.run.xml
  5. 2 1
      SourceCode/IntelligentRailwayCosting/Docker/Dockerfile
  6. 67 74
      SourceCode/IntelligentRailwayCosting/Docker/DockerfileBase
  7. BIN
      SourceCode/IntelligentRailwayCosting/Docker/apt-packages/base/curl_7.81.0-1ubuntu1.20_amd64.deb
  8. BIN
      SourceCode/IntelligentRailwayCosting/Docker/apt-packages/base/gnupg2_2.2.27-3ubuntu2.1_all.deb
  9. BIN
      SourceCode/IntelligentRailwayCosting/Docker/apt-packages/odbc/libltdl7_2.4.6-15build2_amd64.deb
  10. BIN
      SourceCode/IntelligentRailwayCosting/Docker/apt-packages/odbc/libodbc1_2.3.11-3_amd64.deb
  11. BIN
      SourceCode/IntelligentRailwayCosting/Docker/apt-packages/odbc/libodbcinst2_2.3.9-5ubuntu0.1_amd64.deb
  12. BIN
      SourceCode/IntelligentRailwayCosting/Docker/apt-packages/odbc/unixodbc-common_2.3.9-5ubuntu0.1_all.deb
  13. BIN
      SourceCode/IntelligentRailwayCosting/Docker/apt-packages/odbc/unixodbc-dev_2.3.11-3_amd64.deb
  14. BIN
      SourceCode/IntelligentRailwayCosting/Docker/apt-packages/odbc/unixodbc_2.3.11-3_amd64.deb
  15. 35 33
      SourceCode/IntelligentRailwayCosting/Docker/docker-compose.yml
  16. BIN
      SourceCode/IntelligentRailwayCosting/Docker/odbc-drivers/msodbcsql17_17.10.6.1-1_amd64.deb
  17. BIN
      SourceCode/IntelligentRailwayCosting/Docker/odbc-drivers/msodbcsql18_18.5.1.1-1_amd64.deb
  18. 6 4
      SourceCode/IntelligentRailwayCosting/app/config.yml
  19. 1 0
      SourceCode/IntelligentRailwayCosting/app/tools/db_helper/sqlserver_helper.py

+ 1 - 1
SourceCode/IntelligentRailwayCosting/.script/cmd/BuildApp.run.xml → SourceCode/IntelligentRailwayCosting/.script/cmd/BuildRcApp_1.0.0.run.xml

@@ -1,5 +1,5 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="BuildApp" type="docker-deploy" factoryName="dockerfile" server-name="104">
+  <configuration default="false" name="BuildRcApp_1.0.0" type="docker-deploy" factoryName="dockerfile" server-name="104">
     <deployment type="dockerfile">
       <settings>
         <option name="imageTag" value="railway_costing-app:1.0.0" />

+ 2 - 2
SourceCode/IntelligentRailwayCosting/.script/cmd/BuildBaseImage.run.xml → SourceCode/IntelligentRailwayCosting/.script/cmd/BuildRcBase_1.0.0.run.xml

@@ -1,8 +1,8 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="BuildBaseImage" type="docker-deploy" factoryName="dockerfile" server-name="104">
+  <configuration default="false" name="BuildRcBase_1.0.0" type="docker-deploy" factoryName="dockerfile" server-name="104">
     <deployment type="dockerfile">
       <settings>
-        <option name="imageTag" value="intelligent-railway-base:1.0.0" />
+        <option name="imageTag" value="railway_costing-base:1.0.0" />
         <option name="buildOnly" value="true" />
         <option name="sourceFilePath" value="Docker/DockerfileBase" />
       </settings>

+ 1 - 1
SourceCode/IntelligentRailwayCosting/.script/cmd/RunApp.run.xml → SourceCode/IntelligentRailwayCosting/.script/cmd/RunRcApp.run.xml

@@ -1,5 +1,5 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="RunApp" type="docker-deploy" factoryName="docker-compose.yml" server-name="104">
+  <configuration default="false" name="RunRcApp" type="docker-deploy" factoryName="docker-compose.yml" server-name="104">
     <deployment type="docker-compose.yml">
       <settings>
         <option name="composeProjectName" value="railway_costing" />

+ 1 - 1
SourceCode/IntelligentRailwayCosting/.script/cmd/main.run.xml

@@ -8,7 +8,7 @@
       <env name="PYTHONUNBUFFERED" value="1" />
     </envs>
     <option name="SDK_HOME" value="" />
-    <option name="SDK_NAME" value="Python 3.13 (IntelligentRailwayCosting)" />
+    <option name="SDK_NAME" value="Python 3.13 virtualenv at D:\01Work\1012_IntelligentRailwayCosting\SourceCode\IntelligentRailwayCosting\.venv" />
     <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/app" />
     <option name="IS_MODULE_SDK" value="false" />
     <option name="ADD_CONTENT_ROOTS" value="true" />

+ 2 - 1
SourceCode/IntelligentRailwayCosting/Docker/Dockerfile

@@ -2,7 +2,7 @@
 # 基于多阶段构建,使用本地资源和基础镜像
 
 # 第一阶段:使用基础镜像
-FROM intelligent-railway-base:1.0.0 AS base-system
+FROM railway_costing-base:1.0.0 AS base-system
 
 # 第二阶段:Python依赖构建
 FROM base-system AS builder
@@ -30,5 +30,6 @@ COPY app/ /app
 # 暴露端口
 EXPOSE 5123
 
+
 # 启动命令
 CMD ["python", "main.py"]

+ 67 - 74
SourceCode/IntelligentRailwayCosting/Docker/DockerfileBase

@@ -1,85 +1,78 @@
 # 基础镜像构建Dockerfile
 # 包含系统依赖和ODBC组件
+# 优化版本:减少镜像层数,提高构建效率
 
 # 基础系统依赖镜像
 FROM python:3.13-slim
 
-# 创建并配置阿里云APT源
-RUN echo "deb http://mirrors.aliyun.com/debian bullseye main contrib non-free" > /etc/apt/sources.list && \
-    echo "deb http://mirrors.aliyun.com/debian bullseye-updates main contrib non-free" >> /etc/apt/sources.list && \
-    echo "deb http://mirrors.aliyun.com/debian-security bullseye-security main contrib non-free" >> /etc/apt/sources.list
-
-# 修改动态生成的APT源配置文件
-RUN find /etc/apt/sources.list.d/ -type f -exec sed -i 's|http://deb.debian.org|http://mirrors.aliyun.com|g' {} \; && \
-    find /etc/apt/sources.list.d/ -type f -exec sed -i 's|http://security.debian.org|http://mirrors.aliyun.com|g' {} \;
-
-# 清理APT缓存并更新源列表
-RUN rm -rf /var/lib/apt/lists/* && \
-    apt-get update
-
-RUN mkdir /app
-# 设置工作目录
+# 创建工作目录
 WORKDIR /app
 
-# 安装基础依赖
-RUN apt-get install -y --no-install-recommends \
-    apt-utils \
-    libc6 \
-    && rm -rf /var/lib/apt/lists/*
-
-COPY ./apt-packages/base/* /tmp/apt-packages/
-RUN set -eux; \
-    # 安装基础依赖包
-    dpkg -i /tmp/apt-packages/*.deb || true; \
-    apt-get update && apt-get -f install -y --no-install-recommends; \
-    # 清理临时文件
-    rm -rf /tmp/apt-packages /var/lib/apt/lists/*
-
-# 安装ODBC依赖 - 分步安装以避免包冲突
-# 第1步:复制所有依赖包
-COPY ./apt-packages/odbc/* /tmp/apt-packages/
+# 设置环境变量
+ENV FREETDS_VERSION=7.3 \
+    ODBCSYSINI=/etc \
+    ODBCINI=/etc/odbc.ini \
+    DEBIAN_FRONTEND=noninteractive \
+    TZ=Asia/Shanghai
 
-# 第2步:安装基础依赖
+# 配置阿里云APT源并安装基础依赖
 RUN set -eux; \
-    apt-get update && apt-get install -y --no-install-recommends \
-    libltdl7 \
-    libodbc1 \
-    odbcinst \
-    odbcinst1debian2 \
-    unixodbc-common && \
-    rm -rf /var/lib/apt/lists/*
-
-# 第3步:逐个安装ODBC依赖包
-RUN set -eux; \
-    # 设置环境变量接受许可协议
-    export DOCKER_BUILDKIT=1; \
-    # 先安装libodbcinst2
-    dpkg -i /tmp/apt-packages/libodbcinst2*.deb || true; \
-    apt-get update && apt-get -f install -y --no-install-recommends; \
-    # 再安装libodbc1
-    dpkg -i /tmp/apt-packages/libodbc1*.deb || true; \
-    apt-get update && apt-get -f install -y --no-install-recommends; \
-    # 最后安装unixodbc和unixodbc-dev
-    dpkg -i /tmp/apt-packages/unixodbc*.deb || true; \
-    apt-get update && apt-get -f install -y --no-install-recommends && \
-    rm -rf /var/lib/apt/lists/*
-
-COPY ./odbc-drivers/* /tmp/odbc-drivers/
-# 第4步:安装Microsoft ODBC驱动
-RUN set -eux; \
-    # 设置环境变量接受许可协议
-    export DOCKER_BUILDKIT=1; \
-    export ACCEPT_EULA=Y; \
-    export DEBIAN_FRONTEND=noninteractive; \
-    # 安装Microsoft ODBC驱动
-    dpkg -i /tmp/odbc-drivers/*.deb || true; \
-    apt-get update && apt-get -f install -y --no-install-recommends; \
-    # 更新动态链接库缓存
-    ldconfig; \
-    # 显示安装的ODBC库文件
-    ls -l /usr/lib/x86_64-linux-gnu/libodbc*; \
-    ldconfig -p | grep libodbc; \
-    # 清理临时文件
-    rm -rf /tmp/apt-packages /tmp/odbc-drivers /var/lib/apt/lists/*
-
+    # 配置阿里云APT源 - 提高下载速度
+    echo "deb http://mirrors.aliyun.com/debian bullseye main contrib non-free" > /etc/apt/sources.list && \
+    echo "deb http://mirrors.aliyun.com/debian bullseye-updates main contrib non-free" >> /etc/apt/sources.list && \
+    echo "deb http://mirrors.aliyun.com/debian-security bullseye-security main contrib non-free" >> /etc/apt/sources.list && \
+    # 修改动态生成的APT源配置文件
+    find /etc/apt/sources.list.d/ -type f -exec sed -i 's|http://deb.debian.org|http://mirrors.aliyun.com|g' {} \; && \
+    find /etc/apt/sources.list.d/ -type f -exec sed -i 's|http://security.debian.org|http://mirrors.aliyun.com|g' {} \; && \
+    # 更新源并安装基础系统依赖 - 合并安装所有依赖减少层数
+    apt-get update && \
+    apt-get install -y --no-install-recommends \
+        # 系统基础依赖
+        apt-utils \
+        libc6 \
+        curl \
+        gnupg2 \
+        ca-certificates \
+        # ODBC基础依赖
+        libltdl7 \
+        libodbc1 \
+        libodbcinst2 \
+        odbcinst \
+        odbcinst1debian2 \
+        unixodbc \
+        unixodbc-common \
+        unixodbc-dev \
+        # FreeTDS相关依赖
+        freetds-bin \
+        freetds-dev \
+        tdsodbc && \
+    # 配置FreeTDS - 使用单一配置文件
+    { \
+        echo "[global]"; \
+        echo "    tds version = 7.3"; \
+        echo "    client charset = UTF-8"; \
+        echo "    timeout = 60"; \
+        echo "    connect timeout = 15"; \
+    } > /etc/freetds/freetds.conf && \
+    # 配置ODBC驱动 - 使用单一配置文件
+    { \
+        echo "[FreeTDS]"; \
+        echo "Description = TDS driver (Sybase/MS SQL)"; \
+        echo "Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so"; \
+        echo "CPTimeout ="; \
+        echo "CPReuse ="; \
+        echo "UsageCount = 1"; \
+    } > /etc/odbcinst.ini && \
+    # 验证驱动安装 - 确保配置正确
+    if [ ! -f /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so ]; then \
+        echo "ERROR: FreeTDS ODBC driver not found"; \
+        exit 1; \
+    fi && \
+    # 清理临时文件 - 减小镜像大小
+    apt-get clean && \
+    apt-get autoremove -y && \
+    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
 
+# 健康检查 - 验证ODBC配置是否正确
+HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
+    CMD [ "odbcinst", "-q", "-d", "-n", "FreeTDS" ]

BIN
SourceCode/IntelligentRailwayCosting/Docker/apt-packages/base/curl_7.81.0-1ubuntu1.20_amd64.deb


BIN
SourceCode/IntelligentRailwayCosting/Docker/apt-packages/base/gnupg2_2.2.27-3ubuntu2.1_all.deb


BIN
SourceCode/IntelligentRailwayCosting/Docker/apt-packages/odbc/libltdl7_2.4.6-15build2_amd64.deb


BIN
SourceCode/IntelligentRailwayCosting/Docker/apt-packages/odbc/libodbc1_2.3.11-3_amd64.deb


BIN
SourceCode/IntelligentRailwayCosting/Docker/apt-packages/odbc/libodbcinst2_2.3.9-5ubuntu0.1_amd64.deb


BIN
SourceCode/IntelligentRailwayCosting/Docker/apt-packages/odbc/unixodbc-common_2.3.9-5ubuntu0.1_all.deb


BIN
SourceCode/IntelligentRailwayCosting/Docker/apt-packages/odbc/unixodbc-dev_2.3.11-3_amd64.deb


BIN
SourceCode/IntelligentRailwayCosting/Docker/apt-packages/odbc/unixodbc_2.3.11-3_amd64.deb


+ 35 - 33
SourceCode/IntelligentRailwayCosting/Docker/docker-compose.yml

@@ -1,31 +1,31 @@
 version: '3.8'
 
 services:
-#  rc-mysql:
-#    image: mysql:8.0.39
-#    container_name: railway_costing-mysql
-#    environment:
-#      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
-#      - MYSQL_DATABASE=${MYSQL_DATABASE}
-#      - MYSQL_USER=${MYSQL_USER}
-#      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
-#      - TZ=Asia/Shanghai
-#      # - MYSQL_DEFAULT_AUTHENTICATION_PLUGIN=mysql_native_password
-#    volumes:
-#      - /home/docker/iwb_railway_costing_v1/mysql/log:/var/log/mysql
-#      - /home/docker/iwb_railway_costing_v1/mysql/data:/var/lib/mysql
-#      - /etc/localtime:/etc/localtime:ro
-#      - /home/docker/iwb_railway_costing_v1/app/init.sql:/docker-entrypoint-initdb.d/init.sql # 挂载 init.sql 文件
-#      # - ./.dev/mysql5.7/log:/var/log/mysql
-#      # - ./.dev/mysql5.7/data:/var/lib/mysql
-#      # - ./.dev/mysql8.0.39/log:/var/log/mysql
-#      # - ./.dev/mysql8.0.39/data:/var/lib/mysql
-#      # - ./init.sql:/docker-entrypoint-initdb.d/init.sql
-#    ports:
-#      - '${MYSQL_PORT}:3306'
-#    networks:
-#      - railway_costing_v1
-#    restart: always
+  #  rc-mysql:
+  #    image: mysql:8.0.39
+  #    container_name: railway_costing-mysql
+  #    environment:
+  #      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
+  #      - MYSQL_DATABASE=${MYSQL_DATABASE}
+  #      - MYSQL_USER=${MYSQL_USER}
+  #      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
+  #      - TZ=Asia/Shanghai
+  #      # - MYSQL_DEFAULT_AUTHENTICATION_PLUGIN=mysql_native_password
+  #    volumes:
+  #      - /home/docker/iwb_railway_costing_v1/mysql/log:/var/log/mysql
+  #      - /home/docker/iwb_railway_costing_v1/mysql/data:/var/lib/mysql
+  #      - /etc/localtime:/etc/localtime:ro
+  #      - /home/docker/iwb_railway_costing_v1/app/init.sql:/docker-entrypoint-initdb.d/init.sql # 挂载 init.sql 文件
+  #      # - ./.dev/mysql5.7/log:/var/log/mysql
+  #      # - ./.dev/mysql5.7/data:/var/lib/mysql
+  #      # - ./.dev/mysql8.0.39/log:/var/log/mysql
+  #      # - ./.dev/mysql8.0.39/data:/var/lib/mysql
+  #      # - ./init.sql:/docker-entrypoint-initdb.d/init.sql
+  #    ports:
+  #      - '${MYSQL_PORT}:3306'
+  #    networks:
+  #      - railway_costing_v1
+  #    restart: always
 
   rc-app:
     build:
@@ -33,15 +33,17 @@ services:
       dockerfile: .
     image: railway_costing-app:1.0.0
     container_name: railway_costing-app
-#    depends_on:
-#      - rc-mysql
+    #    depends_on:
+    #      - rc-mysql
     environment:
       - TZ=Asia/Shanghai
-#      - APP_MYSQL__HOST=railway_costing-mysql
-#      - APP_MYSQL__PORT=3306
-#      - APP_MYSQL__DB=${MYSQL_DATABASE}
-#      - APP_MYSQL__USER=${MYSQL_USER}
-#      - APP_MYSQL__PASSWORD=${MYSQL_PASSWORD}
+      - ACCEPT_EULA=Y
+      - SQLNCLI_VERSION=10
+    #      - APP_MYSQL__HOST=railway_costing-mysql
+    #      - APP_MYSQL__PORT=3306
+    #      - APP_MYSQL__DB=${MYSQL_DATABASE}
+    #      - APP_MYSQL__USER=${MYSQL_USER}
+    #      - APP_MYSQL__PASSWORD=${MYSQL_PASSWORD}
     volumes:
       - /home/docker/iwb_railway_costing_v1/app/config.yml:/app/config.yml
       - /home/docker/iwb_railway_costing_v1/app/logs:/app/logs
@@ -49,7 +51,7 @@ services:
     networks:
       - railway_costing_v1
     ports:
-       - "7010:5123"
+      - "7010:5123"
     restart: always
 
 networks:

BIN
SourceCode/IntelligentRailwayCosting/Docker/odbc-drivers/msodbcsql17_17.10.6.1-1_amd64.deb


BIN
SourceCode/IntelligentRailwayCosting/Docker/odbc-drivers/msodbcsql18_18.5.1.1-1_amd64.deb


+ 6 - 4
SourceCode/IntelligentRailwayCosting/app/config.yml

@@ -16,6 +16,8 @@ db:
   # 在Windows系统的ODBC数据源管理器中查看已安装的驱动程序,选择相应的驱动名称
   # 在开始菜单的列表里面找到"Windows管理工具"打开, 然后点开里面的"ODBC数据源"。
   # 打开以后,点开上方"驱动程序"。 就可以看到系统所安装的ODBC驱动程序
+  # 在docker容器中运行,将配置改为  driver: '{FreeTDS}'
+  #
   sqlserver_mian_2024:
     driver: '{ODBC Driver 17 for SQL Server}'
     server: 192.168.0.81,1433
@@ -26,7 +28,6 @@ db:
   sqlserver_mian_2020:
     driver: '{ODBC Driver 17 for SQL Server}'
     server: 192.168.0.81,1433
-    #    server: shvber.com,5030
     username: iwb
     password: 123456Qsc
     database: Iwb_RecoData2020
@@ -34,13 +35,13 @@ db:
   Iwb_RailwayCosting:
     driver: '{ODBC Driver 17 for SQL Server}'
     server: 192.168.0.81,1433
-    #    server: shvber.com,5030
     username: iwb
     password: 123456Qsc
     database: iwb_railway_costing_v1
     trusted_connection: false
   Iwb_RecoData2024:
-    driver: '{ODBC Driver 17 for SQL Server}'
+    #    driver: '{ODBC Driver 17 for SQL Server}'
+    driver: '{SQL Server}'
     server: 192.168.0.81,1433
     username: iwb
     password: 123456Qsc
@@ -50,7 +51,8 @@ db:
     database: Iwb_RecoData2024
     trusted_connection: false
   Iwb_RecoData2020:
-    driver: '{ODBC Driver 17 for SQL Server}'
+    #    driver: '{ODBC Driver 17 for SQL Server}'
+    driver: '{SQL Server}'
     # server: shvber.com,50535
     # username: sa
     # password: Iwb2017

+ 1 - 0
SourceCode/IntelligentRailwayCosting/app/tools/db_helper/sqlserver_helper.py

@@ -65,6 +65,7 @@ class SQLServerHelper(DBHelper):
             f"SERVER={conn_config['server']}",
             f"DATABASE={conn_config['database'] if 'database' in conn_config else database}",
             "CHARSET=UTF-8",
+            "TDS_Version=7.3",
         ]
         conn_parts.extend(auth_params)