АРМЕЙСКИЙ ЗАКОН — УСТАНОВКА САЙТА И CRM
Версия: 13.10.2026

1. ЧТО В АРХИВЕ
public_html/ — публичный сайт и вход в CRM.
app/ — код, настройки и закрытая база данных. ЭТА ПАПКА ДОЛЖНА БЫТЬ
РЯДОМ С public_html, А НЕ ВНУТРИ НЕЁ.
На главной основной способ обращения — лид-форма; работа дистанционная
по всей России. Телефон и адрес оставлены в контактах и подвале.
INSTALL-RU.txt — этот файл, содержит одноразовый адрес активации.
SOURCES.txt — источники сведений и фотографии.

2. ТРЕБОВАНИЯ
PHP 8.2 или новее; расширения PDO, pdo_sqlite, OpenSSL, cURL; сессии PHP.
HTTPS-сертификат для armeyskiy-zakon.com.
Apache/LiteSpeed с разрешённым .htaccess, mod_rewrite и mod_headers.
Для Nginx системному администратору нужно отдельно настроить HTTPS,
запрет листинга каталогов и запрет прямой выдачи служебных файлов.
Корень веб-сервера должен указывать строго на public_html.

3. ЗАГРУЗКА
Сделайте резервную копию текущего сайта.
Через файловый менеджер хостинга распакуйте архив в корень аккаунта
или корень каталога домена, содержащий public_html.
Перенесите содержимое public_html/ в публичный каталог сайта,
а app/ поместите в соседнюю папку на том же уровне.
Не загружайте INSTALL-RU.txt, SOURCES.txt и сам ZIP в public_html.
Убедитесь, что старый index.php не перекрывает новый index.html.
При замене существующего сайта перенесите старые файлы в закрытую
резервную копию: старые фотографии и страницы остаются доступны,
если их просто оставить в публичной папке.
У app/data должны быть права записи для процесса PHP.
Обычно каталоги: 755, файлы: 644, app/config.php: 600,
app/data: 700 при одинаковом владельце файлов и PHP.
Не устанавливайте 777. Если PHP работает другим пользователем,
хостинг должен настроить владельца/группу и минимальные нужные права.

4. ПЕРВЫЙ ВХОД
После включения HTTPS откройте личную одноразовую ссылку:
https://armeyskiy-zakon.com/office-c17a652acf3f/setup.php?key=7A66gXOesOiqMXSaCcvpdbK4Y97W08JKoUueCsven6U

Создайте логин и уникальный пароль от 14 до 128 символов.
Сохраните их в менеджере паролей. После создания пользователя
страница активации перестанет принимать ключ.
Постоянный адрес CRM:
https://armeyskiy-zakon.com/office-c17a652acf3f/

Добавьте этот адрес в личные закладки. Не размещайте его в меню сайта.
Форма может принимать заявки до активации кабинета: она требует работающую
базу и доступ к внешней CRM. Активируйте кабинет до запуска, чтобы видеть
локальные копии заявок. Убедитесь, что сервер может обращаться по HTTPS
к API CRM и что ключ источника в app/config.php остаётся закрытым.

5. КАК РАБОТАЕТ CRM
Обращение с сайта автоматически появляется в списке.
Статусы: Новая, Связаться, В работе, Закрыта.
В карточке есть звонок, внутренние заметки и следующий контакт.
Поиск — по имени, телефону, тексту, заметкам и номеру заявки.
Доступны фильтры, ручное добавление, удаление и экспорт CSV.
Экспорт использует текущие фильтры. CSV содержит реальные контакты,
поэтому храните выгрузку в закрытом месте. Мобильный вид CRM включён.
Дата и время — по Томску (UTC+7).
Заявки отправляются во внешнюю CRM, после её подтверждения сохраняются
в кабинете сайта (app/data/crm.sqlite). Если внешняя CRM не подтвердила
приём или локальная база недоступна, форма показывает ошибку. Тема,
комментарий, страница и номер AZ передаются в поле
comment; формат уведомления зависит от настроек внешней CRM.
Сессия закрывается после 30 минут бездействия или максимум через 12 часов.
После смены пароля остальные сессии теряют доступ.

6. ЗАЩИТА И РЕЗЕРВНЫЕ КОПИИ
База: app/data/crm.sqlite; она находится вне публичного каталога.
Контакты, сообщения и заметки зашифрованы AES-256-GCM.
Ключ хранится в app/config.php; не меняйте и не теряйте его:
без него нельзя расшифровать существующие записи.
Случайный адрес CRM используется вместе с серверной авторизацией.
Один только скрытый адрес или robots.txt не обеспечивают защиту.
База и ключ должны резервироваться только в закрытый каталог.
Для согласованной копии SQLite используйте резервирование хостинга
или команду sqlite3 app/data/crm.sqlite '.backup /закрытый/путь/crm.sqlite'.
Папку app/data/sessions резервировать не нужно.
Заявки без обновлений удаляются из рабочей базы через 180 дней,
при следующем запросе к сервису. Планируйте удаление старых резервных
копий отдельно, чтобы не хранить контакты бесконечно.

Если забыли пароль и есть SSH: из каталога проекта выполните
php app/reset-password.php
Новый пароль вводится через стандартный ввод, а не как аргумент команды.
Работайте в личном терминале без записи экрана. Без SSH обратитесь
к администратору хостинга. Веб-страницы сброса без авторизации нет.

7. ПРОВЕРКА ПОСЛЕ УСТАНОВКИ
Откройте сайт по HTTPS, проверьте телефон и адрес.
Отправьте тестовую заявку с явно тестовым номером, согласованным с владельцем
внешней CRM. Проверьте положительный ответ формы, запись в закрытом
кабинете, локальный файл app/data/crm.sqlite и запись во внешней CRM.
Повторите запрос с тем же request_id: дубль не должен создаваться.
Затем удалите тестовую заявку в обеих системах.
В приватном окне CRM должна запрашивать вход и не показывать заявки.
Попытка открыть /app/config.php или базу из браузера должна дать 403/404.
Проверьте форму на телефоне с открытой клавиатурой: активное поле
прокручивается в видимую область, нижняя панель скрывается.
При серверной ошибке форма показывает реальное сообщение об ошибке.

8. ПЕРЕД ЗАПУСКОМ
Контактные сведения и реквизиты взяты из предоставленных материалов
и открытых профилей. Веб-сайт не обещает определённый исход дела.
Фото юриста взято из указанного публичного профиля; оператору нужно
иметь право на его использование. Текст политики учитывает передачу во
внешнюю CRM; оператору следует сверить поставщика, размещение сервера,
условия хранения и поручение на обработку персональных данных до запуска.
Фактическая загрузка на хостинг не выполнена. 13.10.2026 отправлена одна
явно тестовая заявка с локальной копии сайта во внешнюю CRM: имя
«ТЕСТ УДАЛИТЬ — проверка формы», номер +70000000000. API подтвердил
приём; удалите эту тестовую запись в рабочей CRM. Проверку приёма на
целевом хостинге всё равно выполните после установки.
