openeuler系统从源码搭建服务器(postgis篇)

本文详细介绍了如何在openeuler系统上搭建基于django的开发环境,特别是涉及了从源码安装python3.6.8、django3.2.12、postgresql14.0和postgis的过程,以及配置空间后端的步骤。主要目标是将原有的centos7后端迁移到openeuler,并实现空间位置和工程信息的一体化管理。

1 项目简介

目标:把原centos7后端迁移到openeuler。
后端简介:利用geodjango开发的工程管理平台后端,可以实现空间位置和工程信息的一体化管理。
主要模块:python3.6.8、django3.2.12、postgresql14.0、postgis、nginx。

2 搭建开发环境

2.1 安装python3.6.8

openeuler自带了python3.9,但不适合项目部署,需要安装3.6.8版本。由于欧拉系统yum安装的为3.9版本,因此只能通过源码安装python3.6.8。源码通过官网下载,下载解压后进入到解压目录,执行以下命令。

./configure
make && make install

configure后会提示可用python高性能模式,千万不要试,否则会进入make死循环。如果安装过程中提示缺少依赖包,yum安装即可。

2.2 安装django

(1)django是python的一个模块,安装django之前要确定系统上安装了python。linux系列系统都自带python,只需检查python版本即可。
查看python版本:

# python3
Python 3.6.8 

(2)安装django,安装正式版本django即可,通过pip安装。

pip3 install django==3.2.12 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

查看安装的django版本:

>>>import django
>>>print(django.get_version())
3.2.12

我安装的是3.2.12版本。
(3)安装sqlite3.9以上版本,系统自带的3.7版本太低,会报错。通过官网下载源码安装最新版。

wget https://www.sqlite.org/2022/sqlite-autoconf-3390400.tar.gz
tar xzf sqlite-autoconf-3390400.tar.gz
cd sqlite-autoconf-3390400

到这一步之后不要急着configure,需要手动增加编译项。此处不增加编译项并不会影响sqlite的安装和django项目的创建,但是会导致后续空间数据迁移时出错。

vim sqlite3.c
#define SQLITE_CORE 1                                                     
#define SQLITE_AMALGAMATION 1                                             
#ifndef SQLITE_PRIVATE                                                    
# define SQLITE_PRIVATE static                                            
#endif                                                                                                                                           
//新增编译项                                                                 
#define SQLITE_ENABLE_COLUMN_METADATA 1

完成对sqlite3.c文件的修改后即可进行安装操作。

./configure
make
make install
make clean

完成sqlite安装后,需添加环境变量,否则python无法找到新安装的sqlite。将/usr/local/lib添加至LD_LIBRARY_PATH:

vim /etc/profile
export LD_LIBRARY_PATH=/usr/local/lib

(4)创建django项目和app:

cd /usr
python3 -m django startproject mysite
cd mysite
python3 manage.py startapp gisapp

(5)完成此步骤后,django相关内容暂告一段落,settings.py文件配置后续再做介绍。

2.3 安装postgresql

(1)postgresql推荐源码安装,centos7平台利用yum安装的postgresql-14实际上是postgresql9.2,与项目需要的其它库存在不兼容情况,在应用中会各种报错。本项目安装的是14.0版本,源码在官网下载。
下载14.0源码(我的所有软件安装在了/usr/local文件夹):

cd /usr/local
wget https://ftp.postgresql.org/pub/source/v14.0/postgresql-14.0.tar.gz

(2)解压并cd至解压好的文件夹:

tar xzf postgresql-14.0.tar.gz
cd postgresql-14.0

(3)编译安装源码(make clean并非必须的,作用是清除编译安装过程文件):

./configure
make
su
make install
make clean

(4)若安装过程失败提示缺少readline和zlib,安装readline-devel和zlib-devel即可。

yum install readline-devel
yum install zlib-devel

(5)创建系统用户postgres,postgresql不能在root用户下操作,习惯性创建用户postgres,也可创建其它名字的用户。postgresql会自动创建一个同名数据库管理员账户和数据库。

