forked from CenterForOpenScience/osf.io
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDockerfile
167 lines (147 loc) · 7.74 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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
FROM python:2.7-slim
# Libraries such as matplotlib require a HOME directory for cache and configuration
RUN usermod -d /home www-data && chown www-data:www-data /home
# Install dependancies
RUN apt-get update \
&& apt-get install -y \
git \
libev4 \
libev-dev \
libevent-dev \
libxml2-dev \
libxslt1-dev \
zlib1g-dev \
# matplotlib
libfreetype6-dev \
libxft-dev \
# # scipy
gfortran \
libopenblas-dev \
liblapack-dev \
# cryptography
build-essential \
libssl-dev \
libffi-dev \
python-dev \
&& apt-get clean \
&& apt-get autoremove -y \
&& rm -rf /var/lib/apt/lists/*
# grab gosu for easy step-down from root
ENV GOSU_VERSION 1.4
RUN apt-get update \
&& apt-get install -y \
curl \
&& gpg --keyserver pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
&& curl -o /usr/local/bin/gosu -SL "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \
&& curl -o /usr/local/bin/gosu.asc -SL "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \
&& gpg --verify /usr/local/bin/gosu.asc \
&& rm /usr/local/bin/gosu.asc \
&& chmod +x /usr/local/bin/gosu \
&& apt-get clean \
&& apt-get autoremove -y \
curl \
&& rm -rf /var/lib/apt/lists/*
# Node : https://registry.hub.docker.com/u/library/node/
ENV NODE_VERSION 0.12.4
ENV NPM_VERSION 2.10.1
RUN apt-get update \
&& apt-get install -y \
curl \
&& gpg --keyserver pool.sks-keyservers.net --recv-keys 7937DFD2AB06298B2293C3187D33FF9D0246406D 114F43EE0176B71C7BC219DD50A3051F888C628D \
&& curl -SLO "http://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz" \
&& curl -SLO "http://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
&& gpg --verify SHASUMS256.txt.asc \
&& grep " node-v$NODE_VERSION-linux-x64.tar.gz\$" SHASUMS256.txt.asc | sha256sum -c - \
&& tar -xzf "node-v$NODE_VERSION-linux-x64.tar.gz" -C /usr/local --strip-components=1 \
&& rm "node-v$NODE_VERSION-linux-x64.tar.gz" SHASUMS256.txt.asc \
&& npm install -g npm@"$NPM_VERSION" \
&& npm cache clear \
&& apt-get clean \
&& apt-get autoremove -y \
curl \
&& rm -rf /var/lib/apt/lists/*
RUN mkdir -p /code
WORKDIR /code
RUN pip install -U pip
COPY ./requirements.txt /code/
COPY ./requirements/ /code/requirements/
COPY ./website/addons/badges/requirements.txt /code/website/addons/badges/
COPY ./website/addons/box/requirements.txt /code/website/addons/box/
COPY ./website/addons/dataverse/requirements.txt /code/website/addons/dataverse/
COPY ./website/addons/dropbox/requirements.txt /code/website/addons/dropbox/
COPY ./website/addons/github/requirements.txt /code/website/addons/github/
COPY ./website/addons/mendeley/requirements.txt /code/website/addons/mendeley/
COPY ./website/addons/owncloud/requirements.txt /code/website/addons/owncloud/
COPY ./website/addons/s3/requirements.txt /code/website/addons/s3/
COPY ./website/addons/twofactor/requirements.txt /code/website/addons/twofactor/
COPY ./website/addons/zotero/requirements.txt /code/website/addons/zotero/
RUN pip install --no-cache-dir -c /code/requirements/constraints.txt -r /code/requirements.txt \
&& pip install --no-cache-dir -c /code/requirements/constraints.txt -r /code/requirements/metrics.txt \
&& pip install --no-cache-dir -c /code/requirements/constraints.txt -r /code/requirements/release.txt
RUN pip install --no-cache-dir -c /code/requirements/constraints.txt -r /code/website/addons/badges/requirements.txt \
&& pip install --no-cache-dir -c /code/requirements/constraints.txt -r /code/website/addons/box/requirements.txt \
&& pip install --no-cache-dir -c /code/requirements/constraints.txt -r /code/website/addons/dataverse/requirements.txt \
&& pip install --no-cache-dir -c /code/requirements/constraints.txt -r /code/website/addons/dropbox/requirements.txt \
&& pip install --no-cache-dir -c /code/requirements/constraints.txt -r /code/website/addons/github/requirements.txt \
&& pip install --no-cache-dir -c /code/requirements/constraints.txt -r /code/website/addons/mendeley/requirements.txt \
&& pip install --no-cache-dir -c /code/requirements/constraints.txt -r /code/website/addons/owncloud/requirements.txt \
&& pip install --no-cache-dir -c /code/requirements/constraints.txt -r /code/website/addons/s3/requirements.txt \
&& pip install --no-cache-dir -c /code/requirements/constraints.txt -r /code/website/addons/twofactor/requirements.txt \
&& pip install --no-cache-dir -c /code/requirements/constraints.txt -r /code/website/addons/zotero/requirements.txt
RUN (pip uninstall uritemplate.py --yes || true) \
&& pip install --no-cache-dir uritemplate.py==0.3.0
# Bower setup and clean up
COPY ./.bowerrc /code/
COPY ./bower.json /code/
RUN npm install bower \
&& ./node_modules/bower/bin/bower install --allow-root \
&& ./node_modules/bower/bin/bower cache clean --allow-root
# /Bower
# NPM/webpack
COPY ./package.json /code/
RUN npm install --production
COPY ./tasks /code/tasks
COPY ./website/settings /code/website/settings/
COPY ./api/base/settings /code/api/base/settings/
COPY ./website/__init__.py /code/website/__init__.py
COPY ./addons.json /code/addons.json
RUN mv /code/website/settings/local-dist.py /code/website/settings/local.py \
&& mv /code/api/base/settings/local-dist.py /code/api/base/settings/local.py
COPY ./webpack* /code/
COPY ./website/static /code/website/static/
COPY ./website/addons/badges/static/ /code/website/addons/badges/static/
COPY ./website/addons/box/static/ /code/website/addons/box/static/
COPY ./website/addons/citations/static/ /code/website/addons/citations/static/
COPY ./website/addons/dataverse/static/ /code/website/addons/dataverse/static/
COPY ./website/addons/dropbox/static/ /code/website/addons/dropbox/static/
COPY ./website/addons/figshare/static/ /code/website/addons/figshare/static/
COPY ./website/addons/forward/static/ /code/website/addons/forward/static/
COPY ./website/addons/github/static/ /code/website/addons/github/static/
COPY ./website/addons/googledrive/static/ /code/website/addons/googledrive/static/
COPY ./website/addons/mendeley/static/ /code/website/addons/mendeley/static/
COPY ./website/addons/osfstorage/static/ /code/website/addons/osfstorage/static/
COPY ./website/addons/owncloud/static/ /code/website/addons/owncloud/static/
COPY ./website/addons/s3/static/ /code/website/addons/s3/static/
COPY ./website/addons/twofactor/static/ /code/website/addons/twofactor/static/
COPY ./website/addons/wiki/static/ /code/website/addons/wiki/static/
COPY ./website/addons/zotero/static/ /code/website/addons/zotero/static/
RUN mkdir -p /code/website/static/built/ \
&& invoke build_js_config_files \
&& node ./node_modules/webpack/bin/webpack.js --config webpack.prod.config.js \
# && rm -rf /code/node_modules \ (needed for sharejs)
&& npm install list-of-licenses \
&& rm -rf /root/.npm \
npm cache clean
# /NPM/webpack
# Copy the rest of the code over
COPY ./ /code/
ARG GIT_COMMIT=
ENV GIT_COMMIT ${GIT_COMMIT}
RUN export DJANGO_SETTINGS_MODULE=api.base.settings && python manage.py collectstatic --noinput --no-init-app \
&& export DJANGO_SETTINGS_MODULE=admin.base.settings && python manage.py collectstatic --noinput --no-init-app
RUN touch /code/website/templates/_log_templates.mako \
&& chmod o+w /code/website/templates/_log_templates.mako \
&& touch /code/website/static/built/nodeCategories.json \
&& chmod o+w /code/website/static/built/nodeCategories.json \
&& rm /code/website/settings/local.py /code/api/base/settings/local.py
CMD ["gosu", "nobody", "invoke", "--list"]