openEuler服务器没网怎么办?保姆级教程:从系统依赖到Python虚拟环境的全离线部署实录
openEuler服务器离线部署Python生产环境实战指南
当你面对一台全新的openEuler服务器,却发现它完全无法连接外网时,那种手足无措的感觉我深有体会。去年在给某金融机构部署内部系统时,我就遇到了这样的挑战——必须在严格的内网环境中从零搭建Python应用。本文将分享我总结的全套离线部署方案,从系统依赖排查到Python虚拟环境创建,手把手带你走出"无网困境"。
1. 环境准备与离线资源获取
1.1 搭建离线资源库
在没有网络的环境下工作,首要任务是建立完整的离线资源库。我通常会准备以下内容:
- 系统依赖RPM包(约300MB)
- Python解释器安装包(约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 python=3.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.1 | openssl-libs | SSL模块导入失败 |
| libbz2.so.1 | bzip2-libs | 压缩相关功能报错 |
| libffi.so.7 | libffi | ctypes模块不可用 |
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] Description=Python Application After=network.target [Service] User=appuser Group=appgroup WorkingDirectory=/opt/your_project Environment="PATH=/opt/miniconda3/envs/project_env/bin" ExecStart=/opt/miniconda3/envs/project_env/bin/python main.py [Install] WantedBy=multi-user.target7. 离线部署工具包维护
建立可持续维护的离线资源库需要:
- 定期更新安全补丁
- 维护版本清单文件
- 建立依赖关系图谱
我常用的维护命令:
# 生成RPM包清单 rpm -qa > rpm_installed.list # 导出conda环境 conda env export -n project_env > environment_frozen.yml # 检查安全更新(在有网络环境) yum updateinfo list security