• Почему Редис не пытается синхронизироваться как будто он запускается в класетере?

    @zohan1993
    devops
    Попробуйте запустить контейнер на основе официального образа redis.
    https://hub.docker.com/_/redis/?tab=description&pa...
    Ответ написан
    Комментировать
  • Как передавать аргументы к внешнему файлу в Docker?

    @zohan1993
    devops
    Если определить /usr/local/bin/trid как ENTRYPOINT, то CMD будет предоставлен в качестве параметров для ENTRYPOINT.
    При запуске контейнера можно переопределять CMD, в нашем случае указывать путь к файлу для анализа внутри контейнера.
    Поэтому нужно смонтировать внешнюю папку с файлами в контейнер.

    # Dockerfile
    ---
    FROM alpine:3.7
    ADD ./trid /usr/local/bin
    ENTRYPOINT ["/usr/local/bin/trid"]
    ---
    
    docker build -t trid:v1 .


    # Files for analysis on host system
    /var/lib/docker_data/files/file1.txt
    /var/lib/docker_data/files/file2.txt
    /var/lib/docker_data/files/file3.txt


    # Running container for analysis file1.txt
    docker run --rm -v /var/lib/docker_data/files:/data:ro --name analysis trid:v1 "/data/file1.txt"
    Ответ написан
    Комментировать
  • Как связать docker compose контейнер с другим?

    @zohan1993
    devops
    Не совсем понятна суть проблемы и почему все реализовано именно так...
    Если правильно понял схему:

    1. Создаем сеть - nginx-proxy

    docker network create --subnet=192.168.111.0/24 nginx-proxy


    2. Создаем контейнери с использованием уже созданой сети - nginx-proxy

    docker-compose1.yml
    -------------------------------
    version: '3.7'
    
    networks:
      default:
        external:
          name: nginx-proxy
    
    services:
      busybox:
        container_name: busybox
        image: busybox
        command: ping busybox2
      busybox2:
        container_name: busybox2
        image: busybox
        command: ping busybox
    -------------------------------
    
    docker-compose2.yml
    -------------------------------
    version: '3.7'
    
    networks:
      default:
        external:
          name: nginx-proxy         
    
    services:
      busybox3:
        container_name: busybox3
        image: busybox
        command: ping busybox
    -------------------------------
    
    docker-compose -f docker-compose1.yml up -d 
    docker-compose -f docker-compose2.yml up -d 
    
    # Запустим еще один контейнер руками
    docker run -d --name busybox4 --network nginx-proxy busybox ping busybox3


    3. Проверка связности между контейнерами

    # docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    64ce2eb1f196        busybox             "ping busybox3"     5 minutes ago       Up 5 minutes                            busybox4
    f67c1ef50ce7        busybox             "ping busybox"      14 minutes ago      Up 14 minutes                           busybox3
    181aefcd78bb        busybox             "ping busybox2"     14 minutes ago      Up 14 minutes                           busybox
    428b7ba4c08f        busybox             "ping busybox"      14 minutes ago      Up 14 minutes                           busybox2
    
    # docker logs -f busybox
    PING busybox2 (192.168.111.2): 56 data bytes
    64 bytes from 192.168.111.2: seq=0 ttl=64 time=0.073 ms
    64 bytes from 192.168.111.2: seq=1 ttl=64 time=0.112 ms
    64 bytes from 192.168.111.2: seq=2 ttl=64 time=0.087 ms
    
    # docker logs -f busybox2
    PING busybox (192.168.111.3): 56 data bytes
    64 bytes from 192.168.111.3: seq=0 ttl=64 time=1014.484 ms
    64 bytes from 192.168.111.3: seq=1 ttl=64 time=14.449 ms
    64 bytes from 192.168.111.3: seq=2 ttl=64 time=0.100 ms
    
    # docker logs -f busybox3
    PING busybox (192.168.111.3): 56 data bytes
    64 bytes from 192.168.111.3: seq=0 ttl=64 time=0.093 ms
    64 bytes from 192.168.111.3: seq=1 ttl=64 time=0.126 ms
    64 bytes from 192.168.111.3: seq=2 ttl=64 time=0.127 ms
    
    
    # docker logs -f busybox4
    PING busybox3 (192.168.111.4): 56 data bytes
    64 bytes from 192.168.111.4: seq=0 ttl=64 time=0.105 ms
    64 bytes from 192.168.111.4: seq=1 ttl=64 time=0.107 ms
    64 bytes from 192.168.111.4: seq=2 ttl=64 time=0.125 ms
    
    
    # docker network inspect nginx-proxy
    
            "Containers": {
                "181aefcd78bbbc66c35757d6170d92a0ff753af91d4500d8405fc815ac5f3afe": {
                    "Name": "busybox",
                    "EndpointID": "ae472487064cf030f1df1c74e310bb3e82d3fe23912a3ffeeaf49902fb8b5b04",
                    "MacAddress": "02:42:c0:a8:6f:03",
                    "IPv4Address": "192.168.111.3/24",
                    "IPv6Address": ""
                },
                "428b7ba4c08f9ccf10563f064e96b8836bb9af31804ac00de30eb0c5f29eae80": {
                    "Name": "busybox2",
                    "EndpointID": "65e688e16d0d86f2244355e4608aa0e111d9178ff2cd509dc49855561b92faae",
                    "MacAddress": "02:42:c0:a8:6f:02",
                    "IPv4Address": "192.168.111.2/24",
                    "IPv6Address": ""
                },
                "64ce2eb1f196d012be0379ed46788e60a9a9534081d9985f8df2cc2cc1bb20d1": {
                    "Name": "busybox4",
                    "EndpointID": "c33d66f1004847e965b62c285c3afb5ec41972a083841b59b5300e8a5ba3de8a",
                    "MacAddress": "02:42:c0:a8:6f:05",
                    "IPv4Address": "192.168.111.5/24",
                    "IPv6Address": ""
                },
                "f67c1ef50ce705ba915c45dd0ee0e9a7f1f2ed8d90f19257dd7d12fffa5849cf": {
                    "Name": "busybox3",
                    "EndpointID": "921dc6d11fe07a89530080b0d8096b07f924c4cb0f3120201addc28a343dad74",
                    "MacAddress": "02:42:c0:a8:6f:04",
                    "IPv4Address": "192.168.111.4/24",
                    "IPv6Address": ""
                }
    Ответ написан
    1 комментарий
  • Как деплоить Laravel + Vue приложение в Docker?

    @zohan1993
    devops
    1. Переезжаем на Docker swarm с одной нодой, появиться возможность "rolling updates" + появиться возможность быстрого маштабирования до N нод, для надежности или при разрастании проекта.
    2. На деплой сервере делаем всю работу, обновляем код/зависимости, ребилдим webpack, собираем все в докер образ, если нужно тестим, заливаем а свой докер регистри.
    3. На prod сервере просто обновляем сервис (обновляем версию image), Docker swarm разрулит обновление без простоя.
    Ответ написан
    2 комментария
  • Как правильно подменять контейнеры Docker после деплоя?

    @zohan1993
    devops
    Zero Downtime Deployments - Docker + Traefik.
    https://coderbook.com/@marcus/how-to-do-zero-downt...

    Swarm Zero Downtime Updates
    https://www.youtube.com/watch?v=dLBGoaMz7dQ

    Как вариант - Kubernetes Rolling Update Srategy
    Ответ написан
    Комментировать
  • Хочу узнать ответ на вопрос, почему OpenVPN при поднятии, передает настройками шлюза по умолчанию не 0.0.0.0 а делит шлюз?

    @zohan1993
    devops
    Потому что на OpenVPN сервере указана опция redirect-gateway з флагом def1:

    redirect-gateway def1

    def1 -- Use this flag to override the default gateway by using 0.0.0.0/1 and 128.0.0.0/1 rather than 0.0.0.0/0. This has the benefit of overriding but not wiping out the original default gateway.
    Using the def1 flag is highly recommended, and is currently planned to become the default by OpenVPN 2.1.
    Ответ написан
  • Как в sh вычесть даты с разными часовыми поясами?

    @zohan1993
    devops
    Можно посчитать сколько еще дней сертификат действителен, с помощью преобразования даты в день года:

    # Expired day --> day of year
    expired_day=$(date -d "$(curl -sIv https://letsencrypt.ks03.ru |& grep "expire date:" | sed 's/*  expire date: //')" +%j)
    
    # Date --> day of year
    day=$(date +%j) 
    
    valid_days=$(($expired_day-$day))
    
    # Debug
    echo $expired_day
    echo $day
    echo $valid_days


    Или так:

    valid_days=$(($(date -d "$(curl -sIv https://letsencrypt.ks03.ru |& grep "expire date:" | sed 's/*  expire date: //')" +%j)-$(date +%j)))
    
    # Debug
    echo $valid_days
    Ответ написан
    Комментировать
  • Iptables + Openvpn. Как запретить route через VPN для клиента чтобы только у него работало через провайдера?

    @zohan1993
    devops
    1. В конфиг OVPN сервера добавляем:
    -------------------------------------------------
    client-config-dir /etc/openvpn/ccd
    -------------------------------------------------

    2. Для нужного клиента добавляем параметры:
    /etc/openvpn/ccd/client1
    -------------------------------------------------
    # push-reset, запрещает отдавать этому клиенту общие параметры назначаемые командой push в конфигурационном файле сервера
    push-reset
    # Маршрут который хотим отдавать данному клиенту
    push route 192.168.100.0 255.255.255.0
    -------------------------------------------------
    Ответ написан
    Комментировать
  • Возможно ли такая схема работы с openVPN?

    @zohan1993
    devops
    Создайте аналогичный конфиг с параметром:
    pull-filter ignore redirect-gateway

    https://community.openvpn.net/openvpn/wiki/IgnoreR...
    Ответ написан
    Комментировать
  • Как удаленно запустить команду на роутере?

    @zohan1993
    devops
    Какая модель роутера?
    Если есть SNMP, можна попробовать через него.
    Найти нужние OID и их порядок, потом прикрутить все это к bash/python + cron.
    Ответ написан
    3 комментария
  • Как автоматически запускать процессы (tor, privoxy) в Docker со стартом контейнера?

    @zohan1993
    devops
    1. Добавить в Dockerfile:
    CMD /etc/init.d/tor start && sleep 5 && /etc/init.d/privoxy start

    2. Или добавить в Dockerfile:
    CMD /start.sh

    а в start.sh напихать все что нужно запускать/проверять
    Ответ написан
    Комментировать
  • Как организовать запуск скриптов на сервере?

    @zohan1993
    devops
    1. Виртуальное окружение для бота

    virtualenv --python=/usr/bin/python3.5 /srv/venv/telegram-bot-1
    source /srv/venv/telegram-bot-1/bin/activate
    pip install -r requirements.txt

    2. Systemd service для бота

    /etc/systemd/system/telegram-bot-1.service
    -------------------------------------------------
    [Unit]
    Description=Telegram bot
    After=syslog.target
    After=network.target

    [Service]
    Type=simple
    User=root
    ExecStart=/srv/venv/telegram-bot-1/bin/python3.5 /usr/local/bin/telegram-bot-1/bot.py
    RestartSec=10
    Restart=always

    [Install]
    WantedBy=multi-user.target
    -------------------------------------------------

    systemctl daemon-reload
    systemctl start telegram-bot-1.service
    systemctl enable telegram-bot-1.service
    Ответ написан
    Комментировать
  • Какой коллектор системных метрик можете посоветовать для Grafana?

    @zohan1993
    devops
    1. Zabbix windows / linux agent --> Zabbix server --> Grafana

    2. Prometheus node / wmi exporter --> Prometheus --> Grafana

    3. Collectd --> Graphite --> Grafana
    Ответ написан
    Комментировать