From 15481977f8d7dcb02762793f44560afa86a349ce Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 11 Jun 2026 11:15:47 +0000 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=BE=D1=80=D0=B3=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D1=80=D0=B5=D0=BF=D0=BE?= =?UTF-8?q?=D0=B7=D0=B8=D1=82=D0=BE=D1=80=D0=B8=D1=8F:=20=D1=81=D1=82?= =?UTF-8?q?=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80=D0=B0,=20README,=20CI,=20L?= =?UTF-8?q?ICENSE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Скрипты разложены по каталогам: windows/, pgsql/ (+failover/), linux/ (+configs/), zabbix/ - Добавлен README с описанием каждого скрипта и зависимостей - Добавлен CI (GitHub Actions): shellcheck и PSScriptAnalyzer - Добавлена лицензия MIT https://claude.ai/code/session_01EbjDWNvEDZvxvnxzc5GDWE --- .github/workflows/lint.yml | 33 ++++++++++ LICENSE | 21 ++++++ README.md | 64 +++++++++++++++++++ .../configs}/.bash_aliases | 0 {LinuxSystemConfigs => linux/configs}/.bashrc | 0 .../configs}/commands.list | 0 nvme_test.sh => linux/nvme_test.sh | 0 backup-db-1c.sh => pgsql/backup-db-1c.sh | 0 .../backup-db-pgsql.sh | 0 pgsql/{ => failover}/check-pg-alive.sh | 0 pgsql/{ => failover}/keepalived.conf | 0 pgsql/{ => failover}/promote-standby.sh | 0 pgsql/{ => failover}/rejoin-replica.sh | 0 pg_setup.sh => pgsql/pg_setup.sh | 0 .../1CDefenderExclusion.ps1 | 0 .../Replace-1C-Ibases.ps1 | 0 .../Update-RDGWCertificate.ps1 | 0 .../zbx_export_templates.yaml | 0 18 files changed, 118 insertions(+) create mode 100644 .github/workflows/lint.yml create mode 100644 LICENSE create mode 100644 README.md rename {LinuxSystemConfigs => linux/configs}/.bash_aliases (100%) rename {LinuxSystemConfigs => linux/configs}/.bashrc (100%) rename {LinuxSystemConfigs => linux/configs}/commands.list (100%) rename nvme_test.sh => linux/nvme_test.sh (100%) rename backup-db-1c.sh => pgsql/backup-db-1c.sh (100%) rename backup-db-pgsql.sh => pgsql/backup-db-pgsql.sh (100%) rename pgsql/{ => failover}/check-pg-alive.sh (100%) rename pgsql/{ => failover}/keepalived.conf (100%) rename pgsql/{ => failover}/promote-standby.sh (100%) rename pgsql/{ => failover}/rejoin-replica.sh (100%) rename pg_setup.sh => pgsql/pg_setup.sh (100%) rename 1CDefenderExclusion.ps1 => windows/1CDefenderExclusion.ps1 (100%) rename Replace-1C-Ibases.ps1 => windows/Replace-1C-Ibases.ps1 (100%) rename Update-RDGWCertificate.ps1 => windows/Update-RDGWCertificate.ps1 (100%) rename zbx_export_templates.yaml => zabbix/zbx_export_templates.yaml (100%) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..7220d92 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,33 @@ +name: Lint + +on: + push: + branches: [main] + pull_request: + workflow_dispatch: + +jobs: + shellcheck: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + # Порог error: при -S warning есть известные находки в бэкап-скриптах, + # после их исправления порог можно ужесточить до warning. + - name: Run shellcheck + run: find . -name '*.sh' -print0 | xargs -0 shellcheck -S error + + psscriptanalyzer: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Run PSScriptAnalyzer + shell: pwsh + run: | + Install-Module -Name PSScriptAnalyzer -Force -Scope CurrentUser + $results = Get-ChildItem -Path . -Recurse -Filter *.ps1 | + ForEach-Object { Invoke-ScriptAnalyzer -Path $_.FullName -Severity Error } + if ($results) { + $results | Format-Table -AutoSize | Out-String | Write-Host + exit 1 + } + Write-Host 'PSScriptAnalyzer: no errors found.' diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..95c7b9c --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 gpas45 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..fd781a6 --- /dev/null +++ b/README.md @@ -0,0 +1,64 @@ +# scripts + +Коллекция скриптов для администрирования серверов: PostgreSQL для 1С, Windows-инфраструктура (1С, RD Gateway), мониторинг Zabbix. + +## Структура + +``` +windows/ PowerShell-скрипты для Windows +pgsql/ PostgreSQL: установка, бэкапы, отказоустойчивость +linux/ Linux: тесты железа, конфиги окружения +zabbix/ Шаблоны Zabbix +``` + +## windows/ + +| Скрипт | Назначение | +|---|---| +| `1CDefenderExclusion.ps1` | Добавляет исключения 1С в Windows Defender: каталоги платформы и файловых баз (из `ibases.v8i` всех профилей), расширения и процессы. Запуск от администратора. | +| `Replace-1C-Ibases.ps1` | Раздаёт эталонный `ibases.v8i` (список баз 1С) пользователям группы `1C_all` с бэкапом старых файлов. Интерактивный выбор пользователей. | +| `Update-RDGWCertificate.ps1` | Получение/продление сертификата Let's Encrypt через Posh-ACME (DNS-плагин Beget) и установка на RD Gateway. Для планировщика: одно задание раз в сутки с наивысшими правами. Сохранять в UTF-8 with BOM. | + +## pgsql/ + +| Скрипт | Назначение | +|---|---| +| `pg_setup.sh` | Установка и первичная настройка Postgres Pro 1C на Debian/Ubuntu: локали, часовой пояс, репозиторий, initdb с `--tune=1c`, pg_hba, пароль postgres. Параметры: `--pgver`, `--timezone`, `--lang`, `--postgres-pass`. Запуск от root. | +| `backup-db-1c.sh` | Бэкап (pg_dump + pigz) и обслуживание (vacuumdb/reindexdb) баз Postgres Pro 1C по списку из файла. Ротация старых копий. Для cron. | +| `backup-db-pgsql.sh` | То же для ванильного PostgreSQL (бинарники из `/usr/bin`). | + +Зависимости бэкап-скриптов: `pigz`. Список баз — текстовый файл (по умолчанию `/var/lib/pgpro/scripts/DB`), по одной базе на строку. + +### pgsql/failover/ + +Связка keepalived + потоковая репликация PostgreSQL на два узла (active/standby с VIP). + +| Файл | Назначение | +|---|---| +| `keepalived.conf` | Конфиг keepalived: VIP, проверка живости PostgreSQL, вызов promote при переходе в MASTER. | +| `check-pg-alive.sh` | Проверка `pg_isready` для vrrp_script. | +| `promote-standby.sh` | Повышение реплики до мастера (вызывается keepalived через `notify_master`). | +| `rejoin-replica.sh` | При старте узла: если второй узел — живой мастер, пересоздаёт себя как реплику через `pg_basebackup`; иначе повышается до мастера. | + +> ⚠️ Перед использованием замените в конфигах и скриптах IP-адреса, пароль keepalived и учётные данные репликации на свои (пароль репликации — через `~postgres/.pgpass`, права 600). + +## linux/ + +| Файл | Назначение | +|---|---| +| `nvme_test.sh` | Тест NVMe-диска через fio по профилю CrystalDiskMark (SEQ1M Q8T1, SEQ128K Q32T1, RND4K Q32T8, RND4K Q1T1). Зависимости: `fio`, `jq`. | +| `configs/.bashrc`, `configs/.bash_aliases` | Окружение bash для серверов. | +| `configs/commands.list` | Шпаргалка команд Linux по разделам (процессы, мониторинг, сеть и т.д.). | + +## zabbix/ + +| Файл | Назначение | +|---|---| +| `zbx_export_templates.yaml` | Шаблон «Windows hardware by Zabbix agent active»: температуры, SMART, кулеры, напряжения. Требует smartmontools, OpenHardwareMonitor и скрипты `windows.hard.ps1` / `windows.hdd.ps1` на хосте. | + +## CI + +GitHub Actions прогоняет линтеры на каждый push и pull request: + +- **shellcheck** для всех `*.sh` (порог — ошибки); +- **PSScriptAnalyzer** для всех `*.ps1` (порог — ошибки). diff --git a/LinuxSystemConfigs/.bash_aliases b/linux/configs/.bash_aliases similarity index 100% rename from LinuxSystemConfigs/.bash_aliases rename to linux/configs/.bash_aliases diff --git a/LinuxSystemConfigs/.bashrc b/linux/configs/.bashrc similarity index 100% rename from LinuxSystemConfigs/.bashrc rename to linux/configs/.bashrc diff --git a/LinuxSystemConfigs/commands.list b/linux/configs/commands.list similarity index 100% rename from LinuxSystemConfigs/commands.list rename to linux/configs/commands.list diff --git a/nvme_test.sh b/linux/nvme_test.sh similarity index 100% rename from nvme_test.sh rename to linux/nvme_test.sh diff --git a/backup-db-1c.sh b/pgsql/backup-db-1c.sh similarity index 100% rename from backup-db-1c.sh rename to pgsql/backup-db-1c.sh diff --git a/backup-db-pgsql.sh b/pgsql/backup-db-pgsql.sh similarity index 100% rename from backup-db-pgsql.sh rename to pgsql/backup-db-pgsql.sh diff --git a/pgsql/check-pg-alive.sh b/pgsql/failover/check-pg-alive.sh similarity index 100% rename from pgsql/check-pg-alive.sh rename to pgsql/failover/check-pg-alive.sh diff --git a/pgsql/keepalived.conf b/pgsql/failover/keepalived.conf similarity index 100% rename from pgsql/keepalived.conf rename to pgsql/failover/keepalived.conf diff --git a/pgsql/promote-standby.sh b/pgsql/failover/promote-standby.sh similarity index 100% rename from pgsql/promote-standby.sh rename to pgsql/failover/promote-standby.sh diff --git a/pgsql/rejoin-replica.sh b/pgsql/failover/rejoin-replica.sh similarity index 100% rename from pgsql/rejoin-replica.sh rename to pgsql/failover/rejoin-replica.sh diff --git a/pg_setup.sh b/pgsql/pg_setup.sh similarity index 100% rename from pg_setup.sh rename to pgsql/pg_setup.sh diff --git a/1CDefenderExclusion.ps1 b/windows/1CDefenderExclusion.ps1 similarity index 100% rename from 1CDefenderExclusion.ps1 rename to windows/1CDefenderExclusion.ps1 diff --git a/Replace-1C-Ibases.ps1 b/windows/Replace-1C-Ibases.ps1 similarity index 100% rename from Replace-1C-Ibases.ps1 rename to windows/Replace-1C-Ibases.ps1 diff --git a/Update-RDGWCertificate.ps1 b/windows/Update-RDGWCertificate.ps1 similarity index 100% rename from Update-RDGWCertificate.ps1 rename to windows/Update-RDGWCertificate.ps1 diff --git a/zbx_export_templates.yaml b/zabbix/zbx_export_templates.yaml similarity index 100% rename from zbx_export_templates.yaml rename to zabbix/zbx_export_templates.yaml