Skip to content

Commit 032328c

Browse files
author
afabiani
committed
- Bump Dockerfile to version 3.4
1 parent ff45d99 commit 032328c

18 files changed

+209
-130
lines changed

.circleci/config.yml

+2-3
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,8 @@ jobs:
105105
docker exec db4geonode createdb -U postgres -T postgres test_geonode_data
106106
docker exec db4geonode psql -U postgres -d test_geonode -c 'CREATE EXTENSION IF NOT EXISTS postgis;'
107107
docker exec db4geonode psql -U postgres -d test_geonode_data -c 'CREATE EXTENSION IF NOT EXISTS postgis;'
108-
docker exec -it django4geonode bash -c 'echo "Running <<parameters.test_suite>>"'
109-
docker exec -it django4geonode bash -c 'coverage run --branch --source=geonode manage.py test -v 3 --keepdb <<parameters.test_suite>>'
110-
docker exec -it django4geonode bash -c 'flake8 geonode'
108+
docker-compose -f docker-compose.yml run --rm django bash -c 'coverage run --branch --source=geonode manage.py test -v 3 --keepdb <<parameters.test_suite>>'
109+
docker-compose -f docker-compose.yml run --rm django bash -c 'flake8 geonode'
111110
working_directory: ./
112111

113112
workflows:

.env

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
COMPOSE_PROJECT_NAME=geonode
2-
SET_DOCKER_ENV=production
3-
BACKUPS_VOLUME_DRIVER=local
4-
52
DOCKER_HOST_IP=
63
DOCKER_ENV=production
74
# See https://github.com/geosolutions-it/geonode-generic/issues/28
85
# to see why we force API version to 1.24
96
DOCKER_API_VERSION="1.24"
7+
BACKUPS_VOLUME_DRIVER=local
8+
9+
C_FORCE_ROOT=1
10+
11+
DEBUG=False
1012

1113
DJANGO_SETTINGS_MODULE=geonode.settings
1214
GEONODE_INSTANCE_NAME=geonode
@@ -112,7 +114,7 @@ MONITORING_HOST_NAME=geonode
112114
MODIFY_TOPICCATEGORY=True
113115
AVATAR_GRAVATAR_SSL=True
114116
AVATAR_DEFAULT_URL=/geonode/img/avatar.png
115-
AVATAR_PROVIDERS='avatar.providers.PrimaryAvatarProvider','avatar.providers.GravatarAvatarProvider','avatar.providers.DefaultAvatarProvider'
117+
116118
EXIF_ENABLED=True
117119
CREATE_LAYER=True
118120
FAVORITE_ENABLED=True

Dockerfile

+56-14
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,69 @@
1-
FROM geonode/geonode:latest
1+
FROM python:3.8.3-buster
22
LABEL GeoNode development team
33

4-
COPY tasks.py /usr/src/app/
5-
COPY uwsgi.ini /usr/src/app/
6-
COPY entrypoint.sh /usr/src/app/
7-
COPY requirements.txt /usr/src/app/
4+
RUN mkdir -p /usr/src/geonode
85

