<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>@maxadmin</title><author><name>@maxadmin</name></author><id>https://teletype.in/atom/maxadmin</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/maxadmin?offset=0"></link><link rel="alternate" type="text/html" href="https://maxadmin.ru/?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=maxadmin"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/maxadmin?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-08T01:26:50.001Z</updated><entry><id>maxadmin:SQL_backup_to_network_dirve</id><link rel="alternate" type="text/html" href="https://maxadmin.ru/SQL_backup_to_network_dirve?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=maxadmin"></link><title>Резервное копирование MS SQL баз в сетевой каталог </title><published>2025-02-25T12:34:32.758Z</published><updated>2025-02-25T13:14:28.306Z</updated><category term="ms-sql" label="MS SQL"></category><summary type="html">Для начала нужно сделать пользователя для SQL Server Agent для того чтобы монтировать сетевой диск.</summary><content type="html">
  &lt;p id=&quot;yrfB&quot;&gt;&lt;strong&gt;Для начала нужно сделать пользователя для SQL Server Agent для того чтобы монтировать сетевой диск. &lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;EQUq&quot;&gt;
    &lt;li id=&quot;SBbc&quot;&gt;Активируйте &lt;code&gt;xp_cmdshell&lt;/code&gt; в SQL Server run script (один раз):&lt;/li&gt;
  &lt;/ul&gt;
  &lt;pre id=&quot;iSgT&quot;&gt;EXEC sp_configure &amp;#x27;show advanced options&amp;#x27;, 1; RECONFIGURE; EXEC sp_configure &amp;#x27;xp_cmdshell&amp;#x27;, 1; RECONFIGURE;&lt;/pre&gt;
  &lt;ul id=&quot;MaJD&quot;&gt;
    &lt;li id=&quot;eQ0h&quot;&gt;&lt;strong&gt; Далее идём в SSMS -&amp;gt; SQL server agent -&amp;gt; Jobs&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;Qm8A&quot;&gt;Смонтируйте сетевой диск:&lt;/li&gt;
  &lt;/ul&gt;
  &lt;pre id=&quot;ovdZ&quot;&gt;EXEC xp_cmdshell &amp;#x27;net use X: \\u443481.your-storagebox.de\u443481-sub1 /user:username password&amp;#x27;;&lt;/pre&gt;
  &lt;ul id=&quot;dXmi&quot;&gt;
    &lt;li id=&quot;WadM&quot;&gt;После успешного монтирования выполните резервное копирование:&lt;/li&gt;
  &lt;/ul&gt;
  &lt;pre id=&quot;64mq&quot;&gt;BACKUP DATABASE [boykomtest] TO DISK = &amp;#x27;X:\backup\boykomtest.bak&amp;#x27; WITH INIT, COMPRESSION, CHECKSUM;&lt;/pre&gt;
  &lt;ul id=&quot;Vl6r&quot;&gt;
    &lt;li id=&quot;fTPB&quot;&gt;По завершении работы отключите сетевой диск:&lt;/li&gt;
  &lt;/ul&gt;
  &lt;pre id=&quot;Wmty&quot;&gt;EXEC xp_cmdshell &amp;#x27;net use X: /delete&amp;#x27;;&lt;/pre&gt;
  &lt;p id=&quot;LL3l&quot;&gt;Если хочется копировать все пользовательские базы данных то скрипт будет выглядеть вот так: &lt;/p&gt;
  &lt;pre id=&quot;Dm06&quot;&gt;DECLARE @BackupPath NVARCHAR(255) = &amp;#x27;\\u443481.your-storagebox.de\u443481-sub1\backup\&amp;#x27;
DECLARE @DatabaseName NVARCHAR(255)
DECLARE @BackupFile NVARCHAR(500)
DECLARE @SQL NVARCHAR(MAX)

