Ky10-aarch64内网环境部署RPA程序及前后端(Ruoyi-vue3-FastApi)记录和总结

一、环境说明与核心挑战

  • 环境特点:目标服务器为Ky10-aarch64(麒麟+arm64架构),开发者本地为Windows(amd64架构),存在架构差异导致的依赖兼容性问题。
  • 核心挑战
    • arm64架构下Chrome/Chromium适配困难,需替换为Firefox
    • 跨架构Docker镜像构建及迁移(Windows无法直接拉取arm64依赖)
    • 内网环境需提前准备镜像及依赖包

二、RPA 程序部署试错过程

1. 第一阶段:Windows 直接打包方案(失败)

  • 尝试操作 1:在 Windows 环境用 Docker 直接打包 RPA 程序,计划将镜像转移到服务器加载
  • 问题:RPA 依赖浏览器,服务器(Ky10-aarch64)无法安装 Chrome/Chromium(无适配 arm64 的版本)
  • 结论:Chrome/Chromium 在目标架构下不可用
  • 尝试操作 2:改为在 Docker 容器内安装浏览器,绕过服务器直接安装
  • 问题:Windows 为 amd64 架构,无法拉取 / 安装 arm64 架构的浏览器依赖(容器内架构与宿主机关联)
  • 结论:跨架构直接安装依赖不可行
  • 尝试操作 3:使用docker-buildx构建 arm64 架构镜像,强制指定架构
  • 问题
    1. 虽能拉取 arm64 基础镜像,但 Python 依赖包仍需从 PyPI 下载 arm64 版本,Windows 环境下无法正常获取(PyPI 会根据宿主机架构返回包)
    2. 每次打包都需重新安装依赖,开发效率极低
  • 结论docker-buildx无法解决跨架构依赖下载问题

2. 第二阶段:虚拟机中转方案(逐步解决)

  • 尝试操作 1:在 Windows 部署 Ky10-aarch64 虚拟机(模拟目标环境),验证 Chromium 兼容性
  • 问题:虚拟机内测试仍无法安装 Chromium(无适配 rpm 包,编译源码依赖缺失)
  • 调整:放弃 Chromium,改用 Firefox
  • 尝试操作 2:虚拟机内用 Docker 打包 RPA(基于openeuler/openeuler:20.03-lts-sp3基础镜像),依赖 Docker 自动安装 Firefox
  • 问题:Docker 拉取的 Firefox 版本过高,与 Selenium/geckodriver 不兼容(启动报错 “browser version not supported”)
  • 调整:手动下载适配的 Firefox rpm 包及依赖(需匹配 geckodriver 版本),在 Dockerfile 中手动安装
  • 尝试操作 3:手动安装 Firefox 后打包镜像,执行docker run测试
  • 问题:运行时提示缺少 libstdc++ 等系统依赖(rpm 包未包含完整依赖链)
  • 调整:梳理依赖关系,补充下载libxcblibx11等基础库 rpm 包,在 Dockerfile 中依次安装
  • 最终结果:经过 3 次 Dockerfile 修改(调整依赖安装顺序、补充缺失库),镜像运行成功,RPA 脚本可正常调用 Firefox 执行任务

三、总结RPA程序部署(分阶段优化)

1. 关键依赖替换

  • 浏览器选择:放弃Chrome/Chromium,改用适配arm64的Firefox(需提前准备对应rpm包及依赖)
  • 驱动匹配:使用geckodriver作为Selenium驱动,确保与Firefox版本兼容

2. 镜像构建流程(基于虚拟机中转)

  • 中转环境:在Windows部署可连外网的Ky10-aarch64虚拟机(模拟目标环境)
  • 基础镜像:采用openeuler/openeuler:20.03-lts-sp3(适配arm64)
  • 构建步骤
    1. 将RPA程序拷贝至虚拟机
    2. 准备Python3环境、geckodriver、Firefox rpm包及依赖
    3. 编写Dockerfile(重点:手动指定Firefox版本,避免自动拉取过高版本)
    4. 构建镜像:docker build -t rpa-app:v1.0 .
    5. 测试运行:docker run --rm rpa-app:v1.0(验证RPA脚本执行成功)
    6. 保存镜像:docker save -o rpa_app_arm64.tar rpa-app:v1.0(用于内网迁移)

三、前后端(Ruoyi-vue3-FastApi)部署全流程

1. 前期准备:镜像下载与迁移(关键:arm64架构)

镜像用途镜像名称及标签拉取命令(Windows执行)保存命令
Redis缓存redis:7.2-alpinedocker pull --platform linux/arm64 redis:7.2-alpinedocker save -o redis_7.2_arm64.tar redis:7.2-alpine
MySQL数据库arm64v8/mysql:ltsdocker pull arm64v8/mysql:ltsdocker save -o mysql_lts_arm64.tar arm64v8/mysql:lts
Nginx服务nginx:alpinedocker pull --platform linux/arm64 nginx:alpinedocker save -o nginx_alpine_arm64.tar nginx:alpine
后端基础环境python:3.10.10-bullseyedocker pull --platform linux/arm64 python:3.10.10-bullseyedocker save -o python_3.10_arm64.tar python:3.10.10-bullseye
  • 镜像导入(服务器/虚拟机执行)

    bash
    复制代码
    docker load -i redis_7.2_arm64.tar docker load -i mysql_lts_arm64.tar docker load -i nginx_alpine_arm64.tar docker load -i python_3.10_arm64.tar

2. 基础服务部署(Redis+MySQL)

