Docker (linux)

Установка docker

curl -fsSL https://get.docker.com -o get-docker.sh && sudo sh get-docker.sh

OpenVPN

Создаем папку для конфигурации и генерируем ее, вместо SERVERADDR нужно подставить IP-адрес сервера (порт 11194 защита от дурака)

export configdir=/etc/openvpn
mkdir $configdir
docker run -v $configdir:/etc/openvpn --rm kylemanna/openvpn ovpn_genconfig -u udp://SERVERADDR:11194 -e "duplicate-cn"

создаем корневые сертификаты. Попросит придумать пароль - водим любой пароль (минимум 5 символов) и любое CommonName - это имя сервера

docker run -v $configdir:/etc/openvpn --rm -it kylemanna/openvpn ovpn_initpki

запускаем openvpn сервер

docker run -v $configdir:/etc/openvpn -d --name openvpn --restart=always -p 11194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn

создаем пользователя. Потребуется пароль, который придумали выше (CLIENTNAME нужно заменить на имя юзера)

docker run -v $configdir:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full CLIENTNAME nopass

для скачивания файла конфигурации из контейнера на хост машину (CLIENTNAME нужно заменить на имя юзера) - файл появится в папке root

docker run -v $configdir:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient CLIENTNAME > CLIENTNAME.ovpn

проверяем список запущенных контейнеров

docker ps -a

для мониторинга клиентов онлайн необходимо внести изменения в файл /etc/openvpn/server.conf, закомментировать status /tmp/openvpn-status.log и добавить строчку status openvpn-status.log, после чего перезапустить openvpn и проверить клиентов командой

cat /etc/openvpn/openvpn-status.log

примечание:

ip адреса клиентов относятся к подсети 192.168.255.0

Portainer

Это инструмент управления контейнерами доступный через WebUI

проверяем версии docker и docker compose, версия последнего нам нужна будет далее

docker -v`
docker compose version

создаем рабочий каталог

cd /opt`
sudo mkdir twportainer`
cd ./twportainer

создаем файл конфигурации

sudo nano docker-compose.yml

вставляем содержимое (у меня ругался на версию, но на работу не влияет)

version: "X" 
services: 
    twportainer:    
        image: portainer/portainer-ce:latest 
        container_name: twportainer
        environment:     
            - TZ=Europe/Moscow    
        volumes:    
            /var/run/docker.sock:/var/run/docker.sock 
            /opt/twportainer/portainer_data:/data 
        ports:    
            - "8000:8000"     
            - "9443:9443"
            - "9000:9000"
        restart: always

запускаем twportainer

docker compose up -d

доступ к WebUI через :9000

После каждого нового добавления контейнера - раздать статические ip контейнерам через portainer

Postgres и Zabbix

загружаем образ postgres

docker pull postgres

загружаем образ zabbix

docker pull zabbix/zabbix-server-pgsql

создаем сеть

docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net

запускаем контейнера PostgreSQL (POSTGRES_PASSWORD=любой свой пароль)

docker run --name postgres-server -t -e POSTGRES_USER="zabbix" -e POSTGRES_PASSWORD="12345678" -e POSTGRES_DB="zabbix" 
--network=zabbix-net  --restart unless-stopped -d postgres:latest

запускаем образец snmp Zabbix

docker run --name zabbix-snmptraps -t -v /zbx_instance/snmptraps:/var/lib/zabbix/snmptraps:rw -v /var/lib/zabbix/mibs:/usr/share/snmp/mibs:ro --network=zabbix-net -p 162:1162/udp --restart unless-stopped -d zabbix/zabbix-snmptraps:alpine-7.2-latest

запускаем Zabbix сервер

docker run --name zabbix-server-pgsql -t -e DB_SERVER_HOST="postgres-server" -e POSTGRES_USER="zabbix" -e POSTGRES_PASSWORD="12345678" -e POSTGRES_DB="zabbix" -e ZBX_ENABLE_SNMP_TRAPS="true" --network=zabbix-net -p 10050:10050 --volumes-from zabbix-snmptraps --restart unless-stopped -d zabbix/zabbix-server-pgsql:6.0-alpine-latest

запускаем Zabbix WebUI

docker run --name zabbix-web-nginx-pgsql -t -e ZBX_SERVER_HOST="zabbix-server-pgsql" -e DB_SERVER_HOST="postgres-server" -e POSTGRES_USER="zabbix" -e POSTGRES_PASSWORD="12345678" -e POSTGRES_DB="zabbix" --network=zabbix-net -p 443:8443 -p 80:8080 -v /etc/ssl/nginx:/etc/ssl/nginx:ro --restart unless-stopped -d zabbix/zabbix-web-nginx-pgsql:6.0-alpine-latest

доступ к WebUI через :80

загружаем образ zabbix-agent

docker pull zabbix/zabbix-agent2

запускаем Zabbix-agent (вместо NAMEZ - имя сервера для мониторинга, вместо 172.20.240.3 - ip zabbix сервера, volume и user необходимы для получения данных о контейнерах docker)

docker run --name some-zabbix-agent -e ZBX_HOSTNAME="NAMEZ" -e ZBX_SERVER_HOST="172.20.240.3" -e ZBX_PASSIVE_ALLOW="true" -e ZBX_ACTIVE_ALLOW="false" -e ZBX_TIMEOUT="3" --network=zabbix-net --user=0:0 --volume="/var/run/docker.sock:/var/run/docker.sock" --privileged --restart unless-stopped --init -d zabbix/zabbix-agent2:latest

в веб интерфейсе zabbix прописываем все по стандарту адрес агента и добавляем что хотим мониторить. Из того что смог подцепить шаблонами

  • Zabbix server health
  • Zabbix agent
  • Linux filesystems by Zabbix agent
  • Linux memory by Zabbix agent
  • Linux block devices by Zabbix agent
  • Linux network interfaces by Zabbix agent
  • Linux generic by Zabbix agent
  • Docker by Zabbix agent 2
  • Systemd by Zabbix agent 2

если необходим доступ к мониторингу postgres - создаем еще одно клиента для postgres

docker run --name some-zabbix-agentPG -e ZBX_HOSTNAME="NAMEPG" -e ZBX_SERVER_HOST="172.20.240.3" -e ZBX_PASSIVE_ALLOW="true" -e ZBX_ACTIVE_ALLOW="false" -e ZBX_TIMEOUT="3" -e PGROLE="zabbix" -e PGPASS="12345678" -e PGHOST="172.20.240.1" -e PGPORT="5432" -e PGDATABASE="zabbix" --network=zabbix-net  --privileged --restart unless-stopped --init -d zabbix/zabbix-agent2:latest

в веб интерфейсе zabbix прописываем все по стандарту адрес агента и добавляем шаблон PostgreSQL by Zabbix agent 2 и в его маркерах меняем 4 параметра

  • {$PG.CONNSTRING.AGENT2} tcp://172.20.240.1:5432
  • {$PG.DATABASE} zabbix
  • {$PG.PASSWORD} 12345678
  • {$PG.USER} zabbix

Подключение агента с удаленных машин?

Мониторинг клиентов OpenVPN и их траффика через и будет ли это работать через docker?

Grafana?