108 lines
2.6 KiB
Docker
108 lines
2.6 KiB
Docker
FROM ubuntu:jammy AS nodejs
|
|
|
|
RUN apt-get -q update \
|
|
&& apt-get upgrade -y
|
|
|
|
# Switch to bash instead of sh
|
|
RUN apt-get -q update \
|
|
&& DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \
|
|
ca-certificates \
|
|
wget \
|
|
unzip \
|
|
&& update-ca-certificates --fresh
|
|
|
|
RUN wget -qO- https://deb.nodesource.com/setup_18.x | bash -
|
|
|
|
FROM nodejs AS runtime
|
|
|
|
RUN apt-get -q update \
|
|
&& DEBIAN_FRONTEND=noninteractive apt-get install \
|
|
--no-install-recommends -y \
|
|
nodejs \
|
|
&& apt-get clean \
|
|
&& rm -rf /var/lib/apt/lists/{apt,dpkg,cache,log} \
|
|
&& npm install -g npm@latest
|
|
|
|
RUN apt-get -q update \
|
|
&& DEBIAN_FRONTEND=noninteractive apt-get install \
|
|
--no-install-recommends -y \
|
|
rsync \
|
|
wget \
|
|
curl \
|
|
nginx \
|
|
shellinabox \
|
|
nano \
|
|
less \
|
|
iputils-ping \
|
|
curl \
|
|
jq \
|
|
sqlite3 \
|
|
tree \
|
|
inotify-tools \
|
|
gettext-base \
|
|
gh \
|
|
git \
|
|
&& apt-get clean \
|
|
&& rm -rf /var/lib/apt/lists/{apt,dpkg,cache,log}
|
|
|
|
SHELL [ "/bin/bash", "-c" ]
|
|
|
|
ARG DEVELOPMENT
|
|
ENV DEVELOPMENT=${DEVELOPMENT:-}
|
|
ARG CHAT_BASE
|
|
ENV CHAT_BASE=${CHAT_BASE}
|
|
ARG CHAT_URL
|
|
ENV CHAT_URL=${CHAT_URL}
|
|
|
|
COPY /.env /home/user/.env
|
|
RUN { \
|
|
echo "REACT_APP_CHAT_URL=${CHAT_URL}" ; \
|
|
echo "REACT_APP_CHAT_BASE=${CHAT_BASE}" ; \
|
|
echo "WDS_SOCKET_PATH=${CHAT_BASE}/ws" ; \
|
|
echo "PUBLIC_URL=${CHAT_BASE}" ; \
|
|
echo "WDS_SOCKET_HOST=${CHAT_URL#http*://}" ; \
|
|
} | tee -a /home/user/.env
|
|
|
|
COPY /server /home/user/server
|
|
COPY /server/nginx.conf /etc/nginx/sites-enabled/default
|
|
WORKDIR /home/user/server
|
|
RUN npm install
|
|
|
|
COPY /client /home/user/client
|
|
WORKDIR /home/user/client
|
|
RUN npm install
|
|
|
|
# If not DEVELOPMENT mode, copy production config, else development
|
|
RUN \
|
|
if [[ -z "${DEVELOPMENT}" ]]; then \
|
|
echo "Building PRODUCTION" ; \
|
|
cp /home/user/server/production.location \
|
|
/etc/nginx/snippets/active.location ; \
|
|
else \
|
|
echo "Building DEVELOPMENT" ; \
|
|
cp /home/user/server/development.location \
|
|
/etc/nginx/snippets/active.location ; \
|
|
fi
|
|
|
|
# If not DEVELOPMENT mode, then locally build project
|
|
RUN \
|
|
if [[ -z "${DEVELOPMENT}" ]]; then \
|
|
cd /home/user/client ; \
|
|
npm run build ; \
|
|
fi
|
|
|
|
COPY /scripts /opt/scripts
|
|
|
|
ENV PATH="${PATH}:/opt/scripts"
|
|
|
|
COPY /Dockerfile /home/user/Dockerfile
|
|
|
|
# alias out 'sudo' since USER is root and we want to copy/paste
|
|
# commands from our README.md that contains 'sudo'
|
|
RUN echo "alias sudo=" >> /root/.bashrc
|
|
|
|
# In DEVELOPMENT mode, entrypoint launches 'npm start'
|
|
WORKDIR /home/user
|
|
COPY /entrypoint.sh /
|
|
CMD [ "/opt/scripts/irepo-shell" ]
|
|
ENTRYPOINT [ "/entrypoint.sh" ] |