FastNetMon

суббота, 22 июня 2019 г.

PHP FPM dynamic, ondemand or static?

Часто встает вопрос, в каком режиме использовать PHP FPM? Вот есть отличная статья, дающая ответ.

Установка Salt на Ubuntu 18.04

Довольно долгое время раньше я использовал Puppet, но он был крайне проблемен с точки зрения производительности, а также с точки зрения сложности конфигурации. В этом плане Salt намного лучше и понятнее, что я и постараюсь показать.

Как обычно, официальные инструкции можно найти тут и тут

Для работы нам потребуется по меньшей мере две машины - master (сервер) и minion (клиент).

Как для мастера, так и для клиента требуется добавить официальный репозиторий:
wget -O - https://repo.saltstack.com/apt/ubuntu/18.04/amd64/latest/SALTSTACK-GPG-KEY.pub | sudo apt-key add -
echo "deb [arch=amd64] http://repo.saltstack.com/apt/ubuntu/18.04/amd64/latest bionic main" | sudo tee /etc/apt/sources.list.d/saltstack.list
sudo apt-get update
Итак, установим мастер:
sudo apt-get install salt-master
 Так как мастер будет слушать на двух портах, я настоятельно рекомендую сразу же закрыть его фаерволлом от всех машин кроме клиента.

Для этого можно использовать пакет iptables-persistent, ставим его:
sudo apt-get install -y iptables-persistent
 Открываем файл конфигурации
sudo vim /etc/iptables/rules.v4
Создаем конфигурацию (xx замените на адрес клиента, если их неколько, добавьте несколько записей):
 # Generated by iptables-save v1.6.1 on Sat Jun 22 13:34:44 2019
*filter
:INPUT ACCEPT [278:38814]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [231:33098]
# Allow access from clients
-A INPUT -s xx/32 -p tcp -m tcp --dport 4505 -j ACCEPT
-A INPUT -s xx/32 -p tcp -m tcp --dport 4506 -j ACCEPT
# And from localhost
-A INPUT -s 127.0.0.1/32 -p tcp -m tcp --dport 4505 -j ACCEPT
-A INPUT -s 127.0.0.1/32 -p tcp -m tcp --dport 4506 -j ACCEPT

# Block all traffic to external hosts to Salt Master
-A INPUT -p tcp -m tcp --dport 4505 -j DROP
-A INPUT -p udp -m udp --dport 4505 -j DROP
-A INPUT -p tcp -m tcp --dport 4506 -j DROP
-A INPUT -p udp -m udp --dport 4506 -j DROP
COMMIT
# Completed on Sat Jun 22 13:34:44 2019
После этого применяем изменения и убеждаемся: что правила добавлены в фаерволл iptables:
sudo systemctl restart netfilter-persistent
Теперь установим клиента:
sudo apt-get install salt-minion
После этого, нам нужно указать адрес мастер сервера в его конфигурации:
sudo vim /etc/salt/minion
И задаем адрес мастера в следующем параметре:
master: xx.aa.zz.bb
Кроме этого, нам потребуется ключ мастер, который нужно получить на мастер сервере следующим образом:
salt-key -F master
And copy string from "master.pub" from Local Key section and insert into /etc/salt/minion in following place:
master_finger: "xx.aa.xx.ggg"
Этот ключ позволит клиенту убедиться, что мастер именно тот, который нам требуется.

После этого применяем конфигурацию:
sudo systemctl restart salt-minion.service
После этого клиент (minion) запросит авторизацию у мастер сервера, илем на мастер сервер и запрашиваем список активных запрсов на авторизацию:
sudo salt-key -L
В ответ вы увидите что-то вида:
Accepted Keys:
Denied Keys:
Unaccepted Keys:
client_hostname
Rejected Keys: 
Одобряем запрос авторизации:
sudo salt-key --accept=client_hostname
Все, после этого с мастер сервера вы можете посылать любые командый конфигурации:
 salt '*' test.version
Но это лишь половина дела, наша задача заключается в автоматическом конфигурировании сервисов на клиенте и это также очень просто!

Создаем основную конфигурацию:
sudo vim /srv/salt/top.sls
Где указываем следующее:
base:
  'client_hostname':
    - php_fpm_setup
Этот файл представляет собой точку входу для конфигурации Salt и здесь можно управлять тем, какие конфигурации должны быть применены на какого клиента.

Итак, создадим саму конфигурацию:
sudo vim /srv/salt/php_fpm_setup.sls
Вот такого вида:
nginx_pkg:
  pkg.installed:
    - name: nginx
nginx_service:
  service.running:
    - name: nginx
    - enable: True
    - require:
      - pkg: nginx_pkg
fpm_pkg:
  pkg.installed:
     - name: php7.2-fpm
fpm_service:
  service.running:
    - name: php7.2-fpm
    - enable: True
    - require:
      - pkg: fpm_pkg
Данный state файл установит на сервер пакеты nginx и php-fpm и настроит их автозапуск.

После этого, данный state можно применить как со стороны клиента:
salt-call state.apply

Так и удаленно, со стороны сервера:
salt '*' state.apply
Выдача в обоих случаях будет аналогичная:
 ---------
          ID: nginx_pkg
    Function: pkg.installed
        Name: nginx
      Result: True
     Comment: All specified packages are already installed
     Started: 15:44:59.405480
    Duration: 57.533 ms
     Changes: 
----------
          ID: nginx_service
    Function: service.running
        Name: nginx
      Result: True
     Comment: The service nginx is already running
     Started: 15:44:59.463924
    Duration: 54.275 ms
     Changes: 
----------
          ID: fpm_pkg
    Function: pkg.installed
        Name: php7.2-fpm
      Result: True
     Comment: All specified packages are already installed
     Started: 15:44:59.518411
    Duration: 18.16 ms
     Changes:   
Все! Таким образом, у вас все конфигурации всех серверов будут находится в одном месте, сразу же рекомендую сделать /srv/salt git репозиторием.

суббота, 18 мая 2019 г.

Ubuntu 14.0 and Stopping system V runlevel compatibility

Recently I hit this issue after removing all X-related packages from server.

Root cause was some missing packages from lightdm.

NB! Please use this suggestions ONLY if you need only console interface on your server.

You can fix it by removing all configuration files which belong to lightdm:
sudo apt-get purge lightdm