Skip to content

Commit cc5f6ee

Browse files
authored
Merge pull request #94 from unicef/hotfix/fix_239175
Hotfix/fix 239175
2 parents 6c2595b + a0b1f6c commit cc5f6ee

11 files changed

Lines changed: 224 additions & 196 deletions

File tree

compose.prd.yml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,3 +132,22 @@ services:
132132
condition: service_healthy
133133
redis:
134134
condition: service_healthy
135+
136+
flower:
137+
build:
138+
context: .
139+
dockerfile: docker/Dockerfile
140+
target: dev
141+
command: celery_flower
142+
environment: *django-env
143+
restart: unless-stopped
144+
ports:
145+
- 5555:5555
146+
depends_on:
147+
redis:
148+
condition: service_healthy
149+
healthcheck:
150+
test: ["CMD", "curl", "-f", "http://flower:5555/"]
151+
interval: 10s
152+
timeout: 5s
153+
retries: 5

compose.test.yml

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

compose.yml

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,30 +5,30 @@ volumes:
55
hope_postgres_data:
66

77
x-django-env: &django-env
8-
- ALLOWED_HOSTS=*
9-
- SECRET_KEY=secret-key
10-
- DATABASE_URL=postgis://postgres:postgres@db:5432/hcr
11-
- DATABASE_HOPE_URL=postgis://postgres:postgres@hopedb:5432/hopedb
12-
- REDIS_URL=redis://redis:6379/0
138
- ALLOWED_HOSTS=backend,localhost
14-
- STATIC_ROOT=/
9+
- AZURE_TENANT_ID=
10+
- AZURE_CLIENT_KEY=
1511
- CACHE_URL=redis://redis:6379/1
16-
- STATIC_URL=/static/
12+
- CELERY_BROKER_URL=redis://redis:6379/0
13+
- DATABASE_URL=postgis://postgres:postgres@db:5432/hcr
14+
- DATABASE_HOPE_URL=postgis://postgres:postgres@hopedb:5432/hopedb
15+
- FILE_STORAGE_DEFAULT=django.core.files.storage.FileSystemStorage
16+
- FLOWER_URL=http://flower:5555
1717
- EMAIL_BACKEND=
1818
- EMAIL_HOST=
1919
- EMAIL_PORT=
2020
- EMAIL_USE_TLS=
2121
- EMAIL_USE_SSL=
22-
- SENTRY_ENVIRONMENT=local
23-
- CELERY_BROKER_URL=redis://redis:6379/0
2422
- MAILJET_API_KEY=
2523
- MAILJET_SECRET_KEY=
26-
- WP_PRIVATE_KEY=
24+
- POWER_QUERY_FLOWER_ADDRESS=http://flower:5555
25+
- REDIS_URL=redis://redis:6379/0
2726
- SECURE_SSL_REDIRECT=False
28-
- AZURE_TENANT_ID=
29-
- AZURE_CLIENT_KEY=
30-
- FLOWER_URL=http://flower:5555
31-
- FILE_STORAGE_DEFAULT=django.core.files.storage.FileSystemStorage
27+
- SECRET_KEY=secret-key
28+
- SENTRY_ENVIRONMENT=local
29+
- STATIC_ROOT=/
30+
- STATIC_URL=/static/
31+
- WP_PRIVATE_KEY=
3232

3333
services:
3434
backend:

docker/Dockerfile

Lines changed: 61 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
FROM python:3.12-slim-bookworm as base
1+
FROM python:3.12-slim-bookworm AS base
22

3-
RUN apt update \
4-
&& apt install --no-install-recommends -y \
3+
RUN apt update && apt install --no-install-recommends -y \
54
gcc curl libgdal-dev wkhtmltopdf chromium-driver chromium \
65
&& apt clean && rm -rf /var/lib/apt/lists/* \
76
&& addgroup --system --gid 82 hcr \
@@ -10,42 +9,82 @@ RUN apt update \
109
--disabled-password --home /home/hcr \
1110
--shell /sbin.nologin --group hcr --gecos hcr \
1211
&& mkdir -p /code /tmp /data /static \
13-
&& chown -R hcr:hcr /code /tmp /data /static
12+
&& chown -R hcr:hcr /code /tmp /data /static \
13+
&& curl -o /data/waitforit -sSL https://github.com/maxclaus/waitforit/releases/download/v2.4.1/waitforit-linux_amd64 \
14+
&& chmod +x /data/waitforit
15+
16+
ENV PATH=/venv/bin:/usr/local/bin/:/usr/bin:/bin:/data \
17+
DJANGO_SETTINGS_MODULE=hope_country_report.config.settings \
18+
PYTHONUNBUFFERED=1 \
19+
PYTHONDONTWRITEBYTECODE=1 \
20+
UV_PROJECT_ENVIRONMENT=/venv \
21+
VIRTUAL_ENV=/venv \
22+
UWSGI_PROCESSES=4 \
23+
PACKAGES_DIR=/code
1424

15-
ENV PATH=$PATH:/code/.venv/bin/ \
16-
PACKAGES_DIR=/code/.venv/lib/python3.12/site-packages \
17-
PYTHONPATH=$PYTHONPATH:/code/src
25+
RUN pip install uv uwsgi
26+
WORKDIR $PACKAGES_DIR
1827

19-
WORKDIR /code
28+
FROM base AS builder
2029

21-
FROM base as builder
30+
RUN apt update \
31+
&& apt install -y --no-install-recommends \
32+
build-essential cmake git libfontconfig1 libgconf-2-4 libglib2.0-0 libnss3 libssl-dev libxml2-dev python3-dev zlib1g-dev \
33+
&& apt clean && rm -rf /var/lib/apt/lists/*
2234

23-
COPY ../pyproject.toml ./
24-
COPY ../uv.lock ./
35+
COPY pyproject.toml uv.lock /code/
36+
COPY src /app/src/
37+
COPY ./tests ./code/tests
2538

26-
ADD https://astral.sh/uv/install.sh /uv-installer.sh
27-
RUN sh /uv-installer.sh && rm /uv-installer.sh
28-
ENV PATH="/root/.local/bin/:$PATH"
39+
RUN --mount=type=cache,target=/root/.uv-cache \
40+
uv sync --cache-dir=/root/.uv-cache \
41+
--python=/usr/local/bin/python \
42+
--python-preference=system \
43+
--frozen --link-mode=copy
2944

30-
RUN uv sync
3145

3246
FROM builder AS dev
3347

34-
WORKDIR /code
35-
COPY .. ./
48+
ENV PYTHONPATH=/code/src:/code/tests:$PYTHONPATH \
49+
PATH="/venv/bin:$PATH"
50+
51+
52+
WORKDIR $PACKAGES_DIR
53+
COPY uv.lock README.md MANIFEST.in pyproject.toml /code/
54+
COPY src /code/src/
55+
COPY --from=base /data/waitforit /usr/local/bin/waitforit
56+
COPY tests /code/tests
3657

3758
COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh
3859
ENTRYPOINT ["entrypoint.sh"]
3960

61+
FROM builder AS prd
4062

41-
FROM base AS prd
42-
43-
ENV PATH=$PATH:/code/.venv/bin/
44-
ENV DJANGO_SETTINGS_MODULE="hope_country_report.config.settings"
63+
ENV PATH="/code/.venv/bin:$PATH" \
64+
DJANGO_SETTINGS_MODULE=hope_country_report.config.settings \
65+
PYTHONUNBUFFERED=1 \
66+
PYTHONDONTWRITEBYTECODE=1 \
67+
UWSGI_PROCESSES=4
4568

69+
COPY --chown=hcr:hcr --from=builder . $PACKAGES_DIR
4670
COPY --chown=hcr:hcr .. ./
47-
COPY --chown=hcr:hcr --from=builder $PACKAGES_DIR $PACKAGES_DIR
71+
4872
USER hcr
4973

5074
COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh
5175
ENTRYPOINT ["entrypoint.sh"]
76+
77+
FROM dev AS dist
78+
79+
ENV PATH="/code/.venv/bin:$PATH" \
80+
DJANGO_SETTINGS_MODULE=hope_country_report.config.settings \
81+
PYTHONUNBUFFERED=1 \
82+
PYTHONDONTWRITEBYTECODE=1 \
83+
STATIC_URL="/static/" \
84+
UWSGI_PROCESSES=4
85+
86+
COPY --chown=hcr:hcr --from=prd $PACKAGES_DIR $PACKAGES_DIR
87+
COPY --chown=hcr:hcr .. ./
88+
89+
COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh
90+
ENTRYPOINT ["entrypoint.sh"]

docker/entrypoint.sh

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
set -eou pipefail
44

55
production() {
6+
waitforit -address=tcp://db:5432
67
uwsgi \
78
--http :8000 \
89
--master \
@@ -17,25 +18,28 @@ fi
1718

1819
case "$1" in
1920
dev)
20-
./docker/wait-for-it.sh db:5432
21+
waitforit -address=tcp://db:5432
2122
python3 manage.py migrate
2223
python3 manage.py runserver 0.0.0.0:8000
2324
;;
2425
tests)
25-
./docker/wait-for-it.sh db:5432
26-
pytest tests/ --create-db --cov-report term --maxfail 5 --with-selenium
26+
waitforit -address=tcp://db:5432
27+
waitforit -address=tcp://hopedb:5432
28+
pytest tests/ --create-db --cov-report term -x --with-selenium --strict-markers
2729
;;
2830
prd)
2931
production
3032
;;
3133
celery_worker)
3234
export C_FORCE_ROOT=1
33-
celery -A hope_country_report.config.celery worker -l info
35+
watchmedo auto-restart --directory=./ --pattern=*.py --recursive -- celery -A hope_country_report.config.celery worker -l info
3436
;;
3537
celery_beat)
38+
waitforit -host=redis -port=6379
3639
celery -A hope_country_report.config.celery beat -l info
3740
;;
3841
celery_flower)
42+
waitforit -address=tcp://backend:8000
3943
celery -A hope_country_report.config.celery flower
4044
;;
4145
*)

ops/compose.ci-test.yml

Lines changed: 39 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,39 @@ services:
66
command: tests
77
environment:
88
- ALLOWED_HOSTS=*
9-
- SECRET_KEY=secret-key
10-
- DATABASE_URL=postgis://postgres:postgres@db:5432/hcr
9+
- AZURE_TENANT_ID=
10+
- AZURE_CLIENT_KEY=
11+
- AUTHENTICATION_BACKENDS=hope_country_report.utils.tests.backends.AnyUserAuthBackend
12+
- CACHE_URL=redis://redis:6379/1
13+
- CELERY_BROKER_URL=redis://redis:6379/0
14+
- CORS_ORIGIN_ALLOW_ALL=True
15+
- CSRF_COOKIE_SECURE=False
1116
- DATABASE_HOPE_URL=postgis://postgres:postgres@hopedb:5432/hopedb
12-
- REDIS_URL=redis://redis:6379/0
13-
- ALLOWED_HOSTS=backend,localhost
14-
- STATIC_ROOT=/
15-
- STATIC_URL=/static/
16-
- EMAIL_BACKEND=
17+
- DATABASE_URL=postgis://postgres:postgres@db:5432/hcr
18+
- DEBUG=True
19+
- EMAIL_BACKEND=anymail.backends.mailjet.EmailBackend
1720
- EMAIL_HOST=
1821
- EMAIL_PORT=
1922
- EMAIL_USE_TLS=
2023
- EMAIL_USE_SSL=
21-
- CELERY_BROKER_URL=redis://redis:6379/0
24+
- FILE_STORAGE_DEFAULT=django.contrib.staticfiles.storage.StaticFilesStorage
25+
- FILE_STORAGE_HOPE=django.core.files.storage.FileSystemStorage
26+
- FILE_STORAGE_MEDIA=django.contrib.staticfiles.storage.StaticFilesStorage
27+
- FILE_STORAGE_STATIC=django.contrib.staticfiles.storage.StaticFilesStorage
2228
- MAILJET_API_KEY=
2329
- MAILJET_SECRET_KEY=
30+
- POWER_QUERY_FLOWER_ADDRESS=http://localhost:5555
31+
- REDIS_URL=redis://redis:6379/0
32+
- SESSION_COOKIE_DOMAIN=localhost
33+
- SESSION_COOKIE_HTTPONLY=True
34+
- SESSION_COOKIE_NAME=hcr_session
35+
- SESSION_COOKIE_PATH=/
36+
- SESSION_COOKIE_SECURE=False
37+
- STATIC_ROOT=/
38+
- STATIC_URL=/static/
39+
- SECURE_SSL_REDIRECT=False
40+
- SECRET_KEY=secret-key
2441
- WP_PRIVATE_KEY=
25-
- CACHE_URL=redis://redis:6379/1
26-
- AZURE_TENANT_ID=
27-
- AZURE_CLIENT_KEY=
2842
depends_on:
2943
db:
3044
condition: service_healthy
@@ -45,6 +59,20 @@ services:
4559
timeout: 4s
4660
retries: 5
4761

62+
hopedb:
63+
image: postgis/postgis:15-3.4
64+
environment:
65+
- POSTGRES_USER=postgres
66+
- POSTGRES_PASSWORD=postgres
67+
- POSTGRES_DB=hopedb
68+
restart: always
69+
healthcheck:
70+
test: ["CMD", "pg_isready", "-U", "postgres"]
71+
start_period: 5s
72+
interval: 5s
73+
timeout: 4s
74+
retries: 5
75+
4876
redis:
4977
image: redis:7.2
5078
restart: always

0 commit comments

Comments
 (0)