Linux离线环境实战:PostgreSQL与PostGIS一站式部署指南
1. 离线环境部署前的准备工作在开始部署之前我们需要先了解几个关键点。离线环境意味着服务器无法连接互联网所有依赖包都需要提前下载并传输到目标机器。这就像要去一个没有超市的荒岛露营必须把所有的食物和工具都准备好带过去。首先检查系统版本这个很重要因为不同Linux发行版的包管理器和依赖项可能不同。执行以下命令查看系统信息cat /etc/os-release uname -a我建议创建一个专门的目录来存放所有安装包比如/opt/offline_packages。这样便于管理也不会弄乱系统目录。把所有需要的安装包按类别分好子目录postgresql存放数据库主程序包postgis存放地理信息扩展包dependencies存放所有依赖包tools存放编译工具链特别注意在传输文件到离线服务器时建议使用md5sum或sha256sum校验文件完整性。我曾经遇到过因为文件传输损坏导致安装失败的情况排查了很久才发现是文件传输过程中出了问题。2. 编译工具链与基础依赖安装没有编译器就像没有螺丝刀想组装家具一样困难。在离线环境中我们需要先搭建完整的编译环境。2.1 安装GCC工具链GCC是编译PostgreSQL的必备工具。离线安装GCC需要准备以下RPM包以CentOS为例gccgcc-cmakeglibc-develglibc-headerskernel-headerslibgomplibmpcmpfrcpp把这些包都放在/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 --version3. 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 start3.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 restart4. 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 install4.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 install4.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 install4.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 install5. 配置与验证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然后更新动态链接库缓存ldconfig5.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的错误说明动态链接库路径有问题。解决方法确认库文件确实存在于/usr/local/xxx/lib目录检查/etc/ld.so.conf是否包含正确路径执行ldconfig更新缓存6.2 编译失败处理编译过程中如果失败可以尝试查看config.log文件获取详细错误信息确保所有依赖库都已正确安装清理编译目录后重新configure和make6.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 storage7. 自动化部署脚本为了简化重复部署过程可以创建一个安装脚本#!/bin/bash # 定义安装目录和版本 PG_HOME/usr/local/postgresql PG_VERSION12.6 POSTGIS_VERSION3.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.coloradmin.cn/o/2526693.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!