gpt4 book ai didi

django - 在 Docker 中安装地理空间库

转载 作者:行者123 更新时间:2023-11-29 13:08:25 26 4
gpt4 key购买 nike

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

我使用 docker 进行本地开发,我很困惑哪些包应该安装在 Django 容器中,哪些包应该安装在 PostgreSQL 容器中。我猜其中一些应该同时出现。

非常感谢您对此的帮助。

最佳答案

您需要仅在 Django 容器中安装地理空间库,因为它们用于与支持空间的数据库(例如带有 PostGIS 的 PostgreSQL)进行交互。您可以使用现成的图像作为基础来部署这样的数据库,例如 kartoza/postgis .
Here is a nice example使用 python:3.6-slim 作为基础并将 GDAL 依赖项构建到容器中的 Dockerfile 的一部分。您需要的 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 部署 Django 应用程序和数据库,using the following docker-compose.yaml (来自与 Dockerfile 相同的 repo):

# 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: {}

在此存储库中,您可以找到有关您的问题的更多信息和有趣的配置位:https://github.com/intelligems/docker-library/tree/master/geodjango (上面的 Dockerfile 片段来自那个 repo)。


注意:
如果您想创建一个启用了 PostGIS 的 PostgreSQL 数据库作为“本地数据库”以与本地 Django 交互,您可以部署前面提到的 kartoza/postgis :

  1. 创建卷:

    $ docker volume create postgresql_data
  2. 部署容器:

    $ 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
  3. 连接到容器的默认数据库 (postgres) 并创建您的数据库:

    $ psql -h localhost -U user_name -d postgres
    $ CREATE DATABASE database_name;
  4. 启用数据库的 PostGIS 扩展:

    $ \connect database_name
    $ CREATE EXTENSION postgis;

这将导致一个名为 database_name 的数据库监听本地主机的端口 5432,您可以从本地 Django 应用程序连接到该数据库。

关于django - 在 Docker 中安装地理空间库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58190416/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com