三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

内网开发福音:保姆级教程,用一台能上网的Ubuntu搞定另一台机器的PostgreSQL 14离线安装

内网开发福音:保姆级教程,用一台能上网的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 wget

apt-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 update

2.2 确定要安装的版本

检查可用的PostgreSQL版本:

apt-cache show postgresql | grep Version

典型输出:

Version: 14+243.pgdg20.04+1 Version: 12+214ubuntu0.1 Version: 12+214

2.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 安装顺序与依赖处理

在内网机器上按特定顺序安装:

  1. 先安装keyring:

    sudo dpkg -i pgdg-keyring_*.deb
  2. 安装common包:

    sudo dpkg -i postgresql-client-common_*.deb sudo dpkg -i postgresql-common_*.deb
  3. 处理依赖:

    sudo apt --fix-broken install
  4. 安装主程序:

    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-8

4. 验证与优化配置

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.conf

4.3 性能调优建议

根据内存调整配置:

sudo nano /etc/postgresql/14/main/postgresql.conf

推荐参数(4GB内存机器):

shared_buffers = 1GB effective_cache_size = 3GB maintenance_work_mem = 256MB

5. 高级技巧与自动化方案

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)" done

5.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 update

5.3 容器化方案

对于需要频繁部署的场景,考虑使用Docker:

# 在上网机器上拉取镜像 docker pull postgres:14 # 保存镜像 docker save postgres:14 -o postgres14.tar # 在内网机器加载 docker load -i postgres14.tar
← 返回列表