module: add logrotate
diff --git a/module/logrotate/scheme.sh b/module/logrotate/scheme.sh
new file mode 100644
index 0000000..6cb8cf0
--- /dev/null
+++ b/module/logrotate/scheme.sh
@@ -0,0 +1,98 @@
+#!/bin/bash
+#
+# logrotate - scheme
+#
+# Copyright 2019 Luigi Santivetti <luigi.santivetti@gmail.com>
+
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+# Credits to:
+#   https://github.com/linkyard/docker-logrotate
+
+declare -r dockerfile_t="\
+FROM alpine:3.10
+
+RUN set -x \\
+  && apk add --no-cache logrotate tini tzdata moreutils \\
+  && rm /etc/logrotate.conf && rm -r /etc/logrotate.d \\
+  && mv /etc/periodic/daily/logrotate /etc/.logrotate.cronjob
+
+# Only missing uid and gid from alpine 3.10
+RUN addgroup -g ${_LOGROTATE_OPENSSH_GID_} ${_LOGROTATE_OPENSSH_USER_} && \\
+  adduser -H -D -u ${_LOGROTATE_OPENSSH_UID_} -G ${_LOGROTATE_OPENSSH_USER_} ${_LOGROTATE_OPENSSH_USER_}
+
+COPY entrypoint.sh /entrypoint.sh
+
+VOLUME [\"${_LOGROTATE_LOG_CON_D_}\"]
+
+ENTRYPOINT [\"tini\", \"-g\", \"--\"]
+CMD [\"/entrypoint.sh\"]"
+
+declare -r logrotate_conf_t="\
+${_LOGROTATE_APACHE_FILE_PATTERN_} {
+  ${_LOGROTATE_TRUNCATE_}
+  ${_LOGROTATE_COMPRESS_}
+  rotate ${_LOGROTATE_ROTATE_}
+  size ${_LOGROTATE_SIZE_}
+}
+
+${_LOGROTATE_MYSQL_FILE_PATTERN_} {
+  ${_LOGROTATE_TRUNCATE_}
+  ${_LOGROTATE_COMPRESS_}
+  rotate ${_LOGROTATE_ROTATE_}
+  size ${_LOGROTATE_SIZE_}
+}
+
+${_LOGROTATE_OPENSSH_FILE_PATTERN_} {
+  ${_LOGROTATE_TRUNCATE_}
+  ${_LOGROTATE_COMPRESS_}
+  rotate ${_LOGROTATE_ROTATE_}
+  size ${_LOGROTATE_SIZE_}
+}"
+
+declare -r entrypoint_bang_t="\
+#!/bin/sh
+
+TS_FORMAT=\"%Y-%m-%dT%H:%M:%S%z \"
+
+if [ -e /etc/logrotate.conf ]; then
+  echo \"Using mounted /etc/logrotate.conf:\" | ts \"\${TS_FORMAT}\"
+else
+  echo \"Using templated /etc/logrotate.conf:\" | ts \"\${TS_FORMAT}\"
+  {
+    echo \"\${LOGROTATE_FILE_PATTERN:-${_LOGROTATE_LOG_CON_D_}/*.log} {\"
+    echo \"  \${LOGROTATE_TRUNCATE:-copytruncate}\"
+    echo \"  \${LOGROTATE_COMPRESS:-nocompress}\"
+    echo \"  rotate \${LOGROTATE_ROTATE:-5}\"
+    echo \"  size \${LOGROTATE_SIZE:-5M}\"
+    echo \"}\"
+  } > /etc/logrotate.conf
+fi
+ts \"\${TS_FORMAT}\" < /etc/logrotate.conf
+
+if [ -d \"/etc/periodic/\${LOGROTATE_CRON:-15min}\" ]; then
+  echo \"using /etc/periodic/\${LOGROTATE_CRON:-15min} cron schedule\" | ts \"\${TS_FORMAT}\"
+  mv /etc/.logrotate.cronjob \"/etc/periodic/\${LOGROTATE_CRON:-15min}/logrotate\"
+else
+  echo \"assuming \"\${LOGROTATE_CRON:-15min}\" is a cron expression; appending to root's crontab\" | ts \"\${TS_FORMAT}\"
+  echo \"\${LOGROTATE_CRON:-15min} /etc/.logrotate.cronjob\" >> /var/spool/cron/crontabs/root
+fi
+
+# shellcheck disable=SC2086
+exec crond -d \${CROND_LOGLEVEL:-7} -f 2>&1 | ts \"\${TS_FORMAT}\""