Skip to content

Instantly share code, notes, and snippets.

@wbandrew
Created March 22, 2018 16:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wbandrew/767e7b577912d62c37b85315633ed54c to your computer and use it in GitHub Desktop.
Save wbandrew/767e7b577912d62c37b85315633ed54c to your computer and use it in GitHub Desktop.
FROM node:8-alpine
LABEL maintainer "Andrew Cates <andrew@waybetter.com>"
ARG BUILD_DATE
ARG VCS_REF
ARG VN
LABEL org.label-schema.name="Docker David"
LABEL org.label-schema.description="Docker David"
LABEL org.label-schema.version="$VN"
LABEL org.label-schema.url="http://waybetterdev.github.io/docker.david/"
LABEL org.label-schema.docker.dockerfile="/Dockerfile"
LABEL org.label-schema.build-date=$BUILD_DATE
LABEL org.label-schema.vcs-ref=$VCS_REF
LABEL org.label-schema.vcs-url="https://waybetterdev.github.io/docker/david.git"
LABEL org.label-schema.vcs-type="Git"
ENV TIMEZONE US/Pacific
ENV LANG=en_US.UTF-8
ENV LC_ALL=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV MUSL_VERSION=1.1.17-r1
RUN echo "http://dl-cdn.alpinelinux.org/alpine/edge/main" >> /etc/apk/repositories && \
echo "http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories && \
echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories && \
apk --no-cache update && \
apk add --no-cache --update \
bash \
gosu \
binutils \
coreutils \
curl ^ \
cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime && \
echo "${TIMEZONE}" > /etc/timezone
# Here we install GNU libc (aka glibc) and set C.UTF-8 locale as default.
# User/Pass
ENV DAVID_GROUP=david
ENV DAVID_USER=david
ENV DAVID_HOME="/home/${DAVID_USER}"
ENV DAVID_LOG_DIR=/var/log/david
ENV DAVID_CACHE_DIR=/etc/docker-david
ENV DAVID_INSTALL_DIR="${DAVID_HOME}/david"
ENV DAVID_DATA_DIR="${DAVID_HOME}/data"
ENV DAVID_BUILD_DIR="${DAVID_CACHE_DIR}/build"
ENV DAVID_RUNTIME_DIR="${DAVID_CACHE_DIR}/runtime"
ENV DAVID_PID_DIR="${DAVID_INSTALL_DIR}/tmp/pids"
ENV DAVID_SOCKET_DIR="${DAVID_INSTALL_DIR}/tmp/sockets"
# User
ARG UID=1003
ARG GID=1001
RUN addgroup -g $GID $DAVID_GROUP \
&& adduser -Ss /bin/false -u $UID -G $DAVID_GROUP -h $DAVID_HOME $DAVID_USER
# Build temp dirs
RUN mkdir -p ${DAVID_INSTALL_DIR}
RUN chgrp $DAVID_GROUP ${DAVID_INSTALL_DIR}
RUN chmod g+w ${DAVID_INSTALL_DIR}
RUN mkdir -p ${DAVID_BUILD_DIR}
RUN chgrp $DAVID_GROUP ${DAVID_BUILD_DIR}
RUN chmod g+w ${DAVID_BUILD_DIR}
RUN mkdir -p ${DAVID_LOG_DIR}
RUN chgrp $DAVID_GROUP ${DAVID_LOG_DIR}
RUN chmod g+w ${DAVID_LOG_DIR}
# Create the log file to be able to run tail
RUN touch /var/log/cron.log
# Begin Installation
ENV NODE_ENV=production
RUN npm install -g node-gyp
RUN npm install -g grunt-cli
USER $DAVID_USER
WORKDIR $DAVID_HOME
ENV PATH "./bin:${DAVID_HOME}/.bin:./node_modules/.bin:$PATH"
# Set PATH (fixes cron job PATH issues)
RUN touch ${DAVID_HOME}/.profile
RUN echo "PATH=./bin:${DAVID_HOME}/.bin:./node_modules/.bin:$PATH" > ${DAVID_HOME}/.profile
RUN touch ${DAVID_HOME}/.npmrc
RUN echo "color=false" > ${DAVID_HOME}/.npmrc
RUN echo "loglevel=error" >> ${DAVID_HOME}/.npmrc
RUN echo "spin=false" >> ${DAVID_HOME}/.npmrc
RUN echo "progress=false" >> ${DAVID_HOME}/.npmrc
RUN echo "depth=0" >> ${DAVID_HOME}/.npmrc
RUN echo "@waybetterdev:registry=https://registry.blah/" >> ${DAVID_HOME}/.npmrc
WORKDIR $DAVID_INSTALL_DIR
ENV NPM_URL=https://registry.blah
ENV NPM_PACKAGE=@waybetterdev/david-www
ENV NPM_VERSION=22.1.0
RUN wget -cq ${NPM_URL}/${NPM_PACKAGE}/-/${NPM_PACKAGE}-${NPM_VERSION}.tgz -O ${DAVID_BUILD_DIR}/david.tar.gz \
&& tar xf ${DAVID_BUILD_DIR}/david.tar.gz --strip 1 -C ${DAVID_INSTALL_DIR} \
&& rm -rf ${DAVID_BUILD_DIR}/gitlab.tar.gz \
&& cd ${DAVID_INSTALL_DIR} \
&& echo "Fix bug https://github.com/sass/node-sass/issues/1879" \
&& npm install node-sass@4.5.0 --save \
&& echo "Fix for Seg Fault Error" \
&& npm install level@1.3.0 --save \
&& echo "Fix bug https://github.com/npm/npm/issues/9863" \
&& npm install --production \
&& mv ./node_modules ./node_modules.tmp \
&& mv ./node_modules.tmp ./node_modules \
&& npm install \
&& npm run build \
&& npm cache clean --force \
&& mkdir -p ./data/development \
&& mkdir -p ./data/production
USER root
COPY ./davidrc ./.davidrc
RUN chown $DAVID_USER:$DAVID_GROUP ./.davidrc
ENV PORT=8080
CMD ["gosu", "david", "node", "dist/main"]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment