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

Linux离线环境实战:PostgreSQL与PostGIS一站式部署指南

1. 离线环境部署前的准备工作

在开始部署之前,我们需要先了解几个关键点。离线环境意味着服务器无法连接互联网,所有依赖包都需要提前下载并传输到目标机器。这就像要去一个没有超市的荒岛露营,必须把所有的食物和工具都准备好带过去。

首先检查系统版本,这个很重要,因为不同Linux发行版的包管理器和依赖项可能不同。执行以下命令查看系统信息:

cat /etc/os-release uname -a

我建议创建一个专门的目录来存放所有安装包,比如/opt/offline_packages。这样便于管理,也不会弄乱系统目录。把所有需要的安装包按类别分好子目录:

  • postgresql:存放数据库主程序包
  • postgis:存放地理信息扩展包
  • dependencies:存放所有依赖包
  • tools:存放编译工具链

特别注意:在传输文件到离线服务器时,建议使用md5sumsha256sum校验文件完整性。我曾经遇到过因为文件传输损坏导致安装失败的情况,排查了很久才发现是文件传输过程中出了问题。

2. 编译工具链与基础依赖安装

没有编译器就像没有螺丝刀想组装家具一样困难。在离线环境中,我们需要先搭建完整的编译环境。

2.1 安装GCC工具链

GCC是编译PostgreSQL的必备工具。离线安装GCC需要准备以下RPM包(以CentOS为例):

  • gcc
  • gcc-c++
  • make
  • glibc-devel
  • glibc-headers
  • kernel-headers
  • libgomp
  • libmpc
  • mpfr
  • cpp

把这些包都放在/opt/offline_packages/tools/gcc目录下,然后执行:

cd /opt/offline_packages/tools/gcc rpm -Uvh *.rpm --nodeps --force

常见问题:如果遇到依赖错误,可以尝试先安装低版本的包。我在一台CentOS 7.5的机器上就遇到过这个问题,后来发现是某些包的版本过高导致的。

2.2 其他必要依赖

PostgreSQL还需要这些基础库:

# 安装readline开发包 rpm -ivh readline-devel-*.rpm # 安装zlib压缩库 rpm -ivh zlib-devel-*.rpm # 安装XML处理库 rpm -ivh libxml2-devel-*.rpm

安装完成后,验证编译器是否可用:

gcc --version g++ --version make --version

3. PostgreSQL数据库安装与配置

3.1 源码编译安装

我推荐使用源码安装而不是直接使用RPM包,因为这样可以在离线环境下更好地控制安装选项和路径。

首先解压PostgreSQL源码包:

tar -zxvf postgresql-12.6.tar.gz -C /opt cd /opt/postgresql-12.6

配置编译选项时,建议加上--with-libxml支持XML功能:

./configure --prefix=/usr/local/postgresql \ --with-libxml \ --with-openssl \ --with-perl \ --with-python

然后开始编译和安装:

make -j4 # 使用4个线程加速编译 make install

性能提示:编译时可以通过-j参数指定并行编译的线程数,通常设置为CPU核心数的1.5-2倍能获得最佳编译速度。

3.2 创建专用用户

为PostgreSQL创建专用系统用户是个好习惯:

groupadd postgres useradd -g postgres postgres passwd postgres # 设置密码

3.3 初始化数据库集群

切换到postgres用户并初始化数据库:

su - postgres /usr/local/postgresql/bin/initdb -D /usr/local/postgresql/data

初始化完成后,可以启动数据库服务:

/usr/local/postgresql/bin/pg_ctl -D /usr/local/postgresql/data -l logfile start

3.4 配置远程访问

修改配置文件允许远程连接:

vi /usr/local/postgresql/data/postgresql.conf

找到listen_addresses参数,修改为:

listen_addresses = '*'

然后修改客户端认证配置:

vi /usr/local/postgresql/data/pg_hba.conf

添加以下行允许所有IP通过密码连接:

host all all 0.0.0.0/0 md5

重启服务使配置生效:

/usr/local/postgresql/bin/pg_ctl -D /usr/local/postgresql/data restart

4. PostGIS地理信息扩展安装

