-
Notifications
You must be signed in to change notification settings - Fork 171
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
build: backport ansible-removal dockerfile update (#3862)
The Dockerfile has been updated to migrate from using Ansible to Dockerfile for building docker image.
- Loading branch information
1 parent
f7881da
commit 3c25b57
Showing
2 changed files
with
69 additions
and
44 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,4 @@ | ||
.dev/ | ||
htmlcov/ | ||
Dockerfile | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,75 +1,98 @@ | ||
FROM ubuntu:focal as app | ||
|
||
ENV DEBIAN_FRONTEND noninteractive | ||
# System requirements. | ||
ENV DEBIAN_FRONTEND=noninteractive | ||
RUN apt-get update && \ | ||
apt-get upgrade -qy | ||
RUN apt-get install --yes \ | ||
git \ | ||
language-pack-en \ | ||
python3-venv \ | ||
python3.8-dev \ | ||
python3.8-venv \ | ||
build-essential \ | ||
libffi-dev \ | ||
libmysqlclient-dev \ | ||
libxml2-dev \ | ||
libxslt1-dev \ | ||
libjpeg-dev \ | ||
libssl-dev \ | ||
libcairo2-dev | ||
|
||
RUN rm -rf /var/lib/apt/lists/* | ||
|
||
ENV VIRTUAL_ENV=/venv | ||
RUN python3.8 -m venv $VIRTUAL_ENV | ||
ENV PATH="$VIRTUAL_ENV/bin:$PATH" | ||
|
||
RUN pip install pip==20.2.3 setuptools==50.3.0 nodeenv | ||
RUN apt update && \ | ||
apt-get install -qy \ | ||
curl \ | ||
# required by bower installer | ||
git \ | ||
language-pack-en \ | ||
build-essential \ | ||
python3.8-dev \ | ||
python3-virtualenv \ | ||
python3.8-distutils \ | ||
libmysqlclient-dev \ | ||
libssl-dev \ | ||
libcairo2-dev && \ | ||
rm -rf /var/lib/apt/lists/* | ||
|
||
# Use UTF-8. | ||
RUN locale-gen en_US.UTF-8 | ||
ENV LANG en_US.UTF-8 | ||
ENV LANGUAGE en_US:en | ||
ENV LC_ALL en_US.UTF-8 | ||
|
||
# Make necessary directories and environment variables. | ||
RUN mkdir -p /edx/var/discovery/staticfiles | ||
RUN mkdir -p /edx/var/discovery/media | ||
ENV DJANGO_SETTINGS_MODULE course_discovery.settings.production | ||
ARG COMMON_APP_DIR="/edx/app" | ||
ARG COMMON_CFG_DIR="/edx/etc" | ||
ARG DISCOVERY_SERVICE_NAME="discovery" | ||
ARG DISCOVERY_APP_DIR="${COMMON_APP_DIR}/${DISCOVERY_SERVICE_NAME}" | ||
ARG DISCOVERY_VENV_DIR="${COMMON_APP_DIR}/${DISCOVERY_SERVICE_NAME}/venvs/${DISCOVERY_SERVICE_NAME}" | ||
ARG DISCOVERY_CODE_DIR="${DISCOVERY_APP_DIR}/${DISCOVERY_SERVICE_NAME}" | ||
ARG DISCOVERY_NODEENV_DIR="${DISCOVERY_APP_DIR}/nodeenvs/${DISCOVERY_SERVICE_NAME}" | ||
|
||
ENV PATH "${DISCOVERY_VENV_DIR}/bin:${DISCOVERY_NODEENV_DIR}/bin:$PATH" | ||
ENV DISCOVERY_CFG "/edx/etc/discovery.yml" | ||
ENV DISCOVERY_CODE_DIR "${DISCOVERY_CODE_DIR}" | ||
ENV DISCOVERY_APP_DIR "${DISCOVERY_APP_DIR}" | ||
|
||
RUN virtualenv -p python3.8 --always-copy ${DISCOVERY_VENV_DIR} | ||
|
||
# No need to activate discovery venv as it is already in path | ||
RUN pip install nodeenv | ||
|
||
RUN nodeenv ${DISCOVERY_NODEENV_DIR} --node=16.14.0 --prebuilt && npm install -g [email protected] | ||
|
||
# Working directory will be root of repo. | ||
WORKDIR /edx/app/discovery | ||
WORKDIR ${DISCOVERY_CODE_DIR} | ||
|
||
# Copy just JS requirements and install them. | ||
COPY package.json package.json | ||
COPY package-lock.json package-lock.json | ||
RUN nodeenv /edx/app/nodeenv --node=16.14.2 --npm=8.5.x --prebuilt | ||
ENV PATH /edx/app/nodeenv/bin:${PATH} | ||
RUN npm install --production | ||
COPY bower.json bower.json | ||
RUN ./node_modules/.bin/bower install --allow-root --production | ||
RUN npm install --production && ./node_modules/.bin/bower install --allow-root --production | ||
|
||
# Expose canonical Discovery port | ||
EXPOSE 18381 | ||
EXPOSE 8381 | ||
|
||
FROM app as prod | ||
|
||
ENV DJANGO_SETTINGS_MODULE "course_discovery.settings.production" | ||
|
||
# Copy just Python requirements & install them. | ||
COPY requirements/ requirements/ | ||
RUN pip install -r requirements/production.txt | ||
COPY requirements/production.txt ${DISCOVERY_CODE_DIR}/requirements/production.txt | ||
|
||
RUN pip install -r ${DISCOVERY_CODE_DIR}/requirements/production.txt | ||
|
||
# Copy over rest of code. | ||
# We do this AFTER requirements so that the requirements cache isn't busted | ||
# every time any bit of code is changed. | ||
COPY . . | ||
|
||
# Expose canonical Discovery port | ||
EXPOSE 8381 | ||
|
||
CMD gunicorn --bind=0.0.0.0:8381 --workers 2 --max-requests=1000 -c course_discovery/docker_gunicorn_configuration.py course_discovery.wsgi:application | ||
|
||
FROM app as newrelic | ||
RUN pip install newrelic | ||
CMD newrelic-admin run-program gunicorn --bind=0.0.0.0:8381 --workers 2 --max-requests=1000 -c course_discovery/docker_gunicorn_configuration.py course_discovery.wsgi:application | ||
FROM app as dev | ||
|
||
ENV DJANGO_SETTINGS_MODULE "course_discovery.settings.devstack" | ||
|
||
COPY requirements/local.txt ${DISCOVERY_CODE_DIR}/requirements/local.txt | ||
COPY requirements/django.txt ${DISCOVERY_CODE_DIR}/requirements/django.txt | ||
|
||
RUN pip install -r ${DISCOVERY_CODE_DIR}/requirements/django.txt | ||
RUN pip install -r ${DISCOVERY_CODE_DIR}/requirements/local.txt | ||
|
||
# Devstack related step for backwards compatibility | ||
RUN touch ${DISCOVERY_APP_DIR}/discovery_env | ||
|
||
# Copy over rest of code. | ||
# We do this AFTER requirements so that the requirements cache isn't busted | ||
# every time any bit of code is changed. | ||
COPY . . | ||
|
||
CMD while true; do python ./manage.py runserver 0.0.0.0:8381; sleep 2; done | ||
|
||
########################################################### | ||
# Define k8s target | ||
FROM app as kubernetes | ||
FROM prod as kubernetes | ||
ENV DISCOVERY_SETTINGS='kubernetes' | ||
ENV DJANGO_SETTINGS_MODULE="course_discovery.settings.$DISCOVERY_SETTINGS" |