-- Курсор для перебора всех пользовательских баз данных
DECLARE db_cursor CURSOR FOR
SELECT name FROM sys.databases
WHERE database_id &amp;gt; 4 -- Исключаем системные базы данных
AND name NOT IN (&amp;#x27;CompressionSetting&amp;#x27;) -- Исключаем определённые базы

OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @DatabaseName

WHILE @@FETCH_STATUS = 0
BEGIN
    -- Формируем имя файла бэкапа с полным путем
    SET @BackupFile = @BackupPath + &amp;#x27;full_&amp;#x27; + @DatabaseName + &amp;#x27;_&amp;#x27;
                      + REPLACE(CONVERT(NVARCHAR, GETDATE(), 120), &amp;#x27;:&amp;#x27;, &amp;#x27;-&amp;#x27;) + &amp;#x27;.bak&amp;#x27;
    
    -- Формируем SQL-запрос для выполнения бэкапа
    SET @SQL = &amp;#x27;BACKUP DATABASE [&amp;#x27; + @DatabaseName + &amp;#x27;] TO DISK = &amp;#x27; + QUOTENAME(@BackupFile, &amp;#x27;&amp;#x27;&amp;#x27;&amp;#x27;) + &amp;#x27;
                WITH INIT, COMPRESSION, CHECKSUM, FORMAT;&amp;#x27;
    
    -- Логируем SQL-запрос для отладки
    PRINT &amp;#x27;Executing: &amp;#x27; + @SQL

    -- Выполняем бэкап
    EXEC sp_executesql @SQL

    -- Переход к следующей базе данных
    FETCH NEXT FROM db_cursor INTO @DatabaseName
END

CLOSE db_cursor
DEALLOCATE db_cursor
or
db_cursor
DEALLOCATE db_cursor
&lt;/pre&gt;

</content></entry><entry><id>maxadmin:external-ip-mikrotik</id><link rel="alternate" type="text/html" href="https://maxadmin.ru/external-ip-mikrotik?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=maxadmin"></link><title>Определение внешнего ip mikrotik из командной строки</title><published>2024-10-13T08:54:30.021Z</published><updated>2024-10-13T08:54:30.021Z</updated><category term="mikrotik" label="Mikrotik"></category><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/ef/6c/ef6c1213-c438-446d-8447-20380c9374cc.png&quot;&gt;Команда для командной строки микрота чтобы узнать внешний айпи
/tool fetch url=&quot;https://trackip.net/ip&quot; mode=https output=user</summary><content type="html">
  &lt;p id=&quot;HI5R&quot;&gt;Команда для командной строки микрота чтобы узнать внешний айпи&lt;br /&gt;&lt;code&gt;/tool fetch url=&amp;quot;&lt;a href=&quot;https://trackip.net/ip&quot; target=&quot;_blank&quot;&gt;https://trackip.net/ip&lt;/a&gt;&amp;quot; mode=https output=user&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;pazf&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ef/6c/ef6c1213-c438-446d-8447-20380c9374cc.png&quot; width=&quot;557&quot; /&gt;
  &lt;/figure&gt;

</content></entry><entry><id>maxadmin:how-to-update</id><link rel="alternate" type="text/html" href="https://maxadmin.ru/how-to-update?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=maxadmin"></link><title>обновление ESXI</title><published>2024-09-28T17:24:04.252Z</published><updated>2024-09-28T17:24:59.937Z</updated><category term="v-mware-esxi" label="VMware ESXI"></category><summary type="html">just upgrade in place, no download needed</summary><content type="html">
  &lt;p id=&quot;AtU5&quot;&gt;just upgrade in place, no download needed&lt;/p&gt;
  &lt;p id=&quot;xPuw&quot;&gt;&lt;code&gt;esxcli network firewall ruleset set -e true -r httpClient&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;l8oQ&quot;&gt;&lt;code&gt;esxcli software profile update -p ESXi-6.7.0-20201104001-standard \&lt;br /&gt;-d https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;7uWZ&quot;&gt;&lt;code&gt;esxcli network firewall ruleset set -e false -r httpClient&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;ZfC8&quot;&gt;&lt;br /&gt;&lt;/p&gt;
  &lt;p id=&quot;B4rb&quot;&gt;номер обновления берём тут&lt;/p&gt;
  &lt;p id=&quot;pOV1&quot;&gt; &lt;a href=&quot;https://docs.vmware.com/en/VMware-vSphere/6.7/rn/esxi670-202111001.html&quot; target=&quot;_blank&quot;&gt;https://docs.vmware.com/en/VMware-vSphere/6.7/rn/esxi670-202111001.html&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;wC0V&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;xEpK&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/34/d1/34d1788b-e972-4017-9c7b-90e016b210ff.png&quot; width=&quot;291&quot; /&gt;
  &lt;/figure&gt;

</content></entry><entry><id>maxadmin:about-nebula</id><link rel="alternate" type="text/html" href="https://maxadmin.ru/about-nebula?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=maxadmin"></link><title>Что такое Nebula и зачем она нужна?  </title><published>2024-09-14T20:15:09.581Z</published><updated>2024-09-16T05:08:11.029Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/cc/28/cc28f166-2049-4c18-a94c-b03d756fdc64.png"></media:thumbnail><category term="linux" label="Linux"></category><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/18/b2/18b29cc0-f029-40cb-acc5-531cb8a9a048.png&quot;&gt;Nebula — это оверлейная сеть, которая позволяет создавать зашифрованные, безопасные соединения между узлами (компьютерами, серверами, устройствами) через существующие IP-сети, такие как Интернет. Основное назначение Nebula — это создание частных виртуальных сетей, которые могут работать поверх любых IP-сетей, включая сети с ограниченным доступом за NAT или брандмауэрами. Этот инструмент был разработан компанией Slack и открыт как проект с открытым исходным кодом.</summary><content type="html">
  &lt;figure id=&quot;HBA5&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/18/b2/18b29cc0-f029-40cb-acc5-531cb8a9a048.png&quot; width=&quot;838&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;SpQd&quot;&gt;&lt;strong&gt;&lt;br /&gt;Nebula&lt;/strong&gt; — это оверлейная сеть, которая позволяет создавать зашифрованные, безопасные соединения между узлами (компьютерами, серверами, устройствами) через существующие IP-сети, такие как Интернет. Основное назначение Nebula — это создание частных виртуальных сетей, которые могут работать поверх любых IP-сетей, включая сети с ограниченным доступом за NAT или брандмауэрами. Этот инструмент был разработан компанией Slack и открыт как проект с открытым исходным кодом.&lt;/p&gt;
  &lt;p id=&quot;YkDS&quot;&gt;Nebula работает по модели P2P (peer-to-peer) и использует &lt;strong&gt;сертификаты &lt;/strong&gt;для аутентификации и авторизации узлов, что обеспечивает высокий уровень безопасности и контроля над сетью.&lt;/p&gt;
  &lt;h2 id=&quot;siPV&quot;&gt;Основные компоненты сети Nebula&lt;/h2&gt;
  &lt;p id=&quot;FZgF&quot;&gt;1. &lt;strong&gt;Центр сертификации (CA)&lt;/strong&gt;: &lt;br /&gt;   Это ключевой элемент для управления узлами в сети Nebula. Центр сертификации используется для генерации и подписания сертификатов узлов, которые позволяют им участвовать в сети. Сертификаты содержат информацию о каждом узле, включая его IP-адрес и группы безопасности (т.н. &amp;quot;группы&amp;quot;). Все узлы доверяют одному центру сертификации, что обеспечивает их взаимную аутентификацию.&lt;/p&gt;
  &lt;p id=&quot;kJte&quot;&gt;2. &lt;strong&gt;Узлы (Nodes)&lt;/strong&gt;:&lt;br /&gt;   Узлы — это устройства (сервера, компьютеры, устройства IoT и т.д.), которые участвуют в оверлейной сети Nebula. Каждый узел использует зашифрованное соединение для общения с другими узлами, и каждый узел имеет уникальный сертификат для аутентификации.&lt;/p&gt;
  &lt;p id=&quot;sTuJ&quot;&gt;3. &lt;strong&gt;Маяки (Lighthouses)&lt;/strong&gt;:&lt;br /&gt;   Маяки служат для обнаружения узлов в сети и помогают узлам найти друг друга, особенно если они находятся за NAT или брандмауэром. Маяки не маршрутизируют трафик, а только сообщают узлам, как установить соединение между собой. Маяки играют важную роль в обеспечении работы сети, но они не участвуют в передаче данных напрямую.&lt;/p&gt;
  &lt;h2 id=&quot;aH7i&quot;&gt;Принцип работы Nebula&lt;/h2&gt;
  &lt;p id=&quot;6WZt&quot;&gt;Nebula использует криптографические протоколы для шифрования трафика между узлами, включая &lt;strong&gt;Elliptic-curve Diffie-Hellman (ECDH)&lt;/strong&gt; для обмена ключами и &lt;strong&gt;AES-256-GCM&lt;/strong&gt; для шифрования данных. Все узлы используют сертификаты, которые подписаны одним центром сертификации, что гарантирует, что все узлы доверяют друг другу.&lt;/p&gt;
  &lt;p id=&quot;sA9c&quot;&gt;Когда узел хочет установить соединение с другим узлом, он обращается к маякам (lighthouses) для получения информации об IP-адресах других узлов. После этого узлы могут установить прямое P2P-соединение через зашифрованные туннели.&lt;/p&gt;
  &lt;h2 id=&quot;35HD&quot;&gt;Сертификаты и центр сертификации (CA)&lt;/h2&gt;
  &lt;p id=&quot;1Uhs&quot;&gt;Одним из ключевых аспектов работы Nebula является управление сертификатами. Для настройки сети необходимо:&lt;br /&gt;1. Создать &lt;strong&gt;центр сертификации (CA)&lt;/strong&gt;, который будет генерировать сертификаты для всех узлов.&lt;br /&gt;2. Для каждого узла (маяков и узлов сети) необходимо создать сертификат, подписанный центром сертификации. Сертификат содержит информацию об IP-адресе узла и его принадлежности к определённой группе безопасности.&lt;/p&gt;
  &lt;p id=&quot;8MWU&quot;&gt;Сертификаты позволяют контролировать, какие узлы могут общаться друг с другом и какие права доступа есть у каждого узла.&lt;/p&gt;
  &lt;h2 id=&quot;fRjt&quot;&gt;Группы безопасности и файерволл&lt;/h2&gt;
  &lt;p id=&quot;SM9V&quot;&gt;Nebula использует концепцию &lt;strong&gt;групп безопасности&lt;/strong&gt;, которые определяют, какие узлы могут взаимодействовать друг с другом. Например, вы можете разделить сеть на несколько групп (например, &amp;quot;network1&amp;quot;, &amp;quot;network2&amp;quot;, &amp;quot;servers&amp;quot;, &amp;quot;clients&amp;quot;) и настроить правила файерволла, которые будут управлять доступом между узлами.&lt;/p&gt;
  &lt;p id=&quot;BFFI&quot;&gt;Пример правил файерволла:&lt;/p&gt;
  &lt;pre id=&quot;tBxL&quot;&gt;firewall:
  inbound:
    - port: any
      proto: any
      groups:
        - network1  # Разрешить входящий трафик только от узлов из группы network1
  outbound:
    - port: any
      proto: any
      host: any&lt;/pre&gt;
  &lt;p id=&quot;UL7x&quot;&gt;Эти правила позволяют ограничить доступ к узлам на основе их принадлежности к группам безопасности.&lt;/p&gt;
  &lt;h2 id=&quot;EB9Z&quot;&gt;Настройка нескольких маяков&lt;/h2&gt;
  &lt;p id=&quot;b36h&quot;&gt;Для повышения отказоустойчивости и производительности рекомендуется настроить несколько маяков в разных частях мира. Если один маяк выйдет из строя, другие маяки смогут продолжать работу, помогая узлам находить друг друга.&lt;/p&gt;
  &lt;h2 id=&quot;SHDi&quot;&gt;Сервер генерации сертификатов и резервирование данных&lt;/h2&gt;
  &lt;p id=&quot;7u6J&quot;&gt;Для управления сертификатами обычно используется отдельная машина — &lt;strong&gt;сервер центра сертификации (CA)&lt;/strong&gt;. На этом сервере хранятся:&lt;br /&gt;- &lt;strong&gt;Закрытый ключ центра сертификации (ca.key)&lt;/strong&gt; — самый важный файл, который нужно защитить. Без него невозможно будет создать новые сертификаты.&lt;br /&gt;- &lt;strong&gt;Сертификат центра сертификации (ca.crt)&lt;/strong&gt; — этот файл распространяется среди узлов для их аутентификации друг с другом.&lt;/p&gt;
  &lt;p id=&quot;UxLP&quot;&gt;Если сервер центра сертификации выйдет из строя или потеряет доступ, вам потребуется восстановить его с помощью резервной копии файла &amp;#x60;ca.key&amp;#x60;. Без этого файла вы не сможете создать новые сертификаты для узлов.&lt;/p&gt;
  &lt;h2 id=&quot;vqR2&quot;&gt;Автоматизация и управление сетью&lt;/h2&gt;
  &lt;p id=&quot;OGDF&quot;&gt;&lt;strong&gt;Автоматизация &lt;/strong&gt;управления сетью Nebula может быть достигнута с помощью инструментов конфигурации, таких как &lt;strong&gt;Ansible&lt;/strong&gt;, &lt;strong&gt;Puppet &lt;/strong&gt;или &lt;strong&gt;Chef&lt;/strong&gt;, которые позволяют автоматизировать развертывание узлов и обновление конфигурационных файлов. Эти инструменты помогают централизованно управлять сертификатами и обновлениями для всех узлов в сети.&lt;/p&gt;
  &lt;p id=&quot;boZT&quot;&gt;На текущий момент официального &lt;strong&gt;web-GUI&lt;/strong&gt; для управления Nebula нет, однако с помощью CLI и вышеупомянутых инструментов можно автоматизировать многие процессы. При необходимости можно разработать собственный веб-интерфейс для управления сетью на основе существующих скриптов.&lt;/p&gt;
  &lt;h2 id=&quot;enWB&quot;&gt;Масштабирование сети Nebula&lt;/h2&gt;
  &lt;p id=&quot;3Q6d&quot;&gt;Nebula легко масштабируется, что позволяет добавлять новые узлы и сети (сегменты) в существующую инфраструктуру. Для этого достаточно создать сертификаты для новых узлов с помощью центра сертификации, настроить конфигурационные файлы и подключить узлы к маякам. Сетевые сегменты можно разделить на группы безопасности для ограничения доступа между различными сетями.&lt;/p&gt;
  &lt;p id=&quot;mQpN&quot;&gt;Заключение&lt;/p&gt;
  &lt;p id=&quot;sIOc&quot;&gt;Nebula — это мощное решение для создания защищённых виртуальных сетей поверх существующих IP-сетей. Она обеспечивает высокий уровень безопасности, гибкости и масштабируемости благодаря использованию сертификатов, шифрования и централизованного управления доступом. Несмотря на отсутствие официального веб-интерфейса, Nebula позволяет эффективно управлять большими распределёнными сетями с помощью инструментов автоматизации и центра сертификации.&lt;/p&gt;
  &lt;p id=&quot;GTSG&quot;&gt;Это делает Nebula отличным выбором для компаний, которые хотят создать собственную VPN-сеть с высокой степенью контроля и безопасности.&lt;/p&gt;
  &lt;p id=&quot;gf9Y&quot;&gt;&lt;a href=&quot;https://linuxblog.xyz/posts/slack-nebula/&quot; target=&quot;_blank&quot;&gt;https://linuxblog.xyz/posts/slack-nebula/&lt;/a&gt;&lt;br /&gt;Вот отличная статья по настройке&lt;/p&gt;
  &lt;p id=&quot;lyRb&quot;&gt;&lt;a href=&quot;https://hub.docker.com/r/renehonig/nebula&quot; target=&quot;_blank&quot;&gt;https://hub.docker.com/r/renehonig/nebula&lt;/a&gt;&lt;br /&gt;докер контейнер для быстрого старта&lt;/p&gt;

</content></entry><entry><id>maxadmin:vps-bench</id><link rel="alternate" type="text/html" href="https://maxadmin.ru/vps-bench?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=maxadmin"></link><title>Тестирование производительности VPS сервера LINUX (debian/ubuntu)</title><published>2024-09-07T07:43:01.778Z</published><updated>2024-09-07T16:40:44.996Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/cd/de/cdde4006-3985-4086-9f7b-38517cb1f452.png"></media:thumbnail><category term="linux" label="Linux"></category><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/4e/e9/4ee91f57-7015-4d34-8d47-52a9b9be9fa4.png&quot;&gt;Тесты производительности VPS необходимы для объективной оценки вычислительных ресурсов серверов. В вашем случае, проведение таких тестов помогает сравнить различные виртуальные серверы по ключевым параметрам: производительности процессора (CPU), скорости работы с памятью (RAM), пропускной способности дисковой системы и скорости интернет-соединения. Это позволяет выбрать оптимальный сервер для конкретных задач, будь то хостинг приложений, базы данных или вычислительные задачи. С помощью таких бенчмарков, как Geekbench, можно легко получить результаты в виде баллов и сравнить VPS по объективным метрикам.</summary><content type="html">
  &lt;figure id=&quot;ayoP&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/4e/e9/4ee91f57-7015-4d34-8d47-52a9b9be9fa4.png&quot; width=&quot;479&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;3Txm&quot;&gt;Тесты производительности VPS необходимы для объективной оценки вычислительных ресурсов серверов. Проведение таких тестов помогает сравнить различные виртуальные серверы по ключевым параметрам: производительности процессора (CPU), скорости работы с памятью (RAM), пропускной способности дисковой системы и скорости интернет-соединения. Это позволяет выбрать оптимальный сервер для конкретных задач, будь то хостинг приложений, базы данных или вычислительные задачи. С помощью таких бенчмарков, как Geekbench, можно легко получить результаты в виде баллов и сравнить VPS по объективным метрикам.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;6dWd&quot;&gt;Способ №1 - быстрый&lt;/h3&gt;
  &lt;p id=&quot;xtiw&quot;&gt;С помощью инструментов &lt;strong&gt;sysbench&lt;/strong&gt; и &lt;strong&gt;Ookla Speedtest CLI&lt;/strong&gt; можно легко протестировать ключевые параметры сервера: процессор (CPU), оперативную память, дисковую систему и скорость интернет-соединения.&lt;/p&gt;
  &lt;p id=&quot;GJ49&quot;&gt;Эти тесты позволяют объективно оценить, насколько VPS отвечает требованиям пользователя по производительности. Результаты записываются в текстовый файл и могут быть использованы для сравнения различных серверов, что упрощает принятие решения о выборе подходящего хостинга.&lt;/p&gt;
  &lt;p id=&quot;KYqm&quot;&gt;Для автоматизации процесса создан скрипт, который выполняет все тесты, сохраняет результаты в файл и загружает их на FTP-сервер для дальнейшего анализа.&lt;/p&gt;
  &lt;p id=&quot;Svr6&quot;&gt;Как использовать:&lt;/p&gt;
  &lt;p id=&quot;E61L&quot;&gt;Создайте скрипт:&lt;/p&gt;
  &lt;pre id=&quot;WZPt&quot;&gt;nano boyko_it_linux_server_benchmark.sh&lt;/pre&gt;
  &lt;pre id=&quot;S1X4&quot;&gt;#!/bin/bash

# Установка sysbench
echo &amp;quot;Установка sysbench...&amp;quot;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y sysbench

# Установка Ookla Speedtest CLI
echo &amp;quot;Установка Ookla Speedtest CLI...&amp;quot;
sudo apt install -y gnupg1 apt-transport-https dirmngr
curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.deb.sh | sudo bash
sudo apt install -y speedtest

# Получаем IP-адрес сервера
IP_ADDRESS=$(hostname -I | awk &amp;#x27;{print $1}&amp;#x27;)

# Получаем имя хоста
HOST_NAME=$(hostname)

# Формируем имя файла с результатами, включающее IP-адрес и имя хоста
RESULTS_FILE=&amp;quot;sysbench_speedtest_${IP_ADDRESS}_${HOST_NAME}.json&amp;quot;

# Очистка файла перед началом тестов
&amp;gt; $RESULTS_FILE

# Переменные для хранения значений
CPU_EVENTS=&amp;quot;&amp;quot;
MEMORY_TRANSFERED=&amp;quot;&amp;quot;
MEMORY_SPEED=&amp;quot;&amp;quot;
DISK_READ=&amp;quot;&amp;quot;
DISK_WRITE=&amp;quot;&amp;quot;
INTERNET_DOWNLOAD=&amp;quot;&amp;quot;
INTERNET_UPLOAD=&amp;quot;&amp;quot;

# Тест CPU
CPU_EVENTS=$(sysbench cpu --cpu-max-prime=20000 run | grep &amp;quot;events per second&amp;quot; | awk &amp;#x27;{print $4}&amp;#x27;)

# Тест памяти (правка для удаления скобки)
MEMORY_RESULTS=$(sysbench memory run | grep &amp;quot;transferred&amp;quot;)
MEMORY_TRANSFERED=$(echo $MEMORY_RESULTS | awk &amp;#x27;{print $1}&amp;#x27;)
MEMORY_SPEED=$(echo $MEMORY_RESULTS | awk &amp;#x27;{print $4}&amp;#x27; | sed &amp;#x27;s/[()]//g&amp;#x27;)

# Тест дисковой системы (подготовка файлов для теста и результаты)
sysbench fileio --file-total-size=2G prepare
DISK_READ=$(sysbench fileio --file-total-size=2G --file-test-mode=rndrw run | grep &amp;quot;read, MiB/s&amp;quot; | sed &amp;#x27;s/[^0-9.]//g&amp;#x27;)
DISK_WRITE=$(sysbench fileio --file-total-size=2G --file-test-mode=rndrw run | grep &amp;quot;written, MiB/s&amp;quot; | sed &amp;#x27;s/[^0-9.]//g&amp;#x27;)
sysbench fileio --file-total-size=2G cleanup

# Тест скорости интернета
INTERNET_DOWNLOAD=$(speedtest --accept-license --accept-gdpr | grep &amp;quot;Download&amp;quot; | awk &amp;#x27;{print $3}&amp;#x27;)
INTERNET_UPLOAD=$(speedtest --accept-license --accept-gdpr | grep &amp;quot;Upload&amp;quot; | awk &amp;#x27;{print $3}&amp;#x27;)

# Создание JSON-выхода с именем сервера и IP
echo &amp;quot;{
  \&amp;quot;server_name\&amp;quot;: \&amp;quot;$HOST_NAME\&amp;quot;,
  \&amp;quot;server_ip\&amp;quot;: \&amp;quot;$IP_ADDRESS\&amp;quot;,
  \&amp;quot;cpu\&amp;quot;: $CPU_EVENTS,
  \&amp;quot;memory\&amp;quot;: {
    \&amp;quot;transfered\&amp;quot;: $MEMORY_TRANSFERED,
    \&amp;quot;speed\&amp;quot;: $MEMORY_SPEED
  },
  \&amp;quot;disk\&amp;quot;: {
    \&amp;quot;read\&amp;quot;: $DISK_READ,
    \&amp;quot;write\&amp;quot;: $DISK_WRITE
  },
  \&amp;quot;internet\&amp;quot;: {
    \&amp;quot;download\&amp;quot;: $INTERNET_DOWNLOAD,
    \&amp;quot;upload\&amp;quot;: $INTERNET_UPLOAD
  }
}&amp;quot; &amp;gt; $RESULTS_FILE

echo &amp;quot;Результаты тестов сохранены в $RESULTS_FILE в формате JSON&amp;quot;

# Загрузка файла на FTP сервер
echo &amp;quot;Загрузка файла на FTP сервер...&amp;quot;
curl -T $RESULTS_FILE ftp://user:password@ftp.server.com/linux_bench/ --ftp-create-dirs

echo &amp;quot;Файл загружен на FTP сервер: $RESULTS_FILE&amp;quot;

# Отправка JSON на вебхук
WEBHOOK_URL=&amp;quot;WEBHOOK_URL&amp;quot;
echo &amp;quot;Отправка данных на вебхук: $WEBHOOK_URL&amp;quot;
curl -X POST -H &amp;quot;Content-Type: application/json&amp;quot; \
  -d @&amp;quot;$RESULTS_FILE&amp;quot; \
  $WEBHOOK_URL

echo &amp;quot;Данные отправлены на вебхук: $WEBHOOK_URL&amp;quot;
&lt;/pre&gt;
  &lt;p id=&quot;HrJR&quot;&gt;Не забудьте заменить логин и пароль и пусть ftp сервера на свои чтобы файлы с результатами сразу загрузились к вам на сервер.&lt;/p&gt;
  &lt;p id=&quot;MXs6&quot;&gt;Сделайте скрипт исполняемым:&lt;/p&gt;
  &lt;pre id=&quot;xPyj&quot;&gt;chmod +x boyko_it_linux_server_benchmark.sh&lt;/pre&gt;
  &lt;p id=&quot;eoA7&quot;&gt;Запустите скрипт:&lt;/p&gt;
  &lt;pre id=&quot;6RdX&quot;&gt;./boyko_it_linux_server_benchmark.sh&lt;/pre&gt;
  &lt;p id=&quot;YuIz&quot;&gt;Этот скрипт выполнит тесты, сохранит результаты в файл с именем, содержащим IP-адрес и имя хоста, а затем загрузит файл на ваш FTP-сервер и отправит данные на вебхук для дальнейшей автоматизиции.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;tLdv&quot;&gt;Способ №2 - медленный и не на всех VPS работает, однако более детализированный. &lt;/h3&gt;
  &lt;p id=&quot;8ynT&quot;&gt;Тест делается примерно минут 10-15&lt;/p&gt;
  &lt;p id=&quot;ijKs&quot;&gt;Для установки &lt;strong&gt;Geekbench&lt;/strong&gt; через командную строку сервера (без доступа к графическому интерфейсу), выполните следующие команды для загрузки и установки бенчмарка на вашем сервере с &lt;strong&gt;Ubuntu&lt;/strong&gt; или &lt;strong&gt;Debian&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;Ob21&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;j46V&quot;&gt;Шаги установки и запуска Geekbench:&lt;/p&gt;
  &lt;p id=&quot;xsxC&quot;&gt;&lt;strong&gt;1. Перейдите в рабочую директорию&lt;/strong&gt;:&lt;/p&gt;
  &lt;pre id=&quot;xvTn&quot;&gt;cd /tmp&lt;/pre&gt;
  &lt;p id=&quot;Jyod&quot;&gt;&lt;strong&gt;2. Скачайте последнюю версию Geekbench для Linux&lt;/strong&gt;: Используйте команду &lt;code&gt;wget&lt;/code&gt;, чтобы загрузить архив&lt;/p&gt;
  &lt;pre id=&quot;0q7P&quot;&gt;wget https://cdn.geekbench.com/Geekbench-6.2.0-Linux.tar.gz&lt;/pre&gt;
  &lt;p id=&quot;YooI&quot;&gt;&lt;strong&gt;3. Распакуйте архив&lt;/strong&gt;: Используйте команду &lt;code&gt;tar&lt;/code&gt;, чтобы распаковать загруженный файл:&lt;/p&gt;
  &lt;pre id=&quot;myH7&quot;&gt;tar -xvzf Geekbench-6.2.0-Linux.tar.gz&lt;/pre&gt;
  &lt;p id=&quot;wufG&quot;&gt;&lt;strong&gt;4. Перейдите в распакованную директорию&lt;/strong&gt;:&lt;/p&gt;
  &lt;pre id=&quot;bSLZ&quot;&gt;cd Geekbench-6.2.0-Linux&lt;/pre&gt;
  &lt;p id=&quot;4SPX&quot;&gt;&lt;strong&gt;5. Запустите тест производительности&lt;/strong&gt;: Для запуска теста просто выполните:&lt;/p&gt;
  &lt;pre id=&quot;e6yb&quot;&gt;./geekbench6&lt;/pre&gt;
  &lt;p id=&quot;oVBZ&quot;&gt;&lt;strong&gt;6. Просмотр результатов&lt;/strong&gt;: После завершения теста Geekbench покажет вам ссылку на результаты на своём сайте, где вы сможете увидеть подробные данные по вашему тесту и сравнить их с другими системами.&lt;/p&gt;
  &lt;h3 id=&quot;4k6j&quot;&gt;Результаты тестирования&lt;/h3&gt;
  &lt;figure id=&quot;FgnM&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/33/32/33324a87-8fe7-4771-8237-aa24f6c49eda.png&quot; width=&quot;849&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;nbfe&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9f/4c/9f4cdfc5-d438-4308-aafd-cb3a833709b3.png&quot; width=&quot;879&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;sDsb&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/22/da/22daffb5-606c-4649-be8c-96385dfbf3f9.png&quot; width=&quot;873&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;IO7p&quot;&gt;Зарегистрировавшись на сайте geekbench вы сможете сохранять результаты тестирования своих серверов и сравнивать их.&lt;/p&gt;
  &lt;h3 id=&quot;9aiz&quot;&gt;Команды для удаления ненужных файлов после теста:&lt;/h3&gt;
  &lt;p id=&quot;X5Tq&quot;&gt;Перейдите в директорию, где были загружены и распакованы файлы:&lt;/p&gt;
  &lt;pre id=&quot;V2P4&quot;&gt;cd /tmp&lt;/pre&gt;
  &lt;p id=&quot;fiMU&quot;&gt;Удалите скачанный архив и распакованную папку:&lt;/p&gt;
  &lt;pre id=&quot;JReC&quot;&gt;rm -rf Geekbench-6.2.0-Linux.tar.gz Geekbench-6.2.0-Linux&lt;/pre&gt;
  &lt;p id=&quot;EAic&quot;&gt;Да прибудет с вами сила!&lt;/p&gt;

</content></entry><entry><id>maxadmin:-lpecpdBifj</id><link rel="alternate" type="text/html" href="https://maxadmin.ru/-lpecpdBifj?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=maxadmin"></link><title>Резервное копирование Docker контейнеров </title><published>2024-07-31T05:43:34.111Z</published><updated>2024-07-31T05:45:34.898Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/31/81/3181fc1c-b0a4-4801-aea8-8893c41f1eca.png"></media:thumbnail><category term="linux" label="Linux"></category><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/69/d3/69d33ecb-2c2d-4fab-ab10-2e6eded49f31.png&quot;&gt;Эта статья была создана с помощью Chat GPT-4, а затем отредактирована мной. Я добился рабочего результата, но это касается только моего конкретного случая. В статье могут быть ошибки, поэтому, пожалуйста, не рассматривайте её как единственно верное решение или истину в последней инстанции.</summary><content type="html">
  &lt;figure id=&quot;xpKu&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/69/d3/69d33ecb-2c2d-4fab-ab10-2e6eded49f31.png&quot; width=&quot;1687&quot; /&gt;
    &lt;figcaption&gt;Предисловие&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;CfPQ&quot;&gt;Эта статья была создана с помощью Chat GPT-4 на основе моей большой беседы с ней и отладки скрипта, а затем отредактирована мной. Я добился рабочего результата, но это касается только моего конкретного случая. Эта статья в первую очередь для того чтобы я сохранил свой собственный best way для достижения результата В статье могут быть ошибки, поэтому, пожалуйста, не рассматривайте её как единственно верное решение или истину в последней инстанции.&lt;/p&gt;
  &lt;p id=&quot;dW8X&quot;&gt;&lt;strong&gt;Введение&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;Ij0U&quot;&gt;Резервное копирование Docker контейнеров является критически важным для обеспечения сохранности данных и конфигураций ваших приложений. В этой статье мы рассмотрим, как настроить автоматическое резервное копирование Docker контейнеров и конфигурационных файлов, используя скрипт bash и &lt;code&gt;docker-backup&lt;/code&gt;. Также включим шаги по загрузке резервных копий на FTP-сервер для дополнительной безопасности.&lt;/p&gt;
  &lt;p id=&quot;hLqI&quot;&gt;Подготовка:&lt;br /&gt;&lt;a href=&quot;true&quot;&gt;Docker Installation Guide&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;true&quot;&gt;Docker Compose Installation Guide&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;true&quot;&gt;lftp Official Site&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;true&quot;&gt;Go Installation Guide&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/muesli/docker-backup&quot; target=&quot;_blank&quot;&gt;docker-backup on GitHub&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;362k&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;YhDG&quot;&gt;Шаг 1: Установка необходимых инструментов&lt;/h2&gt;
  &lt;p id=&quot;DkDk&quot;&gt;Прежде чем приступить к созданию резервных копий, убедитесь, что у вас установлены необходимые инструменты: &lt;code&gt;docker&lt;/code&gt;, &lt;code&gt;docker-compose&lt;/code&gt;, &lt;code&gt;lftp&lt;/code&gt;, и &lt;code&gt;docker-backup&lt;/code&gt;.&lt;/p&gt;
  &lt;h3 id=&quot;kQr2&quot;&gt;Установка lftp&lt;/h3&gt;
  &lt;p id=&quot;r0lt&quot;&gt;Для загрузки резервных копий на FTP-сервер установите &lt;code&gt;lftp&lt;/code&gt;:&lt;/p&gt;
  &lt;pre id=&quot;VZdS&quot;&gt;sudo apt-get update
sudo apt-get install lftp&lt;/pre&gt;
  &lt;h3 id=&quot;ZcIL&quot;&gt;Установка Go&lt;/h3&gt;
  &lt;p id=&quot;9SpY&quot;&gt;Для установки Go выполните следующие шаги:&lt;/p&gt;
  &lt;p id=&quot;PbOj&quot;&gt;1. Скачайте Go:&lt;/p&gt;
  &lt;pre id=&quot;alpQ&quot;&gt;wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gz&lt;/pre&gt;
  &lt;p id=&quot;npga&quot;&gt;2. Распакуйте архив и установите Go:&lt;/p&gt;
  &lt;pre id=&quot;4LkJ&quot;&gt;sudo tar -C /usr/local -xzf go1.22.5.linux-amd64.tar.gz&lt;/pre&gt;
  &lt;p id=&quot;HyMV&quot;&gt;3. Добавьте Go в PATH:&lt;/p&gt;
  &lt;pre id=&quot;efrt&quot;&gt;echo &amp;quot;export PATH=$PATH:/usr/local/go/bin&amp;quot; &amp;gt;&amp;gt; ~/.profile
source ~/.profile
&lt;/pre&gt;
  &lt;p id=&quot;hLu1&quot;&gt;&lt;strong&gt;Установка docker-backup&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;HD2O&quot;&gt;Скачайте и установите &lt;code&gt;docker-backup&lt;/code&gt; с GitHub:&lt;/p&gt;
  &lt;pre id=&quot;TeKa&quot;&gt;git clone https://github.com/muesli/docker-backup.git
cd docker-backup
go build
sudo mv docker-backup /usr/local/bin/&lt;/pre&gt;
  &lt;h2 id=&quot;1zHc&quot;&gt;Шаг 2: Создание директории для резервных копий&lt;/h2&gt;
  &lt;p id=&quot;UyNp&quot;&gt;Создайте директорию, в которой будут храниться резервные копии:&lt;/p&gt;
  &lt;pre id=&quot;mWyu&quot;&gt;mkdir -p /root/backup&lt;/pre&gt;
  &lt;h2 id=&quot;i0nw&quot;&gt;Шаг 3: Создание скрипта резервного копирования&lt;/h2&gt;
  &lt;p id=&quot;kQSo&quot;&gt;Создайте скрипт резервного копирования, который будет выполнять все необходимые операции, включая создание резервных копий контейнеров, копирование файлов &lt;code&gt;docker-compose.yml&lt;/code&gt; и загрузку на FTP-сервер.&lt;/p&gt;
  &lt;h3 id=&quot;iIu9&quot;&gt;Скрипт резервного копирования&lt;/h3&gt;
  &lt;p id=&quot;kcs4&quot;&gt;Создайте файл &lt;code&gt;/root/docker-backup/backup_script.sh&lt;/code&gt; и вставьте в него следующий код:&lt;/p&gt;
  &lt;pre id=&quot;Jr61&quot;&gt;#!/bin/bash

# Директория для сохранения резервных копий
BACKUP_DIR=&amp;quot;/root/backup&amp;quot;
TIMESTAMP=$(date +&amp;quot;%Y%m%d_%H%M%S&amp;quot;)
BACKUP_DIR_TIMESTAMP=&amp;quot;$BACKUP_DIR/$TIMESTAMP&amp;quot;

# Убедитесь, что директория для резервных копий существует
mkdir -p $BACKUP_DIR_TIMESTAMP/easyappointments
mkdir -p $BACKUP_DIR_TIMESTAMP/n8n-docker-caddy

# Создание резервных копий всех контейнеров и томов
cd /root/docker-backup
./docker-backup backup easyappointments-easyappointments-1 --tar
./docker-backup backup easyappointments-mysql-1 --tar
./docker-backup backup n8n-docker-caddy-caddy-1 --tar
./docker-backup backup n8n-docker-caddy-postgres-1 --tar
./docker-backup backup n8n-docker-caddy-n8n-1 --tar

# Перемещение созданных резервных копий в соответствующие директории
mv alextselegidis_easyappointments-latest-easyappointments-easyappointments-1.tar $BACKUP_DIR_TIMESTAMP/easyappointments/
mv mysql-8.0-easyappointments-mysql-1.tar $BACKUP_DIR_TIMESTAMP/easyappointments/
mv caddy-latest-n8n-docker-caddy-caddy-1.tar $BACKUP_DIR_TIMESTAMP/n8n-docker-caddy/
mv postgres-13-n8n-docker-caddy-postgres-1.tar $BACKUP_DIR_TIMESTAMP/n8n-docker-caddy/
mv docker.n8n.io_n8nio_n8n-n8n-docker-caddy-n8n-1.tar $BACKUP_DIR_TIMESTAMP/n8n-docker-caddy/

# Копирование файлов docker-compose.yml
cp /root/easyappointments/docker-compose.yml $BACKUP_DIR_TIMESTAMP/easyappointments/
cp /root/n8n-docker-caddy/docker-compose.yml $BACKUP_DIR_TIMESTAMP/n8n-docker-caddy/

# Загрузка резервных копий и docker-compose.yml файлов на FTP-сервер с временными метками
FTP_SERVER=&amp;quot;storagebox.com&amp;quot;
FTP_USERNAME=&amp;quot;username&amp;quot;
FTP_PASSWORD=&amp;quot;password&amp;quot;

# Создание директории на FTP сервере
lftp -u $FTP_USERNAME,$FTP_PASSWORD $FTP_SERVER &amp;lt;&amp;lt;EOF
mkdir -p backup/easyappointments
mkdir -p backup/n8n-docker-caddy
quit
EOF

# Загрузка резервных копий
for file in $BACKUP_DIR_TIMESTAMP/easyappointments/*.tar; do
  BASENAME=$(basename $file)
  lftp -u $FTP_USERNAME,$FTP_PASSWORD -e &amp;quot;put $file -o /backup/easyappointments/${TIMESTAMP}_$BASENAME; quit&amp;quot; $FTP_SERVER
done

for file in $BACKUP_DIR_TIMESTAMP/n8n-docker-caddy/*.tar; do
  BASENAME=$(basename $file)
  lftp -u $FTP_USERNAME,$FTP_PASSWORD -e &amp;quot;put $file -o /backup/n8n-docker-caddy/${TIMESTAMP}_$BASENAME; quit&amp;quot; $FTP_SERVER
done

# Загрузка docker-compose.yml файлов с временными метками
lftp -u $FTP_USERNAME,$FTP_PASSWORD -e &amp;quot;put $BACKUP_DIR_TIMESTAMP/easyappointments/docker-compose.yml -o /backup/easyappointments/${TIMESTAMP}_docker-compose.yml; quit&amp;quot; $FTP_SERVER
lftp -u $FTP_USERNAME,$FTP_PASSWORD -e &amp;quot;put $BACKUP_DIR_TIMESTAMP/n8n-docker-caddy/docker-compose.yml -o /backup/n8n-docker-caddy/${TIMESTAMP}_docker-compose.yml; quit&amp;quot; $FTP_SERVER

echo &amp;quot;Backup completed and uploaded to FTP at $TIMESTAMP&amp;quot; &amp;gt;&amp;gt; /var/log/backup.log&lt;/pre&gt;
  &lt;h2 id=&quot;gxoL&quot;&gt;Шаг 4: Настройка прав и создание задачи cron&lt;/h2&gt;
  &lt;p id=&quot;dQiw&quot;&gt;Убедитесь, что у скрипта есть права на выполнение:&lt;/p&gt;
  &lt;pre id=&quot;pg0z&quot;&gt;chmod +x /root/docker-backup/backup_script.sh&lt;/pre&gt;
  &lt;p id=&quot;W06z&quot;&gt;Добавьте задачу cron для автоматического выполнения скрипта, например, каждый день в 6 утра:&lt;/p&gt;
  &lt;pre id=&quot;1c5Y&quot;&gt;crontab -e&lt;/pre&gt;
  &lt;p id=&quot;RQGT&quot;&gt;Добавьте следующую строку в файл crontab:&lt;/p&gt;
  &lt;pre id=&quot;ywhk&quot;&gt;0 6 * * * /root/docker-backup/backup_script.sh &amp;gt;&amp;gt; /var/log/backup.log 2&amp;gt;&amp;amp;1&lt;/pre&gt;
  &lt;h2 id=&quot;CLiN&quot;&gt;Заключение&lt;/h2&gt;
  &lt;p id=&quot;DtXo&quot;&gt;Теперь у вас настроено автоматическое резервное копирование Docker контейнеров и файлов &lt;code&gt;docker-compose.yml&lt;/code&gt;, с загрузкой резервных копий на FTP-сервер. Этот скрипт гарантирует, что у вас всегда будет актуальная резервная копия ваших контейнеров и конфигураций, которая может быть использована для восстановления в случае необходимости.&lt;/p&gt;

</content></entry><entry><id>maxadmin:yOpEx2Ko1-i</id><link rel="alternate" type="text/html" href="https://maxadmin.ru/yOpEx2Ko1-i?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=maxadmin"></link><title>Получение OAuth Google бесплатно</title><published>2024-07-28T03:19:40.724Z</published><updated>2024-07-28T03:20:02.705Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/0e/23/0e23f0a2-b184-4db9-920f-37377835468a.png"></media:thumbnail><category term="google" label="Google"></category><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/8c/bb/8cbb53c2-dfb3-4418-8301-9f8db8b47c58.png&quot;&gt;At the time of writing, one can create a Google Cloud Identity.</summary><content type="html">
  &lt;p id=&quot;PAz0&quot;&gt;At the time of writing, one can create a &lt;a href=&quot;https://cloud.google.com/identity/docs/set-up-cloud-identity-admin&quot; target=&quot;_blank&quot;&gt;Google Cloud Identity&lt;/a&gt;.&lt;/p&gt;
  &lt;figure id=&quot;JtRk&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/8c/bb/8cbb53c2-dfb3-4418-8301-9f8db8b47c58.png&quot; width=&quot;1307&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;dMTG&quot;&gt;Assuming you have a domain name that you can control DNS (to confirm ownership), this allows you to create &lt;code&gt;Internal&lt;/code&gt; apps, without Google having to validate them.&lt;/p&gt;
  &lt;figure id=&quot;S0TT&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c3/55/c3559e30-bb6c-4f65-89c9-33b352807aef.png&quot; width=&quot;845&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;WhXO&quot;&gt;I have created internal apps for &lt;a href=&quot;https://www.home-assistant.io/&quot; target=&quot;_blank&quot;&gt;Home Assistant&lt;/a&gt;/Google API integration that do not need re-authorising every 30 days. I have yet to pay Google a penny.&lt;/p&gt;
  &lt;p id=&quot;R06d&quot;&gt;For those with knowledge of Microsoft Azure, it&amp;#x27;s very similar to Azure AD (Entra ID), which you can also create for free.&lt;/p&gt;

</content></entry><entry><id>maxadmin:expand-lunux-volume-lvm</id><link rel="alternate" type="text/html" href="https://maxadmin.ru/expand-lunux-volume-lvm?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=maxadmin"></link><title>Увеличить размер раздела диска LVM в Linux Ubuntu </title><published>2023-08-23T19:18:26.339Z</published><updated>2023-08-23T19:18:26.339Z</updated><category term="linux" label="Linux"></category><summary type="html">&lt;img src=&quot;https://winitpro.ru/wp-content/uploads/2023/02/cfdisk-uvelichit-razmer-razdela-ubuntu.png&quot;&gt;В первую очередь нужно увеличить размер виртуального диска со стороны вашей системы виртуализации</summary><content type="html">
  &lt;p id=&quot;5uvU&quot;&gt;В первую очередь нужно увеличить размер виртуального диска со стороны вашей системы виртуализации&lt;/p&gt;
  &lt;p id=&quot;RaY2&quot;&gt;После того, как вы расширили диск в ВМ, нужно расширить его в гостевой ОС (в этом примере это Ubuntu 22.04 LTS). Чтобы Ubuntu увидела добавленное место, выполните принудительный рескан дисков с помощью команды:&lt;/p&gt;
  &lt;p id=&quot;2xqd&quot;&gt;&lt;code&gt;$ echo 1&amp;gt;/sys/class/block/sda/device/rescan&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;kp2X&quot;&gt;Для управления разделами используйте утилиту cfdisk:&lt;/p&gt;
  &lt;p id=&quot;qRUK&quot;&gt;&lt;code&gt;$ sudo cfdisk&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;pPwW&quot;&gt;В данном примере видно, что на диске /dev/sda есть свободное место размером 1 Гб. Выберите раздел, который нужно расширить (/dev/sda3 в этом примере) и выберите в меню &lt;strong&gt;Resize&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;PNrK&quot;&gt;Чтобы сохранить изменения в разделах диска, выберите в меню &lt;strong&gt;Write&lt;/strong&gt;.&lt;/p&gt;
  &lt;figure id=&quot;YgzN&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://winitpro.ru/wp-content/uploads/2023/02/cfdisk-uvelichit-razmer-razdela-ubuntu.png&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;HQJe&quot;&gt;Закройте утилиту cfdisk.&lt;/p&gt;
  &lt;p id=&quot;Fiba&quot;&gt;После того, как вы увеличили физический раздел, нужно увеличить размер логического раздела Ubuntu. Проверьте, что у вас используется используются тома &lt;a href=&quot;https://winitpro.ru/index.php/2019/10/28/nastrojka-lvm-razdelov-v-linux/&quot; target=&quot;_blank&quot;&gt;LVM&lt;/a&gt;:&lt;/p&gt;
  &lt;p id=&quot;61SF&quot;&gt;&lt;code&gt;$ sudo lsblk&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;4YKL&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://winitpro.ru/wp-content/uploads/2023/02/lsblk-spisok-ustrojstv-i-razdelov-v-linux.png&quot; width=&quot;450&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;f9Ff&quot;&gt;Вкратце напомним основные концепции LVM:&lt;/p&gt;
  &lt;ul id=&quot;EHt0&quot;&gt;
    &lt;li id=&quot;wjCr&quot;&gt;&lt;strong&gt;Physical Volume (PV)&lt;/strong&gt; — ваши физические диски &lt;code&gt;/dev/sda&lt;/code&gt; , &lt;code&gt;/dev/sdb&lt;/code&gt; , и т.д.&lt;/li&gt;
    &lt;li id=&quot;gqml&quot;&gt;&lt;strong&gt;Volume Group (VG) &lt;/strong&gt;— группы томов, в которые объединены физически диски. Например &lt;code&gt;ubuntu-vg&lt;/code&gt; = &lt;code&gt;/dev/sda&lt;/code&gt; + &lt;code&gt;/dev/sdb&lt;/code&gt; . Также VG можно состоять всего из одного диска.&lt;/li&gt;
    &lt;li id=&quot;xpwG&quot;&gt;&lt;strong&gt;Logical Volume (LV)&lt;/strong&gt; — логический раздел в группе томов. Например, &lt;code&gt;ubuntu-vg/root&lt;/code&gt; , &lt;code&gt;ubuntu-vg/home&lt;/code&gt; , и т.д.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;0RuF&quot;&gt;Проверьте свободное место в группе томов LVM с помощью:&lt;/p&gt;
  &lt;p id=&quot;5iXd&quot;&gt;&lt;code&gt;$ sudo vgdisplay&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;1azM&quot;&gt;Для расширения раздела LVM нужно сначала увеличить PV (Physical Volume):&lt;/p&gt;
  &lt;p id=&quot;xHtD&quot;&gt;&lt;code&gt;$ sudo pvresize /dev/sda3&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;6ZbX&quot;&gt;Теперь можно увеличить логический том. В этом примере мы расширим том за счет всего доступного пространства:&lt;/p&gt;
  &lt;p id=&quot;zGcO&quot;&gt;&lt;code&gt;$ sudo lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv&lt;/code&gt;&lt;/p&gt;
  &lt;pre id=&quot;qw32&quot;&gt;Logical volume ubuntu-vg/ubuntu-lv successfully resized&lt;/pre&gt;
  &lt;figure id=&quot;EZYb&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://winitpro.ru/wp-content/uploads/2023/02/uvelichit-lvm-tom-v-ubuntu.png&quot; width=&quot;673&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;QFBr&quot;&gt;Осталось расширить файловую систему. Для ext2, ext3 и ext4 выполните:&lt;/p&gt;
  &lt;p id=&quot;6Sbh&quot;&gt;&lt;code&gt;$ sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;9Qs6&quot;&gt;Проверьте свободное место в Linux с помощью команды:&lt;/p&gt;
  &lt;p id=&quot;FCZj&quot;&gt;&lt;code&gt;$ df -h&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;PvZf&quot;&gt;Итак, мы успешно расширили LVM том в Ubuntu.&lt;/p&gt;
  &lt;p id=&quot;pMNc&quot;&gt;Если у вас не используются LVM тома, воспользуйтесь &lt;a href=&quot;https://maxadmin.ru/expand-lunux-volume-not-lvm&quot; target=&quot;_blank&quot;&gt;утилитой parted для увеличения раздела в Linux&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>maxadmin:delete-folders</id><link rel="alternate" type="text/html" href="https://maxadmin.ru/delete-folders?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=maxadmin"></link><title>Скрипт удаления папок Windows старше N дней</title><published>2023-05-11T23:58:13.847Z</published><updated>2023-08-23T19:22:13.845Z</updated><category term="windows" label="Windows"></category><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/e3/eb/e3eb728f-97e1-48de-9099-a32f005e2ed7.png&quot;&gt;Для запуска этого скрипта необходимо сохранить его в файл с расширением .ps1 и запустить его в PowerShell-консоли. Перед запуском скрипта необходимо установить значения переменных $days и $path в соответствии с вашими потребностями. Также убедитесь, что у вас есть необходимые права на удаление папок в указанной директории.</summary><content type="html">
  &lt;p id=&quot;q2UL&quot;&gt;Для запуска этого скрипта необходимо сохранить его в файл с расширением .ps1 и запустить его в PowerShell-консоли. Перед запуском скрипта необходимо установить значения переменных &lt;code&gt;$days&lt;/code&gt; и &lt;code&gt;$path&lt;/code&gt; в соответствии с вашими потребностями. Также убедитесь, что у вас есть необходимые права на удаление папок в указанной директории.&lt;/p&gt;
  &lt;pre id=&quot;qnFh&quot;&gt;# Установите дату, старше которой необходимо удалить папки (в днях)
$days = 30

# Установите путь к директории, в которой нужно удалить папки
$path = &amp;quot;C:\Path\To\Directory&amp;quot;

# Получаем текущую дату и вычитаем количество дней, чтобы получить дату, старше которой нужно удалить папки
$date = Get-Date
$oldDate = $date.AddDays(-$days)

# Получаем список папок в указанной директории
$folders = Get-ChildItem $path -Directory

# Инициализируем переменные для отображения прогресса
$totalFolders = $folders.Count
$currentFolder = 0

# Проходим по каждой папке в списке и удаляем те, которые старше указанной даты
foreach ($folder in $folders) {
    if ($folder.LastWriteTime -lt $oldDate) {
        Remove-Item $folder.FullName -Recurse -Force
    }
    $currentFolder++
    $percentComplete = ($currentFolder / $totalFolders) * 100
    Write-Progress -Activity &amp;quot;Removing old folders&amp;quot; -Status &amp;quot;$currentFolder of $totalFolders folders processed&amp;quot; -PercentComplete $percentComplete
}
&lt;/pre&gt;
  &lt;figure id=&quot;hLAu&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e3/eb/e3eb728f-97e1-48de-9099-a32f005e2ed7.png&quot; width=&quot;875&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;lI3R&quot;&gt;Вариация скрипта удаление папок старше N дней + удаление пустых папок:&lt;/p&gt;
  &lt;pre id=&quot;foOP&quot;&gt; # Установите дату, старше которой необходимо удалить папки (в днях)
$days = 30

# Установите путь к директории, в которой нужно удалить папки
$path = &amp;quot;C:\Path\To\Directory&amp;quot;

# Получаем текущую дату и вычитаем количество дней, чтобы получить дату, старше которой нужно удалить папки
$date = Get-Date
$oldDate = $date.AddDays(-$days)

# Получаем список папок в указанной директории
$folders = Get-ChildItem $path -Directory

# Инициализируем переменные для отображения прогресса
$totalFolders = $folders.Count
$currentFolder = 0

# Проходим по каждой папке в списке и удаляем те, которые старше указанной даты
foreach ($folder in $folders) {
    if ($folder.LastWriteTime -lt $oldDate) {
        Remove-Item $folder.FullName -Recurse -Force
    }
    elseif ((Get-ChildItem $folder.FullName -Force | Measure-Object).Count -eq 0) {
        Remove-Item $folder.FullName -Recurse -Force
    }
    $currentFolder++
    $percentComplete = ($currentFolder / $totalFolders) * 100
    Write-Progress -Activity &amp;quot;Removing old and empty folders&amp;quot; -Status &amp;quot;$currentFolder of $totalFolders folders processed&amp;quot; -PercentComplete $percentComplete
}
&lt;/pre&gt;
  &lt;figure id=&quot;YtdY&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ee/1c/ee1c37ab-59b6-4c28-a097-da5d4ca8e006.png&quot; width=&quot;502&quot; /&gt;
  &lt;/figure&gt;

</content></entry><entry><id>maxadmin:mssql-compression-all-bases</id><link rel="alternate" type="text/html" href="https://maxadmin.ru/mssql-compression-all-bases?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=maxadmin"></link><title>Скрипт сжатия всех баз MS SQL</title><published>2023-05-11T22:55:30.927Z</published><updated>2023-05-11T22:55:30.927Z</updated><category term="ms-sql" label="MS SQL"></category><summary type="html">Скрипт обходит все пользовательские базы и сжимает их.</summary><content type="html">
  &lt;p id=&quot;CZdc&quot;&gt;Скрипт обходит все пользовательские базы и сжимает их.&lt;/p&gt;
  &lt;p id=&quot;bK4T&quot;&gt;Данный скрипт является SQL-запросом и содержит несколько действий, которые выполняются для каждой базы данных в текущем экземпляре SQL Server.&lt;/p&gt;
  &lt;p id=&quot;FEu8&quot;&gt;Он выполняет следующие шаги:&lt;/p&gt;
  &lt;p id=&quot;kQo0&quot;&gt;Использует каждую базу данных одну за другой.&lt;br /&gt;Если база данных не является одной из системных баз данных (master, model, msdb, tempdb), то он продолжает выполнять скрипт.&lt;br /&gt;Находит таблицы в базе данных, у которых не применена сжатие данных.&lt;br /&gt;Создает временную таблицу #tmpTables для хранения имён таблиц без сжатия данных.&lt;br /&gt;В цикле while выбирает имя таблицы из #tmpTables и выполняет операции перестроения таблицы и индексов на этой таблице с использованием сжатия страниц данных. Затем удаляет эту таблицу из временной таблицы.&lt;br /&gt;Проверяет, были ли внесены изменения в базу данных. Если да, то выполняет операцию сжатия базы данных с помощью команды DBCC SHRINKDATABASE.&lt;br /&gt;Удаляет временную таблицу и возвращает имя текущей базы данных.&lt;br /&gt;Таким образом, данный скрипт выполняет сжатие данных таблиц и индексов для всех таблиц в каждой базе данных в экземпляре SQL Server, если они еще не сжаты. Он также сжимает базу данных, если были внесены изменения.&lt;/p&gt;
  &lt;pre id=&quot;BHas&quot;&gt;EXEC sp_MSforeachdb &amp;#x27;USE ?
IF NOT (&amp;#x27;&amp;#x27;?&amp;#x27;&amp;#x27; = &amp;#x27;&amp;#x27;master&amp;#x27;&amp;#x27; OR &amp;#x27;&amp;#x27;?&amp;#x27;&amp;#x27; = &amp;#x27;&amp;#x27;model&amp;#x27;&amp;#x27; OR &amp;#x27;&amp;#x27;?&amp;#x27;&amp;#x27; = &amp;#x27;&amp;#x27;msdb&amp;#x27;&amp;#x27; OR &amp;#x27;&amp;#x27;?&amp;#x27;&amp;#x27; = &amp;#x27;&amp;#x27;tempdb&amp;#x27;&amp;#x27;)
BEGIN
  SELECT DISTINCT
    [tables].name AS TName
  INTO #tmpTables
  FROM sys.tables [tables]
  LEFT JOIN sys.indexes [indexes]
  ON [tables].object_id = [indexes].object_id
  LEFT JOIN sys.partitions p
  ON [indexes].index_id = p.index_id
    AND [tables].object_id = p.object_id
  WHERE p.data_compression_desc = &amp;#x27;&amp;#x27;NONE&amp;#x27;&amp;#x27;
  DECLARE @TName nvarchar(2000)
  DECLARE @DBModifyed int
  SET @DBModifyed = 0
  SELECT TOP 1 @TName = TName FROM #tmpTables
  WHILE @@ROWCOUNT != 0
  BEGIN
    EXEC (&amp;#x27;&amp;#x27;ALTER TABLE &amp;#x27;&amp;#x27; + @TName + &amp;#x27;&amp;#x27; REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)&amp;#x27;&amp;#x27;)
    EXEC (&amp;#x27;&amp;#x27;ALTER INDEX ALL ON &amp;#x27;&amp;#x27; + @TName + &amp;#x27;&amp;#x27; REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)&amp;#x27;&amp;#x27;)
    DELETE #tmpTables WHERE TName = @TName
    SET @DBModifyed = 1
    SELECT TOP 1 @TName = TName FROM #tmpTables
  END
  IF @DBModifyed = 1
  BEGIN
    DBCC SHRINKDATABASE(N&amp;#x27;&amp;#x27;?&amp;#x27;&amp;#x27;, 0)
  END
  DROP TABLE #tmpTables
  SELECT &amp;#x27;&amp;#x27;?&amp;#x27;&amp;#x27;
END&amp;#x27;&lt;/pre&gt;

</content></entry></feed>