diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..bece95e --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,30 @@ +FROM httpd + +RUN apt-get update -yqq && apt-get install -y \ + build-essential \ + cron \ + git \ + perl \ + supervisor \ + procps \ + libcgi-session-perl \ + && apt-get clean + +RUN git clone https://github.com/darold/sendmailanalyzer.git /tmp/sendmailanalyzer + +WORKDIR /tmp/sendmailanalyzer + +RUN perl Makefile.PL && make && make install && rm -rf /tmp/sendmailanalyzer + +WORKDIR /usr/local/sendmailanalyzer + +COPY supervisord.conf /etc/supervisor/supervisord.conf + +COPY httpd.conf /usr/local/apache2/conf/httpd.conf + +COPY sa_cache.sh /etc/cron.daily/sa_cache.sh + +RUN mkdir -p /var/www/htdocs + +CMD ["supervisord", "-c", "/etc/supervisor/supervisord.conf"] + diff --git a/docker/docker-compose.yml.example b/docker/docker-compose.yml.example new file mode 100644 index 0000000..6e80790 --- /dev/null +++ b/docker/docker-compose.yml.example @@ -0,0 +1,11 @@ +version: '2' +services: + sma: + restart: always + build: . + expose: + - 80 + volumes: + - /path/to/mail.log:/var/log/mail.log:ro + - /path/to/data:/usr/local/sendmailanalyzer/data + - /path/to/sendmailanalyzer.conf:/usr/local/sendmailanalyzer/sendmailanalyzer.conf diff --git a/docker/httpd.conf b/docker/httpd.conf new file mode 100644 index 0000000..1c059d0 --- /dev/null +++ b/docker/httpd.conf @@ -0,0 +1,190 @@ +LoadModule mpm_event_module modules/mod_mpm_event.so +LoadModule authnz_fcgi_module modules/mod_authnz_fcgi.so +LoadModule access_compat_module modules/mod_access_compat.so +LoadModule auth_basic_module modules/mod_auth_basic.so +LoadModule authz_core_module modules/mod_authz_core.so +LoadModule authz_host_module modules/mod_authz_host.so +LoadModule reqtimeout_module modules/mod_reqtimeout.so +LoadModule filter_module modules/mod_filter.so +LoadModule mime_module modules/mod_mime.so +LoadModule log_config_module modules/mod_log_config.so +LoadModule env_module modules/mod_env.so +LoadModule headers_module modules/mod_headers.so +LoadModule setenvif_module modules/mod_setenvif.so +LoadModule version_module modules/mod_version.so +LoadModule unixd_module modules/mod_unixd.so +LoadModule status_module modules/mod_status.so +LoadModule autoindex_module modules/mod_autoindex.so +LoadModule cgid_module modules/mod_cgid.so +LoadModule dir_module modules/mod_dir.so +LoadModule alias_module modules/mod_alias.so + + +# +# If you wish httpd to run as a different user or group, you must run +# httpd as root initially and it will switch. +# +# User/Group: The name (or #number) of the user/group to run httpd as. +# It is usually good practice to create a dedicated user and group for +# running httpd, as with most system services. +# +User www-data +Group www-data + + + +ServerAdmin admin@domain.com +Listen 80 + + +# Deny access to the entirety of your server's filesystem. You must +# explicitly permit access to web content directories in other +# blocks below. +# + + AllowOverride none + Require all denied + + +# DocumentRoot: The directory out of which you will serve your +# documents. By default, all requests are taken from this directory, but +# symbolic links and aliases may be used to point to other locations. +# +DocumentRoot "/usr/local/sendmailanalyzer/www" + + # + # Possible values for the Options directive are "None", "All", + # or any combination of: + # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews + # + # Note that "MultiViews" must be named *explicitly* --- "Options All" + # doesn't give it to you. + # + # The Options directive is both complicated and important. Please see + # http://httpd.apache.org/docs/2.4/mod/core.html#options + # for more information. + # + #Options Indexes Includes + + # + # AllowOverride controls what directives may be placed in .htaccess files. + # It can be "All", "None", or any combination of the keywords: + # AllowOverride FileInfo AuthConfig Limit + # + #AllowOverride None + + Options ExecCGI + AddHandler cgi-script .cgi + DirectoryIndex sa_report.cgi + Require all granted + + +# +# The following lines prevent .htaccess and .htpasswd files from being +# viewed by Web clients. +# + + Require all denied + + +# +# ErrorLog: The location of the error log file. +# If you do not specify an ErrorLog directive within a +# container, error messages relating to that virtual host will be +# logged here. If you *do* define an error logfile for a +# container, that host's errors will be logged there and not here. +# +ErrorLog /proc/self/fd/2 + +# +# LogLevel: Control the number of messages logged to the error_log. +# Possible values include: debug, info, notice, warn, error, crit, +# alert, emerg. +# +LogLevel warn + + + # + # The following directives define some format nicknames for use with + # a CustomLog directive (see below). + # + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%h %l %u %t \"%r\" %>s %b" common + + + # You need to enable mod_logio.c to use %I and %O + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio + + + # + # The location and format of the access logfile (Common Logfile Format). + # If you do not define any access logfiles within a + # container, they will be logged here. Contrariwise, if you *do* + # define per- access logfiles, transactions will be + # logged therein and *not* in this file. + # + CustomLog /proc/self/fd/1 common + + # + # If you prefer a logfile with access, agent, and referer information + # (Combined Logfile Format) you can use the following directive. + # + #CustomLog "logs/access_log" combined + + + + # + # Avoid passing HTTP_PROXY environment to CGI's on this or any proxied + # backend servers which have lingering "httpoxy" defects. + # 'Proxy' request header is undefined by the IETF, not listed by IANA + # + RequestHeader unset Proxy early + + + + # + # TypesConfig points to the file containing the list of mappings from + # filename extension to MIME-type. + # + TypesConfig conf/mime.types + + # + # AddType allows you to add to or override the MIME configuration + # file specified in TypesConfig for specific file types. + # + #AddType application/x-gzip .tgz + # + # AddEncoding allows you to have certain browsers uncompress + # information on the fly. Note: Not all browsers support this. + # + #AddEncoding x-compress .Z + #AddEncoding x-gzip .gz .tgz + # + # If the AddEncoding directives above are commented-out, then you + # probably should define those extensions to indicate media types: + # + AddType application/x-compress .Z + AddType application/x-gzip .gz .tgz + + # + # AddHandler allows you to map certain file extensions to "handlers": + # actions unrelated to filetype. These can be either built into the server + # or added with the Action directive (see below) + # + # To use CGI scripts outside of ScriptAliased directories: + # (You will also need to add "ExecCGI" to the "Options" directive.) + # + #AddHandler cgi-script .cgi + + # For type maps (negotiated resources): + #AddHandler type-map var + + # + # Filters allow you to process content before it is sent to the client. + # + # To parse .shtml files for server-side includes (SSI): + # (You will also need to add "Includes" to the "Options" directive.) + # + #AddType text/html .shtml + #AddOutputFilter INCLUDES .shtml + diff --git a/docker/sa_cache.sh b/docker/sa_cache.sh new file mode 100755 index 0000000..40aee8a --- /dev/null +++ b/docker/sa_cache.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +/usr/local/sendmailanalyzer/sa_cache > /dev/null 2>&1 +/usr/bin/pkill -HUP sendmailanalyzer diff --git a/docker/supervisord.conf b/docker/supervisord.conf new file mode 100644 index 0000000..4c5dc80 --- /dev/null +++ b/docker/supervisord.conf @@ -0,0 +1,55 @@ +; supervisor config file + +;[unix_http_server] +;file=/dev/shm/supervisor.sock ; (the path to the socket file) +;chmod=0700 ; sockef file mode (default 0700) + +[supervisord] +logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log) +pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid) +childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEMP) + +; the below section must remain in the config file for RPC +; (supervisorctl/web interface) to work, additional interfaces may be +; added by defining them in separate rpcinterface: sections +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface + +[supervisorctl] +serverurl=unix:///dev/shm/supervisor.sock ; use a unix:// URL for a unix socket + +; The [include] section can just contain the "files" setting. This +; setting can list multiple files (separated by whitespace or +; newlines). It can also contain wildcards. The filenames are +; interpreted as relative to this file. Included files *cannot* +; include files themselves. + + +[supervisord] +nodaemon=true + +[program:sendmailanalyzer] +startsecs=0 +autostart=true +autorestart=false +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 +command=/usr/local/sendmailanalyzer/sendmailanalyzer + +[program:apache2] +command=apachectl -D "FOREGROUND" -k start +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 + +[program:cron] +startsecs=0 +autostart=true +autorestart=true +stdout_logfile=/var/log/supervisor/%(program_name)s.log +stderr_logfile=/var/log/supervisor/%(program_name)s.log +command=/usr/sbin/cron -f +