在Docker中部署PostgreSQL+PostGIS

27 篇文章 8 订阅

如果你愿意通过Docker运行PostgreSQL,我们建议使用与PostGIS捆绑在一起的Kartoza的Docker recipe作为扩展。

PostGIS

在5432端口(或任何端口)上创建名为postgrest_tut的Docker Postgres容器。

sudo docker run--name“postgrest_tut”-p5432:5432-e POSTGRES_MULTIPLE_EXTENSIONS=postgis-d-t kartoza/postgis

必须配置Postgres,以确保它信任连接(本例为参考,不应以这种方式在生产环境中使用)。

sudo docker exec-it postgrest_tut bash

首先在容器内安装一个编辑器,例如nano,然后导航到Postgres配置所在的文件夹。

apt get update && apt get install nano
#这也可能是不同的版本,这取决于你的安装
cd/etc/postgresql/12/main/

在文件pg_hba.conf中,需要对“数据库管理登录通过Unix域套接字(应该在第85行)下的设置从peer更改为trust,然后重新启动Docker容器。

sudo docker restart postgrest_tut

之后,执行以下命令,该命令将弹出psql提示符。

sudo docker exec -it postgrest_tut psql -U postgres

在提示中,必须使用以下命令启用PostGIS扩展:

postgres=# CREATE EXTENSION postgis;
postgres=# \q

安装PostGIS,以便在以后的阶段使用raster2pgsql:

sudo docker exec -it postgrest_tut bash -c "apt-get update && apt-get install postgis"

安装PostgREST
为了简单起见,安装postgrest(参照postgrest.org网站这取决于你的操作系统)。
安装好所有内容后,你就可以简单地运行PostgREST:

postgrest

如果一切正常,会打印出版本和配置信息。
PostgREST-创建API模式
Postgrest将需要它自己的API模式,因此再次打开Docker容器的psql提示符(如果它运行在主机操作系统上,也可以使用psql-uppostgres)。

sudo docker exec -it postgrest_tut psql -U postgres

psql (9.6.3)
Type "help" for help.

postgres=#

为将通过PostgREST API公开的数据库对象创建任意命名的模式。在psql提示符内执行以下SQL语句:

CREATE SCHEMA api;

接下来,你应该添加一个用于匿名web请求的角色。当请求到达API时,PostgREST将切换到这个数据库角色来运行查询。

CREATE ROLE web_anon NOLOGIN;

GRANT USAGE ON SCHEMA api TO web_anon;

现在,webanon角色有权访问api模式中的函数。
正如PostgREST的作者所指出的,创建一个专用的角色来连接数据库,而不是使用高权限的postgres角色,这实际上是一个很好的实践。为此,请命名角色验证器,并授予此用户切换到web角色的能力:

CREATE ROLE authenticator NOINHERIT LOGIN PASSWORD 'gisops';
GRANT web_anon TO authenticator;

为了确保我们在空间计算中使用合适的投影,我们将使用World Robinson的投影EPSG:54030英寸需要案例。请将其添加到你的数据库中:

INSERT into spatial_ref_sys (srid, auth_name, auth_srid, proj4text, srtext) values ( 54030, 'ESRI', 54030, '+proj=robin +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', 'PROJCS["World_Robinson",GEOGCS["GCS_WGS_1984",DATUM["WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Robinson"],PARAMETER["False_Easting",0],PARAMETER["False_Northing",0],PARAMETER["Central_Meridian",0],UNIT["Meter",1],AUTHORITY["EPSG","54030"]]');

PostgREST需要配置文件来指定数据库连接。继续创建一个名为gisops的文件-教程.conf包含以下信息(如果在前面的步骤中更改了端口和密码,请记住要调整端口和密码)。

db-uri = "postgres://authenticator:gisops@localhost:5432/postgres"
db-schema = "api"
db-anon-role = "web_anon"
server-port = 3000

现在我们准备开始PostgREST。

postgrest gisops-tutorial.conf
# or ./postgrest gisops-tutorial.conf

你应该可以看到这样的东西:

Listening on port 3000
Attempting to connect to the database...
Connection successful

PostgREST服务器现在可以为web请求提供服务了。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Docker部署Express+Vue3+Vite Web应用,您可以照以下步骤进行操作: 1. 首先,确保您已经安装了DockerDocker Compose。您可以从Docker官方网站下载并安装它们。 2. 在您的项目根目录下创建一个名为`Dockerfile`的文件,并添加以下内容: ```dockerfile # 使用 Node 14 作为基础镜像 FROM node:14 # 设置工作目录 WORKDIR /app # 复制 package.json 和 package-lock.json 到工作目录 COPY package*.json ./ # 安装项目依赖 RUN npm install # 复制项目文件到工作目录 COPY . . # 构建 Vue3 项目 RUN npm run build # 设置 Express 服务端口 ENV PORT=3000 # 暴露端口 EXPOSE 3000 # 运行 Express 服务器 CMD ["npm", "start"] ``` 在上述示例,我们首先选择了一个Node 14作为基础镜像。然后,我们设置了工作目录,并复制`package.json`和`package-lock.json`到工作目录。接下来,我们安装项目依赖并复制所有项目文件到工作目录。然后,我们构建Vue3项目并设置了Express服务的端口。最后,我们暴露端口3000,并运行Express服务器。 3. 创建一个名为`docker-compose.yml`的文件,并添加以下内容: ```yaml version: '3' services: web: build: context: . dockerfile: Dockerfile ports: - 3000:3000 ``` 在上述示例,我们定义了一个名为`web`的服务,使用了之前创建的Dockerfile进行构建。我们将主机的端口3000映射到容器的端口3000。 4. 在项目根目录下打开终端或命令提示符,运行以下命令启动Docker容器: ```bash docker-compose up -d ``` 这将使用`docker-compose.yml`文件的配置启动一个名为`web`的容器,并将Express服务器运行在端口3000上。 5. 现在,您的Express+Vue3+Vite Web应用已经在Docker容器运行起来了。您可以在浏览器访问`http://localhost:3000`来查看应用程序。 请注意,上述示例假设您的Express服务器代码位于项目根目录下,Vue3和Vite应用程序位于Express的静态文件夹。如果您的项目结构有所不同,请适当调整`Dockerfile`和`docker-compose.yml`文件的路径。另外,根据您的具体需求,您可能需要进一步配置Docker容器以满足您的需求,比如添加数据库支持等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值