diff --git a/api/Dockerfile b/api/Dockerfile index f82ab3e89f2e5df61e16f393bf5659032766d8de..92a4d7f499624b5038fec3b4d13c3433834a7d6d 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -1,25 +1,47 @@ -FROM python:3.6 +FROM alpine:3.8 -ENV PYTHONUNBUFFERED 1 - -# Requirements have to be pulled and installed here, otherwise caching won't work -RUN echo 'deb http://httpredir.debian.org/debian/ jessie-backports main' > /etc/apt/sources.list.d/ffmpeg.list -COPY ./requirements.apt /requirements.apt -RUN apt-get update; \ - grep "^[^#;]" requirements.apt | \ - grep -Fv "python3-dev" | \ - xargs apt-get install -y --no-install-recommends; \ - rm -rf /usr/share/doc/* /usr/share/locale/* +RUN \ + echo 'installing dependencies' && \ + apk add \ + bash \ + git \ + gettext \ + musl-dev \ + gcc \ + postgresql-dev \ + python3-dev \ + py3-psycopg2 \ + py3-pillow \ + libldap \ + ffmpeg \ + libpq \ + libmagic \ + libffi-dev \ + zlib-dev \ + openldap-dev && \ + \ + \ + ln -s /usr/bin/python3 /usr/bin/python +RUN mkdir /requirements COPY ./requirements/base.txt /requirements/base.txt -RUN pip install -r /requirements/base.txt - -COPY . /app - -# Since youtube-dl code is updated fairly often, we split it here -RUN pip install --upgrade youtube-dl +RUN \ + echo 'fixing requirements file for alpine' && \ + sed -i '/Pillow/d' /requirements/base.txt && \ + \ + \ + echo 'installing pip requirements' && \ + pip3 install --no-cache-dir --upgrade pip && \ + pip3 install --no-cache-dir setuptools wheel && \ + pip3 install --no-cache-dir -r /requirements/base.txt -WORKDIR /app +ARG install_dev_deps=0 +COPY ./requirements/*.txt /requirements/ +RUN \ + if [ "$install_dev_deps" = "1" ] ; then echo "Installing dev dependencies" && pip3 install --no-cache-dir -r /requirements/local.txt -r /requirements/test.txt ; else echo "Skipping dev deps installation" ; fi ENTRYPOINT ["./compose/django/entrypoint.sh"] CMD ["./compose/django/daphne.sh"] + +COPY . /app +WORKDIR /app diff --git a/api/compose/django/dev-entrypoint.sh b/api/compose/django/dev-entrypoint.sh index 6deeebb0085ede8bd696d59fb78af1d6d778a41e..4ba1611481d01b7c11427fbd0b6b2e7ac0d92a08 100755 --- a/api/compose/django/dev-entrypoint.sh +++ b/api/compose/django/dev-entrypoint.sh @@ -1,3 +1,3 @@ -#!/bin/bash +#!/bin/sh set -e exec "$@" diff --git a/api/compose/django/entrypoint.sh b/api/compose/django/entrypoint.sh index ac85f1164320d4a5f18c542a6aa44e0c4ef9511e..3fc06a4165676ccdeafcf0d7b09769c8a27df9f0 100755 --- a/api/compose/django/entrypoint.sh +++ b/api/compose/django/entrypoint.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh set -e # This entrypoint is used to play nicely with the current cookiecutter configuration. # Since docker-compose relies heavily on environment variables itself for configuration, we'd have to define multiple diff --git a/api/docker/Dockerfile.test b/api/docker/Dockerfile.test deleted file mode 100644 index 9e3202f92eb6be382efc8fcfbd2a4d55d10e61a5..0000000000000000000000000000000000000000 --- a/api/docker/Dockerfile.test +++ /dev/null @@ -1,24 +0,0 @@ -FROM python:3.6 - -ENV PYTHONUNBUFFERED 1 - -# Requirements have to be pulled and installed here, otherwise caching won't work -RUN echo 'deb http://httpredir.debian.org/debian/ jessie-backports main' > /etc/apt/sources.list.d/ffmpeg.list -COPY ./requirements.apt /requirements.apt -RUN apt-get update; \ - grep "^[^#;]" requirements.apt | \ - grep -Fv "python3-dev" | \ - xargs apt-get install -y --no-install-recommends; \ - rm -rf /usr/share/doc/* /usr/share/locale/* - -RUN mkdir /requirements -COPY ./requirements/base.txt /requirements/base.txt -RUN pip install -r /requirements/base.txt -COPY ./requirements/local.txt /requirements/local.txt -RUN pip install -r /requirements/local.txt -COPY ./requirements/test.txt /requirements/test.txt -RUN pip install -r /requirements/test.txt - -COPY . /app -WORKDIR /app -ENTRYPOINT ["compose/django/dev-entrypoint.sh"] diff --git a/changes/changelog.d/alpine.enhancement b/changes/changelog.d/alpine.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..a7744a87abca7e59a60d8437ca498ecada9bc76a --- /dev/null +++ b/changes/changelog.d/alpine.enhancement @@ -0,0 +1 @@ +Based Docker image on alpine to have a smaller (and faster to build) image diff --git a/dev.yml b/dev.yml index 3eac5e6350f941c8716220ccd07daa5a6f5d3225..2b1e7c5fee3af2996f204dfe4c7a47206266f790 100644 --- a/dev.yml +++ b/dev.yml @@ -39,17 +39,20 @@ services: networks: - internal - celeryworker: + api: env_file: - .env.dev - .env - build: + build: &backend context: ./api - dockerfile: docker/Dockerfile.test - links: - - postgres - - redis - command: celery -A funkwhale_api.taskapp worker -l debug -B + dockerfile: Dockerfile + args: + install_dev_deps: 1 + entrypoint: compose/django/dev-entrypoint.sh + command: python /app/manage.py runserver 0.0.0.0:${FUNKWHALE_API_PORT-5000} + volumes: + - ./api:/app + - "${MUSIC_DIRECTORY_PATH-./data/music}:/music:ro" environment: - "FUNKWHALE_HOSTNAME=${FUNKWHALE_HOSTNAME-localhost}" - "FUNKWHALE_HOSTNAME_SUFFIX=funkwhale.test" @@ -57,22 +60,23 @@ services: - "FUNKWHALE_PROTOCOL=${FUNKWHALE_PROTOCOL-http}" - "DATABASE_URL=postgresql://postgres@postgres/postgres" - "CACHE_URL=redis://redis:6379/0" - volumes: - - ./api:/app - - "${MUSIC_DIRECTORY_PATH-./data/music}:/music:ro" + links: + - postgres + - redis networks: - internal - api: + cap_add: + - SYS_PTRACE + + celeryworker: env_file: - .env.dev - .env - build: - context: ./api - dockerfile: docker/Dockerfile.test - command: python /app/manage.py runserver 0.0.0.0:${FUNKWHALE_API_PORT-5000} - volumes: - - ./api:/app - - "${MUSIC_DIRECTORY_PATH-./data/music}:/music:ro" + build: *backend + links: + - postgres + - redis + command: celery -A funkwhale_api.taskapp worker -l debug -B environment: - "FUNKWHALE_HOSTNAME=${FUNKWHALE_HOSTNAME-localhost}" - "FUNKWHALE_HOSTNAME_SUFFIX=funkwhale.test" @@ -80,13 +84,11 @@ services: - "FUNKWHALE_PROTOCOL=${FUNKWHALE_PROTOCOL-http}" - "DATABASE_URL=postgresql://postgres@postgres/postgres" - "CACHE_URL=redis://redis:6379/0" - links: - - postgres - - redis + volumes: + - ./api:/app + - "${MUSIC_DIRECTORY_PATH-./data/music}:/music:ro" networks: - internal - cap_add: - - SYS_PTRACE nginx: command: /entrypoint.sh env_file: