openEuler服务器没网怎么办?保姆级教程:从系统依赖到Python虚拟环境的全离线部署实录

张开发
2026/4/15 0:45:57 15 分钟阅读

分享文章

openEuler服务器没网怎么办?保姆级教程:从系统依赖到Python虚拟环境的全离线部署实录
openEuler服务器离线部署Python生产环境实战指南当你面对一台全新的openEuler服务器却发现它完全无法连接外网时那种手足无措的感觉我深有体会。去年在给某金融机构部署内部系统时我就遇到了这样的挑战——必须在严格的内网环境中从零搭建Python应用。本文将分享我总结的全套离线部署方案从系统依赖排查到Python虚拟环境创建手把手带你走出无网困境。1. 环境准备与离线资源获取1.1 搭建离线资源库在没有网络的环境下工作首要任务是建立完整的离线资源库。我通常会准备以下内容系统依赖RPM包约300MBPython解释器安装包约30MB项目依赖的wheel文件视项目而定必要的静态数据文件获取系统依赖包的操作流程# 在有网络的同版本openEuler系统上执行 mkdir -p /opt/offline_repo/{python,rpms} # 下载基础开发工具链 yum install -y yum-utils yumdownloader --resolve --destdir/opt/offline_repo/rpms \ gcc gcc-c make openssl-devel bzip2-devel libffi-devel zlib-devel1.2 准备Python环境选择与生产环境匹配的Python版本至关重要。我推荐使用Miniconda作为基础环境# 下载Miniconda安装包在有网络环境操作 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /opt/offline_repo/python/miniconda.sh # 生成conda环境导出文件 conda create -n base_env python3.8 conda env export -n base_env /opt/offline_repo/python/environment.yml2. 系统级依赖处理2.1 离线安装基础组件将准备好的离线资源拷贝到目标服务器后开始系统级部署# 安装本地RPM包需要root权限 rpm -ivh /opt/offline_repo/rpms/*.rpm --nodeps --force # 验证关键组件 gcc --version | head -n1 openssl version2.2 处理常见依赖问题即使准备充分仍可能遇到依赖缺失。我的应急方案是使用yum provides查找缺失库文件yum provides */libssl.so.1.1通过ldd检查可执行文件依赖ldd /usr/local/bin/python3 | grep not found关键系统库对照表库文件所属RPM包典型问题表现libcrypto.so.1.1openssl-libsSSL模块导入失败libbz2.so.1bzip2-libs压缩相关功能报错libffi.so.7libffictypes模块不可用3. Python环境部署实战3.1 离线安装Python解释器# 安装Miniconda bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/miniconda3 # 初始化环境变量 source /opt/miniconda3/bin/activate conda init bash3.2 创建虚拟环境我的推荐做法是建立双层环境# 基础环境包含常用工具 conda env create -f environment.yml -n base # 项目专用环境 conda create --clone base -n project_env conda activate project_env4. 项目依赖离线安装4.1 准备wheelhouse在有网络的环境收集所有依赖pip download -r requirements.txt \ --platform manylinux2014_x86_64 \ --only-binary:all: \ --dest ./wheelhouse4.2 离线安装技巧# 使用本地wheel文件安装 pip install --no-index --find-links./wheelhouse -r requirements.txt # 处理特殊包的小技巧 for wheel in $(ls ./wheelhouse/*.whl); do pip install --no-deps $wheel done5. 验证与故障排除5.1 环境健康检查# 检查Python模块导入 python -c import ssl; print(ssl.OPENSSL_VERSION) # 验证关键功能 python -m pytest tests/5.2 常见错误解决方案GLIBC版本问题# 查看当前版本 ldd --version # 临时解决方案不推荐长期使用 export LD_LIBRARY_PATH/opt/glibc-2.28/lib:$LD_LIBRARY_PATH架构不兼容问题# 确认系统架构 uname -m # 重新打包时指定正确平台 pip download --platform manylinux2014_aarch64 package_name6. 生产环境优化建议在完成基础部署后还需要考虑以下优化点资源隔离使用cgroups限制Python进程资源占用日志管理配置logrotate防止日志文件膨胀启动管理编写systemd服务单元文件示例systemd配置[Unit] DescriptionPython Application Afternetwork.target [Service] Userappuser Groupappgroup WorkingDirectory/opt/your_project EnvironmentPATH/opt/miniconda3/envs/project_env/bin ExecStart/opt/miniconda3/envs/project_env/bin/python main.py [Install] WantedBymulti-user.target7. 离线部署工具包维护建立可持续维护的离线资源库需要定期更新安全补丁维护版本清单文件建立依赖关系图谱我常用的维护命令# 生成RPM包清单 rpm -qa rpm_installed.list # 导出conda环境 conda env export -n project_env environment_frozen.yml # 检查安全更新在有网络环境 yum updateinfo list security

更多文章