adduser postgres

(6)创建data文件夹,并赋权限给postgres用户:

mkdir /usr/local/pgsql/data
<think>我们参考引用[2]和引用[3]的内容,因为用户使用的是OpenEuler系统,并且希望编译安装PostgreSQL安装PostGIS。引用[2]提供了在OpenEuler22.03上部署Postgresql10.5和PostGIS3.1的步骤,引用[3]则提供了在openEuler22.03上编译安装PostgreSQL15.6和PostGIS3.4.1的方法。根据用户需求,我们将重点放在编译安装PostgreSQL后如何安装PostGIS。注意,PostGIS依赖于多个地理空间库(如GEOS,PROJ,GDAL等),因此需要先安装这些依赖。步骤概述:1.安装PostGIS所需的系统依赖(包括geos,proj,gdal,json-c等)2.编译安装PostGIS3.在PostgreSQL数据库中创建PostGIS扩展详细步骤:一、安装依赖包根据引用[2]和[3],我们需要安装以下依赖:-geos-proj-gdal-json-c-libxml2-protobuf-c-sqlite-libtiff-libcurl-mpfr(proj依赖)可以使用yum安装部分依赖(如果OpenEuler的仓库中有的话),但有些可能需要编译安装。二、编译安装PostGIS下载PostGIS源代码,解压后进入目录,执行:./configuremakemakeinstall注意:configure时可能需要指定依赖库的位置,特别是如果依赖库不是安装在标准路径下。三、在PostgreSQL中启用PostGIS扩展以postgres用户登录数据库,执行:CREATEEXTENSIONpostgis;下面我们详细展开步骤。具体步骤:1.安装依赖库(以yum安装为主,部分可能需要编译安装)根据引用[2]:安装二维依赖包:4.1.1安装geos4.1.2安装gdal4.1.3安装proj4.1.4安装json-c但注意,引用[2]中这些依赖也是编译安装的。而引用[3]则详细列出了编译安装每个依赖的步骤。考虑到用户已经编译安装PostgreSQL,我们假设用户具备编译环境。因此,我们采用引用[3]的方法,但注意,如果OpenEuler的软件源中有这些包,也可以直接使用yum安装。例如,使用yum安装一些基础包(引用[2]):```bashyuminstall-ygccgcc-c++makecmakewgetopensslopenssl-develreadlinereadline-develzlibzlib-develbisonflexyuminstall-ygeosgeos-develprojproj-develgdalgdal-develjson-cjson-c-devellibxml2libxml2-develprotobuf-cprotobuf-c-develsqlitesqlite-devellibtifflibtiff-devellibcurllibcurl-develmpfrmpfr-devel```如果yum安装的版本满足要求,则可以直接使用。否则需要从源码编译安装。2.编译安装PostGISPostGIS官网下载源码(例如PostGIS3.4.1),然后:```bashtar-jxvfpostgis-3.4.1.tar.bz2cdpostgis-3.4.1./configure--with-pgconfig=/path/to/pg_config#这里pg_config是PostgreSQL安装目录下的bin目录中的工具,用于获取PostgreSQL安装信息makemakeinstall```注意:如果依赖库安装在非标准路径,需要在configure时指定路径,例如:```bash./configure--with-pgconfig=/usr/local/pgsql/bin/pg_config\--with-geosconfig=/usr/local/geos/bin/geos-config\--with-projdir=/usr/local/proj\--with-gdalconfig=/usr/local/gdal/bin/gdal-config```3.在PostgreSQL中启用PostGIS首先,确保PostgreSQL服务已经启动。然后,连接到目标数据库,执行:```sqlCREATEEXTENSIONpostgis;```验证安装:```sqlSELECTPostGIS_Version();```如果返回版本信息,则安装成功。注意:如果遇到问题,请检查PostgreSQL的共享库预加载设置(shared_preload_libraries)以及环境变量等。根据引用[1]中的验证方法,也可以查询已安装的扩展:```sqlSELECT*FROMpg_available_extensionsWHEREnameLIKE'postgis%';```相关问题:1.如何解决PostGIS安装过程中遇到的依赖库缺失问题?2.在OpenEuler系统上,使用yum安装PostGIS依赖包有哪些注意事项?3.如何配置PostgreSQL以支持PostGIS扩展?4.安装PostGIS后,如何升级PostGIS版本?5.PostGIS有哪些常用的空间函数?注意:以上步骤基于引用[2]和引用[3]整理,具体操作时请根据实际环境调整。</think>### OpenEuler系统下编译安装PostgreSQL安装PostGIS的方法 以下是基于引用[2][^2]和引用[3][^3]的完整安装流程: #### 一、安装PostGIS依赖库 ```bash # 安装基础编译工具 sudo yum install -y gcc gcc-c++ make cmake wget # 安装PostGIS核心依赖 sudo yum install -y geos geos-devel proj proj-devel gdal gdal-devel \ json-c json-c-devel libxml2 libxml2-devel protobuf-c protobuf-c-devel \ sqlite sqlite-devel libtiff libtiff-devel libcurl libcurl-devel mpfr mpfr-devel ``` #### 二、安装PostGIS(以PostGIS 3.4.1为例) ```bash # 下载源码 wget https://download.osgeo.org/postgis/source/postgis-3.4.1.tar.gz tar -zxvf postgis-3.4.1.tar.gz cd postgis-3.4.1 # 配置编译参数(需指定pg_config路径) export PG_CONFIG=/path/to/postgres/bin/pg_config # 替换为实际路径 ./configure --with-pgconfig=$PG_CONFIG # 编译安装 make sudo make install ``` #### 三、配置PostGIS环境 ```bash # 添加库路径(替换实际路径) echo "/usr/local/pgsql/lib" | sudo tee /etc/ld.so.conf.d/postgres.conf sudo ldconfig # 设置环境变量 echo 'export PATH=/usr/local/pgsql/bin:$PATH' >> ~/.bashrc source ~/.bashrc ``` #### 四、在PostgreSQL中启用PostGIS ```bash # 重启PostgreSQL sudo systemctl restart postgresql # 创建扩展 sudo -u postgres psql -c "CREATE EXTENSION postgis;" sudo -u postgres psql -c "CREATE EXTENSION postgis_topology;" # 验证安装 sudo -u postgres psql -c "SELECT PostGIS_Version();" sudo -u postgres psql -c "SELECT * FROM pg_available_extensions WHERE name LIKE 'postgis%';" ``` #### 五、常见问题解决 1. **依赖缺失错误**:根据报错信息安装对应开发包,例如: ```bash sudo yum install -y protobuf-c-devel libxml2-devel ``` 2. **pg_config路径问题**: ```bash # 查找pg_config路径 find / -name pg_config 2>/dev/null ``` 3. **共享库加载失败**: ```bash # 检查库路径配置 sudo ldconfig -v | grep postgis ``` 4. **编译参数优化**(高级用户): ```bash ./configure --with-pgconfig=$PG_CONFIG \ --with-geos=/usr/bin/geos-config \ --with-proj=/usr \ --with-gdal=/usr/bin/gdal-config ``` #### 六、验证安装成功 1. 检查扩展状态: ```sql SELECT extname, extversion FROM pg_extension WHERE extname LIKE 'postgis%'; ``` 2. 执行空间函数测试: ```sql SELECT ST_Distance( ST_GeomFromText('POINT(-72.1235 42.3521)', 4326), ST_GeomFromText('LINESTRING(-72.1260 42.45, -72.123 42.1546)', 4326) ); ``` > **关键提示**:PostGIS版本必须与PostgreSQL版本兼容(参考[PostGIS/PostgreSQL兼容性矩阵](https://trac.osgeo.org/postgis/wiki/UsersWikiPostgreSQLPostGIS))。安装前请确认版本匹配[^3]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值