Skip to content

Commit 662b0b0

Browse files
committed
— Separate builds
— Uses pre-installed uv python image — Uses devsetup.sh functions — Added checks to devsetup.sh for Docker compatibility — Doesn't skip checks at migration — Node 24 & Python 3.13 — Added missing libraries
1 parent 0a9ccfe commit 662b0b0

7 files changed

Lines changed: 115 additions & 125 deletions

File tree

.dockerignore

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,3 @@ temp/
8888

8989
# OS files
9090
Thumbs.db
91-
92-
# Development scripts (not needed in container)
93-
devsetup.sh
94-
devsetuph.sh

Dockerfile

Lines changed: 0 additions & 101 deletions
This file was deleted.

devsetup.sh

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -103,24 +103,36 @@ pull() {
103103
}
104104

105105
dependencies() {
106-
source fds-env/bin/activate
107-
echo "Installing $MAIN..."
108-
109-
uv pip install -r $MAIN/requirements-dev.txt
110-
install_precommit "$MAIN"
106+
# Check if running in Docker environment
107+
if $DOCKER; then
108+
uv pip install \
109+
--no-cache \
110+
--system \
111+
-r ./requirements-dev.txt
112+
113+
for name in "${REPOS[@]}"; do
114+
uv pip install --system -e "./$name" --config-setting editable_mode=compat
115+
done
116+
else
117+
source fds-env/bin/activate
118+
echo "Installing $MAIN..."
111119

112-
echo "Cloning / installing all editable dependencies..."
120+
uv pip install -r $MAIN/requirements-dev.txt
121+
install_precommit "$MAIN"
113122

114-
for name in "${REPOS[@]}"; do
115-
uv pip install -e "./$name" --config-setting editable_mode=compat
116-
install_precommit "$name"
117-
done
123+
echo "Cloning / installing all editable dependencies..."
124+
for name in "${REPOS[@]}"; do
125+
uv pip install -e "./$name" --config-setting editable_mode=compat
126+
install_precommit "$name"
127+
done
128+
fi
118129
}
119130

131+
120132
dockerized() {
121133
pull
122134
docker compose build
123-
docker compose run --rm django python manage.py migrate --skip-checks
135+
docker compose run --rm django python manage.py migrate
124136
}
125137

126138
frontend() {
@@ -150,6 +162,11 @@ frontend() {
150162
popd
151163
done
152164

165+
# Add a Docker-specific override
166+
if $DOCKER; then
167+
MAIN="."
168+
fi
169+
153170
# Setup main project and link dependencies
154171
pushd "$MAIN"
155172
pnpm install

docker-compose.yml

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
services:
22
django:
3-
build: .
3+
build:
4+
context: .
5+
dockerfile: ./docker/django/Dockerfile
46
command: >
57
bash -c "python manage.py runserver"
68
network_mode: "host"
@@ -12,13 +14,14 @@ services:
1214
- elasticsearch
1315

1416
frontend:
15-
build: .
16-
command: >
17-
bash -c "pnpm run dev"
18-
network_mode: "host"
19-
volumes:
20-
- .:/app
21-
- /app/node_modules
17+
build:
18+
context: .
19+
dockerfile: ./docker/frontend/Dockerfile
20+
command: "pnpm run dev"
21+
network_mode: "host"
22+
volumes:
23+
- .:/app
24+
- /app/node_modules
2225

2326
db:
2427
image: postgis/postgis:16-3.4

docker/django/Dockerfile

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
FROM ghcr.io/astral-sh/uv:python3.13-bookworm-slim
2+
3+
# Set environment variables
4+
ENV PYTHONDONTWRITEBYTECODE=1 \
5+
PYTHONUNBUFFERED=1 \
6+
DJANGO_SETTINGS_MODULE=fragdenstaat_de.settings.development \
7+
DJANGO_CONFIGURATION=Dev \
8+
SHELL=/bin/bash \
9+
DOCKER=true
10+
# Install system dependencies
11+
RUN apt-get update && apt-get install -y \
12+
git \
13+
postgresql-client \
14+
postgis \
15+
gettext \
16+
gdal-bin \
17+
libgdal-dev \
18+
libpq-dev \
19+
build-essential \
20+
inotify-tools \
21+
curl \
22+
# Specific dependencies from README
23+
imagemagick \
24+
libmagickwand-dev \
25+
libfreetype6-dev \
26+
poppler-utils \
27+
qpdf \
28+
ocrmypdf \
29+
libpango1.0-dev \
30+
libgeoip-dev \
31+
libmagic-dev \
32+
&& rm -rf /var/lib/apt/lists/*
33+
34+
# Set work directory
35+
WORKDIR /app
36+
37+
# Copy entire project
38+
COPY . .
39+
40+
# Install repo dependencies
41+
RUN chmod +x ./devsetup.sh && \
42+
./devsetup.sh dependencies
43+
44+
# Compile messages
45+
RUN python manage.py compilemessages -l de -i node_modules
46+
47+
EXPOSE 8000

docker/frontend/Dockerfile

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
FROM node:24-bookworm-slim
2+
3+
# Set up pnpm home directory
4+
ENV PNPM_HOME="/root/.local/share/pnpm"
5+
ENV PATH="${PNPM_HOME}:${PATH}"
6+
ENV DOCKER=true
7+
8+
# Enable corepack
9+
RUN corepack enable
10+
11+
# Set work directory
12+
WORKDIR /app
13+
14+
# Copy content
15+
COPY . ./
16+
17+
# Dynamically prepare pnpm version and activate
18+
RUN pnpm_version=$(node -p "require('./package.json').packageManager?.replace('pnpm@', '')") && \
19+
echo "Using pnpm version: $pnpm_version" && \
20+
corepack prepare "pnpm@$pnpm_version" --activate
21+
22+
# Install dependencies and run frontend setup
23+
RUN chmod +x ./devsetup.sh && \
24+
./devsetup.sh frontend
25+
26+
EXPOSE 5173
27+
28+
CMD ["pnpm", "run", "dev"]

dockersetup.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ Django will be listening on http://localhost:8000, Vite on http://localhost:5173
3636

3737
### Initial setup
3838

39-
devsetup.sh automatically runs `python manage.py migrate --skip-checks` after build. However, you may still need to:
39+
devsetup.sh automatically runs `python manage.py migrate` after build. However, you may still need to:
4040

4141
1. Create a superuser
4242
``` bash

0 commit comments

Comments
 (0)