声 明1 : 本人才疏学浅,用郭德纲的话说“我是一个小学生”,如有错误,欢迎讨论,请勿谩骂^_^。
声 明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
缘起
客户的机器不支持外网,明明简单的部署也变得复杂起来了,本文就是用来记录离线部署的一些探索过程,For Me And For You like me。
软件安装
Postgresql安装(源码安装方式)
参考资料:《Postgresql修炼之道 从小工到专家》
参考博文:传送门
参考官方帮助:传送门(认真阅读环境要求,安装步骤等信息)
参考博文:快速入门PostgreSQL应用开发与管理 - 1 如何搭建一套学习、开发PostgreSQL的环境
-
下载源码包:传送门
-
拷贝源码包
postgresql-9.4.21.tar.gz
到目标机器,并解压,然后删除压缩包文件# 拷贝源码包到/usr/local/src # cd到指定目录 cd /usr/local/src # 解压源码包 tar -zxvf postgresql-9.4.21.tar.gz
-
在A机器(可以连外网)上下载依赖包
# 安装make apt -d install make # 安装gcc apt -d install gcc # 安装g++ apt -d install g++ # 安装readline apt -d install libreadline-dev # 安装zlib apt -d install zlib1g apt -d install zlib1g.dev
这些包都被缓存在
/var/cache/apt/archives/
目录,可以利用打包命令将其打包,命令如下:
tar -czvf pg-packages.tar.gz *
-
拷贝下载好的依赖包拷贝到B机器(可以连内网)
# 拷贝 pg-packages.tar.gz文件到/var/cache/apt/archives目录,当然了你也可以拷贝到其他目录 # cd到/var/cache/apt/archives目录 # 解压文件 tar -zxvf pg-packages.tar.gz # 删除压缩包文件 rm -rf pg-packages.tar.gz # 安装目录下的所有deb包 dpkg -i *.deb # 执行如下命令确认是否执行成功,输出0为执行成功 echo $?
-
安装
libxml
包,这块参考下面PostGIS的安装依赖包的过程。安装完后在/etc/profile
里配置环境变量XML2_CONFIG
-
在B机器上执行
./configure
检查# cd到postgresql-9.4.21目录 cd postgresql-9.4.21 # 执行 ./configure查看当前环境是否支持安装,如果想用sde,这块的参数是必须的 ./configure --with-libxml \ XML2_CONFIG=/opt/libxml2-2.9.0/bin/xml2-config # 执行如下命令确认是否执行成功,输出0为执行成功 echo $?
-
执行
make
编译
-
执行
make install
安装
-
添加用户postgres
# 添加用户postgres adduser postgres # 创建目录 /usr/local/pgsql/data mkdir /usr/local/pgsql/data # 修改目录的所有者(这块建议使用root用户修改data目录的权限,chmod 777 /usr/local/pgsql/data) chown postgres /usr/local/pgsql/data # 使用root用户,修改data目录的权限 chmod 700 -R /usr/local/pgsql/data # 切换到用户postgres su - postgres # 初始化数据库 /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data # 启动数据库服务 /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 & # 创建数据库test /usr/local/pgsql/bin/createdb test # 连接数据库 /usr/local/pgsql/bin/psql test
大功告成,O(∩_∩)O哈哈~
-
安装Contrib目录下的工具
# 进入到postgresql目录下的contrib目录 cd contrib # 编译 make # 安装 make install
-
简单配置
# 设置PostgreSQL可执行文件的路径: PATH=/usr/local/pgsql/bin:$PATH export PATH # 设置共享库的路径: LD_LIBRARY_PATH=/usr/local/pgsql/lib export LD_LIBRARY_PATH
如果你想让以上配置对所有的用户生效,可以把下面的内容加到/etc/profile文件中
注:初次定义环境变量不需要使用:$
变量名连接,网上很多的教程都会在后面加一个:$LD_LIBRARY_PATH
,这种其实是不对的。export PATH=/usr/local/pgsql/bin:$PATH export LD_LIBRARY_PATH=/usr/local/pgsql/lib export PGDATA=/usr/local/pgsql/data
执行
source /etc/profile
生效环境变量,执行echo $变量名
输出环境变量,看是否生效# 输入如下命令,测试是否环境变量生效 echo $PGDATA
避免重启之后环境变量失效,编辑
~/.bashrc
文件# 编辑文件 vi ~/.bashrc # 按字母i或者a进入插入模式,插入如下内容 source /etc/profile # 按Esc键,输入:wq三个字符保存退出
Postgresql配置
-
修改监听的IP和端口
# 修改配置文件postgresql.conf,如果找不到可以使用命令:find / -name postgresql.conf 查找 vi /etc/postgresql/10/main/ postgresql.conf # 将 #listen_addresses = ‘localhost’ 的注释去掉并改为 listen_addresses = ‘*’ # 修改max_connections按需求更改,默认最大支持100个连接。修改之后保存并退出。
-
修改配置pg_hba.conf文件
# 1.修改配置文件 pg_hba.conf,如果找不到可以使用命令:find / -name pg_hba.conf 查找 vi /etc/postgresql/10/main/ pg_hba.conf # 在最后一行添加,然后保存并退出(按Esc+:wq!) host all all 0.0.0.0/0 trust
-
日志文件配置
# 开启日志收集 logging_collector = on # 日志的记录一般使用默认值就可以了 log_directory = 'pg_log' # 记录查询时间超过1000毫秒的sql语句 log_min_duration_statement = 1000
-
开机启动配置:
参考《Linux下PostgreSQL开机启动配置方法》
参考官方帮助:https://www.postgresql.org/docs/9.4/server-start.html# 编辑/etc/rc.local文件,按i进入插入模式 vi /etc/rc.local # 插入如下内容,引号里的路径替换成你安装对应的路径 su postgres -c '/opt/pgsql-9.4.5/bin/pg-ctl start -D /opt/pgsql-9.4.5/data -m fast'
常用命令
位于pg的安装目录下的bin
文件夹下有个pg_ctl
的文件,在Postgres用户下执行which pg_ctl
命令,如果找不到pg_ctl
命令的路径的话,可以使用ln -s /opt/pgsql-9.4.5/bin/pg_ctl /usr/local/bin/pg_ctl
创建pg_ctl的软链接文件。
下面是pg_ctl的使用方法,实际使用的过程中可以执行pg_ctl --help
查看详细的帮助。
pg_ctl start [-w] [-s] [-D datadir] [-l filename] [-o options] [-p path]
pg_ctl stop [-W] [-s] [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ]
pg_ctl restart [-w] [-s] [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ] [-o options]
pg_ctl reload [-s] [-D datadir]
pg_ctl status [-D datadir]
pg_ctl kill [signal_name] [process_id]
pg_ctl register [-N servicename] [-U username] [-P password] [-D datadir] [-w] [-o options]
pg_ctl unregister [-N servicename]
PostGIS安装(源码安装)
PostgreSQL和Postgis的对应关系表
参考博文:传送门(非常感谢这位同学^_^)
参考官方帮助:传送门
像PostgreSQL、make、gcc等上面安装了我就不赘述了,这块主要说一下需要安装的其它依赖包,这块以源码编译安装为例,当然了你如果觉得麻烦,也可以像我上面那样,用apt的方式下缓存好,然后拷贝过来一dpkg的方式安装。
个人心得:下载的依赖包有时可能会编译失败,编译安装的过程需要有足够的耐心。利用百度、谷歌查询相关问题,如果安装的包版本太低编译不过去,可以考虑换个新一点的安装包,遇到实在解决不了的问题可以去StackOverflow等论坛进行提问。
-
Proj4 安装,要求安装版本
>=4.6.0
# 这块我下载的是proj-4.9.2.tar.gz,并拷贝到B机器的/usr/local/src目录 # 进入/usr/local/src目录 cd /usr/local/src # 解压 tar -zxvf proj-4.9.2.tar.gz # 进入解压好的目录 cd proj-4.9.2/ # 检查,可以配置安装路径 --prefix=/opt/proj-4.9.2 ./congigure # 编译 make # 安装 make install
-
Geos安装,要求安装版本
>=3.3
tar -jxvf geos-3.5.1.tar.bz2 cd geos-3.5.1/ ./configure --prefix=/opt/geos-3.5.1 make make install
-
LibXML2安装,要求安装版本
>=2.5.x
tar -zxvf libxml2-2.9.0.tar.gz cd libxml2-2.9.0/ ./configure --prefix=/opt/libxml2-2.9.0 make make install
备注:这块编译会报错:
cannot remove ‘libtoolT’:No such file or directory
解决方法:编辑configure文件vim configure
,在vim的一般模式下输入/
+RM "$cfgfile"
进行搜索匹配,按i
进入插入模式,将$RM "$cfgfile"
替换成$RM -f "$cfgfile"
,然后按Esc
回到一般模式,输入:wq
保存退出。 -
GDAL安装,要求安装版本>=1.8
tar -zxvf gdal-2.4.0.tar.gz cd gdal-2.4.0/ ./configure --prefix=/opt/gdal-2.4.0 make make install
-
JSON-C安装,要求安装版本>=0.9
tar -zxvf json-c-json-c-0.13.1-20180305.tar.gz cd json-c-json-c-0.13.1-20180305/ ./configure --prefix=/opt/json-c-0.13.1 make make install
-
PostGIS 安装
tar xvfz postgis-2.4.8dev.tar.gz cd postgis-2.4.8dev # 需要指定依赖包的位置,直接./configure可能会有问题 ./configure --prefix=/opt/postgis-2.2.8 \ --with-pgconfig=/usr/local/pgsql/bin/pg_config \ --with-gdalconfig=/opt/gdal-2.4.0/bin/gdal-config \ --with-geosconfig=/opt/geos-3.5.1/bin/geos-config \ --with-xml2config=/opt/libxml2-2.9.0/bin/xml2-config \ --with-projdir=/opt/proj-4.9.2 \ --with-jsondir=/opt/json-c-0.13.1 make make install
可能会遇到如下错误:
`autoheader' is missing on your system recipe for target ‘config.h.in’ failed
遇到此错误只需
touch config.h.in
即可解决。 -
创建PostGIS的扩展
shell:sudo -u postgres psql -d gis -c 'CREATE EXTENSION postgis;' sudo -u postgres psql -d gis -c 'CREATE EXTENSION postgis_topology;'
psql:
闭坑指南:
-
ERROR: could not load library "/usr/local/pgsql/lib/postgis-2.2.so": libgeos_c.so.1: cannot open shared object file: No such file or directory
原因:
解决方案:参考博文# 参考上面json-c的路径,拷贝到了缺失的文件到目录/lib/x86_64-linux-gnu/ cp /opt/geos-3.5.1/lib/libgeos_c.so.1 /lib/x86_64-linux-gnu/ cp /opt/proj-4.9.2/lib/libproj.so.9 /lib/x86_64-linux-gnu/
-
lwin_geojson.c:22:40: fatal error: json-c/json_object_private.h: No such file or directory
解决方案:cd /usr/include sudo mkdir json sudo cp /usr/local/include/json-c/* /usr/include/json/
-
ERROR: could not load library "/usr/local/pgsql/lib/rtpostgis-2.2.so": libgdal.so.20: cannot open shared object file: No such file or directory
解决方案:cp /opt/gdal-2.4.0/lib/libgdal.so.20 /lib/x86_64-linux-gnu/
创建ArcSDE数据库
- 确认当前ArcGIS支持的Postgresql和PostGIS版本,ArcGIS 支持的PostgreSQL版本
- 拷贝
C:\Program Files (x86)\ArcGIS\Desktop10.4\DatabaseSupport\PostgreSQL\9.4\Linux64
目录下的so文件到PKGLIBDIR
变量所指向的目录中(执行pg_config
命令获取)
- 使用GP工具Create Enterprise Geodatabase创建企业级地理数据库(具体参数略)