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