Giter Site home page Giter Site logo

astzweig / docker-wildduck Goto Github PK

View Code? Open in Web Editor NEW
57.0 4.0 18.0 66 KB

The famous nodemailer/wildduck email server as a docker container.

Home Page: https://hub.docker.com/r/astzweig/wildduck

License: European Union Public License 1.2

Dockerfile 5.63% Shell 94.37%

docker-wildduck's Introduction

Logo

Docker Wildduck

Get the nodemailer/wildduck email server as a Docker service.

This project is part of the Astzweig social responsibility program.

Table of contents

Usage

There are multiple ways to run this container and even more for experienced users. For the impatience user we have some example configurations prepared:

Both ways will result in a fully functional mailserver that - depending on your configuration - will either listen on IMAP port (143) and submission port (587) or if SSL is enabled and you provid valid keys will listen on IMAPS port (993) and SMTPS port (465).

From source

Checkout this repository on the computer/server, change into the cloned repository folder and edit docker-compose.yml as you wish.

$ git clone https://github.com/astzweig/docker-wildduck.git
$ cd docker-wildduck
$ vi docker-compose.yml

You should at least replace the values of the variables in that file. Afterwards you can just run:

$ docker-compose up -d mail

From Docker Hub

Copy the contents of the provided docker-compose.yml file with eiter curl or wget anywhere on your server:

$ curl -o 'docker-compose.yml' https://raw.githubusercontent.com/astzweig/docker-wildduck/master/docker-compose.hub.yml

 - or -

$ wget -O 'docker-compose.yml' https://raw.githubusercontent.com/astzweig/docker-wildduck/master/docker-compose.hub.yml

Afterwards you can just run:

$ docker-compose up -d mail

Environment variables

The following tables shows a complete list of variables that you can use to modify the container's build or runtime behaviour. A bold font means you will have to provide a value in order for the container to work correctly. An italic font means the setting can be overridden individually for each email account.

General

Name Meaning
FQDN The fully qualified domain name of your docker host server. It is important that you understand what a FQDN is.
MAIL_DOMAIN The first domain you want Wildduck to receive emails for. This will also be the standard Domain when you create users and do not supply a domain name. Default: The value you supplied at FQDN
PRODUCT_NAME A name that will be used to advertise the email service on communication with third parties e.g. in SMTP HELO. Default: Wildduck Mail
TLS_KEY The in-container path to the private SSL key to use for all Wildduck services. If no value is provided, SSL (IMAPS, SMTPS, etc.) will be disabled.
TLS_CERT The path to the public full chain SSL key to use for all Wildduck services.
REDIS_HOST The connection URL of redis. Default: redis://redis:6379/8
MONGODB_HOST The connection URL of mongodb. Default: mongodb://mongo:27017/wildduck
GRAYLOG_HOST_PORT The hostname (or IP address) and port of the graylog server, e.g. graylog:12201. If set logging to graylog will be enabled.
ENABLE_STARTTLS Enable StartTTLS capability of the IMAP and SMTP Server. Default: false
USE_OWN_SETTINGS If set to true, the boot scripts will not overwrite any value in any configuration file of any of the mail services. This is useful if you supply all configuration files yourself. Default: false

Wildduck API