PostGIS是PostgreSQL的空间数据库扩展,安装它需要先解决一系列依赖。

4.1 安装GEOS几何引擎

GEOS是PostGIS的核心依赖之一:

tar -jxvf geos-3.9.0.tar.bz2 -C /opt cd /opt/geos-3.9.0 ./configure --prefix=/usr/local/geos-3.9.0 make make install

4.2 安装PROJ坐标转换库

PROJ处理地图投影和坐标转换:

tar -zxvf proj-7.2.1.tar.gz -C /opt cd /opt/proj-7.2.1 ./configure --prefix=/usr/local/proj-7.2.1 make make install

4.3 安装GDAL地理数据抽象库

GDAL提供了丰富的地理数据格式支持:

tar -zxvf gdal-3.3.0.tar.gz -C /opt cd /opt/gdal-3.3.0 ./configure --prefix=/usr/local/gdal-3.3.0 \ --with-geos=/usr/local/geos-3.9.0/bin/geos-config \ --with-proj=/usr/local/proj-7.2.1 make make install

4.4 编译安装PostGIS

现在可以安装PostGIS本身了:

tar -zxvf postgis-3.1.2.tar.gz -C /opt cd /opt/postgis-3.1.2 ./configure --prefix=/usr/local/postgis \ --with-pgconfig=/usr/local/postgresql/bin/pg_config \ --with-geosconfig=/usr/local/geos-3.9.0/bin/geos-config \ --with-projdir=/usr/local/proj-7.2.1 \ --with-gdalconfig=/usr/local/gdal-3.3.0/bin/gdal-config make make install

5. 配置与验证

5.1 配置动态链接库路径

PostGIS安装后,需要确保PostgreSQL能找到所有的共享库:

vi /etc/ld.so.conf.d/postgis.conf

添加以下内容:

/usr/local/postgresql/lib /usr/local/geos-3.9.0/lib /usr/local/proj-7.2.1/lib /usr/local/gdal-3.3.0/lib

然后更新动态链接库缓存:

ldconfig

5.2 创建PostGIS扩展

连接到PostgreSQL并创建PostGIS扩展:

psql -U postgres CREATE DATABASE gisdb; \c gisdb CREATE EXTENSION postgis; CREATE EXTENSION postgis_topology;

5.3 功能验证

执行以下SQL验证PostGIS是否工作正常:

SELECT PostGIS_version(); SELECT ST_AsText(ST_Buffer(ST_GeomFromText('POINT(0 0)', 4326), 1));

如果能看到版本信息和缓冲后的几何图形,说明安装成功。

6. 常见问题排查

6.1 缺少共享库错误

如果遇到类似libgeos_c.so.1: cannot open shared object file的错误,说明动态链接库路径有问题。解决方法:

  1. 确认库文件确实存在于/usr/local/xxx/lib目录
  2. 检查/etc/ld.so.conf是否包含正确路径
  3. 执行ldconfig更新缓存

6.2 编译失败处理

编译过程中如果失败,可以尝试:

  1. 查看config.log文件获取详细错误信息
  2. 确保所有依赖库都已正确安装
  3. 清理编译目录后重新configure和make

6.3 性能优化建议

对于生产环境,建议调整以下PostgreSQL参数:

vi /usr/local/postgresql/data/postgresql.conf

调整以下参数:

shared_buffers = 4GB # 25% of total RAM effective_cache_size = 12GB # 75% of total RAM maintenance_work_mem = 1GB work_mem = 64MB random_page_cost = 1.1 # For SSD storage

7. 自动化部署脚本

为了简化重复部署过程,可以创建一个安装脚本:

