😀
GeoDjangoの開発環境をDockerで構築
環境
- Windows11
- WSL(Ubuntu 22.04.03 LTS)
- Docker Desktop version 4.26.0
goal
Djangoアプリケーション用Dockerコンテナと、postGISデータベースコンテナを構築して、GeoDjango開発環境を構築する。
必要なファイル
- docker-compose.yml
- Dockerfile(DockerfileWeb, DockerfileDb)
- requirement.txt → PiP用
docker-compose.yml
dokcer-compose.yml
version: "3.9"
services:
web:
build:
context: .
dockerfile: DockerfileWeb
command: python /code/manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- 8000:8000
depends_on:
- db
db:
build:
context: .
dockerfile: DockerfileDb
image: postgis/postgis:16-3.4
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- "POSTGRES_HOST_AUTH_METHOD=trust"
volumes:
postgres_data:
Dockerfile
DockerfileWeb
# ベースとなるイメージのPull
FROM python:3.11.8-slim-bullseye
# 環境変数の設定
ENV PIP_DISABLE_PIP_VERSION_CHECK 1
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# 作業ディレクトリの設定
WORKDIR /code
# gdal for GeoDjango
RUN apt update
RUN apt install -y \
binutils \
gdal-bin \
libproj-dev
RUN rm -rf /var/lib/apt/lists/*
# 依存関係のインストール
COPY ./requirements.txt .
RUN pip install -r requirements.txt
# プロジェクトのコピー
COPY . .
DockerfileDb
# Pull base image
FROM postgis/postgis:16-3.4
requirements.txt
requirement.txt
asgiref==3.7.2
Django==5.0.3
sqlparse==0.4.4
psycopg2-binary==2.9.9
ここまでのファイル構成
.
├── DockerfileDb
├── DockerfileWeb
├── docker-compose.yml
└── requirements.txt
Djangoプロジェクトの作成
- Django用のPython仮想環境を作成
$ python -m venv .venv
- 仮想環境のアクティベイト
$ source .venv/bin/activate
- Django 依存関係のインストール
(.venv)$ pip install -r requirement.txt
- Django プロジェクトの作成最後のドットを忘れずに
(.venv)$ django-admin startproject geodjango .
- geodjango/settings.py の編集
-
INSTALLED_APPS に
'django.contrib.gis'
を追加geodjango/settings.pyINSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.gis', # これを追加 ]
-
DATABASEを下記に変更
geodjango/settings.pyDATABASES = { "default": { "ENGINE": "django.contrib.gis.db.backends.postgis", "NAME": "postgres", "USER": "postgres", "PASSWORD": "postgres", "HOST": "db", # set in docker-compose.yml "PORT": 5432, # default postgres port } }
USER、PASSWORD、PORT は postgreSQL のデフォルト値なので、プロダクションでは変更する必要あり。今回は開発環境なのでそのまま。
-
日本にロケール
geodjango/settings.pyLANGUAGE_CODE = 'ja' TIME_ZONE = 'Asia/Tokyo'
-
- 仮想環境から抜ける
(.venv)$ deactivate
Dockerで環境構築
- Dockerのビルド
$ docker compose build
- Dockerコンテナの起動オプション
$ docker compose up
-d
はデタッチドモード、つまりバックエンドでの動作できるけど、今回はそのまま。のような表示になるはず。web-1 | System check identified 1 issue (0 silenced). web-1 | March 18, 2024 - 17:09:58 web-1 | Django version 5.0.3, using settings 'geoproject.settings' web-1 | Starting development server at http://0.0.0.0:8000/ web-1 | Quit the server with CONTROL-C.
-
http://127.0.0.1:8000にブラウザでアクセス
ロケットが表示されたらOK - コンテナの終了を忘れずに
$ docker compose down
Discussion