最近在做GIS分析,采集设备的经纬度点判断是否进出围栏以及是否产生道路偏移报警,在之前的文章有介绍过Windows下使用C#来实现,参考文章:利用Postgresql+Postgis进行空间地理信息分析(道路偏移,进出电子围栏等)_postgres 空间分析_大鱼>的博客-CSDN博客最近新做了一个物联网项目,采用的是Springboot+mongoDB+MySQL,所以考虑使用Linux服务器重新实现这个服务。此文只介绍Ubuntu下安装Postgresql与PostGIS环境。
执行命令:
sudo apt-cache search postgresql
我这边使用的是ubuntu 18.04,查看后发现目前支持postgresql-10
sudo apt-get install postgresql-10
执行安装命令后发现postgresql-common不能安装成功,查看报错信息为:postgresql-common not configured yet.
我们查看/var/lib/dpkg/status文件,找到Package:postgresql-common
如果其Status: install ok half-configured则将其改为install ok installed
然后再执行安装命令,如果是上述情况,此时应该是可以安装成功了。
执行安装脚本:
sudo apt-get install postgis
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,代表完成了密码的修改。
切换Linux:postgres用户
sudo su postgres
创建名一个数据库,根据自己的需要起名字
createdb postgis_24_sample
为数据库添加postgis支持。
脚本默认在/usr/share/postgresql目录下,自己可以找找
如果找不到上述目录文件,说明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
我们可以使用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 被注释掉,则去掉#注释,并将值修改为*
另外修改pg_hba.conf
sudo vim /etc/postgresql/10/main/pg_hba.conf
在文件中添加 host all all 0.0.0.0/0 trust
最后登录成功
最近启动完服务后总是意外关闭,查了日志发现很多权限异常问题。我想应该是我创建的数据库使用的是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
然后再切换到postgres用户重启
sudo -i -u postgres #切换到postgres用户
/usr/lib/postgresql/10/bin/pg_ctl restart -D /var/lib/postgresql/10/main #重启服务
然后执行pg_lsclusters命令后发现已经变为绿色,此时也能正常访问了