#!/bin/bash # 定义安装目录和版本 PG_HOME="/usr/local/postgresql" PG_VERSION="12.6" POSTGIS_VERSION="3.1.2" # 安装PostgreSQL tar -zxvf postgresql-${PG_VERSION}.tar.gz -C /opt cd /opt/postgresql-${PG_VERSION} ./configure --prefix=${PG_HOME} --with-libxml make -j4 make install # 创建用户和数据库目录 groupadd postgres useradd -g postgres postgres mkdir -p ${PG_HOME}/data chown -R postgres:postgres ${PG_HOME} # 初始化数据库 su - postgres -c "${PG_HOME}/bin/initdb -D ${PG_HOME}/data" su - postgres -c "${PG_HOME}/bin/pg_ctl -D ${PG_HOME}/data -l logfile start" # 安装PostGIS依赖 install_geos() { tar -jxvf geos-3.9.0.tar.bz2 -C /opt cd /opt/geos-3.9.0 ./configure --prefix=/usr/local/geos-3.9.0 make && make install } # 类似地添加其他依赖安装函数... # 最后安装PostGIS tar -zxvf postgis-${POSTGIS_VERSION}.tar.gz -C /opt cd /opt/postgis-${POSTGIS_VERSION} ./configure --with-pgconfig=${PG_HOME}/bin/pg_config # 其他配置参数... make && make install

记得给脚本添加执行权限:

chmod +x install_postgresql_postgis.sh

在实际项目中,我发现把整个安装过程脚本化可以节省大量时间,特别是在需要部署多台服务器时。不过要注意,脚本需要根据实际环境调整路径和版本号。

http://www.jsqmd.com/news/655476/

相关文章:

  • 终极指南:3分钟彻底告别Windows音量弹窗干扰
  • 芯片时序验证:OpenSTA如何重塑开源EDA工具链
  • 如何用 importScripts 在子线程中引入并执行第三方脚本
  • 终极指南:如何高效使用unrpa工具提取Ren‘Py游戏资源文件
  • 免费开源窗口尺寸强制调整工具:突破Windows窗口限制的终极解决方案
  • 可靠的装修涂料厂家分享,装修涂料制造企业哪家多人选择 - 工业设备
  • 告别Designer!在VS2019里用Qt Creator高效编辑.ui文件的正确姿势
  • 别再只盯着PA效率了!聊聊5G基站功放里那个叫‘记忆效应’的捣蛋鬼
  • 别再只用AXI GPIO了!手把手教你用ZYNQ PS和MicroBlaze读写FPGA的BRAM(附Vivado 2023.1工程)
  • 如何用BIMP插件实现GIMP批量图像处理,效率提升10倍以上
  • 从交大本科到11408上岸:一位“摆烂”玩家的计算机考研逆袭复盘
  • 告别数据混乱!Qt Qml中ListModel、XmlListModel等5种数据模型实战对比与选型指南
  • Axure RP中文语言包:5分钟快速实现设计工具完全汉化
  • 说说广州专业做飘窗拆除的合规公司,哪家口碑好? - 工业推荐榜
  • 告别SSH频繁掉线:从原理到实战的保活配置全解析
  • Phi-3 Mini 128K效果展示:长小说理解与代码库分析真实案例
  • Windows平台PDF处理终极指南:Poppler for Windows免费开源工具
  • GLM-OCR极速体验:专为单卡优化的文档解析,支持4种解析模式
  • hdfs中的文件系统,也没有账号和密码,岂不是知道了网站就可以随意操作?
  • 性价比高的庄荣华律师团队服务,细聊服务不错的庄荣华律师团队 - 工业品牌热点
  • 告别配置迷茫!RTKNAVI v2.4.3b34 实时RTK解算,从串口到NTRIP的保姆级配置流程
  • 昇腾Mindie + mis-tei + dify + DeepSeek-R1-Distill-Qwen-32B-W8A8:一站式构建本地知识库智能问答系统
  • NLopt实战指南:从算法原理到工程应用
  • CUDA性能优化实战:解锁页锁定内存(Pinned Memory)的传输加速奥秘
  • 如何向开源社区提问?
  • Cursor Pro终极免费激活指南:如何永久解锁AI编程助手的高级功能
  • 【肌电信号去噪】基于matlab改进的小波阈值表面肌电信号去噪【含Matlab源码 15332期】
  • 总结能自动做会议总结的AI办公鼠标,费用及品牌推荐 - 工业推荐榜
  • 超越官方文档:用Jetson Nano和CSI摄像头打造你的第一个AI视觉项目
  • 008-智能体开发环境全攻略:从Python到LangChain的生态搭建