6+
# Enable postgresql-client-11.2
7+
RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main" | tee /etc/apt/sources.list.d/pgdg.list
8+
RUN wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
9+
10+
# This section is borrowed from the official Django image but adds GDAL and others
11+
RUN apt-get update && apt-get install -y \
12+
libpq-dev python-dev libxml2-dev \
13+
libxml2 libxslt1-dev zlib1g-dev libjpeg-dev \
14+
libmemcached-dev libldap2-dev libsasl2-dev libffi-dev
15+
16+
RUN apt-get update && apt-get install -y \
17+
gcc zip gettext geoip-bin cron \
18+
postgresql-client-11 \
19+
sqlite3 spatialite-bin libsqlite3-mod-spatialite \
20+
python3-gdal python3-psycopg2 python3-ldap \
21+
python3-pip python3-pil python3-lxml python3-pylibmc \
22+
python3-dev libgdal-dev \
23+
uwsgi uwsgi-plugin-python3 \
24+
--no-install-recommends && rm -rf /var/lib/apt/lists/*
25+
26+
# add bower and grunt command
27+
COPY . /usr/src/geonode/
28+
WORKDIR /usr/src/geonode
29+
30+
COPY monitoring-cron /etc/cron.d/monitoring-cron
31+
RUN chmod 0644 /etc/cron.d/monitoring-cron
32+
RUN crontab /etc/cron.d/monitoring-cron
33+
RUN touch /var/log/cron.log
34+
RUN service cron start
35+
36+
COPY wait-for-databases.sh /usr/bin/wait-for-databases
37+
RUN chmod +x /usr/bin/wait-for-databases
38+
RUN chmod +x /usr/src/geonode/tasks.py \
39+
&& chmod +x /usr/src/geonode/entrypoint.sh
40+
41+
COPY celery.sh /usr/bin/celery-commands
42+
RUN chmod +x /usr/bin/celery-commands
43+
44+
# Prepraing dependencies
45+
RUN apt-get update && apt-get install -y devscripts build-essential debhelper pkg-kde-tools sharutils
46+
# RUN git clone https://salsa.debian.org/debian-gis-team/proj.git /tmp/proj
47+
# RUN cd /tmp/proj && debuild -i -us -uc -b && dpkg -i ../*.deb
48+
49+
# Install pip packages
950
RUN pip install pip --upgrade
10-
RUN pip install -r requirements.txt --upgrade
51+
RUN pip install --upgrade --no-cache-dir --use-feature=2020-resolver --src /usr/src -r requirements.txt \
52+
&& pip install pygdal==$(gdal-config --version).* \
53+
&& pip install flower==0.9.4
1154

12-
WORKDIR /usr/src/geonode/
13-
RUN git fetch --all --prune && \
14-
git reset --hard origin/master && \
15-
git pull
16-
RUN pip install -e . --upgrade
55+
RUN pip install --upgrade --use-feature=2020-resolver -e .
1756

1857
# Activate "memcached"
19-
RUN apt install -y cron memcached
58+
RUN apt install memcached
2059
RUN pip install pylibmc \
2160
&& pip install sherlock
2261

23-
RUN python manage.py makemigrations --settings=geonode.settings
24-
RUN python manage.py migrate --settings=geonode.settings
62+
# Install "geonode-contribs" apps
63+
RUN cd /usr/src; git clone https://github.com/GeoNode/geonode-contribs.git -b master
64+
# Install logstash and centralized dashboard dependencies
65+
RUN cd /usr/src/geonode-contribs/geonode-logstash; pip install --upgrade --use-feature=2020-resolver -e . \
66+
cd /usr/src/geonode-contribs/ldap; pip install --upgrade --use-feature=2020-resolver -e .
2567

2668
# Export ports
2769
EXPOSE 8000

celery.sh

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#!/bin/bash
2+
nohup celery -A geonode.celery_app:app beat -l DEBUG -f /var/log/celery.log &>/dev/null &
3+
nohup celery -A geonode.celery_app:app worker -B -E --statedb=worker.state -s celerybeat-schedule --loglevel=INFO --concurrency=10 -n worker1@%h -f /var/log/celery.log &>/dev/null &
4+
nohup celery -A geonode.celery_app:app flower --auto_refresh=True --debug=False --broker=${BROKER_URL} --basic_auth=${ADMIN_USERNAME}:${ADMIN_PASSWORD} --address=0.0.0.0 --port=5555 &>/dev/null &

docker-compose-geoserver-server.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ services:
2626
volumes:
2727
- geoserver-data-dir:/geoserver_data/data
2828
env_file:
29-
- ./scripts/docker/env/${SET_DOCKER_ENV}/geoserver.env
29+
- ./scripts/docker/env/${DOCKER_ENV}/geoserver.env
3030
ports:
3131
- "${GEOSERVER_SERVER_PORT}:8080"
3232
network_mode: "bridge"

docker-compose.yml

+10-10
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@ x-common-django:
99
build:
1010
context: ./
1111
dockerfile: Dockerfile
12+
env_file:
13+
- .env
1214
volumes:
13-
- '.:/usr/src/app'
15+
# - '.:/usr/src/geonode'
1416
- statics:/mnt/volumes/statics
1517
- geoserver-data-dir:/geoserver_data/data
1618
- backup-restore:/backup_restore
@@ -28,21 +30,19 @@ services:
2830
timeout: 10s
2931
retries: 1
3032
start_period: 60s
33+
environment:
34+
- IS_CELERY=False
3135
entrypoint: ["/usr/src/geonode/entrypoint.sh"]
32-
command: "uwsgi --ini /usr/src/app/uwsgi.ini"
33-
env_file:
34-
- .env
35-
- ./scripts/docker/env/${SET_DOCKER_ENV}/django.env
36+
command: "uwsgi --ini /usr/src/geonode/uwsgi.ini"
3637

3738
# Celery worker that executes celery tasks created by Django.
3839
celery:
3940
<< : *default-common-django
4041
container_name: celery4${COMPOSE_PROJECT_NAME}
42+
environment:
43+
- IS_CELERY=True
4144
entrypoint: ["/usr/src/geonode/entrypoint.sh"]
4245
command: "celery -A geonode.celery_app:app worker -B -E --statedb=/mnt/volumes/statics/worker.state -s /mnt/volumes/statics/celerybeat-schedule --loglevel=INFO --concurrency=10 -n worker1@%h -f /var/log/celery.log"
43-
env_file:
44-
- .env
45-
- ./scripts/docker/env/${SET_DOCKER_ENV}/celery.env
4646

4747
# Nginx is serving django static and media files and proxies to django and geonode
4848
geonode:
@@ -90,7 +90,7 @@ services:
9090
retries: 1
9191
start_period: 60s
9292
env_file:
93-
- ./scripts/docker/env/${SET_DOCKER_ENV}/geoserver.env
93+
- ./scripts/docker/env/${DOCKER_ENV}/geoserver.env
9494
volumes:
9595
- statics:/mnt/volumes/statics
9696
- geoserver-data-dir:/geoserver_data/data
@@ -112,7 +112,7 @@ services:
112112
image: geonode/postgis:latest
113113
container_name: db4${COMPOSE_PROJECT_NAME}
114114
env_file:
115-
- ./scripts/docker/env/${SET_DOCKER_ENV}/db.env
115+
- ./scripts/docker/env/${DOCKER_ENV}/db.env
116116
volumes:
117117
- dbdata:/var/lib/postgresql/data
118118
- dbbackups:/pg_backups

entrypoint.sh

+30-20
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
#!/bin/bash
2+
3+
# Exit script in case of error
24
set -e
35

46
# Start cron && memcached services
57
service cron restart
68
service memcached restart
79

8-
/usr/local/bin/invoke update >> /usr/src/app/invoke.log
10+
echo $"\n\n\n"
11+
echo "-----------------------------------------------------"
12+
echo "STARTING DJANGO ENTRYPOINT $(date)"
13+
echo "-----------------------------------------------------"
14+
15+
/usr/local/bin/invoke update > /usr/src/geonode/invoke.log 2>&1
916

1017
source $HOME/.bashrc
1118
source $HOME/.override_env
@@ -23,11 +30,11 @@ echo MONITORING_HOST_NAME=$MONITORING_HOST_NAME
2330
echo MONITORING_SERVICE_NAME=$MONITORING_SERVICE_NAME
2431
echo MONITORING_DATA_TTL=$MONITORING_DATA_TTL
2532

26-
/usr/local/bin/invoke waitfordbs >> /usr/src/app/invoke.log
33+
/usr/local/bin/invoke waitfordbs > /usr/src/geonode/invoke.log 2>&1
2734
echo "waitfordbs task done"
2835

2936
echo "running migrations"
30-
/usr/local/bin/invoke migrations >> /usr/src/app/invoke.log
37+
/usr/local/bin/invoke migrations > /usr/src/geonode/invoke.log 2>&1
3138
echo "migrations task done"
3239

3340
cmd="$@"
@@ -37,63 +44,66 @@ echo DOCKER_ENV=$DOCKER_ENV
3744
if [ -z ${DOCKER_ENV} ] || [ ${DOCKER_ENV} = "development" ]
3845
then
3946

40-
/usr/local/bin/invoke prepare
47+
/usr/local/bin/invoke prepare > /usr/src/geonode/invoke.log 2>&1
4148
echo "prepare task done"
42-
/usr/local/bin/invoke fixtures
49+
/usr/local/bin/invoke fixtures > /usr/src/geonode/invoke.log 2>&1
4350
echo "fixture task done"
4451

4552
if [ ${IS_CELERY} = "true" ] || [ ${IS_CELERY} = "True" ]
4653
then
4754

48-
cmd=$cmd
4955
echo "Executing Celery server $cmd for Development"
5056

5157
else
5258

5359
echo "install requirements for development"
54-
/usr/local/bin/invoke devrequirements
60+
/usr/local/bin/invoke devrequirements > /usr/src/geonode/invoke.log 2>&1
5561
echo "refresh static data"
56-
/usr/local/bin/invoke statics
62+
/usr/local/bin/invoke statics > /usr/src/geonode/invoke.log 2>&1
5763
echo "static data refreshed"
58-
cmd=$cmd
64+
5965
echo "Executing standard Django server $cmd for Development"
6066

6167
fi
6268

6369
else
6470
if [ ${IS_CELERY} = "true" ] || [ ${IS_CELERY} = "True" ]
6571
then
66-
cmd=$CELERY_CMD
6772
echo "Executing Celery server $cmd for Production"
6873
else
6974

70-
/usr/local/bin/invoke prepare >> /usr/src/app/invoke.log
75+
/usr/local/bin/invoke prepare > /usr/src/geonode/invoke.log 2>&1
7176
echo "prepare task done"
7277

7378
if [ ! -e "/mnt/volumes/statics/geonode_init.lock" ]; then
74-
/usr/local/bin/invoke updategeoip >> /usr/src/app/invoke.log
79+
/usr/local/bin/invoke updategeoip > /usr/src/geonode/invoke.log 2>&1
7580
echo "updategeoip task done"
76-
/usr/local/bin/invoke fixtures >> /usr/src/app/invoke.log
81+
/usr/local/bin/invoke fixtures > /usr/src/geonode/invoke.log 2>&1
7782
echo "fixture task done"
78-
/usr/local/bin/invoke monitoringfixture >> /usr/src/app/invoke.log
83+
/usr/local/bin/invoke monitoringfixture > /usr/src/geonode/invoke.log 2>&1
7984
echo "monitoringfixture task done"
80-
/usr/local/bin/invoke initialized >> /usr/src/app/invoke.log
85+
/usr/local/bin/invoke initialized > /usr/src/geonode/invoke.log 2>&1
8186
echo "initialized"
8287
fi
8388

8489
echo "refresh static data"
85-
/usr/local/bin/invoke statics >> /usr/src/app/invoke.log
90+
/usr/local/bin/invoke statics > /usr/src/geonode/invoke.log 2>&1
8691
echo "static data refreshed"
87-
/usr/local/bin/invoke waitforgeoserver >> /usr/src/app/invoke.log
92+
/usr/local/bin/invoke waitforgeoserver > /usr/src/geonode/invoke.log 2>&1
8893
echo "waitforgeoserver task done"
89-
/usr/local/bin/invoke geoserverfixture >> /usr/src/app/invoke.log
94+
/usr/local/bin/invoke geoserverfixture > /usr/src/geonode/invoke.log 2>&1
9095
echo "geoserverfixture task done"
91-
/usr/local/bin/invoke updateadmin >> /usr/src/app/invoke.log
96+
/usr/local/bin/invoke updateadmin > /usr/src/geonode/invoke.log 2>&1
9297
echo "updateadmin task done"
9398

94-
cmd=$UWSGI_CMD
9599
echo "Executing UWSGI server $cmd for Production"
96100
fi
97101
fi
102+
103+
echo "-----------------------------------------------------"
104+
echo "FINISHED DJANGO ENTRYPOINT --------------------------"
105+
echo "-----------------------------------------------------"
106+
107+
# Run the CMD
98108
echo "got command $cmd"
99109
exec $cmd

0 commit comments

Comments
 (0)