diff --git a/.dockerignore b/.dockerignore index b512c09d..c81bbd22 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1 +1,9 @@ -node_modules \ No newline at end of file +node_modules/ +docs/ +Dockerfile +*.md +.git +.gitignore +.gitmodules +docker-compose.yml +docker-compose-local.yml \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 337be331..ecaf69d2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,12 @@ -FROM node:10.14-alpine +# Mutistaged Node.js Build +FROM node:10-alpine as builder -RUN apk add --update pwgen netcat-openbsd python make gcc git g++ bash imagemagick +# Install system dependencies +RUN set -ex; \ + apk add --update --no-cache \ + make gcc g++ git -# First install dependencies +# Copy package.json dependencies COPY server/package.json /app/server/package.json COPY server/package-lock.json /app/server/package-lock.json COPY client/package.json /app/client/package.json @@ -14,13 +18,29 @@ COPY zone-mta/package-lock.json /app/zone-mta/package-lock.json WORKDIR /app/ -RUN for idx in client shared server zone-mta; do (cd $idx && npm install); done +# Install dependencies in each directory +RUN set -ex; \ + for idx in client shared server zone-mta; do (cd $idx && npm install); done # Later, copy the app files. That improves development speed as buiding the Docker image will not have # to download and install all the NPM dependencies every time there's a change in the source code COPY . /app -RUN cd client && npm run build +RUN set -ex; \ + cd client && \ + npm run build + +# Final Image +FROM node:10-alpine + +WORKDIR /app/ + +# Install system dependencies +RUN set -ex; \ + apk add --update --no-cache \ + pwgen netcat-openbsd bash imagemagick + +COPY --from=builder /app/ /app/ EXPOSE 3000 3003 3004 ENTRYPOINT ["bash", "/app/docker-entrypoint.sh"] diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 52c6ff1e..17d361de 100644 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -12,6 +12,9 @@ Optional parameters: --mongoHost XXX - sets mongo host (default: mongo) --redisHost XXX - sets redis host (default: redis) --mySqlHost XXX - sets mysql host (default: mysql) + --mySqlDatabase XXX - sets mysql database (default: mailtrain) + --mySqlUser XXX - sets mysql user (default: mailtrain) + --mySqlPassword XXX - sets mysql password (default: mailtrain) --withLdap - use if you want to enable LDAP authentication --ldapHost XXX - LDAP Host for authentication (default: ldap) --ldapPort XXX - LDAP port (default: 389) @@ -43,6 +46,9 @@ ldapUidTag="" mongoHost=mongo redisHost=redis mySqlHost=mysql +mySqlDatabase=mailtrain +mySqlUser=mailtrain +mySqlPassword=mailtrain while [ $# -gt 0 ]; do case "$1" in @@ -77,6 +83,18 @@ while [ $# -gt 0 ]; do mySqlHost="$2" shift 2 ;; + --mySqlDatabase) + mySqlDatabase="$2" + shift 2 + ;; + --mySqlUser) + mySqlUser="$2" + shift 2 + ;; + --mySqlPassword) + mySqlPassword="$2" + shift 2 + ;; --withLdap) withLdap=true shift 1 @@ -156,6 +174,9 @@ www: mysql: host: $mySqlHost + database: $mySqlDatabase + user: $mySqlUser + password: $mySqlPassword redis: enabled: true @@ -198,4 +219,5 @@ while ! nc -z $redisHost 6379; do sleep 1; done while ! nc -z $mongoHost 27017; do sleep 1; done cd server -NODE_ENV=production node index.js \ No newline at end of file +NODE_ENV=production node index.js +