Name Meaning
API_ENABLE Enable the Wildduck API. Default: true
API_USE_HTTPS Enable SSL for the API. Usually you want to disable it, if you use a reverse proxy. Default: false
API_URL The URL at which the API is available from outside docker. E.g. 'https://example.com/api'. Default: https://$FQDN:443 if API_USE_HTTPS is set to true and TLS_* variables are provided else http://$FQDN:80
API_TOKEN_SECRET The token that the API will require to accept a call (given either through an HTTP header (X-ACCESS-TOKEN) or as a URL parameter (?accessToken=...). Leaving this variable empty or not defining it is a possible dangerous step, as anyone will be able to make API calls (and as such create users, etc.). This option should only be left empty by users who know what they are doing.

API Configuration Profile

As the Wildduck API supports two factor (2fa) authentication, it also supports application specific passwords. When an application specific password is generated, the API generates also a so called [Apple configuration profile][apple-profiles] automatically. That is a file, that allows iOS and macOS devices, to set up accounts (e.g. in this case email accounts) automatically. The following variables can be used, to configure the metadata of those configuration profiles.

Name Meaning
CONFIGPROFILE_ID The id for the configuration profile. According to the [specification][apple-profiles] a reverse-DNS style identifier. Default: The top level domain and the domain of the FQDN in reversed order
CONFIGPROFILE_DISPLAY_NAME The name of the iOS mobile configuration that gets generated. Default: $PRODUCT_NAME
CONFIGPROFILE_DISPLAY_ORGANIZATION The name of the organization which is providing the email service. Default: Unknown
CONFIGPROFILE_DISPLAY_DESC The description of the contents of the profile. Maybe even a notice to the mobile user. '{email}' is replaced with the corresponding email address. Default: Install this profile to setup {email}
CONFIGPROFILE_ACCOUNT_DESC The description of the account that is setup by the configuration profile. '{email}' is replaced as for 'CONFIGPROFILE_DISPLAY_DESC'. Default: {email}

Wildduck IMAP

Name Meaning
IMAP_PROCESSES The number of IMAP processes to start. Default: 2
IMAP_RETENTION The amount of days after which messages in Trash or Junk folder shall be deleted automatically. Default: 4

Wildduck Outbound SMTP

Name Meaning
ENABLE_SMTP_SEND_LATER Allow messages with a future date in the Date header to be send later. If set to false, incoming messages will be send out immediately regardless of the future date set in the Date header. Default: true

Build ARGS

These variables can be used to define the service versions that are used in the container. They change only the build time behaviour.

Name Meaning
SCRIPTS_DIR Path where the scripts folder is uploaded inside the container. Default: '/root/scripts'
INSTALL_DIR Path where the components (Wildduck, Haraka, etc.) will be installed inside the container. Default: '/var/nodemailer'
WILDDUCK_GIT_REPO The git repository URL of Wildduck (or your fork of it). Default: 'https://github.com/nodemailer/wildduck.git'
WILDDUCK_GIT_CID The git commit ID or branch namer you want to checkout of the Wildduck git repository. Default: 'master'
HARAKA_VERSION The version of Haraka to download and use. Default: '2.8.21' 
HARAKA_WD_PLUGIN_GIT_REPO The git repository URL of the Wildduck plugin for Haraka (or your fork of it). Default: 'https://github.com/nodemailer/haraka-plugin-wildduck'
HARAKA_WD_PLUGIN_GIT_CID The git commit ID or branch name you want to checkout of the Wildduck plugin for Haraka git repository. Default: 'master'
ZONEMTA_GIT_REPO The git repository URL of ZoneMTA (or your fork of it). Default: 'https://github.com/zone-eu/zone-mta-template.git'
ZONEMTA_GIT_CID The git commit ID or branch name you want to checkout of the ZoneMTA git repository. Default: 'master'
ZONEMTA_WD_PLUGIN_GIT_REPO The git repository URL of the Wildduck plugin for ZoneMTA (or your fork of it). Default: 'https://github.com/nodemailer/zonemta-wildduck.git'
ZONEMTA_WD_PLUGIN_GIT_CID The git commit ID or branch name you want to checkout of the Wildduck plugin for ZoneMTA git repository. Default: 'master'

Development decisions

  • We will use shell scripts to run commands instead of writing everything in the Dockerfile. We want the build-stage scripts to form a sequence and thus we define a script naming scheme that contains an ordering prefix of two digits.
  • Scripts that are not meant to be executed by their own start with an underscore. They are not moved out of the scripts folder inside the container and their execution bit is not set.
  • Scripts that are meant to be executables in the running container will be in a sub-folder called 'bin'. They can have any name, with or without extension. They will be moved into one of the system paths.
  • There is exactly one 'entrypoint.sh' script, that is the default command of the container.
  • The container needs three components to run (Wildduck, Haraka and ZoneMTA). Each of those components has to be installed first, to be configured in a second step and to be started in a third step. We write one component script for each one of those components containing a functions for two of the steps above: a configure_{service} function and a start_{service} function. To make use of Docker image layer caching we implement the install step of each component in a single BUILD script.

Roadmap

  • Provide a docker container with the pre-installed services as done by the setup scripts provided by the Wildduck project.
  • Provide scripts to configure the docker container using environment variables.
  • Create different users for the different services in the container.
  • Create better management tools, like a CLI user management tool.

Alternatives

Before starting to build this image we looked around for alternatives and found houlagins's and hechengjin's containers. We still decided to go for our own solution, as neither of them provides their build files or a corresponding code repository. And - for some maybe less important - neither does any of them provide a useful documentation.

License

docker-wildduck's People

Contributors

alwinius avatar drzaiusx11 avatar generall avatar rqelibari avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

docker-wildduck's Issues

Starting server fails

System: Ubuntu 18.04.3 (LTS)
Docker-Engine: 19.03.5
Docker-Compose: 1.21.2

When trying to start Wildduck with docker-compose up the following error appears.

Config is the same as the example, and FQDN etc. are provided.

mail_1 | [INFO] [-] [core] Loading plugins
mail_1 | [INFO] [-] [core] Loading plugin: spf
mail_1 | [INFO] [-] [core] Loading plugin: clamd
mail_1 | [INFO] [-] [clamd] Loading excludes file
mail_1 | [INFO] [-] [core] Loading plugin: rspamd
mail_1 | [INFO] [-] [core] Loading plugin: dkim_verify
mail_1 | [INFO] [-] [core] Loading plugin: wildduck
mail_1 | [CRIT] [-] [core] Compiling plugin: wildduck failed
mail_1 | [CRIT] [-] [core] internal/modules/cjs/loader.js:638
mail_1 | [CRIT] [-] [core] throw err;
mail_1 | [CRIT] [-] [core] ^
mail_1 | [CRIT] [-] [core]
mail_1 | [CRIT] [-] [core] Error: Cannot find module 'mongodb'
mail_1 | [CRIT] [-] [core] at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
mail_1 | [CRIT] [-] [core] at Function.Module._load (internal/modules/cjs/loader.js:562:25)
mail_1 | [CRIT] [-] [core] at Module.require (internal/modules/cjs/loader.js:692:17)
mail_1 | [CRIT] [-] [core] at require (internal/modules/cjs/helpers.js:25:18)
mail_1 | [CRIT] [-] [core] at Object.<anonymous> (/var/nodemailer/haraka/plugins/wildduck/index.js:10:18)
mail_1 | [CRIT] [-] [core] at Module._compile (internal/modules/cjs/loader.js:778:30)
mail_1 | [CRIT] [-] [core] at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
mail_1 | [CRIT] [-] [core] at Module.load (internal/modules/cjs/loader.js:653:32)
mail_1 | [CRIT] [-] [core] at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
mail_1 | [CRIT] [-] [core] at Function.Module._load (internal/modules/cjs/loader.js:585:3)
mail_1 | [NOTICE] [-] [core] Shutting down

dkim header

can not figure out how to pass dkim signature header
signTransportDomain=true in /etc/nodemailer/wildduck/dkim.toml

still, nothing about dkim in sent messages header, should be some additional configuration or it's a kind of bug?

Build errors

When build it there is errors that make it unusable

Building mail
Step 1/28 : FROM alpine:latest as builder
latest: Pulling from library/alpine
Digest: sha256:c19173c5ada610a5989151111163d28a67368362762534d8a8121ce95cf2bd5a
Status: Downloaded newer image for alpine:latest
 ---> 965ea09ff2eb
Step 2/28 : LABEL org.label-schema.vendor = "Astzweig UG(haftungsbeschränkt) & Co. KG"
 ---> Running in 398f51c4139e
 ---> 21495126a10c
Removing intermediate container 398f51c4139e
Step 3/28 : LABEL org.label-schema.version = "1.2.3"
 ---> Running in c4e7a7442013
 ---> 8a490933a061
Removing intermediate container c4e7a7442013
Step 4/28 : LABEL org.label-schema.description = "A docker container to run nodemailer/wildduck mailserver."
 ---> Running in 4240bb8e48b1
 ---> 8a3de51140a0
Removing intermediate container 4240bb8e48b1
Step 5/28 : LABEL org.label-schema.vcs-url = "https://github.com/astzweig/docker-wildduck"
 ---> Running in db2110f6576e
 ---> 9adabafc9b8f
Removing intermediate container db2110f6576e
Step 6/28 : LABEL org.label-schema.schema-version = "1.0"
 ---> Running in e2da8f745079
 ---> ec6609071fb0
Removing intermediate container e2da8f745079
Step 7/28 : RUN apk add --no-cache dumb-init;
 ---> Running in 51ee564cbf77
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
(1/1) Installing dumb-init (1.2.2-r1)
Executing busybox-1.30.1-r2.trigger
OK: 6 MiB in 15 packages
 ---> 93695648a44f
Removing intermediate container 51ee564cbf77
Step 8/28 : ARG INSTALL_DIR=/var/nodemailer
 ---> Running in a770d79d6cac
 ---> 2f4ec916ba99
Removing intermediate container a770d79d6cac
Step 9/28 : ARG SCRIPTS_DIR=/root/scripts
 ---> Running in 5c311500fcfb
 ---> 47ae5dd19cd9
Removing intermediate container 5c311500fcfb
Step 10/28 : ENV INSTALL_DIR ${INSTALL_DIR}
 ---> Running in d330c11135db
 ---> 8577bea5646d
Removing intermediate container d330c11135db
Step 11/28 : ENV SCRIPTS_DIR ${SCRIPTS_DIR}
 ---> Running in 213255c2f7a0
 ---> 4bdc9f355def
Removing intermediate container 213255c2f7a0
Step 12/28 : ARG WILDDUCK_GIT_REPO=https://github.com/nodemail/wildduck.git
 ---> Running in 7c880bc33420
 ---> 027601993247
Removing intermediate container 7c880bc33420
Step 13/28 : ARG WILDDUCK_GIT_CID=4c1cd4210aca615e676eef766429c2bece5e18e3
 ---> Running in 07449849c072
 ---> 78e2add8631f
Removing intermediate container 07449849c072
Step 14/28 : ARG HARAKA_VERSION=2.8.25
 ---> Running in b737a705ba98
 ---> 602837faf06a
Removing intermediate container b737a705ba98
Step 15/28 : ARG HARAKA_WD_PLUGIN_GIT_REPO=https://github.com/nodemailer/haraka-plugin-wildduck.git
 ---> Running in de507e964569
 ---> 33e019da4924
Removing intermediate container de507e964569
Step 16/28 : ARG HARAKA_WD_PLUGIN_GIT_CID=fc85b92f06764b1fbc872032c1dc6193d2d7f068
 ---> Running in e59e0336c63a
 ---> ef419b9e82d6
Removing intermediate container e59e0336c63a
Step 17/28 : ARG ZONEMTA_GIT_REPO=https://github.com/zone-eu/zone-mta-template.git
 ---> Running in e0ba898e8afe
 ---> 333dfd8cc88b
Removing intermediate container e0ba898e8afe
Step 18/28 : ARG ZONEMTA_GIT_CID=f5e752e5a9f1ba22699c612cade133be58162ad6
 ---> Running in 1da50bc80ee7
 ---> d0b38fed7882
Removing intermediate container 1da50bc80ee7
Step 19/28 : ARG ZONEMTA_WD_PLUGIN_GIT_REPO=https://github.com/nodemailer/zonemta-wildduck.git
 ---> Running in 85f4a37d6ae7
 ---> c4de53c33ea7
Removing intermediate container 85f4a37d6ae7
Step 20/28 : ARG ZONEMTA_WD_PLUGIN_GIT_CID=695ca8a19a3c3e8212de1136a73beb58db6453c4
 ---> Running in a7f1c77ced7b
 ---> 76048144f47a
Removing intermediate container a7f1c77ced7b
Step 21/28 : COPY ./scripts/[0-9][0-9]-*.sh ${SCRIPTS_DIR}/
 ---> dffd8f8b5e04
Removing intermediate container be6282673623
Step 22/28 : RUN for file in ${SCRIPTS_DIR}/[0-9][0-9]-*.sh; do         chmod u+x "${file}";         source "${file}";     done
 ---> Running in e94995db6aaf
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
(1/7) Installing ca-certificates (20190108-r0)
(2/7) Installing c-ares (1.15.0-r0)
(3/7) Installing libgcc (8.3.0-r0)
(4/7) Installing http-parser (2.9.2-r0)
(5/7) Installing libstdc++ (8.3.0-r0)
(6/7) Installing libuv (1.29.1-r0)
(7/7) Installing nodejs (10.16.3-r0)
Executing busybox-1.30.1-r2.trigger
Executing ca-certificates-20190108-r0.trigger
OK: 32 MiB in 22 packages
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
(1/24) Installing libbz2 (1.0.6-r7)
(2/24) Installing pcre (8.43-r0)
(3/24) Installing clamav-libs (0.101.4-r0)
(4/24) Installing freshclam (0.101.4-r0)
Executing freshclam-0.101.4-r0.pre-install
(5/24) Installing clamav-scanner (0.101.4-r0)
(6/24) Installing fts (1.2.7-r1)
(7/24) Installing ncurses-terminfo-base (6.1_p20190518-r0)
(8/24) Installing ncurses-terminfo (6.1_p20190518-r0)
(9/24) Installing ncurses-libs (6.1_p20190518-r0)
(10/24) Installing clamav-daemon (0.101.4-r0)
Executing clamav-daemon-0.101.4-r0.pre-install
(11/24) Installing clamav (0.101.4-r0)
(12/24) Installing libevent (2.1.10-r0)
(13/24) Installing libffi (3.2.1-r6)
(14/24) Installing libintl (0.19.8.1-r4)
(15/24) Installing libuuid (2.33.2-r0)
(16/24) Installing libblkid (2.33.2-r0)
(17/24) Installing libmount (2.33.2-r0)
(18/24) Installing glib (2.60.4-r0)
(19/24) Installing icu-libs (64.2-r0)
(20/24) Installing luajit (2.1.0_beta3-r4)
(21/24) Installing libmagic (5.37-r1)
(22/24) Installing pcre2 (10.33-r0)
(23/24) Installing sqlite-libs (3.28.0-r1)
(24/24) Installing rspamd (1.9.4-r0)
Executing rspamd-1.9.4-r0.pre-install
Executing busybox-1.30.1-r2.trigger
OK: 100 MiB in 46 packages
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
(1/1) Installing openssl (1.1.1d-r0)
Executing busybox-1.30.1-r2.trigger
OK: 101 MiB in 47 packages
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
(1/3) Installing nghttp2-libs (1.39.2-r0)
(2/3) Installing libcurl (7.66.0-r0)
(3/3) Installing curl (7.66.0-r0)
Executing busybox-1.30.1-r2.trigger
OK: 102 MiB in 50 packages
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
(1/23) Installing expat (2.2.8-r0)
(2/23) Installing git (2.22.0-r0)
(3/23) Installing gdbm (1.13-r1)
(4/23) Installing readline (8.0.0-r0)
(5/23) Installing python2 (2.7.16-r1)
(6/23) Installing pkgconf (1.6.1-r1)
(7/23) Installing xz-libs (5.2.4-r0)
(8/23) Installing python3 (3.7.5-r1)
(9/23) Installing python3-dev (3.7.5-r1)
(10/23) Installing npm (10.16.3-r0)
(11/23) Installing make (4.2.1-r2)
(12/23) Installing binutils (2.32-r0)
(13/23) Installing gmp (6.1.2-r1)
(14/23) Installing isl (0.18-r0)
(15/23) Installing libgomp (8.3.0-r0)
(16/23) Installing libatomic (8.3.0-r0)
(17/23) Installing mpfr3 (3.1.5-r1)
(18/23) Installing mpc1 (1.1.0-r0)
(19/23) Installing gcc (8.3.0-r0)
(20/23) Installing musl-dev (1.1.22-r3)
(21/23) Installing libc-dev (0.7.1-r0)
(22/23) Installing g++ (8.3.0-r0)
(23/23) Installing build-deps (20191119.110052)
Executing busybox-1.30.1-r2.trigger
OK: 431 MiB in 73 packages
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
OK: 431 MiB in 73 packages
Collecting cocof
  Downloading https://files.pythonhosted.org/packages/e4/cb/6b267413a3987671f73bd5637f1ced076585b31702923ce8fa0869289076/cocof-1.2.2.tar.gz
Collecting click<8.0,>=7.0 (from cocof)
  Downloading https://files.pythonhosted.org/packages/fa/37/45185cb5abbc30d7257104c434fe0b07e5a195a6847506c074527aa599ec/Click-7.0-py2.py3-none-any.whl (81kB)
Collecting tomlkit<1.0 (from cocof)
  Downloading https://files.pythonhosted.org/packages/3e/30/7c2693fc50bd466285ec22bf02ee344be1bde3e2e8267e302fdc82d11f2d/tomlkit-0.5.8-py2.py3-none-any.whl
Collecting ruamel.yaml<1.0 (from cocof)
  Downloading https://files.pythonhosted.org/packages/fa/90/ecff85a2e9c497e2fa7142496e10233556b5137db5bd46f3f3b006935ca8/ruamel.yaml-0.16.5-py2.py3-none-any.whl (123kB)
Collecting jsonpatch<2.0,>=1.23 (from cocof)
  Downloading https://files.pythonhosted.org/packages/86/7e/035d19a73306278673039f0805b863be8798057cc1b4008b9c8c7d1d32a3/jsonpatch-1.24-py2.py3-none-any.whl
Collecting biplist<2.0,>=1.0.3 (from cocof)
  Downloading https://files.pythonhosted.org/packages/3e/56/2db170a498c9c6545cda16e93c2f2ef9302da44802787b45a8a520d01bdb/biplist-1.0.3.tar.gz
Collecting ruamel.yaml.clib>=0.1.2; platform_python_implementation == "CPython" and python_version < "3.8" (from ruamel.yaml<1.0->cocof)
  Downloading https://files.pythonhosted.org/packages/92/28/612085de3fae9f82d62d80255d9f4cf05b1b341db1e180adcf28c1bf748d/ruamel.yaml.clib-0.2.0.tar.gz (178kB)
Collecting jsonpointer>=1.9 (from jsonpatch<2.0,>=1.23->cocof)
  Downloading https://files.pythonhosted.org/packages/18/b0/a80d29577c08eea401659254dfaed87f1af45272899e1812d7e01b679bc5/jsonpointer-2.0-py2.py3-none-any.whl
Installing collected packages: click, tomlkit, ruamel.yaml.clib, ruamel.yaml, jsonpointer, jsonpatch, biplist, cocof
  Running setup.py install for ruamel.yaml.clib: started
    Running setup.py install for ruamel.yaml.clib: finished with status 'done'
  Running setup.py install for biplist: started
    Running setup.py install for biplist: finished with status 'done'
  Running setup.py install for cocof: started
    Running setup.py install for cocof: finished with status 'done'
Successfully installed biplist-1.0.3 click-7.0 cocof-1.2.2 jsonpatch-1.24 jsonpointer-2.0 ruamel.yaml-0.16.5 ruamel.yaml.clib-0.2.0 tomlkit-0.5.8
WARNING: You are using pip version 19.2.3, however version 19.3.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Cloning into '/var/nodemailer/wildduck'...
fatal: could not read Username for 'https://github.com': No such device or address
/bin/sh: cd: line 13: can't cd to /var/nodemailer/wildduck: No such file or directory
fatal: not a git repository (or any of the parent directories): .git
/bin/sh: cd: line 24: can't cd to /var/nodemailer/wildduck: No such file or directory
npm WARN saveError ENOENT: no such file or directory, open '/package.json'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN enoent ENOENT: no such file or directory, open '/package.json'
npm WARN !invalid#2 No description
npm WARN !invalid#2 No repository field.
npm WARN !invalid#2 No README data
npm WARN !invalid#2 No license field.

up to date in 0.425s
found 0 vulnerabilities

mv: can't rename '/var/nodemailer/wildduck/config/*': No such file or directory
/usr/bin/haraka -> /usr/lib/node_modules/Haraka/bin/haraka
/usr/bin/dkimverify -> /usr/lib/node_modules/Haraka/bin/dkimverify
/usr/bin/haraka_grep -> /usr/lib/node_modules/Haraka/bin/haraka_grep
/usr/bin/spf -> /usr/lib/node_modules/Haraka/bin/spf

> [email protected] install /usr/lib/node_modules/Haraka/node_modules/dtrace-provider
> node-gyp rebuild || node suppress-error.js

make: Entering directory '/usr/lib/node_modules/Haraka/node_modules/dtrace-provider/build'
  TOUCH Release/obj.target/DTraceProviderStub.stamp
make: Leaving directory '/usr/lib/node_modules/Haraka/node_modules/dtrace-provider/build'

> [email protected] install /usr/lib/node_modules/Haraka/node_modules/modern-syslog
> node-gyp rebuild

make: Entering directory '/usr/lib/node_modules/Haraka/node_modules/modern-syslog/build'
  CXX(target) Release/obj.target/core/core.o
In file included from ../core.cc:2:
../../nan/nan.h: In function 'void Nan::AsyncQueueWorker(Nan::AsyncWorker*)':
../../nan/nan.h:2298:62: warning: cast between incompatible function types from 'void (*)(uv_work_t*)' {aka 'void (*)(uv_work_s*)'} to 'uv_after_work_cb' {aka 'void (*)(uv_work_s*, int)'} [-Wcast-function-type]
     , reinterpret_cast<uv_after_work_cb>(AsyncExecuteComplete)
                                                              ^
In file included from ../core.cc:1:
../core.cc: At global scope:
/root/.node-gyp/10.16.3/include/node/node.h:573:43: warning: cast between incompatible function types from 'void (*)(Nan::ADDON_REGISTER_FUNCTION_ARGS_TYPE)' {aka 'void (*)(v8::Local<v8::Object>)'} to 'node::addon_register_func' {aka 'void (*)(v8::Local<v8::Object>, v8::Local<v8::Value>, void*)'} [-Wcast-function-type]
       (node::addon_register_func) (regfunc),                          \
                                           ^
/root/.node-gyp/10.16.3/include/node/node.h:607:3: note: in expansion of macro 'NODE_MODULE_X'
   NODE_MODULE_X(modname, regfunc, NULL, 0)  // NOLINT (readability/null_usage)
   ^~~~~~~~~~~~~
../core.cc:190:1: note: in expansion of macro 'NODE_MODULE'
 NODE_MODULE(core, Init);
 ^~~~~~~~~~~
In file included from /root/.node-gyp/10.16.3/include/node/node.h:63,
                 from ../core.cc:1:
/root/.node-gyp/10.16.3/include/node/v8.h: In instantiation of 'void v8::PersistentBase<T>::SetWeak(P*, typename v8::WeakCallbackInfo<P>::Callback, v8::WeakCallbackType) [with P = node::ObjectWrap; T = v8::Object; typename v8::WeakCallbackInfo<P>::Callback = void (*)(const v8::WeakCallbackInfo<node::ObjectWrap>&)]':
/root/.node-gyp/10.16.3/include/node/node_object_wrap.h:84:78:   required from here
/root/.node-gyp/10.16.3/include/node/v8.h:9502:16: warning: cast between incompatible function types from 'v8::WeakCallbackInfo<node::ObjectWrap>::Callback' {aka 'void (*)(const v8::WeakCallbackInfo<node::ObjectWrap>&)'} to 'Callback' {aka 'void (*)(const v8::WeakCallbackInfo<void>&)'} [-Wcast-function-type]
                reinterpret_cast<Callback>(callback), type);
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/root/.node-gyp/10.16.3/include/node/v8.h: In instantiation of 'void v8::PersistentBase<T>::SetWeak(P*, typename v8::WeakCallbackInfo<P>::Callback, v8::WeakCallbackType) [with P = Nan::ObjectWrap; T = v8::Object; typename v8::WeakCallbackInfo<P>::Callback = void (*)(const v8::WeakCallbackInfo<Nan::ObjectWrap>&)]':
../../nan/nan_object_wrap.h:65:61:   required from here
/root/.node-gyp/10.16.3/include/node/v8.h:9502:16: warning: cast between incompatible function types from 'v8::WeakCallbackInfo<Nan::ObjectWrap>::Callback' {aka 'void (*)(const v8::WeakCallbackInfo<Nan::ObjectWrap>&)'} to 'Callback' {aka 'void (*)(const v8::WeakCallbackInfo<void>&)'} [-Wcast-function-type]
  SOLINK_MODULE(target) Release/obj.target/core.node
  COPY Release/core.node
make: Leaving directory '/usr/lib/node_modules/Haraka/node_modules/modern-syslog/build'

> [email protected] install /usr/lib/node_modules/Haraka/node_modules/sqlite3
> node-pre-gyp install --fallback-to-build

node-pre-gyp WARN Using request for node-pre-gyp https download 
[sqlite3] Success: "/usr/lib/node_modules/Haraka/node_modules/sqlite3/lib/binding/node-v64-linux-x64/node_sqlite3.node" is installed via remote

> [email protected] install /usr/lib/node_modules/Haraka/node_modules/iconv
> node-gyp rebuild

make: Entering directory '/usr/lib/node_modules/Haraka/node_modules/iconv/build'
  CXX(target) Release/obj.target/iconv/src/binding.o
  CC(target) Release/obj.target/iconv/deps/libiconv/lib/iconv.o
  CC(target) Release/obj.target/iconv/support/localcharset.o
  SOLINK_MODULE(target) Release/obj.target/iconv.node
  COPY Release/iconv.node
make: Leaving directory '/usr/lib/node_modules/Haraka/node_modules/iconv/build'
+ [email protected]
added 210 packages from 229 contributors in 28.203s
create: /var/nodemailer/haraka
create: /var/nodemailer/haraka/plugins
create: /var/nodemailer/haraka/docs
create: /var/nodemailer/haraka/config
create: /var/nodemailer/haraka/config/smtp.ini
create: /var/nodemailer/haraka/config/log.ini
create: /var/nodemailer/haraka/config/plugins
create: /var/nodemailer/haraka/config/dkim
create: /var/nodemailer/haraka/config/dkim/dkim_key_gen.sh

> [email protected] install /var/nodemailer/haraka/node_modules/dtrace-provider
> node-gyp rebuild || node suppress-error.js

make: Entering directory '/var/nodemailer/haraka/node_modules/dtrace-provider/build'
  TOUCH Release/obj.target/DTraceProviderStub.stamp
make: Leaving directory '/var/nodemailer/haraka/node_modules/dtrace-provider/build'

> [email protected] install /var/nodemailer/haraka/node_modules/modern-syslog
> node-gyp rebuild

make: Entering directory '/var/nodemailer/haraka/node_modules/modern-syslog/build'
  CXX(target) Release/obj.target/core/core.o
In file included from ../core.cc:2:
../../nan/nan.h: In function 'void Nan::AsyncQueueWorker(Nan::AsyncWorker*)':
../../nan/nan.h:2298:62: warning: cast between incompatible function types from 'void (*)(uv_work_t*)' {aka 'void (*)(uv_work_s*)'} to 'uv_after_work_cb' {aka 'void (*)(uv_work_s*, int)'} [-Wcast-function-type]
     , reinterpret_cast<uv_after_work_cb>(AsyncExecuteComplete)
                                                              ^
In file included from ../core.cc:1:
../core.cc: At global scope:
/root/.node-gyp/10.16.3/include/node/node.h:573:43: warning: cast between incompatible function types from 'void (*)(Nan::ADDON_REGISTER_FUNCTION_ARGS_TYPE)' {aka 'void (*)(v8::Local<v8::Object>)'} to 'node::addon_register_func' {aka 'void (*)(v8::Local<v8::Object>, v8::Local<v8::Value>, void*)'} [-Wcast-function-type]
       (node::addon_register_func) (regfunc),                          \
                                           ^
/root/.node-gyp/10.16.3/include/node/node.h:607:3: note: in expansion of macro 'NODE_MODULE_X'
   NODE_MODULE_X(modname, regfunc, NULL, 0)  // NOLINT (readability/null_usage)
   ^~~~~~~~~~~~~
../core.cc:190:1: note: in expansion of macro 'NODE_MODULE'
 NODE_MODULE(core, Init);
 ^~~~~~~~~~~
In file included from /root/.node-gyp/10.16.3/include/node/node.h:63,
                 from ../core.cc:1:
/root/.node-gyp/10.16.3/include/node/v8.h: In instantiation of 'void v8::PersistentBase<T>::SetWeak(P*, typename v8::WeakCallbackInfo<P>::Callback, v8::WeakCallbackType) [with P = node::ObjectWrap; T = v8::Object; typename v8::WeakCallbackInfo<P>::Callback = void (*)(const v8::WeakCallbackInfo<node::ObjectWrap>&)]':
/root/.node-gyp/10.16.3/include/node/node_object_wrap.h:84:78:   required from here
/root/.node-gyp/10.16.3/include/node/v8.h:9502:16: warning: cast between incompatible function types from 'v8::WeakCallbackInfo<node::ObjectWrap>::Callback' {aka 'void (*)(const v8::WeakCallbackInfo<node::ObjectWrap>&)'} to 'Callback' {aka 'void (*)(const v8::WeakCallbackInfo<void>&)'} [-Wcast-function-type]
                reinterpret_cast<Callback>(callback), type);
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/root/.node-gyp/10.16.3/include/node/v8.h: In instantiation of 'void v8::PersistentBase<T>::SetWeak(P*, typename v8::WeakCallbackInfo<P>::Callback, v8::WeakCallbackType) [with P = Nan::ObjectWrap; T = v8::Object; typename v8::WeakCallbackInfo<P>::Callback = void (*)(const v8::WeakCallbackInfo<Nan::ObjectWrap>&)]':
../../nan/nan_object_wrap.h:65:61:   required from here
/root/.node-gyp/10.16.3/include/node/v8.h:9502:16: warning: cast between incompatible function types from 'v8::WeakCallbackInfo<Nan::ObjectWrap>::Callback' {aka 'void (*)(const v8::WeakCallbackInfo<Nan::ObjectWrap>&)'} to 'Callback' {aka 'void (*)(const v8::WeakCallbackInfo<void>&)'} [-Wcast-function-type]
  SOLINK_MODULE(target) Release/obj.target/core.node
  COPY Release/core.node
make: Leaving directory '/var/nodemailer/haraka/node_modules/modern-syslog/build'

> [email protected] install /var/nodemailer/haraka/node_modules/sqlite3
> node-pre-gyp install --fallback-to-build

node-pre-gyp WARN Using request for node-pre-gyp https download 
[sqlite3] Success: "/var/nodemailer/haraka/node_modules/sqlite3/lib/binding/node-v64-linux-x64/node_sqlite3.node" is installed via remote

> [email protected] install /var/nodemailer/haraka/node_modules/iconv
> node-gyp rebuild

make: Entering directory '/var/nodemailer/haraka/node_modules/iconv/build'
  CXX(target) Release/obj.target/iconv/src/binding.o
  CC(target) Release/obj.target/iconv/deps/libiconv/lib/iconv.o
  CC(target) Release/obj.target/iconv/support/localcharset.o
  SOLINK_MODULE(target) Release/obj.target/iconv.node
  COPY Release/iconv.node
make: Leaving directory '/var/nodemailer/haraka/node_modules/iconv/build'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN [email protected] No repository field.

+ [email protected]
+ [email protected]
added 210 packages from 229 contributors and audited 484 packages in 17.915s
found 0 vulnerabilities

Cloning into '/var/nodemailer/haraka/plugins/wildduck'...
Note: checking out 'fc85b92f06764b1fbc872032c1dc6193d2d7f068'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at fc85b92 v1.26.10
npm ERR! code ENOLOCAL
npm ERR! Could not install from "../../../wildduck" as it does not contain a package.json file.

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2019-11-19T11_02_14_604Z-debug.log
Cloning into '/var/nodemailer/zonemta'...
Note: checking out 'f5e752e5a9f1ba22699c612cade133be58162ad6'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at f5e752e Merge pull request #8 from YosuCadilla/patch-1
Cloning into '/var/nodemailer/zonemta/plugins/wildduck'...
Note: checking out '695ca8a19a3c3e8212de1136a73beb58db6453c4'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at 695ca8a v1.23.0

> [email protected] install /var/nodemailer/zonemta/node_modules/dtrace-provider
> node-gyp rebuild || node suppress-error.js

make: Entering directory '/var/nodemailer/zonemta/node_modules/dtrace-provider/build'
  TOUCH Release/obj.target/DTraceProviderStub.stamp
make: Leaving directory '/var/nodemailer/zonemta/node_modules/dtrace-provider/build'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN [email protected] requires a peer of eslint@>=3.14.1 but none is installed. You must install peer dependencies yourself.

added 206 packages from 272 contributors and audited 367 packages in 9.808s
found 1 high severity vulnerability
  run `npm audit fix` to fix them, or `npm audit` for details
npm ERR! code ENOLOCAL
npm ERR! Could not install from "../../../wildduck" as it does not contain a package.json file.

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2019-11-19T11_02_30_634Z-debug.log
WARNING: Ignoring APKINDEX.00740ba1.tar.gz: No such file or directory
WARNING: Ignoring APKINDEX.d8b2a6f4.tar.gz: No such file or directory
(1/18) Purging build-deps (20191119.110052)
(2/18) Purging git (2.22.0-r0)
(3/18) Purging python3-dev (3.7.5-r1)
(4/18) Purging npm (10.16.3-r0)
(5/18) Purging make (4.2.1-r2)
(6/18) Purging g++ (8.3.0-r0)
(7/18) Purging gcc (8.3.0-r0)
(8/18) Purging binutils (2.32-r0)
(9/18) Purging libatomic (8.3.0-r0)
(10/18) Purging libgomp (8.3.0-r0)
(11/18) Purging libc-dev (0.7.1-r0)
(12/18) Purging musl-dev (1.1.22-r3)
(13/18) Purging python2 (2.7.16-r1)
(14/18) Purging pkgconf (1.6.1-r1)
(15/18) Purging mpc1 (1.1.0-r0)
(16/18) Purging mpfr3 (3.1.5-r1)
(17/18) Purging isl (0.18-r0)
(18/18) Purging gmp (6.1.2-r1)
Executing busybox-1.30.1-r2.trigger
OK: 157 MiB in 55 packages
 ---> 4d7e3e6bff7d
Removing intermediate container e94995db6aaf
Step 23/28 : COPY ./scripts/[^0-9]*.sh ${SCRIPTS_DIR}/
 ---> 670967d99de2
Removing intermediate container 19a1088e2c87
Step 24/28 : COPY ./scripts/bin /usr/local/bin
 ---> e17680875957
Removing intermediate container 96b53caf97da
Step 25/28 : RUN chmod +x ${SCRIPTS_DIR}/entrypoint.sh;     chmod +x /usr/local/bin/*;
 ---> Running in 0bf7d1b4ac2a
 ---> 2e9018ccf500
Removing intermediate container 0bf7d1b4ac2a
Step 26/28 : VOLUME /etc/nodemailer
 ---> Running in 573f17337f2d
 ---> 3516842576fd
Removing intermediate container 573f17337f2d
Step 27/28 : ENTRYPOINT /usr/bin/dumb-init --
 ---> Running in 1012912d53fc
 ---> 660954ddca06
Removing intermediate container 1012912d53fc
Step 28/28 : CMD ${SCRIPTS_DIR}/entrypoint.sh
 ---> Running in e1c3cf8ca8a5
 ---> 2ea4e58a5fe3
Removing intermediate container e1c3cf8ca8a5
Successfully built 2ea4e58a5fe3
Successfully tagged local_wildduck:latest
Creating emails_redis_1 ... done
Creating emails_mongo_1 ... done
Creating emails_mail_1  ... done
Attaching to emails_mongo_1, emails_redis_1, emails_mail_1
mongo_1  | 2019-11-19T11:02:58.587+0000 I  CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
mongo_1  | 2019-11-19T11:02:58.631+0000 I  CONTROL  [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=7854dd1fa556
mongo_1  | 2019-11-19T11:02:58.631+0000 I  CONTROL  [initandlisten] db version v4.2.1
mongo_1  | 2019-11-19T11:02:58.631+0000 I  CONTROL  [initandlisten] git version: edf6d45851c0b9ee15548f0f847df141764a317e
mongo_1  | 2019-11-19T11:02:58.631+0000 I  CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.1.1  11 Sep 2018
mongo_1  | 2019-11-19T11:02:58.631+0000 I  CONTROL  [initandlisten] allocator: tcmalloc
mongo_1  | 2019-11-19T11:02:58.631+0000 I  CONTROL  [initandlisten] modules: none
mongo_1  | 2019-11-19T11:02:58.631+0000 I  CONTROL  [initandlisten] build environment:
mongo_1  | 2019-11-19T11:02:58.631+0000 I  CONTROL  [initandlisten]     distmod: ubuntu1804
mongo_1  | 2019-11-19T11:02:58.631+0000 I  CONTROL  [initandlisten]     distarch: x86_64
mongo_1  | 2019-11-19T11:02:58.631+0000 I  CONTROL  [initandlisten]     target_arch: x86_64
mongo_1  | 2019-11-19T11:02:58.631+0000 I  CONTROL  [initandlisten] options: { net: { bindIp: "*" } }
mongo_1  | 2019-11-19T11:02:58.634+0000 I  STORAGE  [initandlisten] Detected data files in /data/db created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.
mongo_1  | 2019-11-19T11:02:58.634+0000 I  STORAGE  [initandlisten] 
mongo_1  | 2019-11-19T11:02:58.634+0000 I  STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
mongo_1  | 2019-11-19T11:02:58.634+0000 I  STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
mongo_1  | 2019-11-19T11:02:58.634+0000 I  STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=1412M,cache_overflow=(file_max=0M),session_max=33000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000,close_scan_interval=10,close_handle_minimum=250),statistics_log=(wait=0),verbose=[recovery_progress,checkpoint_progress],
mongo_1  | 2019-11-19T11:02:59.342+0000 I  STORAGE  [initandlisten] WiredTiger message [1574161379:342426][1:0x7f9a1e5f6b00], txn-recover: Recovering log 1 through 2
mongo_1  | 2019-11-19T11:02:59.459+0000 I  STORAGE  [initandlisten] WiredTiger message [1574161379:459218][1:0x7f9a1e5f6b00], txn-recover: Recovering log 2 through 2
mongo_1  | 2019-11-19T11:02:59.548+0000 I  STORAGE  [initandlisten] WiredTiger message [1574161379:548573][1:0x7f9a1e5f6b00], txn-recover: Main recovery loop: starting at 1/24192 to 2/256
mongo_1  | 2019-11-19T11:02:59.665+0000 I  STORAGE  [initandlisten] WiredTiger message [1574161379:665596][1:0x7f9a1e5f6b00], txn-recover: Recovering log 1 through 2
mongo_1  | 2019-11-19T11:02:59.740+0000 I  STORAGE  [initandlisten] WiredTiger message [1574161379:740226][1:0x7f9a1e5f6b00], txn-recover: Recovering log 2 through 2
mongo_1  | 2019-11-19T11:02:59.789+0000 I  STORAGE  [initandlisten] WiredTiger message [1574161379:789718][1:0x7f9a1e5f6b00], txn-recover: Set global recovery timestamp: (0,0)
mongo_1  | 2019-11-19T11:03:00.048+0000 I  RECOVERY [initandlisten] WiredTiger recoveryTimestamp. Ts: Timestamp(0, 0)
redis_1  | 1:C 19 Nov 2019 11:02:58.343 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1  | 1:C 19 Nov 2019 11:02:58.343 # Redis version=5.0.6, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1  | 1:C 19 Nov 2019 11:02:58.343 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
redis_1  | 1:M 19 Nov 2019 11:02:58.351 * Running mode=standalone, port=6379.
mongo_1  | 2019-11-19T11:03:00.220+0000 I  STORAGE  [initandlisten] Timestamp monitor starting
mongo_1  | 2019-11-19T11:03:00.237+0000 I  CONTROL  [initandlisten] 
mongo_1  | 2019-11-19T11:03:00.237+0000 I  CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
mongo_1  | 2019-11-19T11:03:00.237+0000 I  CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
mongo_1  | 2019-11-19T11:03:00.237+0000 I  CONTROL  [initandlisten] 
redis_1  | 1:M 19 Nov 2019 11:02:58.351 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
redis_1  | 1:M 19 Nov 2019 11:02:58.351 # Server initialized
redis_1  | 1:M 19 Nov 2019 11:02:58.351 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
redis_1  | 1:M 19 Nov 2019 11:02:58.352 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
redis_1  | 1:M 19 Nov 2019 11:02:58.353 * DB loaded from disk: 0.001 seconds
redis_1  | 1:M 19 Nov 2019 11:02:58.353 * Ready to accept connections
mongo_1  | 2019-11-19T11:03:00.258+0000 I  SHARDING [initandlisten] Marking collection local.system.replset as collection version: <unsharded>
mongo_1  | 2019-11-19T11:03:00.267+0000 I  STORAGE  [initandlisten] Flow Control is enabled on this deployment.
mongo_1  | 2019-11-19T11:03:00.269+0000 I  SHARDING [initandlisten] Marking collection admin.system.roles as collection version: <unsharded>
mongo_1  | 2019-11-19T11:03:00.270+0000 I  SHARDING [initandlisten] Marking collection admin.system.version as collection version: <unsharded>
mongo_1  | 2019-11-19T11:03:00.277+0000 I  SHARDING [initandlisten] Marking collection local.startup_log as collection version: <unsharded>
mongo_1  | 2019-11-19T11:03:00.278+0000 I  FTDC     [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db/diagnostic.data'
mongo_1  | 2019-11-19T11:03:00.282+0000 I  SHARDING [LogicalSessionCacheRefresh] Marking collection config.system.sessions as collection version: <unsharded>
mongo_1  | 2019-11-19T11:03:00.282+0000 I  NETWORK  [initandlisten] Listening on /tmp/mongodb-27017.sock
mongo_1  | 2019-11-19T11:03:00.282+0000 I  NETWORK  [initandlisten] Listening on 0.0.0.0
mongo_1  | 2019-11-19T11:03:00.282+0000 I  NETWORK  [initandlisten] waiting for connections on port 27017
mongo_1  | 2019-11-19T11:03:00.283+0000 I  SHARDING [LogicalSessionCacheReap] Marking collection config.transactions as collection version: <unsharded>
mail_1   | Usage: cocof [OPTIONS] FILEPATH JSONPATCH
mail_1   | Try "cocof --help" for help.
mail_1   | 
mail_1   | Error: Invalid value for "FILEPATH": File "/etc/nodemailer/wildduck/default.toml" does not exist.
mail_1   | Usage: cocof [OPTIONS] FILEPATH JSONPATCH
mail_1   | Try "cocof --help" for help.
mail_1   | 
mail_1   | Error: Invalid value for "FILEPATH": File "/etc/nodemailer/wildduck/api.toml" does not exist.
mongo_1  | 2019-11-19T11:03:01.000+0000 I  SHARDING [ftdc] Marking collection local.oplog.rs as collection version: <unsharded>
mail_1   | Usage: cocof [OPTIONS] FILEPATH JSONPATCH
mail_1   | Try "cocof --help" for help.
mail_1   | 
mail_1   | Error: Invalid value for "FILEPATH": File "/etc/nodemailer/wildduck/dbs.toml" does not exist.
mail_1   | Usage: cocof [OPTIONS] FILEPATH JSONPATCH
mail_1   | Try "cocof --help" for help.
mail_1   | 
mail_1   | Error: Invalid value for "FILEPATH": File "/etc/nodemailer/wildduck/imap.toml" does not exist.
mail_1   | Usage: cocof [OPTIONS] FILEPATH JSONPATCH
mail_1   | Try "cocof --help" for help.
mail_1   | 
mail_1   | Error: Invalid value for "FILEPATH": File "/etc/nodemailer/wildduck/lmtp.toml" does not exist.
mail_1   | Usage: cocof [OPTIONS] FILEPATH JSONPATCH
mail_1   | Try "cocof --help" for help.
mail_1   | 
mail_1   | Error: Invalid value for "FILEPATH": File "/etc/nodemailer/wildduck/pop3.toml" does not exist.
mail_1   | LibClamAV Warning: Cannot dlopen libclamunrar_iface: file not found - unrar support unavailable
mail_1   | ClamAV update process started at Tue Nov 19 11:03:02 2019
mail_1   | Downloading main.cvd [100%]
mail_1   | main.cvd updated (version: 58, sigs: 4566249, f-level: 60, builder: sigmgr)
mail_1   | Downloading daily.cvd [100%]
mail_1   | daily.cvd updated (version: 25637, sigs: 1996475, f-level: 63, builder: raynman)
mail_1   | Downloading bytecode.cvd [100%]
mail_1   | bytecode.cvd updated (version: 331, sigs: 94, f-level: 63, builder: anvilleg)
mail_1   | WARNING: Clamd was NOT notified: Can't connect to clamd through /run/clamav/clamd.sock: No such file or directory
mail_1   | Database updated (6562818 signatures) from database.clamav.net (IP: 104.16.218.84)
mail_1   | /usr/local/bin/link_dkim_keys: cd: line 10: can't cd to /etc/nodemailer/dkim: No such file or directory
mail_1   | LibClamAV Warning: Cannot dlopen libclamunrar_iface: file not found - unrar support unavailable
mail_1   | LibClamAV Warning: Cannot dlopen libclamunrar_iface: file not found - unrar support unavailable
mail_1   | /root/scripts/entrypoint.sh: cd: line 154: can't cd to /var/nodemailer/wildduck: No such file or directory
mail_1   | internal/modules/cjs/loader.js:638
mail_1   |     throw err;
mail_1   |     ^
mail_1   | 
mail_1   | Error: Cannot find module '/server.js'
mail_1   |     at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
mail_1   |     at Function.Module._load (internal/modules/cjs/loader.js:562:25)
mail_1   |     at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
mail_1   |     at startup (internal/bootstrap/node.js:283:19)
mail_1   |     at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)
mail_1   | Generating RSA private key, 2048 bit long modulus (2 primes)
mail_1   | ..........................................................+++++
mail_1   | ...................................................................loaded TLD files: 1=1528 2=8564 3=2448
mail_1   | ............+++++
mail_1   | e is 65537 (0x010001)
mail_1   | writing RSA key
mail_1   | loaded 8787 Public Suffixes
mail_1   | [/etc/nodemailer/zonemta/zonemta.toml] /etc/nodemailer/zonemta/zonemta.toml: /etc/nodemailer/zonemta/dbs-production.toml: ENOENT: no such file or directory, stat '/etc/nodemailer/wildduck/dbs.toml'
mail_1   | Please add the following TXT record to your DNS:
mail_1   | nov2019._domainkey.dze.io. IN TXT "v=DKIM1;k=rsa;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzZ1e11rTJdunVb/Uw8bhv7pfMKFHeL9qN7YKL9WgBWkc8oj7sKldvaS35N3kie2qDqtabIyjYfL4PdIPVGOyrmwWcT8C88JtegRFSQeBs5NCzYoo/eaa9MN3ALmnhzeIhpebDj088dhlGfO1YMgN9ncyyQAUX/nSL4Qe4F4flXFcitJtK2v4IsQLDZ+mItcZOZ1xW0Rx19NYAQhdEqpclMt3SgDoUe8S/ZFAQ4j2r3A/D7dmUNG5Y1MMlk8slloRoO35Sx3B8pcqRLDKsTxTVwwDlApk7bkqr7mEftzFFG3zy/BQVq/BbJ/FjL9wuBTndLnJ4tIraWV9tDCnHPPFrwIDAQAB"
mail_1   | 
mail_1   | loglevel: INFO
mail_1   | log format: DEFAULT
mail_1   | [WARN] [-] [core] smtp.ini.nodes unset, using 1, see https://github.com/haraka/Haraka/wiki/Performance-Tuning
mail_1   | Starting up Haraka version 2.8.25
mail_1   | [INFO] [-] [core] Loading plugins
mail_1   | [INFO] [-] [core] Loading plugin: spf
mail_1   | [INFO] [-] [core] Loading plugin: clamd
mail_1   | [INFO] [-] [clamd] Loading excludes file
mail_1   | [INFO] [-] [core] Loading plugin: rspamd
mail_1   | [INFO] [-] [core] Loading plugin: dkim_verify
mail_1   | [INFO] [-] [core] Loading plugin: wildduck
mail_1   | [CRIT] [-] [core] Compiling plugin: wildduck failed
mail_1   | [CRIT] [-] [core] internal/modules/cjs/loader.js:638
mail_1   | [CRIT] [-] [core]     throw err;
mail_1   | [CRIT] [-] [core]     ^
mail_1   | [CRIT] [-] [core] 
mail_1   | [CRIT] [-] [core] Error: Cannot find module 'mongodb'
mail_1   | [CRIT] [-] [core]     at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
mail_1   | [CRIT] [-] [core]     at Function.Module._load (internal/modules/cjs/loader.js:562:25)
mail_1   | [CRIT] [-] [core]     at Module.require (internal/modules/cjs/loader.js:692:17)
mail_1   | [CRIT] [-] [core]     at require (internal/modules/cjs/helpers.js:25:18)
mail_1   | [CRIT] [-] [core]     at Object.<anonymous> (/var/nodemailer/haraka/plugins/wildduck/index.js:10:18)
mail_1   | [CRIT] [-] [core]     at Module._compile (internal/modules/cjs/loader.js:778:30)
mail_1   | [CRIT] [-] [core]     at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
mail_1   | [CRIT] [-] [core]     at Module.load (internal/modules/cjs/loader.js:653:32)
mail_1   | [CRIT] [-] [core]     at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
mail_1   | [CRIT] [-] [core]     at Function.Module._load (internal/modules/cjs/loader.js:585:3)
mail_1   | [NOTICE] [-] [core] Shutting down
emails_mail_1 exited with code 1

Error EISDIR at startup

Hello, thanks for the awesome project!

I have been trying to start it on 2 different machines (OSX 10.15 and Ubuntu 18:04, Docker Engine 19.03.8) and I have had the same error with the two docker-compose:

mail_1   | info SMTP/feeder SMTP feeder MTA server started listening on port 465
mail_1   | info QS Queue server started
mail_1   | info API API server started
mail_1   | info Redis/1264 Redis ready to take connections
mail_1   | internal/fs/utils.js:220
mail_1   |     throw err;
mail_1   |     ^
mail_1   |
mail_1   | Error: EISDIR: illegal operation on a directory, read
mail_1   |     at Object.readSync (fs.js:506:3)
mail_1   |     at tryReadSync (fs.js:331:20)
mail_1   |     at Object.readFileSync (fs.js:368:19)
mail_1   |     at /var/nodemailer/wildduck/lib/certs.js:37:22
mail_1   |     at Array.forEach (<anonymous>)
mail_1   |     at Object.module.exports.reload (/var/nodemailer/wildduck/lib/certs.js:11:64)
mail_1   |     at Object.<anonymous> (/var/nodemailer/wildduck/lib/certs.js:71:16)
mail_1   |     at Module._compile (internal/modules/cjs/loader.js:955:30)
mail_1   |     at Object.Module._extensions..js (internal/modules/cjs/loader.js:991:10)
mail_1   |     at Module.load (internal/modules/cjs/loader.js:811:32) {
mail_1   |   errno: -21,
mail_1   |   syscall: 'read',
mail_1   |   code: 'EISDIR'
mail_1   | }

Does anyone know how to get around this issue?

It also seems there are some issues when building the image (probably due to the alpine image latest referring to a different image as the one initially used?).

ERROR: unsatisfiable constraints:
  python (missing):
    required by: git-20200613.133430[python]
ERROR: Service 'mail' failed to build: The command '/bin/sh -c for file in ${SCRIPTS_DIR}/[0-9][0-9]-*.sh; do         chmod u+x "${file}";         source "${file}";     done' returned a non-zero code: 2

MONGODB_HOST variable doesn't seem to be respected

mongo seems to startup fine:

mongo_1  | 2019-01-24T18:09:33.870+0000 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
mongo_1  | 2019-01-24T18:09:33.872+0000 I CONTROL  [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=c2ce19956a7a
mongo_1  | 2019-01-24T18:09:33.872+0000 I CONTROL  [initandlisten] db version v4.0.5
mongo_1  | 2019-01-24T18:09:33.872+0000 I CONTROL  [initandlisten] git version: 3739429dd92b92d1b0ab120911a23d50bf03c412
mongo_1  | 2019-01-24T18:09:33.872+0000 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016
mongo_1  | 2019-01-24T18:09:33.872+0000 I CONTROL  [initandlisten] allocator: tcmalloc
mongo_1  | 2019-01-24T18:09:33.872+0000 I CONTROL  [initandlisten] modules: none
mongo_1  | 2019-01-24T18:09:33.872+0000 I CONTROL  [initandlisten] build environment:
mongo_1  | 2019-01-24T18:09:33.872+0000 I CONTROL  [initandlisten]     distmod: ubuntu1604
mongo_1  | 2019-01-24T18:09:33.872+0000 I CONTROL  [initandlisten]     distarch: x86_64
mongo_1  | 2019-01-24T18:09:33.872+0000 I CONTROL  [initandlisten]     target_arch: x86_64
mongo_1  | 2019-01-24T18:09:33.872+0000 I CONTROL  [initandlisten] options: { net: { bindIpAll: true } }
mongo_1  | 2019-01-24T18:09:33.872+0000 W STORAGE  [initandlisten] Detected unclean shutdown - /data/db/mongod.lock is not empty.
mongo_1  | 2019-01-24T18:09:33.873+0000 I STORAGE  [initandlisten] Detected data files in /data/db created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.

...

mongo_1  | 2019-01-24T17:59:07.461+0000 I NETWORK  [initandlisten] waiting for connections on port 27017

but then when mail_1 boots its unable to connect. I have tried setting MONGODB_HOST explicitly to mongodb://mongo:27017/wildduck

Error:

mail_1   | ERR! Db Failed to setup database connection
mail_1   | { short_message: 'WILDDUCK [Exception] failed to connect to server [127.0.0.1:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]',
mail_1   |   full_message: 'MongoNetworkError: failed to connect to server [127.0.0.1:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]\n    at Pool.<anonymous> (/var/nodemailer/wildduck/node_modules/mongodb-core/lib/topologies/server.js:564:11)\n    at emitOne (events.js:116:13)\n    at Pool.emit (events.js:211:7)\n    at Connection.<anonymous> (/var/nodemailer/wildduck/node_modules/mongodb-core/lib/connection/pool.js:317:12)\n    at Object.onceWrapper (events.js:317:30)\n    at emitTwo (events.js:126:13)\n    at Connection.emit (events.js:214:7)\n    at Socket.<anonymous> (/var/nodemailer/wildduck/node_modules/mongodb-core/lib/connection/connection.js:246:50)\n    at Object.onceWrapper (events.js:315:30)\n    at emitOne (events.js:116:13)',
mail_1   |   _exception: 'yes',
mail_1   |   _error: 'failed to connect to server [127.0.0.1:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]',
mail_1   |   _name: 'MongoNetworkError',
mail_1   |   facility: 'wildduck',
mail_1   |   host: '83dc939ba677',
mail_1   |   timestamp: 1548352769.84,
mail_1   |   _component: 'wildduck' }

docker-compose version 1.21.1, build 5a3f1a3
docker version 18.03.1-ce, build 9ee9f40
os: osx 10.12.6

Any plans on integrating upstream?

Are there any plans of integrating this upstream? A PR can be made to the upstream wildduck repo and we can maintain a common versioning that integrates along with the main wildduck instance

Errors on startup

There seems to be a problem with the ENABLE_STARTTLS env during startup. I installed on clean Ubuntu 18.04 with Docker version 18.09.1. I did not set the variable, as it was by default. If I set it to false manually, it's the same. Only if I set it to true, the error will disappear. The second error potentially means that the directory is not being created during config initialisation.

mail_1 | You have supplied an invalid value for ENABLE_STARTTLS (false). Setting it to default value: false

mail_1 | /usr/local/bin/link_dkim_keys: cd: line 18: can't cd to /etc/nodemailer/dkim: No such file or directory

Lets encrypt with multiple domains

Since WildDuck supports multiple domains, how does it handle SSL with those domains?
I run my own server with modoboa and for each new domain I add, it generates corresponding certificates via LE, but I see that WD can only generate one set of certs?

So if I setup with ABC.com and then add a DEF.com address, and I try to connect via IMAP on port 993 won't I have issues?

Off Topic: astzweig.de HTTP is down

Since the Twitter profile seems unmaintained, and I cannot find another reference to Astzweig UG on the web, I am leaving a note here about the fact, that connections to http://astzweig.de cannot be established. It appears the webserver is down. This has been found after following the link in the README to

This project is part of the Astzweig social responsibility program.

$ nmap astzweig.de
Starting Nmap 7.70 ( https://nmap.org ) at 2020-04-14 18:20 CEST
Nmap scan report for astzweig.de (188.138.100.66)
Host is up (0.037s latency).
rDNS record for 188.138.100.66: hydrogen.astzweig.de
Not shown: 993 closed ports
PORT    STATE    SERVICE
22/tcp  open     ssh
25/tcp  open     smtp
135/tcp filtered msrpc
139/tcp filtered netbios-ssn
445/tcp filtered microsoft-ds
465/tcp open     smtps
993/tcp open     imaps

Nmap done: 1 IP address (1 host up) scanned in 9.87 seconds

Cluster

Will it work if multiple pods running?

LibClamAV Warning

LibClamAV Warning: Cannot dlopen libclamunrar_iface: file not found - unrar support unavailable
ClamAV update process started at Fri Jan 22 08:11:49 2021
daily database available for download (remote version: 26056)

API_USE_HTTPS defaults to true not false

In your documentation you state that API_USE_HTTPS defaults to false, but this seems to not be the case. Also leaving TLS_KEY blank doesn't disable TLS either:
mail_1 | info API Server listening on 0.0.0.0:443

explicitly setting API_USE_HTTPS=false will give the following error in the logs:
mail_1 | You have supplied an invalid value for API_USE_HTTPS (false). Setting it to default value: true

I'm not sure how to turn off HTTPS.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.