1.前言

最近在做GIS分析,采集设备的经纬度点判断是否进出围栏以及是否产生道路偏移报警,在之前的文章有介绍过Windows下使用C#来实现,参考文章:利用Postgresql+Postgis进行空间地理信息分析(道路偏移,进出电子围栏等)_postgres 空间分析_大鱼>的博客-最近新做了一个物联网项目,采用的是Springboot+mongoDB+MySQL,所以考虑使用Linux服务器重新实现这个服务。此文只介绍Ubuntu下安装Postgresql与PostGIS环境。

2.安装Postgresql

2.1.查看apt-get库中的软件版本支持

执行命令:

sudo apt-cache search postgresql

我这边使用的是ubuntu 18.04,查看后发现目前支持postgresql-10

2.2.执行安装命令

sudo apt-get install postgresql-10

2.3.postgresql-common not configured yet.错误处理

执行安装命令后发现postgresql-common不能安装成功,查看报错信息为:postgresql-common not configured yet.

Ubuntu 安装Postgresql与PostGIS_数据库

 我们查看/var/lib/dpkg/status文件,找到Package:postgresql-common

如果其Status: install ok half-configured则将其改为install ok installed

Ubuntu 安装Postgresql与PostGIS_postgresql_02

 然后再执行安装命令,如果是上述情况,此时应该是可以安装成功了。

3.安装postgis

执行安装脚本:

sudo apt-get install postgis

4.修改数据库默认用户名、密码

PostgreSQL数据库创建一个postgres用户作为数据库的管理员,密码随机,所以这里需要进行密码修改操作。

执行命令登录PostgreSQL:

sudo -u postgres psql

执行命令修改登录PostgreSQL密码:

alter user postgres with password '你的密码';

安装PostgreSQL后,会给创建一个Linux用户,这个用户一定要马上重置密码,否则很容易导致服务器被攻击,我的服务器之前就因为这个密码没有修改被安装了挖矿程序,费了很大劲才彻底清掉挖矿程序。

执行删除原有用户密码的命令:

sudo  passwd -d postgres

设置新密码命令:

sudo -u postgres passwd

随后系统会提示输入新密码:

Enter new UNIX password:

确认密码:

Retype new UNIX password:

最后提示passwd: password updated successfully,代表完成了密码的修改。

5.创建数据库并添加postgis

切换Linux:postgres用户

sudo su postgres

创建名一个数据库,根据自己的需要起名字

createdb postgis_24_sample

为数据库添加postgis支持。

脚本默认在/usr/share/postgresql目录下,自己可以找找

Ubuntu 安装Postgresql与PostGIS_sql_03

如果找不到上述目录文件,说明postgis安装失败或者先安装的postgis后安装的postgresql,所以卸载postgis服务,重新安装即可。 

卸载方法:

sudo apt-get purge 'postgis*'
sudo apt-get autoremove 'postgis*

然后执行sql脚本

psql -d postgis_24_sample -f /usr/share/postgresql/10/contrib/postgis-2.4/postgis.sql  
psql -d postgis_24_sample -f /usr/share/postgresql/10/contrib/postgis-2.4/spatial_ref_sys.sql

如果过程中提示下面的错误:
psql: could not connect to server: No such file or directory
 Is the server running locally and accepting
 connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

可以重启一下postgres服务,执行重启命令:

sudo service postgres restart

6.使用pgAdmin4连接数据库

我们可以使用pgAdmin4连接到服务器上的postgresql数据库,如果报下面的错误,则确认一下服务是否开启了远程连接。

错误提示:could not connect to server: Connection refused (0x0000274D/10061) Is the server running on host "124.223.60.234" and accepting TCP/IP connections on port 5432?
修改配置文件postgresql.conf:

sudo vim /etc/postgresql/10/main/postgresql.conf

如果listen_addresses 被注释掉,则去掉#注释,并将值修改为*

Ubuntu 安装Postgresql与PostGIS_重启_04

另外修改pg_hba.conf

sudo vim /etc/postgresql/10/main/pg_hba.conf

 在文件中添加 host all all 0.0.0.0/0 trust

Ubuntu 安装Postgresql与PostGIS_数据库_05

 最后登录成功

Ubuntu 安装Postgresql与PostGIS_ubuntu_06

7.问题处理

最近启动完服务后总是意外关闭,查了日志发现很多权限异常问题。我想应该是我创建的数据库使用的是Linux:postgres用户,所以使用root命令进行重启都无法让服务能够正常运行。

后续看到有网友这样处理的:

运行命令:

pg_lsclusters

 

我发现命令下面的都是红色的,说明权限不够

 于是乎我修改权限

sudo chmod 700 -R /var/lib/postgresql/10/main

使用postgres用户进行重启

sudo -i -u postgres  #切换到postgres用户
/usr/lib/postgresql/10/bin/pg_ctl restart -D /var/lib/postgresql/10/main #重启服务

然后发现“/etc/ssl/private/ssl-cert-snakeoil.key”也有权限问题,我按照指示的要求将权限修改为0600

Ubuntu 安装Postgresql与PostGIS_数据库_07

 然后再切换到postgres用户重启

sudo -i -u postgres  #切换到postgres用户
/usr/lib/postgresql/10/bin/pg_ctl restart -D /var/lib/postgresql/10/main #重启服务

然后执行pg_lsclusters命令后发现已经变为绿色,此时也能正常访问了

Ubuntu 安装Postgresql与PostGIS_postgresql_08