Как добавить пользователя RabbitMQ для мониторинга
sudo rabbitmqctl add_user "username"
sudo rabbitmqctl set_permissions -p "/" "username" ".*" ".*" ".*"
sudo rabbitmqctl set_user_tags username administrator
sudo rabbitmqctl add_user "username"
sudo rabbitmqctl set_permissions -p "/" "username" ".*" ".*" ".*"
sudo rabbitmqctl set_user_tags username administrator
USE DatabaseName;
CHECK TABLE TableName;
USE DatabaseName;
CREATE TABLE NewTableName LIKE OldTableName;
INSERT INTO NewTableName SELECT * FROM OldTableName;
apt remove nodejs
wget https://nodejs.org/dist/v14.15.0/node-v14.15.0-linux-x64.tar.xz
mkdir -p /usr/local/lib/nodejs
tar -xJvf node-v14.15.0-linux-x64.tar.xz -C /usr/local/lib/nodejs
mcedit ~/.profile
В конце файла:
# Nodejs
VERSION=v14.15.0
DISTRO=linux-x64
export PATH=/usr/local/lib/nodejs/node-$VERSION-$DISTRO/bin:$PATH
Затем:
. ~/.profile
which node
node -v
npm version
npx -v
npm install -g yarn
В проекте:
yarn install
npm run build
sudo apt-get install spawn-fcgi libcgi-fast-perl
sudo spawn-fcgi -s /var/run/munin/fcgi-graph.sock -U www-data -u www-data -g www-data /usr/lib/munin/cgi/munin-cgi-graph
После чего в хост /etc/nginx/sites-available/default (или подобный) добавьте правило:
location ^~ /munin-cgi/munin-cgi-graph/ {
fastcgi_split_path_info ^(/munin-cgi/munin-cgi-graph)(.*);
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/var/run/munin/fcgi-graph.sock;
include fastcgi_params;
}
Перезагрузите nginx и munin:
sudo nginx -t
sudo service munin restart
sudo service nginx reload
sudo apt-get install libapache2-mod-fcgid
sudo a2enmod fcgid
sudo service apache2 restart
Определяем месторасположение локального конфига MySQL (установка mlocate может занять длительное время):
apt install mlocate
locate my.cnf
Допустим он расположен по /etc/mysql/my.cnf. Редактируем:
apt install mc
mcedit /etc/mysql/my.cnf
В конце файла добавляем:
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1
Где long_query_time — это время в секундах, выполнение дольше которого считается медленным.
Перезагружаем MySQL сервер:
service mysql restart
Проверяем, что лог медленных запросов активировался:
mysql -p
SHOW VARIABLES LIKE '%slow%';
Должно быть что-то вроде:
| slow_query_log | ON |
| slow_query_log_file | /var/log/mysql/mysql-slow.log |
Лог медленных запросов теперь можно смотреть по адресу /var/log/mysql/mysql-slow.log
apt install software-properties-common
add-apt-repository ppa:certbot/certbot
apt update
apt upgrade
apt install letsencrypt
mcedit /etc/letsencrypt/cli.ini
В нём:
post-hook = service nginx reload
Далее в консоли:
certbot register --email ваш_email
Редактируем хост:
mcedit /etc/nginx/sites-available/...
Добавляем правило:
location ~ /.well-known {
root /var/www/well-knowns/домен;
}
Далее в консоли:
mkdir -p /var/www/well-knowns/домен/.well-known
Создаём тестовый файл:
mcedit /var/www/well-knowns/домен/.well-known/test.txt
Перезагружаем nginx:
service nginx reload
Открываем в браузере http://домен/.well-known/test.txt
Удалить тестовый файл, если всё хорошо.
Проверяем работоспособность создания сертификата:
letsencrypt certonly --dry-run -d домен -d www.домен
При запросе webroot указываем /var/www/well-knowns/домен/
Если всё ок, то создаём уже сертификат по-настоящему:
letsencrypt certonly -d домен -d www.домен
Проверка
openssl x509 -text -in /etc/letsencrypt/live/домен/cert.pem
В nginx конфигурации хоста добавляем новые параметры:
ssl_certificate /etc/letsencrypt/live/домен/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/домен/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/домен/chain.pem;
ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:RSA+3DES:!NULL:!RC4;
В файле /etc/cron.d/certbot должен быть автозапрос продления сертификатов.
Браузеры, кроме Chrome, имеют свойство обращаться к CA для сверки со списком отозванных сертификатов, задерживая открытие страниц на секунды. Устранить эту задержку можно прикладывая подписанный ответ OCSP сервера к ответу при создании нового соединения.
tee /etc/nginx/conf.d/ssl_stapling.conf <<EOF
resolver 127.0.0.1;
ssl_stapling on;
ssl_stapling_verify on;
EOF
Если у вас нет локального кеширующего DNS сервера, в директиве resolver следует указать IP фактически используемого DNS сервера.
nameserver=$(grep nameserver /etc/resolv.conf | head -1 | cut -f2 -d" ")
sed -i s/127.0.0.1/$nameserver/ /etc/nginx/conf.d/ssl_stapling.conf
grep resolver /etc/nginx/conf.d/ssl_stapling.conf
Заметка основана на https://habrahabr.ru/post/318952/ и https://www.alexeykopytko.com/2017/free-ssl-from-letsencrypt/
apt install git-core
Условимся, что у нас будет mygit пользователь, содержащий центральные Git репозитории. Клиенты будут подключаться к mygit пользователю через Git по SSH, однако напрямую по SSH доступ следует отключить.
Сперва создадим mygit пользователя:
adduser mygit
Дальнейшая работа необходима от имени этого пользователя для того, чтобы каталоги и файлы имели соответствующие права, группу и владельца. Войдём под ним:
su mygit
cd
mkdir название_репозитория.git
cd название_репозитория.git/
git init --bare
Когда все репозитории созданы, выходим из пользователя mygit:
exit
Сейчас любое соединение клиента требует ввода пароля пользователя mygit. Чтобы клиенты могли работать с Git репозиториями пользователя без ввода пароля, необходимо добавить публичные ключи клиентов (содержимое файлов id_rsa.pub) в ~/.ssh/authorized_keys.
Но сперва установка OpenSSH клиента и сервера осуществляется командой
apt install ssh
С помощью редактора mcedit (или nano, в случае mcedit требуется сперва установить mc) откроем файл /etc/ssh/sshd_config:
mcedit /etc/ssh/sshd_config
Убедитесь, что следующий параметр имеет указанное значение:
PermitEmptyPasswords no
Здесь можно указать другой порт для SSH, но в этом случае, при последующем подключении клиентами, команда подключения должна будет иметь подобный вид:
ssh -p ПОРТ логин@сервер
Перезапустить SSH сервер можно командой:
service ssh restart
Чтобы в последующем не вводить логин, сервер и порт, можно задать пресет ssh в .ssh/config, например,
так:
Host preset1
HostName IP_адрес_или_домен
User имя_пользователя
Port порт
и уже авторизоваться по
ssh preset1
У пользователей, которые будут подключаться к серверу через SSH или Git (по SSH), должен быть установлен SSH клиент и сгенерированы ключи. Проверить, сгенерирован ли ключ, можно по наличию файла ~/.ssh/id_rsa.pub . В случае отсутствия, необходимо его сгенерировать, например, с помощью следующей команды:
ssh-keygen -t rsa -C "email@сервер"
Пароль можно не устанавливать.
Затем добавьте ключ в ssh-agent:
ssh-add ~/.ssh/id_rsa
Чтобы при каждом соединении с SSH и Git (он будет у нас работать тоже через SSH) не вводить пароль, нужно создать файл /home/mygit/.ssh/authorized_keys на сервере.
Обратите внимание: для создания каталога .ssh (если таковой отсутствует) и файла authorized_keys необходимо быть авторизованным под самым тем пользователем, в домашнем каталоге которого осуществляются действия, то бишь под mygit. Либо после установить соответствующие права, группу и владельца.
В этом файле на каждой строке должно быть содержимое публичного ключа (~/.ssh/id_rsa.pub) клиентов этого пользователя. В конце файла authorized_keys должна быть пустая строка.
Иными словами, если у нас имеется server_user_1, к которому будет осуществляться доступ через ssh клиентами client_user_1 и client_user_2, то в домашнем каталоге пользователя server_user_1 файл ~/.ssh/authorized_keys должен иметь три строки:
содержимое id_rsa.pub client_user_1
содержимое id_rsa.pub client_user_2
(пустая строка)
Когда все центральные репозитории созданы, а публичные ключи клиентов добавлены в соответствующий файл, и всё у всех работает, пора отключить прямой доступ к пользователю mygit по SSH.
Здесь и далее работаем от имени root. Узнаем полный путь к оболочке git-shell:
which git-shell
И запоминаем.
Затем открываем файл /etc/passwd в mcedit (или в другом редакторе, например, nano):
mcedit /etc/passwd
Находим (скорее всего в конце файла) строчку, начинающуюся на mygit, и вместо /bin/bash (или /bin/sh, далее буду указывать /bin/bash) оболочки указываем полный адрес оболочки git-shell. Например, /usr/bin/git-shell. Не удалите перенос строки в конце файла. Сохраняем.
Теперь доступ к пользователю mygit через SSH разрешён только для Git.
Однако ранее использованная команда «su mygit» тоже работать не будет! Поэтому, когда необходимо добавить новый публичный ключ в authorized_keys или создать новый центральный репозиторий, то сперва потребуется в файле /etc/passwd заменить git-shell на прежнюю оболочку (/bin/bash), войти под пользователем (su mygit), произвести необходимые изменения, выйти к root (exit), и затем снова заменить оболочку пользователя в файле /etc/passwd на git-shell. Довольно не удобно, думаю, что в этой ситуации следует поступить как-то иначе, но пока не знаю как.
На клиентах развёртывать репозиторий просто:
git clone mygit@сервер:название_репозитория.git конечный_каталог
Если порт отличается от стандартного, то уже так:
git clone ssh://mygit@сервер:порт/home/mygit/название_репозитория.git конечный_каталог
wget https://bitbucket.org/tildeslash/monit/downloads/monit-5.27.1-linux-x64.tar.gz
tar xvzf monit-5.27.1-linux-x64.tar.gz
service monit stop
mcedit /etc/init.d/monit
CONFIG=/etc/monitrc
mv /etc/monit/monitrc /etc/monitrc
which monit
cp monit-5.27.1/bin/monit /usr/bin/monit -f
systemctl daemon-reload
monit --version
monit validate
service monit start
monit status
Поздравляю всех енотов с Международным днём признания енота! Ура!