(1)Redis启动(带持久化)
bash
复制代码
docker run -d \ --name redis \ -p 6379:6379 \ -v redis-data:/data \ # 数据卷持久化,避免容器删除后数据丢失 --restart=always \ redis:7.2-alpine \ redis-server --appendonly yes # 开启AOF持久化(数据更可靠)
(2)MySQL部署(含配置优化)
  • 前置目录准备

    bash
    复制代码
    mkdir -p /opt/mysql/{data,conf.d,logs} # 数据、配置、日志分离 chmod -R 777 /opt/mysql # 解决容器内权限不足问题(生产环境可按需调整权限)
  • 性能配置文件

    bash
    复制代码
    cat > /opt/mysql/conf.d/custom.cnf << 'EOF' [mysqld] character-set-server = utf8mb4 # 支持emoji collation-server = utf8mb4_unicode_ci max_connections = 1000 # 提高连接数 default-time-zone = '+8:00' # 时区同步 slow_query_log = 1 # 开启慢查询日志 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 2 # 慢查询阈值(秒) EOF
  • 启动容器

    bash
    复制代码
    docker run -d \ --name mysql \ -p 3306:3306 \ -v /opt/mysql/data:/var/lib/mysql \ -v /opt/mysql/conf.d:/etc/mysql/conf.d \ -v /opt/mysql/logs:/var/log/mysql \ -e MYSQL_ROOT_PASSWORD=root \ -e MYSQL_DATABASE=ruoyi_vue3 \ # 预创建数据库 --restart=always \ arm64v8/mysql:lts

3. 应用配置调整(本地修改后上传)

(1)后端配置(.env.prod
ini
复制代码
# 数据库连接(容器名作为主机名,需与启动命令一致) mysql_host=mysql mysql_port=3306 mysql_user=root mysql_password=root mysql_db=ruoyi_vue3 # Redis连接 redis_host=redis redis_port=6379
  • 端口解析兼容(env.py

    python
    复制代码
    @field_validator('redis_port', mode='before') def parse_redis_port(cls, value): if isinstance(value, str) and '://' in value: # 处理Docker网络格式如'tcp://172.17.0.3:6379' return int(value.split(':')[-1]) return int(value) if str(value).isdigit() else value
(2)前端配置(nginx.conf
nginx
复制代码
server { listen 8080; # 与前端容器端口一致 location / { root /usr/share/nginx/html; index index.html; } # API请求转发到后端容器 location /api/ { proxy_pass http://ruoyi-backend:9099/; proxy_set_header Host $host; } }

4. 前后端镜像构建与启动

(1)文件上传

将以下文件传到服务器同一目录:

  • 前端:dist文件夹、前端Dockerfile(基于nginx:alpine)、nginx.conf
  • 后端:项目代码、后端Dockerfile(基于python:3.10.10-bullseye)
(2)构建镜像
bash
复制代码
# 前端镜像 cd 前端目录 docker build -t ruoyi-frontend:v1.0 . # 后端镜像(首次构建依赖安装较慢) cd 后端目录 docker build -t ruoyi-backend:v1.0 .
(3)启动服务
  • 初始化数据库

    bash
    复制代码
    # 导入初始化SQL(需提前上传ruoyi-fastapi.sql) docker exec -i mysql mysql -u root -p'root' ruoyi_vue3 < ruoyi-fastapi.sql
  • 启动后端

    bash
    复制代码
    docker run -d \ --name ruoyi-backend \ -p 9099:9099 \ --link mysql:mysql \ # 与MySQL容器网络互通(或使用自定义网络) --link redis:redis \ --restart=always \ ruoyi-backend:v1.0
  • 启动前端(推荐方案二)

    • 方案一(适合频繁更新静态文件):

      bash
      复制代码
      # 复制前端产物到宿主机 docker run --rm --name temp-frontend ruoyi-frontend:v1.0 docker cp temp-frontend:/usr/share/nginx/html/. /opt/nginx/html/ docker stop temp-frontend # 启动Nginx docker run -d --name nginx -p 8080:8080 -v /opt/nginx/html:/usr/share/nginx/html --restart=always nginx:alpine
    • 方案二(内置Nginx,快速部署):

      bash
      复制代码
      docker run -d \ --name ruoyi-frontend \ -p 8080:8080 \ --restart=always \ ruoyi-frontend:v1.0

5. 内网最终部署(迁移步骤)

  1. 镜像迁移:将虚拟机中构建的镜像(RPA、前后端、基础镜像)通过docker save导出,传输至内网服务器后用docker load -i 镜像.tar导入。

  2. 服务启动:按上述步骤依次启动Redis、MySQL、初始化数据库、启动前后端及RPA容器。

  3. 验证

    bash
    复制代码
    docker ps # 检查所有容器状态 docker logs ruoyi-backend # 查看后端日志(排查启动错误) curl http://localhost:8080 # 验证前端访问

四、部署清单与注意事项

1. 必备镜像清单

镜像名称标签架构来源
ruoyi-backendv1.0arm64自定义构建
ruoyi-frontendv1.0arm64自定义构建
rpa-appv1.0arm64自定义构建
arm64v8/mysqlltsarm64官方镜像
redis7.2-alpinearm64官方镜像
nginxalpinearm64官方镜像
python3.10.10-bullseyearm64官方镜像

2. 注意事项

  • 所有镜像必须指定arm64架构,避免与amd64混淆
  • 容器间通信优先使用--link或自定义网络(docker network create
  • 敏感配置(如密码)建议通过环境变量注入,避免硬编码
  • 首次部署后建议备份MySQL数据卷和关键镜像

通过以上优化,流程更清晰,关键步骤补充了注意事项和兼容性处理,便于在Ky10-aarch64内网环境快速复现部署。

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP