Почтовый шлюз с защитой от спама — установка за одну команду
Версия 2.0.0  ·  Linux x86_64 / arm64

Быстрая установка

$ curl -fsSL https://spamorez.ru/spzgate/install.sh | sudo bash
Требуется запуск от root или через sudo. Установка займёт 10–20 минут (сборка Docker-образов).

Требования

🖥
CPU
x86_64 или arm64, от 2 ядер
💾
RAM
от 2 ГБ (рекомендуется 4 ГБ)
💿
Диск
от 20 ГБ свободного места
🌐
Сеть
Открытый порт 25 (SMTP)
🐳
Docker
Устанавливается автоматически
🔑
Права
root или sudo

Поддерживаемые ОС

Операционная системаСтатусПримечание
Ubuntu 22.04 LTS (Jammy)✅ ПоддерживаетсяРекомендуется
Ubuntu 24.04 LTS (Noble)✅ Поддерживается
Ubuntu 26.04 LTS (Resolute)✅ Поддерживается
Debian 11 / 12✅ Поддерживается
Ubuntu 20.04 LTS⚠️ УстаревшаяРекомендуется обновление
Ubuntu 18.04 LTS❌ Не поддерживаетсяСлишком старая
CentOS / RHEL / Fedora❌ Не поддерживаетсяТолько Debian-based
macOS / Windows❌ Не поддерживаетсяТолько Linux

Что делает установщик

  1. 1
    Проверка ОС и зависимостей
    Определяет дистрибутив, архитектуру, проверяет совместимость apt-источников. При обнаружении проблем предлагает автоисправление.
  2. 2
    Установка Docker CE и Docker Compose
    Если Docker уже установлен — пропускается. Добавляет официальный репозиторий download.docker.com.
  3. 3
    Проверка портов
    Проверяет свободность портов 25 (SMTP), 80 и 443 (Web UI). При конфликте показывает виновный процесс.
  4. 4
    Инициализация конфигурации
    Создаёт структуру директорий в /opt/spzgate/, генерирует начальные конфиги qmail, MySQL, Redis.
  5. 5
    Сборка Docker-образов
    Собирает 4 образа: spzgate-qmail, spzgate-php, spzgate-nginx и тянет mysql:8.0, redis, memcached. Занимает 10–20 минут при первом запуске.
  6. 6
    Запуск контейнеров
    Поднимает все сервисы через docker compose up -d. Ждёт готовности MySQL. Открывает порты 25, 80 и 443.

Параметры установки

--dir <PATH>
Директория установки По умолчанию: /opt/spzgate
--version <X.Y.Z>
Установить конкретную версию Пример: --version 2.0.0
--port-http <PORT>
Порт HTTP (Web UI) По умолчанию: 80
--port-https <PORT>
Порт HTTPS (Web UI) По умолчанию: 443
--port-smtp <PORT>
Порт SMTP — приём входящей почты По умолчанию: 25
--port-mysql <PORT>
Внешний порт MySQL (только 127.0.0.1) По умолчанию: 13306

Пример с параметрами

$ curl -fsSL https://spamorez.ru/spzgate/install.sh | sudo bash -s -- --dir /opt/spzgate --port-http 8080 --port-https 8443 --port-smtp 25

Порты по умолчанию

25
SMTP — приём почты
80
HTTP — Web UI
443
HTTPS — Web UI (TLS)
13306
MySQL (только localhost)

После установки

  1. 1
    Откройте Web UI
    Перейдите в браузере на http://<IP-сервера> (порт 80 по умолчанию, или тот, что указали при установке) — запустится мастер первичной настройки.
  2. 2
    Создайте администратора
    Задайте логин, пароль и домен в мастере установки. Данные сохраняются в MySQL-контейнере.
  3. 3
    Настройте домены и маршрутизацию
    Добавьте обслуживаемые домены, MX-записи, правила фильтрации и маршруты доставки в панели управления.
  4. 4
    Проверьте SMTP
    Убедитесь, что порт 25 открыт снаружи: telnet <IP> 25 → должно ответить 220 ... ESMTP.
Управление контейнерами

cd /opt/spzgate && sudo docker compose ps — статус всех сервисов
cd /opt/spzgate && sudo docker compose logs -f qmail — логи qmail
cd /opt/spzgate && sudo docker compose logs -f php — логи веб-панели
cd /opt/spzgate && sudo docker compose restart — перезапуск всех сервисов

Автоматическое обновление

Скрипт update.sh проверяет доступную версию, создаёт резервную копию, скачивает и применяет обновление. При ошибке на любом шаге — автоматически откатывается из резервной копии.

Обновить до последней версии

$ cd /opt/spzgate && sudo bash update.sh
Контейнеры будут остановлены на 2–5 минут. Данные MySQL и Redis не затрагиваются.

Параметры update.sh

--dir <PATH>
Директория установки По умолчанию: текущий каталог
--version <X.Y.Z>
Установить конкретную версию Пример: --version 2.0.0
--rollback
Откатиться к последней резервной копии Интерактивно покажет доступные бэкапы из data/backup/

Что происходит при обновлении

  1. 1
    Сравнение версий
    Запрашивает spamorez.ru/spzgate/releases/latest, сравнивает с локальным VERSION. Если версии совпадают — выходит без изменений.
  2. 2
    Создание резервной копии
    Сохраняет конфигурацию в data/backup/spzgate-backup-X.Y.Z-TIMESTAMP.tar.gz. Включает: docker-compose.yml, Makefile, nginx/php/qmail конфиги, data/certs, data/qmail/control. Хранит последние 5 копий.
  3. 3
    Загрузка и проверка
    Скачивает тарбол новой версии, проверяет SHA256 по manifest.json. При несовпадении — прерывает обновление.
  4. 4
    Применение обновления
    Останавливает контейнеры, распаковывает новую версию (не трогает data/mysql, data/redis, data/qmail/control, data/certs), пересобирает образы и запускает сервисы.
  5. 5
    Автооткат при ошибке
    Если что-то пошло не так — автоматически восстанавливает файлы из резервной копии и поднимает предыдущую версию.

Откат вручную

$ cd /opt/spzgate && sudo bash update.sh --rollback
Скрипт покажет список доступных резервных копий и предложит выбрать.
Резервные копии хранятся в data/backup/ — этот каталог никогда не очищается автоматически при обновлении.

Бэкапы не включают базу данных MySQL и очередь qmail (объёмные данные). Для полного бэкапа БД используйте инструменты экспорта конфигурации (вкладка Экспорт конфигурации).

Скрипты экспорта и импорта

Perl-скрипты для переноса конфигурации SPZGate между серверами: экспорт всех таблиц БД в JSON-файлы с верификацией контрольных сумм, и импорт в чистую установку. Используются при обновлении через полный перенос, смене сервера или восстановлении из бэкапа.

📤
export_spz.pl
Экспорт БД в JSON-архив
Perl
SHOW TABLES → DESCRIBE → SELECT * → JSON-файлы
Инкрементальный (по chtime-колонкам) или полный (-f)
Архивирует /var/qmail/control
Поддержка extra-db (status, spz_bill)
⬇ Скачать export_spz.pl
📥
import_spz.pl
Импорт JSON-архива в БД
Perl
Читает export_index.json → импортирует таблицы
Совместим с более новой схемой целевой БД
Верификация: row_count, checksum, pk, sample_hash
Режимы: INSERT IGNORE / REPLACE / TRUNCATE+INSERT
⬇ Скачать import_spz.pl

Зависимости (Perl-модули)

Установка зависимостей

$ sudo apt-get install -y libdbi-perl libdbd-mysql-perl libjson-pp-perl libjson-xs-perl

Сценарий 1: перенос на новый сервер

1
Экспорт конфигурации на старом сервере
📍 старый сервер
Запустите экспорт из директории установки SPZGate. Скрипт читает параметры БД из data/qmail/control/spamorez/dbconfig.
cd /opt/spzgate perl tools/export_spz.pl -f -v --extra-db status --extra-db spz_bill
Результат: backup/archives/spz-config-YYYY-MM-DD_HH-MM-SS.tar.gz
Также создаёт backup/spzconfig/ с JSON-файлами таблиц.
2
Перенос архива
📍 оба сервера
Скопируйте архив и директорию JSON-файлов на новый сервер:
scp -r /opt/spzgate/backup/spzconfig user@new-server:/opt/spzgate/backup/
3
Установка SPZGate на новом сервере
📍 новый сервер
Выполните чистую установку. MySQL инициализируется с пустыми таблицами.
curl -fsSL https://spamorez.ru/spzgate/install.sh | sudo bash
4
Импорт конфигурации
📍 новый сервер
Импортируйте все таблицы с верификацией. Скрипт подключается к MySQL через порт 13306:
cd /opt/spzgate # Узнать пароль root MySQL: cat data/credentials/db_root.cnf # Запустить импорт: perl tools/import_spz.pl \ --host 127.0.0.1 --port 13306 \ --user root --pass <пароль> \ --dir backup/spzconfig \ --all --truncate --no-triggers
После импорта скрипт автоматически верифицирует данные: row_count, checksum, pk, sample_hash.
5
Проверка
📍 новый сервер
Убедитесь что все сервисы работают:
cd /opt/spzgate sudo docker compose ps # все контейнеры Up nc -w 8 127.0.0.1 25 # 220 ... ESMTP curl -sk https://127.0.0.1/ # ответ веб-панели

