Django的官方文档列出了开始开发PostGIS应用程序所需的3个依赖项。他们根据数据库列出一个表。
我将docker用于我的本地开发,我对应该在Django容器中安装哪些软件包以及在PostgreSQL容器中安装哪些软件包感到困惑。我想其中一些应该同时存在。
感谢您的帮助。
答案 0 :(得分:1)
您只需将地理空间库安装在Django容器中,因为它们用于与启用了空间的数据库(例如具有PostGIS的PostgreSQL)进行交互。您可以通过使用为此目的的现成映像(例如kartoza/postgis)作为基础来部署这样的数据库。
Here is a nice example的Dockerfile,使用python:3.6-slim作为基础,并将GDAL依赖项构建到容器中。所需的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应用程序和数据库:
# 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片段来自该存储库)。
创建卷:
$ docker volume create postgresql_data
部署容器:
$ 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
)并创建您的数据库:
$ psql -h localhost -U user_name -d postgres
$ CREATE DATABASE database_name;
对数据库启用PostGIS扩展:
$ \connect database_name
$ CREATE EXTENSION postgis;
这将导致名称为database_name
的数据库监听您的本地主机的端口5432,您可以从本地Django应用程序连接到该端口。