Centos 7、凝思系统环境下离线安装PostgreSQL11+Postgis2.5.2


Tips:参考文章
Linux CentOS7 离线安装 PostgreSQL 9.6.10(源码编译)
CENTOS7 离线安装(源码编译)POSTGIS

0. 安装装备

0.1 安装环境准备

  • 系统环境:Centos 7 或者凝思 6.0.80
  • 数据库:PostgreSQL 11
  • Postgis:2.5.2

0.2 下载安装包

由于是在离线情况下安装,所涉及的安装包和依赖包都需要提前下载好,下面是所需要的安装包。

PostgreSQL-11.0:http://www.postgresql.org/ftp/source/
Postgis-2.5.2:http://www.postgis.net/stuff/
geo-3.7.1:http://download.osgeo.org/geos/
gdal-2.4.1:http://download.osgeo.org/gdal/2.4.1/
proj-5.2.0:http://download.osgeo.org/proj/
libiconv-1.16.0:https://ftp.gnu.org/pub/gnu/libiconv/
libxml2-2.9.1:http://xmlsoft.org/sources/
json-c-json-c-0.13.1-20180305:https://github.com/json-c/json-c/releases

将这些包拷贝到服务器中,习惯性放到/usr/local目录下。

如果这里是在 CentOS 里面安装,还需要安装一些其他的安装包。如下图所示:(下载地址:http://mirrors.aliyun.com/centos/7/os/x86_64/Packages/

同样将这些包上传到服务器中。

1. PostgreSQL11 在线安装

1.1 安装 PostgreSQL 相关依赖

如果是 CentOS 系统,先安装所有的依赖 RPM 包,进入到 RPM 包所在目录,执行下面的命令,全部安装。

# 直接执行命令
rpm -Uvh *.rpm --nodeps --force

安装结束后,通过gcc -vg++ -v命令查看是否已经安装成功。

Tips:凝思系统这些依赖不需要装,已经具备,有可能是凝思自带的,也有可能是我们运维人员已经提前初始化,如果你是凝思系统,检查一下有没有这些依赖,如果没有,请自行找依赖安装,RPM 安装会有问题,亲测。

1.2 安装 PostgreSQL

1.2.1 创建安装目录

  1. 将安装包postgresql-11.0.tar.gz解压
[root@localhost local]# tar -xvf postgresql-11.0.tar.gz
  1. 解压后进入到 postgresql-11.0 目录下,配置安装环境
[root@localhost postgresql-11.0]# ./configure --prefix=/usr/local/postgresql
  1. 安装环境配置结束后,使用makemake intall命令进行安装
[root@localhost postgresql-11.0]# make && make install

Tips:安装结束后,可以到/usr/local/postgresql目录下查看一下,已经生产对应的文件夹和文件

  1. 安装结束后创建 postgres 用户和用户组
# 创建用户组
[root@localhost postgresql-11.0]# groupadd postgres
# 创建用户
[root@localhost postgresql-11.0]# useradd -g postgres postgres
# 查看创建情况
[root@localhost postgresql-11.0]# id postgres
# 为用户设置密码(需要数据两次)
[root@localhost postgresql-11.0]# passwd postgres
  1. 创建数据主目录和所有者,需要在/usr/local/postgresql/目录下创建数据主目录
# 进入/pgsql/postgresql/目录
[root@localhost postgresql-11.0]# cd /pgsql/postgresql
# 创建data目录
[root@localhost postgresql]# mkdir data
# 给data目录赋权
[root@localhost postgresql]# chown -R postgres:postgres /usr/local/postgresql
  1. 使用 root 用户配置环境变量,修改/etc/profile文件,添加内容如下:
# 将下面的内容复制到文件文件尾部并保存
export PGHOME=/usr/local/postgresql
export PGDATA=/usr/local/postgresql/data
export PATH=$PGHOME/bin:$PATH
# 修改结束后,让配置文件生效
[root@localhost postgres]# source /etc/profile
  1. 切换到 postgres 用户,并初始化数据库
# 切换用户
[root@localhost postgres]# su - postgres
# 进入用户目录
[postgres@localhost ~]# cd /usr/local/postgresql/bin
# 执行初始化命令
[postgres@localhost bin]# initdb

Tips:凝思系统这里存在一个编码问题,因为凝思系统本身是国产的系统,使用默认编码的是 GBK,这里需要配置一下编码,修改/etc/profile文件,添加一行export LC_ALL="zh_CN.UTF-8",再执行source /etc/profile文件应用一下,重新执行initdb操作。

  1. 修改配置文件postgresql.confpg_hba.conf
  • 进入到这两个文件所在的目录
[postgres@localhost postgres]# cd /usr/local/postgresql/data/
  • 修改配置文件postgresql.conf
[postgres@localhost data]# vim postgresql.conf

找到如图所示的内容:

listen_addresses = 'localhost'改为listen_addresses = '*',并将前面的注释去掉,让配置能够生效。

  • 修改配置文件pg_hba.conf
[postgres@localhost data]# vim pg_hba.conf

找到如图所示的内容:

IPv4 local connections:下加一行内容如下:

host    all             all             0.0.0.0/0               md5

Tips:到这里 PostgreSQL 就安装结束了,使用 postgres 用户进入的/usr/local/postgresql/bin目录下,使用pg_ctl -D /usr/local/postgresql/data -l logfile start命令启动数据库

1.2.2 配置数据库访问

使用 postgres 用户进入/usr/local/postgresql/bin目录下,通过psql命令,配置数据库。(此时一定要切换到 postgres 用户)

[postgres@localhost ~]# psql

## 创建数据访问用户和密码
postgres=# \password
Enter new password:
Enter it again:
postgres=# ALTER ROLE root SUPERUSER;
ALTER ROLE

## 创建数据库(可以后续用Navicat连接后创建)
postgres=# create database testdb;
CREATE DATABASE

## 退出命令行窗口
postgres=# \q

此时就可以用刚才修改后的密码登录数据库了。命令格式为:

[postgres@localhost ~]# psql -U postgres -d xny -h 127.0.0.1

注意:这里需要在 postgres 用户下操作,切换到 root 用户是用不了 psql 命令的!!!

1.3 开机自启动

Tips:在凝思系统中,下面的设置没有生效,具体原因还不清楚。如果对启动命令和重启有太高要求的可以不设置,使用pg_ctl -D /usr/local/postgresql/data -l logfile start完全够用,将start改成stoprestart也可以实现停止和重启操作。

PostgreSQL 的开机自启动脚本位于 PostgreSQL 源码目录的contrib/start-scripts路径下。

  1. 进入源码脚本目录
[root@localhost ~]# cd /usr/local/postgresql-11.0/contrib/start-scripts
  1. 找到文件名为linux的脚本。修改脚本的执行权限
[root@localhost start-scripts]# chmod a+x linux
  1. 将脚本文件复制一份到/etc/init.d/目录下
[root@localhost start-scripts]# cp linux /etc/init.d/postgresql
  1. 修改文件内容,将prefixPGDATA修改为一下内容
prefix=/usr/local/postgresql
PGDATA="/usr/local/postgresql/data"
  1. 设置 postgresql 服务开机自启动
[root@localhost init.d]# chkconfig --add postgresql

1.4 开放端口

Tips:开放端口的两种方式,第一种是开放指定的端口,第二种就是简单粗暴的直接关闭防火墙。

1.4.1 开放指定端口

PostgreSQL 的默认端口是 5432,可以通过修改防火墙配置文件实现。执行命令如下:

# 执行命令开放5432端口(如果这里需要开通一个范围内的端口可以写为:--add-port=5000-5432/tcp)
[root@localhost ~]# firewall-cmd --permanent --add-port=5432/tcp
# 重启防火墙生效
[root@localhost ~]# firewall-cmd --reload

这里使用--permanent是持久化,不会因为系统重启或者防火墙重启导致配置丢失。

执行结束后可以通过以下命令查看端口开放情况。

# 查看防火墙开通的所有端口列表
[root@localhost ~]# firewall-cmd --permanent --list-ports
# 查看指定端口开通情况,未开启返回值:no,已开启返回值:yes
[root@localhost ~]# firewall-cmd --query-port=3306/tcp

1.4.2 关闭防火墙

直接执行systemctl stop firewalld命令,关闭防火墙即可,在自己的测试环境可以这样做,但是在生产环境下,这种方式不推荐,存在安全隐患。

2. 安装 Postgis

Tips:如果项目中有用到 postgis 需要安装,如果没用到,就不用折腾了,还是挺麻烦的。

2.1 安装 Postgis 依赖

Tips:在安装依赖的时候,都需要使用--prefix指定安装目录,这个目录可以自定义,但是需要自己记住这个位置,后面在安装 Postgis 的时候,需要指定各个依赖所在的目录位置。

  1. 安装 gdal
tar -xvf gdal-2.4.1.tar.gz
cd gdal-2.4.1
./configure --prefix=/usr/local/gdal
make
make install
  1. 安装 geos
tar -jxvf geos-3.7.1.tar.bz2
cd geos-3.7.1
./configure --prefix=/usr/local/geos
make
make install
  1. 安装 proj
tar -xvf proj-5.2.0.tar.gz
cd proj-5.2.0
./configure --prefix=/usr/local/proj
make
make install
  1. 安装 libiconv
tar -xvf libiconv-1.16.tar.gz
cd libiconv-1.16
./configure --prefix=/usr/local/libiconv
make
make install
  1. 安装 libxml2
tar -xvf libxml2-2.9.1.tar.gz
cd libxml2-2.9.1
./configure --prefix=/usr/local/libxml2
make
make install
  1. 安装 josn-c
tar -xvf json-c-json-c-0.13.1-20180305.tar.gz
cd json-c-json-c-0.13.1-20180305
./configure --prefix=/usr/local/jsonc
make
make install

Tips:到这里依赖安装完成,安装 gdal 比较慢,需要耐心等待,每个依赖安装结束后,最好到对应的安装目录下检查是否安装成功。

2.2 配置 LD 信息

/etc/ld.so.conf.d目录下新建每个依赖的配置文件,并在配置文件中添加对应依赖lib目录的全路径,配置文件的名称可以自定义。下面一 gdal 为例,后面的其他依赖采用相同方式配置即可。

cd /etc/ld.so.conf.d
vim gdal.conf
# 在文件中输入内容如下,输入后直接保存,/usr/local/gdal是上面安装过程中--prefix指定的安装目录,lib是安装后生成的lib目录
/usr/local/gdal/lib

Tips:安装上述步骤分别添加 geos、proj、jsonc、libiconv、libxml2 的 conf 文件,并编写配置文件的内容。

文件都编写结束后,执行ldconfig命令,类似有加载这些配置文件,让其生效。

2.3 安装 Postgis

执行如下命令

tar -xvf postgis-2.5.2.tar.gz
cd postgis-2.5.2
./configure --with-pgconfig=/usr/local/postgresql/bin/pg_config --with-geosconfig=/usr/local/geos/bin/geos-config --with-gdalconfig=/usr/local/gdal/bin/gdal-config --with-xml2config=/usr/local/libxml2/bin/xml2-config --with-projdir=/usr/local/proj --with-jsondir=/usr/local/jsonc --with-libiconv=/usr/local/libiconv
make
make install

执行./configure结束后,会有以下的提示信息,但是需要注意 proj4 version 的版本我们用的 52,不是图中的 62。

执行make && make install命令后,会有以下结果,表示安装成功。

Tips:安装依赖都成功后,基本安装 Postgis 基本就没有太大问题。

2.4 补充安装数据库的拓展模块 fuzzystrmatch

执行下面的命令,补充安装数据库的拓展模块fuzzystrmatch

cd /usr/local/postgresql-11.0/contrib/fuzzystrmatch
make
make install

2.5 测试 postgis 是否安装成功

  1. 进入数据库终端,测试空间数据库是否能够创建成功。
# 切换到postgres用户
su - postgres
# 进入数据库
psql
# 创建一个测试数据库
create database gistest;
# 切换到gistest数据库
\c gistest
# 显示gistest已有的拓展模块
\dx

  1. 查看已安装拓展
SELECT name, default_version,installed_version FROM pg_available_extensions WHERE name LIKE 'postgis%' or name LIKE 'address%';
  1. 为 gistest 数据库增加空间拓展
CREATE EXTENSION postgis;
CREATE EXTENSION fuzzystrmatch;
CREATE EXTENSION postgis_tiger_geocoder;
CREATE EXTENSION address_standardizer;
CREATE EXTENSION postgis_topology;
  1. 查看空间是否拓展成功
\dx

2.6 可能报错信息及处理

报错信息如下:

could not load library "/usr/local/postgresql/lib/postgis-2.5.so":libgeos_c.so.1:cannot share object file: no such file or directory

解决方案:

cd /home/work/postgresql/lib/
ldd postgis-2.5.so

从图上可以看到libgeos_c.so.1 => not found信息。

缺少了libgeos_c.so.1这个文件。但是该文件在安装依赖后同步安装,直接拷贝到postgis-2.5.so所在的目录即可。

cp /usr/local/geos/lib/libgeos_c.so.1 /usr/local/postgresql/lib/

文章作者: 程序猿洞晓
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 程序猿洞晓 !
评论
 上一篇
SpringCloudAlibaba中Nacos注册中心对yml文件和properties文件处理方式 SpringCloudAlibaba中Nacos注册中心对yml文件和properties文件处理方式
微服务应用很广,之前使用Spring Cloud组件,因为其内的很多组件几年前都已经停止更新,Spring Cloud Alibaba应运而出,提供了很好的解决方案,现在基本涉及微服务都避不开Spring Cloud Alibaba,而Nacos就是其中的重要组件之一。
2024-04-26
下一篇 
nginx基础学习(八):Nginx内网环境离线安装全过程 nginx基础学习(八):Nginx内网环境离线安装全过程
内网环境安装nginx,yum命令没法使用,nginx所需要的依赖都需要手动安装,很是麻烦,但是又不可避免,刚好经历了一次,在参考网上资料的情况下,成功安装,特记录以备以后使用。
2023-10-10
  目录