Сценарий 2: регулярный бэкап конфигурации (cron)

Запуск из контейнера PHP (внутри Docker)

$ sudo docker exec spzgate-php perl /var/www/tools/export_spz.pl -f --extra-db status
Или добавьте в crontab на хост-машине для ежедневного инкрементального экспорта.

Параметры export_spz.pl

-f, --force
Полный экспорт (игнорировать incremental-кэш)
-v, --verbose
Подробный вывод в stdout
--extra-db NAME
Экспортировать дополнительную БД Пример: --extra-db status --extra-db spz_bill
--no-control
Не архивировать /var/qmail/control
--backup-dir PATH
Каталог хранения По умолчанию: ./backup
--host / --user / -p
Явные параметры БД (переопределяют dbconfig) По умолчанию: из /var/qmail/control/spamorez/dbconfig
--list
Показать все таблицы в БД и выйти

Параметры import_spz.pl

--all
Импортировать все таблицы без интерактива
--truncate
Очистить таблицы перед вставкой (рекомендуется для чистой установки)
--replace
REPLACE INTO вместо INSERT IGNORE
--no-triggers
Отключить триггеры на время импорта (ускоряет массовую вставку)
--dry-run
Показать план без изменений в БД
--verify-only
Только верификация существующих данных, без импорта
-t, --table NAME
Импортировать только одну таблицу Пример: -t spz_rules
Верификация после импорта проверяет:

row_count — кол-во строк совпадает с источником   checksum — MySQL CRC32 таблицы   pk.min/max — диапазон первичного ключа   sample_hash — MD5 первой/средней/последней строки

При несовпадении версий MySQL checksum может отличаться — это нормально. Остальные проверки строгие.

Установка без доступа в интернет

Офлайн-пакет содержит весь дистрибутив SPZGate 2.0.1 вместе с готовыми Docker-образами (spzgate-php, spzgate-nginx, spzgate-qmail, mysql:8.0, redis, memcached). Не требует apt-get и docker compose build — образы загружаются локально через docker load. Если на хосте нет Docker CE / Compose plugin / iptables, установщик поставит их сам из встроенных статических бинарников и .deb-пакетов (docker-static/) — без интернета.

📦
spzgate-2.0.1-offline-amd64.tar.gz
Полный пакет с Docker-образами и Docker CE · ~753 МБ
amd64
SHA256:
e4d4a174648c31a9c639372f1785938bb6c6678168f458b12c0e56c478f52691
⬇ Скачать (~753 МБ)

Требования к целевому хосту

🐧
ОС
Ubuntu 22.04/24.04 или Debian 11/12, amd64
🐳
Docker
Docker CE + Compose plugin — если их нет, установщик поставит сам
💿
Диск
от 20 ГБ свободного места
🔑
Права
root или sudo

Установка

  1. 1
    Перенесите архив на целевой хост
    USB-носитель, scp и т.п. Проверьте контрольную сумму: sha256sum spzgate-2.0.1-offline-amd64.tar.gz
  2. 2
    Распакуйте архив
    tar -xzf spzgate-2.0.1-offline-amd64.tar.gz && cd spzgate-2.0.1
  3. 3
    Запустите установщик от root
    sudo bash install-offline.sh — загрузит образы через docker load, создаст конфигурацию и поднимет все сервисы.

Пример с параметрами

$ sudo bash install-offline.sh --dir /opt/spzgate --port-http 8080 --port-https 8443 --port-smtp 25
Те же флаги, что у install.sh: --dir, --port-smtp, --port-http, --port-https, --port-mysql.

Чем отличается от онлайн-установки

install-offline.sh не выполняет:

apt-get update / install — системные утилиты должны быть на хосте
• установку Docker CE и Compose plugin через apt/репозитории — вместо этого, если они отсутствуют, ставятся статические бинарники из docker-static/ (без интернета)
docker compose build — образы загружаются из images/spzgate-images.tar.gz через docker load

Остальные шаги (структура каталогов, self-signed сертификат, .env, запуск контейнеров, ожидание MySQL, инициализация конфигурации qmail) идентичны онлайн-установщику. Для фиксированного именования загруженных образов в .env прописывается COMPOSE_PROJECT_NAME=spzgate.