在Docker中安装地理空间库

问题描述 投票:1回答:1

Django的官方文档列出了开始开发PostGIS应用程序所需的3个依赖项。他们根据数据库列出一个表。

我使用docker进行本地开发,我对应该在Django容器中安装哪些软件包以及在PostgreSQL容器中安装哪些软件包感到困惑。我猜其中一些应该同时存在。

非常感谢您的帮助。

django postgresql postgis gdal geodjango
1个回答
0
投票

您需要安装地理空间库仅在Django容器中,因为它们用于与启用了空间的数据库(例如具有PostGIS的PostgreSQL)进行交互。您可以通过使用为此目的的现成映像作为基础来部署此类DB,例如kartoza/postgis。使用python:3.6-slim作为基础并将GDAL依赖项构建到容器中的Dockerfile的Here is a nice example。所需的Dockerfile部分如下:

FROM python:3.6-slim

ENV PYTHONUNBUFFERED=1

# Add unstable repo to allow us to access latest GDAL builds
# Existing binutils causes a dependency conflict, correct version will be installed when GDAL gets intalled
RUN echo deb http://deb.debian.org/debian testing main contrib non-free >> /etc/apt/sources.list && \
    apt-get update && \
    apt-get remove -y binutils && \
    apt-get autoremove -y

# Install GDAL dependencies
RUN apt-get install -y libgdal-dev g++ --no-install-recommends && \
    pip install pipenv && \
    pip install whitenoise && \
    pip install gunicorn && \
    apt-get clean -y

# Update C env vars so compiler can find gdal
ENV CPLUS_INCLUDE_PATH=/usr/include/gdal
ENV C_INCLUDE_PATH=/usr/include/gdal

ENV LC_ALL="C.UTF-8"
ENV LC_CTYPE="C.UTF-8"

您可以使用docker-compose using the following docker-compose.yaml(与Dockerfile相同的存储库)部署Django应用程序和数据库:

docker-compose.yaml

在此存储库中,您可以找到有关您的问题的更多信息和有趣的配置点:# Sample compose file for a django app and postgis version: '3' services: postgis: image: kartoza/postgis:9.6-2.4 volumes: - postgis_data:/var/lib/postgresql environment: ALLOW_IP_RANGE: 0.0.0.0/0 POSTGRES_PASS: ${POSTGRES_PASSWORD} POSTGRES_USER: ${POSTGRES_USER} POSTGRES_DB: postgis web: image: intelligems/geodjango:latest command: python manage.py runserver 0.0.0.0:8000 environment: DEBUG: "True" SECRET_KEY: ${SECRET_KEY} DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgis:5432/postgis SENTRY_DSN: ${SENTRY_DSN} ports: - 8000:8000 depends_on: - postgis volumes: postgis_data: {} (上面的Dockerfile代码段来自该存储库。


注意:如果要创建具有启用PostGIS的数据库的PostgreSQL作为“本地DB”以与本地Django交互,则可以部署前面提到的https://github.com/intelligems/docker-library/tree/master/geodjango
  1. 创建卷:

    kartoza/postgis
  2. 部署容器:

    $ docker volume create postgresql_data
    
  3. 连接到容器的默认数据库($ docker run \ --name=postgresql-with-postgis -d \ -e POSTGRES_USER=user_name \ -e POSTGRES_PASS=user_pass \ -e ALLOW_IP_RANGE=0.0.0.0/0 -p 5433:5432 \ -v postgresql_data:/var/lib/postgresql \ --restart=always \ kartoza/postgis:9.6-2.4 )并创建您的数据库:

    postgres
  4. 对数据库启用PostGIS扩展:

    $ psql -h localhost -U user_name -d postgres
    $ CREATE DATABASE database_name;
    

[这将导致名称为$ \connect database_name $ CREATE EXTENSION postgis; 的DB监听本地主机的端口5432,并且您可以从本地Django应用程序连接到该端口。

© www.soinside.com 2019 - 2024. All rights reserved.