Skip to content

Commit df41092

Browse files
authored
[docker] Run openwisp-monitor in docker (#163)
1 parent 57b0ded commit df41092

File tree

7 files changed

+99
-11
lines changed

7 files changed

+99
-11
lines changed

.travis.yml

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,23 @@ before_install:
3939

4040
install:
4141
- pip install -e .
42-
# TODO: removed when openwisp-controller 0.8.0 is released
43-
- pip install -U https://github.com/openwisp/openwisp-controller/tarball/master
44-
# TODO: removed when openwisp-users 0.3.0 is released
45-
- pip install -U https://github.com/openwisp/openwisp-users/tarball/master
46-
# TODO: remove when openwisp-notifications 0.1 is released
47-
- pip install -U https://github.com/openwisp/openwisp-notifications/tarball/master
42+
- sh install-dev.sh
4843

4944
script:
5045
- ./run-qa-checks
5146
- SAMPLE_APP=1 coverage run --source=openwisp_monitoring runtests.py
5247
- coverage run -a --source=openwisp_monitoring runtests.py
5348

49+
jobs:
50+
include:
51+
- stage: Deploy
52+
before_install: skip
53+
install: skip
54+
if: type = push AND branch = master
55+
script:
56+
- echo "$DOCKER_TOKEN" | docker login --username $DOCKER_USERNAME --password-stdin
57+
- docker build . -t openwisp/openwisp-monitoring:develop
58+
- docker push openwisp/openwisp-monitoring:develop
59+
5460
after_success:
5561
coveralls

Dockerfile

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
FROM python:3.7.5-slim-buster
2+
3+
RUN apt update && \
4+
apt install --yes zlib1g-dev libjpeg-dev gdal-bin libproj-dev \
5+
libgeos-dev libspatialite-dev libsqlite3-mod-spatialite \
6+
sqlite3 libsqlite3-dev openssl libssl-dev fping && \
7+
rm -rf /var/lib/apt/lists/* /root/.cache/pip/* /tmp/*
8+
9+
COPY install-dev.sh requirements-test.txt requirements.txt /opt/openwisp/
10+
RUN pip install -r /opt/openwisp/requirements.txt && \
11+
pip install -r /opt/openwisp/requirements-test.txt && \
12+
sh /opt/openwisp/install-dev.sh && \
13+
rm -rf /var/lib/apt/lists/* /root/.cache/pip/* /tmp/*
14+
15+
ADD . /opt/openwisp
16+
RUN pip install -U /opt/openwisp && \
17+
rm -rf /var/lib/apt/lists/* /root/.cache/pip/* /tmp/*
18+
WORKDIR /opt/openwisp/tests/
19+
ENV NAME=openwisp-monitoring \
20+
PYTHONBUFFERED=1 \
21+
INFLUXDB_HOST=influxdb \
22+
REDIS_HOST=redis
23+
CMD ["sh", "docker-entrypoint.sh"]
24+
EXPOSE 8000

README.rst

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -614,6 +614,12 @@ Install your forked repo:
614614
cd openwisp-monitoring/
615615
python setup.py develop
616616
617+
Install development dependencies:
618+
619+
.. code-block:: shell
620+
621+
./install-dev.sh
622+
617623
Install test requirements:
618624

619625
.. code-block:: shell
@@ -624,7 +630,7 @@ Start Redis and InfluxDB using docker-compose:
624630

625631
.. code-block:: shell
626632
627-
docker-compose up -d
633+
docker-compose up -d redis influxdb
628634
629635
Create the Django database:
630636

@@ -670,6 +676,15 @@ which are simple django apps that extend ``openwisp-monitoring`` with
670676
the sole purpose of testing its extensibility, for more information regarding
671677
this concept, read the following section.
672678

679+
Install and run on docker
680+
-------------------------
681+
682+
.. code-block:: shell
683+
684+
# ``--build`` parameter is useful when you want to
685+
# rebuild the openwisp-monitoring image with your changes.
686+
docker-compose up --build
687+
673688
Extending openwisp-monitoring
674689
-----------------------------
675690

docker-compose.yml

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,17 @@
11
version: "3"
22

33
services:
4+
monitoring:
5+
image: openwisp/openwisp-monitoring:develop
6+
build:
7+
context: .
8+
dockerfile: Dockerfile
9+
ports:
10+
- "8000:8000"
11+
depends_on:
12+
- influxdb
13+
- redis
14+
415
influxdb:
516
image: influxdb:1.8-alpine
617
volumes:
@@ -19,4 +30,4 @@ services:
1930
entrypoint: redis-server --appendonly yes
2031

2132
volumes:
22-
influxdb-data:
33+
influxdb-data: {}

install-dev.sh

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#!/bin/bash
2+
3+
# TODO: removed when openwisp-controller 0.8.0 is released
4+
pip install -U https://github.com/openwisp/openwisp-controller/tarball/master
5+
# TODO: removed when openwisp-users 0.3.0 is released
6+
pip install -U https://github.com/openwisp/openwisp-users/tarball/master
7+
# TODO: remove when openwisp-notifications 0.1 is released
8+
pip install -U https://github.com/openwisp/openwisp-notifications/tarball/master

tests/docker-entrypoint.sh

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#!/bin/bash
2+
3+
create_superuser() {
4+
local username="$1"
5+
local email="$2"
6+
local password="$3"
7+
cat <<EOF | python manage.py shell
8+
from django.contrib.auth import get_user_model
9+
10+
User = get_user_model()
11+
12+
if not User.objects.filter(username="$username").exists():
13+
User.objects.create_superuser("$username", "$email", "$password")
14+
else:
15+
print('User "{}" exists already, not created'.format("$username"))
16+
EOF
17+
}
18+
19+
python manage.py migrate --no-input
20+
create_superuser admin [email protected] admin
21+
celery -A openwisp2 worker -l info &
22+
celery -A openwisp2 beat -l info &
23+
python manage.py runserver 0.0.0.0:8000

tests/openwisp2/settings.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
'USER': 'openwisp',
2222
'PASSWORD': 'openwisp',
2323
'NAME': 'openwisp2',
24-
'HOST': 'localhost',
24+
'HOST': os.getenv('INFLUXDB_HOST', 'localhost'),
2525
'PORT': '8086',
2626
}
2727

@@ -144,10 +144,11 @@
144144

145145
OPENWISP_MONITORING_MANAGEMENT_IP_ONLY = False
146146

147+
redis_host = os.getenv('REDIS_HOST', 'localhost')
147148
CACHES = {
148149
'default': {
149150
'BACKEND': 'django_redis.cache.RedisCache',
150-
'LOCATION': 'redis://localhost/0',
151+
'LOCATION': f'redis://{redis_host}/0',
151152
'OPTIONS': {'CLIENT_CLASS': 'django_redis.client.DefaultClient',},
152153
}
153154
}
@@ -156,7 +157,7 @@
156157
SESSION_CACHE_ALIAS = 'default'
157158

158159
if not TESTING:
159-
CELERY_BROKER_URL = 'redis://localhost/1'
160+
CELERY_BROKER_URL = f'redis://{redis_host}/1'
160161
else:
161162
CELERY_TASK_ALWAYS_EAGER = True
162163
CELERY_TASK_EAGER_PROPAGATES = True

0 commit comments

Comments
 (0)