diff --git a/.dockerignore b/.dockerignore index af344e0b..5322b2db 100644 --- a/.dockerignore +++ b/.dockerignore @@ -5,3 +5,4 @@ README.md tubesync/media tubesync/downloads +db.sqlite3 \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 33158962..250d2300 100644 --- a/Dockerfile +++ b/Dockerfile @@ -61,11 +61,30 @@ RUN export ARCH=$(case ${TARGETPLATFORM:-linux/amd64} in \ # Clean up rm -rf /tmp/s6-overlay-${ARCH}.tar.gz && \ rm -rf /tmp/ffmpeg-${ARCH}.tar.xz && \ - apt-get -y autoremove --purge curl binutils xz-utils + apt-get -y autoremove --purge curl binutils xz-utils && \ + rm -rf /var/lib/apt/lists/* && \ + rm -rf /var/cache/apt/* && \ + rm -rf /tmp/* -# Copy app -COPY tubesync /app -COPY tubesync/tubesync/local_settings.py.container /app/tubesync/local_settings.py +# Install dependencies we keep +RUN set -x && \ + apt-get update && \ + # Install required distro packages + apt-get -y --no-install-recommends install \ + libjpeg62-turbo \ + libmariadb3 \ + libpq5 \ + libwebp7 \ + nginx-light \ + pipenv \ + pkgconf \ + python3 \ + python3-wheel \ + redis-server \ + && apt-get -y autoclean && \ + rm -rf /var/lib/apt/lists/* && \ + rm -rf /var/cache/apt/* && \ + rm -rf /tmp/* # Copy over pip.conf to use piwheels COPY pip.conf /etc/pip.conf @@ -79,59 +98,41 @@ WORKDIR /app # Set up the app RUN set -x && \ apt-get update && \ - # Install required distro packages - apt-get -y install nginx-light && \ + # Install required build packages apt-get -y --no-install-recommends install \ - python3 \ - python3-dev \ - python3-pip \ - python3-wheel \ - pipenv \ - gcc \ + default-libmysqlclient-dev \ g++ \ + gcc \ + libjpeg-dev \ + libpq-dev \ + libwebp-dev \ make \ - pkgconf \ - default-libmysqlclient-dev \ - libmariadb3 \ postgresql-common \ - libpq-dev \ - libpq5 \ - libjpeg62-turbo \ - libwebp7 \ - libjpeg-dev \ + python3-dev \ + python3-pip \ zlib1g-dev \ - libwebp-dev \ - redis-server && \ + && \ # Create a 'app' user which the application will run as groupadd app && \ useradd -M -d /app -s /bin/false -g app app && \ # Install non-distro packages PIPENV_VERBOSITY=64 pipenv install --system --skip-lock && \ - # Make absolutely sure we didn't accidentally bundle a SQLite dev database - rm -rf /app/db.sqlite3 && \ - # Run any required app commands - /usr/bin/python3 /app/manage.py compilescss && \ - /usr/bin/python3 /app/manage.py collectstatic --no-input --link && \ - # Create config, downloads and run dirs - mkdir -p /run/app && \ - mkdir -p /config/media && \ - mkdir -p /downloads/audio && \ - mkdir -p /downloads/video && \ # Clean up rm /app/Pipfile && \ pipenv --clear && \ apt-get -y autoremove --purge \ - python3-pip \ - python3-dev \ - gcc \ + default-libmysqlclient-dev \ g++ \ + gcc \ + libjpeg-dev \ + libpq-dev \ + libwebp-dev \ make \ - default-libmysqlclient-dev \ postgresql-common \ - libpq-dev \ - libjpeg-dev \ + python3-dev \ + python3-pip \ zlib1g-dev \ - libwebp-dev && \ + && \ apt-get -y autoremove && \ apt-get -y autoclean && \ rm -rf /var/lib/apt/lists/* && \ @@ -143,6 +144,25 @@ RUN set -x && \ chown root:root /root && \ chmod 0755 /root + +# Copy app +COPY tubesync /app +COPY tubesync/tubesync/local_settings.py.container /app/tubesync/local_settings.py + +# Build app +RUN set -x && \ + # Make absolutely sure we didn't accidentally bundle a SQLite dev database + rm -rf /app/db.sqlite3 && \ + # Run any required app commands + /usr/bin/python3 /app/manage.py compilescss && \ + /usr/bin/python3 /app/manage.py collectstatic --no-input --link && \ + # Create config, downloads and run dirs + mkdir -p /run/app && \ + mkdir -p /config/media && \ + mkdir -p /downloads/audio && \ + mkdir -p /downloads/video + + # Append software versions RUN set -x && \ FFMPEG_VERSION=$(/usr/local/bin/ffmpeg -version | head -n 1 | awk '{ print $3 }') && \ diff --git a/README.md b/README.md index 79654448..8f0d259b 100644 --- a/README.md +++ b/README.md @@ -122,7 +122,6 @@ occurring, typical ones are file permission issues. Alternatively, for Docker Compose, you can use something like: ```yml -version: '3.7' services: tubesync: image: ghcr.io/meeb/tubesync:latest