Skip to content

Commit bb7048f

Browse files
committed
single dockerfile behaves
1 parent d3411ce commit bb7048f

File tree

1 file changed

+247
-0
lines changed

1 file changed

+247
-0
lines changed

EverythingDockerfile

Lines changed: 247 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,247 @@
1+
# EverythingDockerfile - Multistage build combining all services
2+
# This combines mongodb, api, handler, ui, and telemetry into a single container
3+
4+
# Stage 1: MongoDB base
5+
FROM mongo:4.4.15 AS mongodb-stage
6+
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
7+
8+
# Stage 2: Neuroimaging tools and handler dependencies
9+
FROM neurodebian:nd20.04-non-free AS neuroimaging-stage
10+
SHELL ["/bin/bash", "-c"]
11+
ENV DEBIAN_FRONTEND noninteractive
12+
13+
RUN apt update && \
14+
apt-get update && apt-get upgrade -y
15+
16+
RUN apt update && apt install -y parallel python3 python3-pip tree curl unzip git jq python libgl-dev python-numpy bc
17+
18+
RUN pip3 install numpy==1.23.0 nibabel==4.0.0 pandas matplotlib pyyaml==5.4.1 pydicom==2.3.1 natsort pydeface && \
19+
pip3 install quickshear mne mne-bids pypet2bids==1.4.1
20+
21+
RUN apt-get install -y build-essential pkg-config cmake git pigz rename zstd libopenjp2-7 libgdcm-tools wget libopenblas-dev && \
22+
apt-get clean -y && apt-get autoclean -y && apt-get autoremove -y
23+
24+
RUN touch /.pet2bidsconfig && chown 1001:1001 /.pet2bidsconfig
25+
RUN echo "DEFAULT_METADATA_JSON=/usr/local/lib/python3.8/dist-packages/pypet2bids/template_json.json" > /.pet2bidsconfig
26+
27+
RUN mkdir -p /usr/local/fsl && \
28+
git clone https://github.com/dlevitas/FSL_binaries /usr/local/fsl && \
29+
rm -rf /usr/local/fsl/README.md && \
30+
mkdir -p /usr/local/fsl/data/standard && \
31+
mv /usr/local/fsl/bin/MNI152_T1_2mm_brain.nii.gz /usr/local/fsl/data/standard
32+
33+
ENV FSLDIR=/usr/local/fsl
34+
ENV PATH=$PATH:$FSLDIR/bin
35+
ENV FSLOUTPUTTYPE=NIFTI_GZ
36+
37+
RUN apt-get update \
38+
&& apt-get install -y ca-certificates curl gnupg \
39+
&& mkdir -p /etc/apt/keyrings \
40+
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
41+
42+
ARG NODE_MAJOR=20
43+
RUN echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list
44+
45+
RUN apt-get update \
46+
&& apt-get install nodejs -y
47+
48+
RUN cd /tmp && curl -fLO https://github.com/rordenlab/dcm2niix/releases/latest/download/dcm2niix_lnx.zip \
49+
&& unzip /tmp/dcm2niix_lnx.zip \
50+
&& mv dcm2niix /usr/local/bin
51+
52+
RUN mkdir -p /app
53+
54+
# Get bids-specification from github
55+
RUN cd /app && git clone https://github.com/bids-standard/bids-specification && \
56+
cd bids-specification && git checkout 3537e9edbc81545614d3ee605c398361099b6977
57+
58+
#install ROBEX
59+
ADD https://www.nitrc.org/frs/download.php/5994/ROBEXv12.linux64.tar.gz//?i_agree=1&download_now=1 /
60+
RUN tar -xzf /ROBEXv12.linux64.tar.gz
61+
ENV PATH /ROBEX:$PATH
62+
63+
ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules
64+
ENV PATH $NVM_DIR/v$NODE_VERSION/bin:$PATH
65+
66+
#install bids-validator
67+
RUN npm install -g [email protected]
68+
RUN npm install -g [email protected]
69+
RUN git clone https://github.com/bids-standard/bids-validator
70+
71+
# Stage 3: Node.js base for API and UI
72+
FROM node:20 AS nodejs-stage
73+
RUN npm install -g [email protected] pm2 typescript tsc-watch
74+
75+
# Stage 4: Telemetry dependencies
76+
FROM neurodebian:nd20.04-non-free AS telemetry-stage
77+
SHELL ["/bin/bash", "-c"]
78+
ENV DEBIAN_FRONTEND noninteractive
79+
80+
RUN apt update && \
81+
apt-get update && apt-get upgrade -y
82+
83+
RUN apt install -y parallel python3 python3-pip tree curl unzip git jq python libgl-dev python-numpy
84+
RUN pip3 install --upgrade pip
85+
RUN pip3 install conversiontelemetry
86+
87+
# Stage 5: Final combined stage
88+
FROM neurodebian:nd20.04-non-free AS everything
89+
SHELL ["/bin/bash", "-c"]
90+
ENV DEBIAN_FRONTEND noninteractive
91+
92+
# Install system dependencies
93+
RUN apt update && \
94+
apt-get update && apt-get upgrade -y && \
95+
apt install -y parallel python3 python3-pip tree curl unzip git jq python libgl-dev python-numpy bc \
96+
build-essential pkg-config cmake git pigz rename zstd libopenjp2-7 libgdcm-tools wget libopenblas-dev \
97+
ca-certificates gnupg supervisor && \
98+
apt-get clean -y && apt-get autoclean -y && apt-get autoremove -y
99+
100+
# Install Node.js 20
101+
RUN mkdir -p /etc/apt/keyrings \
102+
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
103+
104+
ARG NODE_MAJOR=20
105+
RUN echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list
106+
107+
RUN apt-get update && apt-get install nodejs -y
108+
109+
# Install Python packages
110+
RUN pip3 install numpy==1.23.0 nibabel==4.0.0 pandas matplotlib pyyaml==5.4.1 pydicom==2.3.1 natsort pydeface && \
111+
pip3 install quickshear mne mne-bids pypet2bids==1.4.1 conversiontelemetry
112+
113+
# Install MongoDB
114+
RUN wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | apt-key add - && \
115+
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.4.list && \
116+
apt-get update && \
117+
apt-get install -y mongodb-org=4.4.15 mongodb-org-server=4.4.15 mongodb-org-shell=4.4.15 mongodb-org-mongos=4.4.15 mongodb-org-tools=4.4.15
118+
119+
# Install neuroimaging tools
120+
RUN touch /.pet2bidsconfig && chown 1001:1001 /.pet2bidsconfig
121+
RUN echo "DEFAULT_METADATA_JSON=/usr/local/lib/python3.8/dist-packages/pypet2bids/template_json.json" > /.pet2bidsconfig
122+
123+
RUN mkdir -p /usr/local/fsl && \
124+
git clone https://github.com/dlevitas/FSL_binaries /usr/local/fsl && \
125+
rm -rf /usr/local/fsl/README.md && \
126+
mkdir -p /usr/local/fsl/data/standard && \
127+
mv /usr/local/fsl/bin/MNI152_T1_2mm_brain.nii.gz /usr/local/fsl/data/standard
128+
129+
ENV FSLDIR=/usr/local/fsl
130+
ENV PATH=$PATH:$FSLDIR/bin
131+
ENV FSLOUTPUTTYPE=NIFTI_GZ
132+
133+
# Install dcm2niix
134+
RUN cd /tmp && curl -fLO https://github.com/rordenlab/dcm2niix/releases/latest/download/dcm2niix_lnx.zip \
135+
&& unzip /tmp/dcm2niix_lnx.zip \
136+
&& mv dcm2niix /usr/local/bin
137+
138+
# Install ROBEX
139+
ADD https://www.nitrc.org/frs/download.php/5994/ROBEXv12.linux64.tar.gz//?i_agree=1&download_now=1 /
140+
RUN tar -xzf /ROBEXv12.linux64.tar.gz
141+
ENV PATH /ROBEX:$PATH
142+
143+
# Install Node.js global packages
144+
RUN npm install -g [email protected] pm2 typescript tsc-watch [email protected]
145+
146+
# Get bids-specification from github
147+
RUN mkdir -p /app && \
148+
cd /app && git clone https://github.com/bids-standard/bids-specification && \
149+
cd bids-specification && git checkout 3537e9edbc81545614d3ee605c398361099b6977
150+
151+
# Clone bids-validator
152+
RUN git clone https://github.com/bids-standard/bids-validator /app/bids-validator
153+
154+
# Copy application code
155+
COPY . /app
156+
157+
# Generate keys for API
158+
WORKDIR /app
159+
RUN ./generate_keys.sh
160+
161+
# Install API dependencies and build
162+
WORKDIR /app/api
163+
RUN cp /app/package.json /app/api/ && npm install && npx tsc
164+
165+
# Install handler dependencies and build
166+
WORKDIR /app/handler
167+
RUN npm install && npx tsc
168+
169+
# Install UI dependencies
170+
WORKDIR /app/ui
171+
RUN npm install
172+
173+
# Copy UI entrypoint
174+
COPY ui/entrypoint.sh /entrypoint-ui.sh
175+
RUN chmod +x /entrypoint-ui.sh
176+
177+
# Copy telemetry environment
178+
COPY telemetry/telemetry.env /root/.telemetry.env
179+
180+
# Create supervisor configuration
181+
RUN mkdir -p /etc/supervisor/conf.d
182+
COPY <<EOF /etc/supervisor/conf.d/ezbids.conf
183+
[supervisord]
184+
nodaemon=true
185+
user=root
186+
187+
[program:mongodb]
188+
command=mongod --bind_ip_all --port 27017
189+
autostart=true
190+
autorestart=true
191+
stderr_logfile=/var/log/mongodb.err.log
192+
stdout_logfile=/var/log/mongodb.out.log
193+
194+
[program:api]
195+
command=/app/api/dev.sh
196+
directory=/app/api
197+
autostart=true
198+
autorestart=true
199+
environment=MONGO_CONNECTION_STRING="mongodb://localhost:27017/ezbids",BRAINLIFE_AUTHENTICATION="false"
200+
stderr_logfile=/var/log/api.err.log
201+
stdout_logfile=/var/log/api.out.log
202+
depends_on=mongodb
203+
204+
[program:handler]
205+
command=pm2 start handler.js --attach --watch --ignore-watch "ui **/node_modules **__pycache__**"
206+
directory=/app/handler
207+
autostart=true
208+
autorestart=true
209+
environment=MONGO_CONNECTION_STRING="mongodb://localhost:27017/ezbids",PRESORT="false"
210+
stderr_logfile=/var/log/handler.err.log
211+
stdout_logfile=/var/log/handler.out.log
212+
depends_on=api
213+
214+
[program:ui]
215+
command=/entrypoint-ui.sh
216+
directory=/app/ui
217+
autostart=true
218+
autorestart=true
219+
environment=VITE_APIHOST="http://localhost:8082",VITE_BRAINLIFE_AUTHENTICATION="false"
220+
stderr_logfile=/var/log/ui.err.log
221+
stdout_logfile=/var/log/ui.out.log
222+
depends_on=api
223+
224+
[program:telemetry]
225+
command=start-telemetry
226+
autostart=false
227+
autorestart=true
228+
stderr_logfile=/var/log/telemetry.err.log
229+
stdout_logfile=/var/log/telemetry.out.log
230+
depends_on=mongodb
231+
EOF
232+
233+
# Create necessary directories
234+
RUN mkdir -p /data/db /var/log /tmp/ezbids-workdir
235+
236+
# Expose ports
237+
EXPOSE 27017 8082 3000 8000
238+
239+
# Health check
240+
HEALTHCHECK --interval=10s --timeout=10s --retries=5 --start-period=30s \
241+
CMD curl -f http://localhost:8082/health || exit 1
242+
243+
# Start all services with supervisor
244+
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/ezbids.conf"]
245+
246+
247+
# run with docker run -p 27017:27017 -p 8082:8082 -p 3000:3000 -p 8000:8000 -v /tmp/ezbids-workdir:/tmp ezbids-everything

0 commit comments

Comments
 (0)