Works, yeehaw! :)

This commit is contained in:
Mark Vartanyan 2014-06-27 13:22:43 +02:00
parent b08d4b6828
commit 3f16e88bab
7 changed files with 144 additions and 59 deletions

View File

@ -2,31 +2,83 @@
FROM ubuntu:14.04
MAINTAINER "Mark Vartanyan <kolypto@gmail.com>"
# Const
ENV NAGIOS_PHP_TIMEZONE UTC
ENV NAGIOS_TARBALL http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-4.0.7.tar.gz
ENV NAGIOS_PLUGINS_TARBALL http://www.nagios-plugins.org/download/nagios-plugins-2.0.3.tar.gz
# Packages: update & install
ENV DEBCONF_FRONTEND noninteractive
RUN sed -i 's~.* universe$~\0 multiverse~' /etc/apt/sources.list
RUN apt-get update -qq
RUN apt-get install -qq -y --no-install-recommends python-pip supervisor build-essential
RUN apt-get install -qq -y --no-install-recommends apache2 libapache2-mod-php5 snmp-mibs-downloader
RUN apt-get install -qq -y --no-install-recommends wget curl samba-common samba-common-bin smbclient snmp whois
RUN apt-get install -qq -y --no-install-recommends apache2-utils wget curl samba-common samba-common-bin smbclient snmp whois traceroute
RUN apt-get install -qq -y --no-install-recommends libgd2-xpm-dev libssl-dev libnet-snmp-perl libperl-dev libpq5 libradius1 libsensors4 libsnmp-base libtalloc2 libtdb1 libwbclient0 libmysqlclient15-dev
RUN pip install j2cli
# Const
ENV NAGIOS_PHP_TIMEZONE UTC
ENV NAGIOS_TARBALL http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-4.0.7.tar.gz
ENV NAGIOS_PLUGINS_TARBALL http://www.nagios-plugins.org/download/nagios-plugins-2.0.3.tar.gz
ENV NAGIOS_NRPE_TARBALL http://kent.dl.sourceforge.net/project/nagios/nrpe-2.x/nrpe-2.15/nrpe-2.15.tar.gz
# Using manual: https://raymii.org/s/tutorials/Nagios_Core_4_Installation_on_Ubuntu_12.04.html
# Users
RUN groupadd -g 3000 nagios
RUN useradd -u 3000 -g nagios -m -s /bin/bash nagios
RUN useradd -u 3000 -g nagios -G www-data -m -s /bin/bash nagios
# Install nagios
# RUN mkdir -p /usr/local/src/nagios4
# RUN cd /usr/local/src/nagios4 && wget $NAGIOS_TARBALL -O- | tar -zxp --strip-components 1 && ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios --with-command-user=nagios --with-command-group=nagios && make all
#
# # Install nagios plugins
# RUN mkdir -p /usr/local/src/nagios4-plugins
# RUN cd /usr/local/src/nagios4-plugins && wget $NAGIOS_PLUGINS_TARBALL -O- | tar -zxp --strip-components 1 && ./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-openssl=/usr/bin/openssl --enable-perl-modules --enable-libtap
RUN mkdir -p /usr/local/src/nagios4
RUN cd /usr/local/src/nagios4 && wget $NAGIOS_TARBALL -O- | tar -zxp --strip-components 1 && ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios --with-command-user=nagios --with-command-group=nagios && make all && make install install-init install-config install-commandmode
# Install nagios plugins
RUN mkdir -p /usr/local/src/nagios4-plugins
RUN cd /usr/local/src/nagios4-plugins && wget $NAGIOS_PLUGINS_TARBALL -O- | tar -zxp --strip-components 1 && ./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-openssl=/usr/bin/openssl --enable-perl-modules --enable-libtap && make && make install
# Install nagios NRPE
RUN mkdir -p /usr/local/src/nagios4-nrpe
RUN cd /usr/local/src/nagios4-nrpe && wget $NAGIOS_NRPE_TARBALL -O- | tar -zxp --strip-components 1 && ./configure --with-ssl=/usr/bin/openssl --with-ssl-lib=/usr/lib/x86_64-linux-gnu && make all && make install
# Clean-up
RUN rm -rf /usr/local/src/nagios*
# Add files
ADD conf /root/conf
# Configure: php
RUN j2 /root/conf/php.ini > /etc/php5/mods-available/custom.ini
RUN php5enmod custom
# Configure: apache
ADD conf/apache2-site.conf /etc/apache2/sites-available/nagios.conf
RUN a2dissite 000-default
RUN a2ensite nagios
# Configure: supervisor
ADD conf/supervisor-all.conf /etc/supervisor/conf.d/
# Configure: nagios
RUN ln -s /usr/local/nagios/etc /etc/nagios
RUN bash -c 'mkdir -p /etc/nagios/conf.d /etc/nagios/conf.d/{hosts,services,timeperiods,templates,hostgroups,servicegroups,contacts}'
RUN echo 'cfg_dir=/etc/nagios/conf.d/' >> /etc/nagios/nagios.cfg
# Runner
ADD run.sh /root/run.sh
# Declare
VOLUME ["/etc/nagios/", "/usr/local/nagios/var/"]
EXPOSE 80
EXPOSE 5666
CMD ["/root/run.sh"]

View File

