当前位置: 首页 > news >正文

Ubuntu 20.04/22.04 内网环境PostgreSQL 14离线部署实战

1. 内网环境下的PostgreSQL部署挑战

在企业级应用场景中,数据库服务往往需要部署在隔离的内网环境。我最近就遇到这样一个典型需求:某金融客户的生产环境服务器完全隔离外网,但业务系统又需要使用PostgreSQL 14的最新特性。这种场景下,常规的apt install命令直接失效,源码编译又存在耗时长、配置复杂的问题。

经过多次实践,我发现通过同版本Ubuntu中转机进行离线部署是最优解。这个方法的核心在于:利用可联网的机器预先下载所有依赖包,再通过物理介质(如U盘)或内部文件服务传输到目标服务器。实测在Ubuntu 20.04和22.04上,完整流程耗时约15分钟,比源码编译节省至少2小时。

与传统方式相比,这种方案有三大优势:

  • 规避编译风险:避免因环境差异导致的编译失败
  • 保持版本纯净:所有包均来自官方仓库,无第三方修改
  • 可重复使用:下载的deb包可存档作为标准安装包

2. 中转机环境准备

2.1 配置第三方仓库

首先在中转机上添加PostgreSQL官方仓库。这里有个细节要注意:不同Ubuntu版本对应的代号不同(20.04是focal,22.04是jammy),必须严格匹配:

# 识别系统代号 codename=$(lsb_release -cs) # 添加仓库配置 sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt ${codename}-pgdg main" > /etc/apt/sources.list.d/pgdg.list' # 导入签名密钥 wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

执行apt update后,可以通过以下命令验证仓库是否生效:

apt-cache policy postgresql-14

正常情况应显示类似输出:

postgresql-14: 已安装:(无) 候选版本:14.5-1.pgdg20.04+1

2.2 依赖分析技巧

使用apt-rdepends工具生成完整依赖树:

# 安装分析工具 sudo apt install apt-rdepends # 生成依赖关系图 apt-rdepends postgresql-14 | tee deps.txt

这里有个实用技巧:通过管道输出到文件的同时显示在终端,方便实时查看。对于复杂依赖,建议用grep过滤关键包:

cat deps.txt | grep -E 'Depends|PreDepends'

3. 离线包下载与管理

3.1 批量下载策略

通过分析依赖关系,我们需要下载四类核心包:

  1. 主程序包:postgresql-14
  2. 客户端工具:postgresql-client-14
  3. 公共组件:postgresql-common
  4. 密钥管理:pgdg-keyring

具体下载命令:

# 创建下载目录 mkdir pg14-offline && cd pg14-offline # 核心包下载 apt download postgresql-14 postgresql-client-14 postgresql-common # 密钥包需要单独处理 wget http://apt.postgresql.org/pub/repos/apt/pool/main/p/pgdg-keyring/pgdg-keyring_2018.2_all.deb

3.2 依赖包补全方案

下载过程中容易遗漏间接依赖。我的经验是分三步处理:

  1. 首次安装测试

    sudo dpkg -i *.deb
  2. 修复缺失依赖

    sudo apt -f install --dry-run
  3. 补下载缺失包

    apt download $(apt -f install --dry-run | grep '需要安装' | awk '{print $2}')

建议将最终所有deb包按功能分类存放:

/pg14-offline ├── main-packages/ ├── dependencies/ └── keyring/

4. 目标机安装实战

4.1 安装顺序原则

根据依赖关系,必须按特定顺序安装:

  1. 基础组件

    sudo dpkg -i pgdg-keyring_2018.2_all.deb
  2. 公共组件

    sudo dpkg -i postgresql-common_*.deb sudo dpkg -i postgresql-client-common_*.deb
  3. 客户端工具

    sudo dpkg -i postgresql-client-14_*.deb
  4. 主服务程序

    sudo dpkg -i postgresql-14_*.deb

4.2 常见问题处理

场景一:遇到libpq5依赖缺失

解决方法:

# 在中转机下载缺失包 apt download libpq5 # 传输后安装 sudo dpkg -i libpq5_*.deb

场景二:locale配置报错

快速修复方案:

sudo locale-gen en_US.UTF-8 sudo dpkg-reconfigure locales

5. 安装后配置要点

5.1 服务管理

启动服务并设置开机自启:

sudo systemctl enable postgresql@14-main sudo systemctl start postgresql@14-main

验证服务状态:

sudo -u postgres psql -c "SELECT version();"

5.2 防火墙配置

如果内网有防火墙规则,需要开放默认端口:

sudo ufw allow 5432/tcp

5.3 性能调优建议

修改/etc/postgresql/14/main/postgresql.conf关键参数:

# 根据内存调整 shared_buffers = 4GB effective_cache_size = 12GB # 连接数设置 max_connections = 100

6. 离线安装的进阶技巧

6.1 创建本地仓库

对于需要频繁部署的场景,可以建立本地APT仓库:

# 安装必要工具 sudo apt install dpkg-dev # 创建仓库目录结构 mkdir -p /opt/pg14-repo/conf # 生成Packages.gz cd /opt/pg14-repo dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz

6.2 自动化脚本实现

编写安装脚本install_pg14.sh

#!/bin/bash for pkg in pgdg-keyring postgresql-common postgresql-client-common libpq5 postgresql-client-14 postgresql-14; do sudo dpkg -i ${pkg}_*.deb || exit 1 done sudo apt -f install -y

给脚本添加执行权限:

chmod +x install_pg14.sh

7. 版本升级策略

