/
Dockerfile
132 lines (116 loc) · 5.51 KB
/
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
FROM python:3.8-buster
MAINTAINER Manuel Holtgrewe <manuel.holtgrewe@bih-charite.de>
LABEL org.opencontainers.image.source https://github.com/bihealth/varfish-server
ARG app_git_url=https://github.com/bihealth/varfish-server.git
ARG app_git_tag
ARG app_git_depth=1
ENV DEBIAN_FRONTEND noninteractive
ENV CUSTOM_STATIC_DIR /usr/src/app/local-static
## Add the wait script to the image
ADD https://github.com/ufoscout/docker-compose-wait/releases/download/2.7.3/wait /usr/local/bin/wait
RUN chmod +x /usr/local/bin/wait
# Copy source code into Docker image.
RUN mkdir -p /usr/src
RUN git clone --depth $app_git_depth --branch $app_git_tag $app_git_url /usr/src/app
# Add postgres 12 repository
RUN wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc \
| apt-key add - && \
echo "deb http://apt.postgresql.org/pub/repos/apt buster-pgdg main" \
> /etc/apt/sources.list.d/pgdg.list
# Install system dependencies.
RUN apt-get update && \
apt-get install -y \
apt-utils \
gcc \
ldap-utils \
libldap2-dev \
libsasl2-dev \
make \
postgresql-client-12 \
wget \
xmlsec1 \
gnupg2
# Install Python dependencies.
RUN cd /usr/src/app && \
pip install --no-cache-dir -r requirements/production.txt && \
pip install --no-cache-dir -r requirements/local.txt && \
python -m nltk.downloader stopwords
# Build sphinx manual.
RUN cd /usr/src/app/docs_manual && \
make clean html
# Install miniconda3 and setup environment for annotation, required for Kiosk.
RUN ["/bin/bash","-c", "cd /tmp && \
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh && \
bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/miniconda3 && \
source /opt/miniconda3/bin/activate && \
conda install -c conda-forge -y mamba && \
mamba create -c bioconda -y -n varfish-annotator \
varfish-annotator-cli=0.10=0 \
htslib=1.9 \
openjdk=8 \
bcftools=1.9 && \
rm -f Miniconda3-latest-Linux-x86_64.sh"]
# Install modern nodejs
RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - && \
apt install nodejs
# Install npm dependencies.
RUN cd /usr/src/app/varfish/vueapp && \
npm ci && \
npm run build
# Download files from CDN.
RUN mkdir -p /usr/src/app/local-static/local/css && \
mkdir -p /usr/src/app/local-static/local/fonts && \
mkdir -p /usr/src/app/local-static/local/js && \
cd /usr/src/app/local-static/local/fonts && \
wget \
https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/fonts/FontAwesome.otf \
https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/fonts/fontawesome-webfont.eot \
https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/fonts/fontawesome-webfont.svg \
https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/fonts/fontawesome-webfont.ttf \
https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/fonts/fontawesome-webfont.woff \
https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/fonts/fontawesome-webfont.woff2 && \
\
cd /usr/src/app/local-static/local/css && \
wget \
https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css \
https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css \
https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.18/css/bootstrap-select.min.css \
https://cdn.datatables.net/1.10.24/css/dataTables.jqueryui.min.css \
https://cdn.jsdelivr.net/npm/bootstrap4-tagsinput@4.1.3/tagsinput.css && \
\
cd /usr/src/app/local-static/local/js && \
wget \
https://code.jquery.com/jquery-3.5.1.min.js \
https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js \
https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.4/js/tether.min.js \
https://cdnjs.cloudflare.com/ajax/libs/shepherd/1.8.1/js/shepherd.min.js \
https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js \
https://browser.sentry-cdn.com/6.2.5/bundle.tracing.min.js \
https://cdn.datatables.net/1.10.24/js/jquery.dataTables.min.js \
https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.18/js/bootstrap-select.min.js \
https://cdn.jsdelivr.net/npm/bootstrap4-tagsinput@4.1.3/tagsinput.js \
https://cdnjs.cloudflare.com/ajax/libs/jsrender/1.0.11/jsrender.min.js \
https://cdn.plot.ly/plotly-1.54.5.min.js \
https://cdnjs.cloudflare.com/ajax/libs/axios/0.21.1/axios.min.js \
https://cdnjs.cloudflare.com/ajax/libs/google-palette/1.1.0/palette.min.js \
https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js
# Get icons
RUN cd /usr/src/app && \
DJANGO_SECRET_KEY=for-build-only \
DJANGO_SETTINGS_MODULE=config.settings.production \
DATABASE_URL=postgres://sodar:sodar@fake/sodar \
python manage.py geticons -c mdi bi cil fa-regular fa-solid fluent gridicons octicon
# Prepare static files
RUN cd /usr/src/app && \
mkdir -p /usr/src/app/varfish/vueapp/dist && \
DJANGO_SECRET_KEY=for-build-only \
DJANGO_SETTINGS_MODULE=config.settings.production \
DATABASE_URL=postgres://varfish:varfish@fake/varfish \
python manage.py collectstatic --no-input
# Define the entry point.
COPY docker-entrypoint.sh /usr/local/bin
RUN chmod +x /usr/local/bin/docker-entrypoint.sh && \
ln -s /usr/local/bin/docker-entrypoint.sh / # backwards compat
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["wsgi"]
EXPOSE 8080/tcp