@ -1,11 +1,12 @@
Zabbix Server & Web UI
======================
Nagios
======
Contains:
* Zabbix Server
* Zabbinx Front-end
* Nginx
* Nagios Core
* Nagios Plugins
* Nagios NPRE (Remote Plugin Execution)
* Apache
* PHP
Processes are managed by supervisor, including cronjobs
@ -15,59 +16,29 @@ Exports
-------
* Nginx on `80`
* Zabbix Server on `10051`
* `/etc/zabbix/alert.d/` for Zabbix alertscripts
* Nagios NRPE on `5666`
* `/etc/nagios`: configuration
* `/usr/local/nagios/var/`: nagios runtime
Variables
---------
* `ZABBIX_DB_NAME=zabbix`: Database name to work on
* `ZABBIX_DB_USER=zabbix`: MySQL user
* `ZABBIX_DB_PASS=zabbix`: MySQL password
* `ZABBIX_DB_HOST=localhost`: MySQL host to connect to
* `ZABBIX_DB_PORT=3306`: MySQL port
* `ZABBIX_INSTALLATION_NAME=`: Zabbix installation name
Linking:
* `ZABBIX_DB_LINK=`: Database link name. Example: a value of "DB_PORT_3306" will fill in `ZABBIX_DB_HOST/PORT` variables
* `NAGIOS_USER=nagios`: Web UI username
* `NAGIOS_PASS=nagios`: Web UI password
Constants in Dockerfile
-----------------------
* `ZABBIX_PHP_TIMEZONE=UTC`: Timezone to use with PHP
* `NAGIOS_PHP_TIMEZONE=UTC`: Timezone to use with PHP
* `NAGIOS_TARBALL`: Nagios tarball URL
* `NAGIOS_PLUGINS_TARBALL`: Nagios Plugins tarball URL
* `NAGIOS_NRPE_TARBALL`: Nagios NRPE tarball URL
Example
-------
Launch database container:
Launch Nagios container:
$ docker start zabbix-db || docker run --name="zabbix-db" -d -e MYSQL_ROOT_PASSWORD='root' -e MYSQL_DATABASE='zabbix' -e MYSQL_USER='zabbix' -e MYSQL_PASSWORD='zabbix' -e MYSQL_SET_KEYBUF=64M -p localhost::3306 -v /var/lib/mysql:/var/lib/mysql kolypto/mysql
Install the required tables:
$ docker run --rm --link zabbix-db:db -e ZABBIX_DB_LINK=DB_PORT_3306 kolypto/zabbix-server /root/run.sh setup-db
Launch Zabbix container:
$ docker start zabbix || docker run --name="zabbix" --link zabbix-db:db -e ZABBIX_DB_LINK=DB_PORT_3306 -p 80:80 -p 10051:10051 kolypto/zabbix-server
By default, you sign in as Admin:zabbix.
$ docker start nagios || docker run --rm -p 80:80 -p 5666:5666 -e NAGIOS_USER=nagios -e NAGIOS_PASS=nagios -ti kolypto/nagios
Enjoy! :)
Configuration Cheat-Sheet
-------------------------
Things to do at the beginning:
* Administration > Users, Users: disable guest access (group), setup user accounts & themes
* Administration > Media types: set up notification methods. For custom alertscripts, see [Custom alertscripts](https://www.zabbix.com/documentation/2.4/manual/config/notifications/media/script)
* Administration > Users, Users, "Media" tab: set up notification destinations
* Configuration > Hosts: create a new host and add items, triggers & stuff
TODO
----
* Create a way to set up and update alertscripts: `/etc/zabbix/alert.d/`. Git? Download? Update?

24
conf/apache2-site.conf Normal file
View File

@ -0,0 +1,24 @@
<VirtualHost *:80>
ServerName localhost
DocumentRoot /usr/local/nagios/share/
ScriptAlias /cgi-bin/ /usr/local/nagios/sbin/
<Directory /usr/local/nagios/sbin/>
Options +ExecCGI
</Directory>
<DirectoryMatch (/usr/local/nagios/share/|/usr/local/nagios/sbin/|/usr/local/nagios/share/stylesheets)>
Options FollowSymLinks
DirectoryIndex index.php index.html
AllowOverride AuthConfig
Order Allow,Deny
Allow From All
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /etc/nagios/htpasswd.users
require valid-user
</DirectoryMatch>
</VirtualHost>

0
conf/nagios.cfg Normal file
View File

11
conf/php.ini Normal file
View File

@ -0,0 +1,11 @@
[PHP]
date.timezone={{ NAGIOS_PHP_TIMEZONE }}
max_execution_time = 300
memory_limit = 128M
display_errors = Off
post_max_size = 16M
upload_max_filesize = 2M
max_input_time = 300

10
conf/supervisor-all.conf Normal file
View File

@ -0,0 +1,10 @@
[supervisord]
logfile = /var/log/supervisord.log
logfile_backups = 0
[program:apache]
command = /bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND"
[program:nagios]
user = nagios
command = /usr/local/nagios/bin/nagios /etc/nagios/nagios.cfg

17
run.sh Executable file
View File

@ -0,0 +1,17 @@
#! /usr/bin/env bash
set -eu # exit on error or undefined variable
# Variables
export NAGIOS_USER=${NAGIOS_USER:-"nagios"}
export NAGIOS_PASS=${NAGIOS_PASS:-"nagios"}
# Templating
htpasswd -cb /etc/nagios/htpasswd.users $NAGIOS_USER $NAGIOS_PASS
# Logging
rm -f /usr/local/nagios/var/nagios.lock /var/run/apache2/apache2.pid
LOGFILES=$(echo /usr/local/nagios/var/nagios.log /var/log/{supervisord,apache2/error}.log)
( umask 0 && truncate -s0 $LOGFILES ) && tail --pid $$ -n0 -F $LOGFILES &
# Launch
exec /usr/bin/supervisord -n