99 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Docker
		
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Docker
		
	
	
	
| FROM alpine:3.16 as pre-build
 | |
| 
 | |
| # We need this additional step to avoid having poetrys deps interacting with our
 | |
| # dependencies. This is only required until alpine 3.16 is released, since this
 | |
| # allows us to install poetry as package.
 | |
| 
 | |
| RUN apk add --no-cache python3 py3-cryptography py3-pip poetry
 | |
| COPY pyproject.toml poetry.lock /
 | |
| RUN poetry export --without-hashes > requirements.txt
 | |
| RUN poetry export --dev --without-hashes > dev-requirements.txt
 | |
| 
 | |
| FROM alpine:3.16 as builder
 | |
| 
 | |
| RUN \
 | |
|     echo 'installing dependencies' && \
 | |
|     apk add --no-cache \
 | |
|     git \
 | |
|     musl-dev \
 | |
|     gcc \
 | |
|     postgresql-dev \
 | |
|     python3-dev \
 | |
|     py3-psycopg2 \
 | |
|     py3-cryptography \
 | |
|     libldap \
 | |
|     libffi-dev \
 | |
|     make \
 | |
|     zlib-dev \
 | |
|     jpeg-dev \
 | |
|     openldap-dev \
 | |
|     openssl-dev \
 | |
|     cargo \
 | |
|     libxml2-dev \
 | |
|     libxslt-dev \
 | |
|     curl \
 | |
|     && \
 | |
|     ln -s /usr/bin/python3 /usr/bin/python
 | |
| 
 | |
| # create virtual env for next stage
 | |
| RUN python -m venv --system-site-packages /venv
 | |
| # emulate activation by prefixing PATH
 | |
| ENV PATH="/venv/bin:/root/.local/bin:$PATH" VIRTUAL_ENV=/venv
 | |
| 
 | |
| COPY --from=pre-build /requirements.txt /requirements.txt
 | |
| COPY --from=pre-build /dev-requirements.txt /dev-requirements.txt
 | |
| # hack around https://github.com/pypa/pip/issues/6158#issuecomment-456619072
 | |
| ENV PIP_DOWNLOAD_CACHE=/noop/
 | |
| RUN \
 | |
|     echo 'installing pip requirements' && \
 | |
|     pip3 install --upgrade pip && \
 | |
|     pip3 install setuptools wheel && \
 | |
|     # Currently we are unable to relieably build cryptography on armv7. This
 | |
|     # is why we need to use the package shipped by Alpine Linux, which is currently
 | |
|     # version 3.3.2. Since poetry does not allow in-place dependency pinning, we need
 | |
|     # to install the deps using pip.
 | |
|     cat /requirements.txt | grep -Ev 'cryptography|autobahn' | pip3 install -r /dev/stdin cryptography==3.3.2 autobahn==21.2.1 && \
 | |
|     rm -rf $PIP_DOWNLOAD_CACHE
 | |
| 
 | |
| ARG install_dev_deps=0
 | |
| RUN \
 | |
|     if [ "$install_dev_deps" = "1" ] ; then \
 | |
|       echo "Installing dev dependencies" && \
 | |
|     cat /dev-requirements.txt | grep -Ev 'cryptography|autobahn' | pip3 install -r /dev/stdin cryptography==3.3.2 autobahn==21.2.1 \
 | |
|     ; else  \
 | |
|       echo "Skipping dev deps installation" \
 | |
|     ; fi
 | |
| 
 | |
| 
 | |
| FROM alpine:3.16 as build-image
 | |
| 
 | |
| COPY --from=builder /venv /venv
 | |
| # emulate activation by prefixing PATH
 | |
| ENV PATH="/venv/bin:$PATH"
 | |
| 
 | |
| RUN apk add --no-cache \
 | |
|     libmagic \
 | |
|     bash \
 | |
|     gettext \
 | |
|     python3 \
 | |
|     jpeg-dev \
 | |
|     ffmpeg \
 | |
|     libpq \
 | |
|     libxml2 \
 | |
|     libxslt \
 | |
|     py3-cryptography \
 | |
| 		libldap \
 | |
|     && \
 | |
|     ln -s /usr/bin/python3 /usr/bin/python
 | |
| 
 | |
| COPY . /app
 | |
| WORKDIR /app
 | |
| 
 | |
| RUN find . -type d -exec chmod 755 {} \+
 | |
| 
 | |
| ENV CACHE_URL="redis://redis:6379/0"
 | |
| ENV CELERY_BROKER_URL="redis://redis:6379/0"
 | |
| 
 | |
| ENTRYPOINT ["./compose/django/entrypoint.sh"]
 | |
| CMD ["./compose/django/server.sh"]
 |