Перейдите в браузере на http://<IP-сервера> (порт 80 по умолчанию, или тот, что указали при установке) — запустится мастер первичной настройки.
2
Создайте администратора
Задайте логин, пароль и домен в мастере установки. Данные сохраняются в MySQL-контейнере.
3
Настройте домены и маршрутизацию
Добавьте обслуживаемые домены, MX-записи, правила фильтрации и маршруты доставки в панели управления.
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
Сравнение версий
Запрашивает spamorez.ru/spzgate/releases/latest, сравнивает с локальным VERSION. Если версии совпадают — выходит без изменений.
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
Загрузка и проверка
Скачивает тарбол новой версии, проверяет SHA256 по manifest.json. При несовпадении — прерывает обновление.
4
Применение обновления
Останавливает контейнеры, распаковывает новую версию (не трогает data/mysql, data/redis, data/qmail/control, data/certs), пересобирает образы и запускает сервисы.
5
Автооткат при ошибке
Если что-то пошло не так — автоматически восстанавливает файлы из резервной копии и поднимает предыдущую версию.
Скрипт покажет список доступных резервных копий и предложит выбрать.
Резервные копии хранятся в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)
После импорта скрипт автоматически верифицирует данные: 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 МБ
Те же флаги, что у 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.