内网开发福音:保姆级教程,用一台能上网的Ubuntu搞定另一台机器的PostgreSQL 14离线安装
内网开发福音:保姆级教程,用一台能上网的Ubuntu搞定另一台机器的PostgreSQL 14离线安装
在企业的开发和生产环境中,内网隔离是常见的安全策略。但这也带来了一个现实问题:如何在内网机器上安装像PostgreSQL这样的关键数据库服务?本文将介绍一种高效的双机协作方案,利用一台能上网的Ubuntu机器为内网环境准备完整的PostgreSQL 14离线安装包。
1. 准备工作与环境配置
1.1 确认系统版本
首先需要确保两台机器使用相同版本的Ubuntu系统。可以通过以下命令检查:
lsb_release -a输出示例:
No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.4 LTS Release: 20.04 Codename: focal关键点:
- 确保两台机器的
Codename一致(如都是focal) - 推荐使用LTS版本(20.04或22.04)
1.2 安装必要工具
在上网机器上安装后续操作所需的工具:
sudo apt update sudo apt install -y apt-rdepends wgetapt-rdepends是分析依赖关系的关键工具,而wget用于下载PG仓库密钥。
2. 构建完整的离线安装包
2.1 添加PostgreSQL官方仓库
在上网机器上执行以下命令添加PG官方仓库:
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - sudo apt update2.2 确定要安装的版本
检查可用的PostgreSQL版本:
apt-cache show postgresql | grep Version典型输出:
Version: 14+243.pgdg20.04+1 Version: 12+214ubuntu0.1 Version: 12+2142.3 分析依赖关系
使用apt-rdepends分析完整依赖树:
apt-rdepends postgresql-14 > dependencies.txt关键依赖通常包括:
- postgresql-client-14
- postgresql-common
- libpq5
- pgdg-keyring
2.4 下载所有依赖包
创建下载脚本download.sh:
#!/bin/bash packages=( postgresql-14 postgresql-client-14 postgresql-common postgresql-client-common libpq5 pgdg-keyring ) for pkg in "${packages[@]}"; do apt download $pkg done运行脚本后,当前目录会生成所有需要的.deb文件。
3. 离线安装与问题排查
3.1 传输文件到内网机器
将下载的.deb文件打包传输:
tar czvf pg14-offline.tar.gz *.deb然后通过U盘或内部文件共享服务将压缩包传输到内网机器。
3.2 安装顺序与依赖处理
在内网机器上按特定顺序安装:
先安装keyring:
sudo dpkg -i pgdg-keyring_*.deb安装common包:
sudo dpkg -i postgresql-client-common_*.deb sudo dpkg -i postgresql-common_*.deb处理依赖:
sudo apt --fix-broken install安装主程序:
sudo dpkg -i postgresql-client-14_*.deb sudo dpkg -i libpq5_*.deb sudo dpkg -i postgresql-14_*.deb
3.3 常见问题解决
问题1:缺少标准库依赖
解决方案:
sudo apt --fix-broken install问题2:locale配置警告
解决方法:
sudo locale-gen en_US.UTF-84. 验证与优化配置
4.1 验证安装
检查服务状态:
sudo systemctl status postgresql连接测试:
sudo -u postgres psql -c "SELECT version();"4.2 基础安全配置
修改postgres用户密码:
sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD 'your_password';"调整监听地址:
sudo sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/" /etc/postgresql/14/main/postgresql.conf4.3 性能调优建议
根据内存调整配置:
sudo nano /etc/postgresql/14/main/postgresql.conf推荐参数(4GB内存机器):
shared_buffers = 1GB effective_cache_size = 3GB maintenance_work_mem = 256MB5. 高级技巧与自动化方案
5.1 一键下载脚本
创建完整的下载脚本download_all.sh:
#!/bin/bash set -e # 获取所有依赖 deps=$(apt-rdepends postgresql-14 | grep -v "^ " | sort | uniq) # 下载所有包 for dep in $deps; do apt download $dep 2>/dev/null || echo "Skipping $dep (not found)" done5.2 制作本地仓库
更专业的做法是创建本地APT仓库:
sudo apt install -y dpkg-dev mkdir pg14-repo mv *.deb pg14-repo cd pg14-repo dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz在内网机器上添加源:
echo "deb [trusted=yes] file:/path/to/pg14-repo ./" | sudo tee /etc/apt/sources.list.d/pg14-local.list sudo apt update5.3 容器化方案
对于需要频繁部署的场景,考虑使用Docker:
# 在上网机器上拉取镜像 docker pull postgres:14 # 保存镜像 docker save postgres:14 -o postgres14.tar # 在内网机器加载 docker load -i postgres14.tar