当需要升级到新版本时(如14.6),只需在中转机执行:

# 下载新版包 apt download postgresql-14=14.6* # 校验依赖 apt-cache depends postgresql-14=14.6*

传输到目标机后,使用dpkg -i按相同顺序安装即可。特别注意:升级前建议备份数据库:

sudo -u postgres pg_dumpall > pg_backup.sql

8. 安全加固建议

完成安装后,建议执行以下安全措施:

  1. 修改默认postgres用户密码:

    sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'StrongPassword123!';"
  2. 限制访问IP: 修改pg_hba.conf

    host all all 192.168.1.0/24 md5
  3. 启用日志审计:

    logging_collector = on log_statement = 'all'

9. 监控与维护

配置基础监控:

# 安装统计收集器 sudo -u postgres psql -c "CREATE EXTENSION pg_stat_statements;"

postgresql.conf中添加:

shared_preload_libraries = 'pg_stat_statements' pg_stat_statements.track = all

定期维护命令:

# 清理旧数据 sudo -u postgres vacuumdb --all --analyze # 重建索引 sudo -u postgres reindexdb --all

10. 故障排查指南

问题一:服务启动失败

检查日志:

journalctl -u postgresql@14-main --no-pager -n 50

问题二:客户端连接拒绝

验证服务监听状态:

ss -tulnp | grep postgres

问题三:性能下降

查看活跃查询:

sudo -u postgres psql -c "SELECT * FROM pg_stat_activity;"

在实际项目中,这种离线部署方式已经成功应用于多个银行系统。有个特别要注意的细节:当内网环境存在多层防火墙时,可能需要将deb包分割成小于100MB的文件块传输。这种情况下,可以结合split命令处理:

# 分割文件 split -b 90M pg-packages.tar.gz pg-part- # 合并文件 cat pg-part-* > pg-packages.tar.gz
http://www.jsqmd.com/news/812016/

相关文章:

  • 2026上海继承律师专业推荐榜:上海起诉离婚律师、上海遗产分割律师、上海遗产处理律师、上海遗产律师、上海遗嘱律师选择指南 - 优质品牌商家
  • Windows安卓应用安装器:终极免费方案,3分钟搞定电脑运行安卓应用!
  • ChatGPT Windows客户端实测报告:6大主流工具性能横评(响应延迟<380ms、内存占用≤1.2GB、API调用成功率99.7%)
  • 2026管道杀菌器优质品牌推荐指南:不锈钢杀菌器、大功率紫外灯、水处理杀菌器、浸没式杀菌器、消毒杀菌器、空气净化杀菌器选择指南 - 优质品牌商家
  • 2026年当前浙江混凝土泵弯管采购指南:河北越洋通管件制造有限公司实力解析 - 2026年企业推荐榜
  • 别再死记硬背了!用PDCA循环搞定ISO9001和ISO27001体系搭建(附实战流程图)
  • 收藏必备!小白程序员快速入门大模型:OpenClaw与Hermes深度解析
  • 2025-2026年国内手机膜工厂推荐:五大排行工厂专业评测户外使用防摔碎案例 - 品牌推荐
  • 小红书内容采集神器:XHS-Downloader 高效下载工具全攻略
  • 2025-2026年充电桩加盟品牌推荐:十大排名产品专业评测解决社区安装场景致场地协调难 - 品牌推荐
  • 为什么92%的DeepSeek部署项目在上线30天内遭遇Prompt注入?4个被忽视的配置陷阱全曝光
  • SWMM 5.2英文版安装与界面初探:为什么老手都推荐用原版?
  • 受限玻尔兹曼机(RBM)在非营利组织数据分析中的工程化实践
  • Swift开发者必备:OpenAIKit客户端集成与API调用实战指南
  • 【SaaS产品黏性断层预警】:基于172家B2B企业的行为数据,识别6个Lovability衰减临界点
  • 如何选工程管理系统?2026年5月推荐五款产品评测对比夜间施工成本超支问题 - 品牌推荐
  • 2025-2026年北京代理记账公司推荐:五家中小企业降本增效避免隐性收费的产品口碑好的评测注意事项 - 品牌推荐
  • 小驴西藏旅游网站(10018)
  • 2026地暖垫层水泥发泡设备靠谱推荐:水泥发泡施工机械/水泥发泡施工设备/水泥发泡机械设备/水泥发泡机设备/水泥发泡设备/选择指南 - 优质品牌商家
  • Windows平台即时通讯防撤回技术深度解析与企业级应用方案
  • 2025-2026年国内充电桩加盟品牌推荐:十大厂家口碑好评测乡镇推广避免选址失误注意事项 - 品牌推荐
  • Axure中文界面全攻略:告别英文菜单,拥抱母语设计体验
  • Kubernetes节点管理与故障排查
  • ElevenLabs IVR语音制作正在淘汰传统TTS方案?头部金融客户已将平均通话时长缩短31%,你还在手动剪辑吗?
  • 量子互联网节点混合程序执行挑战与Qoala架构解析
  • Arm A-profile架构寄存器设计与安全隔离机制详解
  • 2025-2026年国内充电桩加盟品牌推荐:十大厂家排名评测产品特点与适用场景指南 - 品牌推荐
  • NotebookLM + Hugging Face协同作战:NLP任务交付周期压缩68%的实证方法论
  • 2025-2026年上海新房项目推荐:五大楼盘评测解析投资自住两相宜场景与注意事项 - 品牌推荐
  • 保姆级教程:用安信可RG-02网关和TTN平台,5分钟搞定LoRaWAN节点数据收发