Files
ptp/INFO/Deployment/CHANGES.md
T
Kirik 93dc90ce31 Remove consent header from form checkbox, keep only in explanations section
- Remove 'СОГЛАСИЕ НА ОБРАБОТКУ ПЕРСОНАЛЬНЫХ ДАННЫХ' header from privacy consent checkbox in form
- Keep only 'Я выражаю своё согласие на обработку персональных данных' text
- Header remains in 'Пояснения к форме' section for clarity
- Update CHANGES.md with complete documentation of today's work
2025-11-11 09:32:44 +01:00

44 KiB
Raw Blame History

Изменения в системе развертывания

Последнее обновление: 2025-11-10 (текущее время) Версия: 2.3


[2025-11-10] Обновление формы поездок (декабрь 2025) и UI улучшения

ЗАВЕРШЕНО

Основной результат: Полное обновление страницы "Хочу поехать" с новыми полями формы, кастомизацией UI и изменением условий участия

1. Обновление формы заявок на поездки

Файлы: content/plan.md, forms/send_plan.php, static/data/upcoming-trips.json

Что добавлено:

  • Новое обязательное поле "Телефон *"
  • Изменено поле "Имя" на "Фамилия, имя *"
  • Добавлена загрузка PDF файла для уведомления о постановке на учёт БВС (максимум 5МБ, только PDF)
  • Кастомная кнопка "Выбрать файл" вместо стандартной "Choose File" (на русском)
  • Отображение выбранного имени файла с галочкой после загрузки
  • Backend валидация для проверки типа файла и размера в send_plan.php

2. Обновление условий участия и UI

Файлы: content/plan.md, static/data/upcoming-trips.json

Что изменено:

  • Переименован раздел "Поездки с полетами дронов" → "Дронослёты"
  • Изменены сроки подачи заявки: 7 дней → 5 дней до даты поездки
  • Обновлен вводный текст: "Желаете отправиться..." → "Хотите присоединится к поездке? Ознакомьтесь с условиями участия и заполните форму"
  • Удален раздел "Поездки без дронов" (принято решение не ездить с незнакомыми на некоммерческой основе)
  • Удалено предложение собственного направления (оставлено на будущее)
  • Удалена "Московская область" из описания (разрешение не дают)
  • Добавлена подробная информация о времени выезда: "обычно рано утром, 5-6 утра из Москвы, иногда раньше в зависимости от удалённости локации"

3. Обновление согласия на обработку данных

Файлы: content/plan.md

Что изменено:

  • Добавлен заголовок "СОГЛАСИЕ НА ОБРАБОТКУ ПЕРСОНАЛЬНЫХ ДАННЫХ" (жирный, по центру) в блоке согласия формы
  • Обновлен текст согласия: "Персональные данные обрабатываются исключительно для получения разрешения на полёты БВС. Согласие действует 1 месяц. Отзыв согласия – заявление на sleep-trip@ya.ru"
  • Добавлен такой же заголовок в раздел "Пояснения к форме" перед детальным описанием согласия

4. Обновление данных поездок

Файл: static/data/upcoming-trips.json

Что изменено:

  • Скрыта ноябрьская поездка (active: false)
  • Обновлена картинка декабрьской поездки на зимнее фото дрона: /static/images/Rassvet_20231202_9.webp → S3 URL https://s3.regru.cloud/sleeptrip-dev/images/Rassvet_20231202_9.webp
  • Обновлено описание в карточке поездки на странице (убрана Московская область)

5. Добавлено в form enctype

Файл: content/plan.md

Что добавлено:

  • Атрибут enctype="multipart/form-data" в тег <form> для корректной работы с файлами

Структура данных в форме:

$form_data = [
    'name' => 'string',           // Фамилия, имя (обязательно)
    'email' => 'string',          // Email (опционально)
    'phone' => 'string',          // Телефон (обязательно)
    'telegram' => 'string',       // Telegram ник (опционально)
    'bvs_number' => 'string',     // Номер/серийный номер БВС (опционально)
    'trip_period' => 'string',    // Выбранное мероприятие (опционально)
    'bvs_file' => 'string',       // Имя загруженного PDF файла (опционально)
    'consent' => 'agree'          // Согласие на обработку данных (обязательно)
];

Валидация файла в backend:

  • Максимальный размер: 5 МБ
  • Допустимый тип: только PDF (application/pdf)
  • MIME тип проверяется функцией mime_content_type()
  • Сохраняется только имя файла, сам файл передается в email/Telegram/JSON

6. Рекомендации по развертыванию на VPS

На VPS необходимо выполнить после git pull:

# Скопировать обновленный файл формы
cp /var/www/hugo-source/forms/send_plan.php /var/www/forms/send_plan.php

# Установить права
sudo chown www-data:www-data /var/www/forms/send_plan.php
sudo chmod 644 /var/www/forms/send_plan.php

Проверка на VPS:

# Статус формы (должно вернуть 405 - GET не разрешен)
curl -s -o /dev/null -w "%{http_code}" http://sleeptrip.ru/forms/send_plan.php

# Логи ошибок PHP
tail -50 /var/log/php-fpm/error.log

Количество коммитов: 4

  • 95fddb6 - Update December flights form and trip data
  • 427ac1b - Update plan page content with form improvements
  • 856bace - Fix December trip image URL to S3 link
  • 328f32b - Add custom file upload button with Russian label
  • 9d5a0e1 - Update plan page: remove Moscow region, simplify conditions

[2025-11-05] ПОЛНОЕ ОБНОВЛЕНИЕ - Галерея в боте + Документация развертывания + Исправления формы

ЗАВЕРШЕНО - Большой объем работ

Основной результат: Добавлена полная система загрузки фотографий в галерею через Telegram бота с автоматическим обновлением сайта

1. Реализована система загрузки фотографий в галерею

Файл: telegram/telegram_bot.py (строки добавлены в разные части файла)

Что добавлено:

  • Новое состояние GALLERY_UPLOAD в классе BotStates

  • Замена кнопки "📋 Заявки" на "📸 Галлерея" в главном меню (get_main_keyboard())

  • Функция add_photo_to_gallery() (строки ~1177-1205):

    • Загружает S3 URL в файл content/gallery.md
    • Использует Hugo shortcode {{< figure src="..." >}}
    • Автоматический git commit и push с сообщением "Добавлено фото в галлерею"
    • Обработка ошибок и логирование
  • Обработка загрузки фото в handle_photo() (строки ~1246-1305):

    • Переименование: документ → имя файла gallery_YYYYMMDD_N.jpg
    • Загрузка в S3 папку gallery/
    • Вызов функции добавления в gallery.md
    • Ответ пользователю об успехе/ошибке
  • Обработчик callback "gallery_upload" в handle_callback_query() (строки ~918-928):

    • Возврат в главное меню после отмены загрузки

Архитектура:

  • Принцип работы: простая загрузка фото (без сложной формы как в постах)
  • Поток: пользователь → выбирает "Галлерея" → загружает фото → автоматически добавляется на сайт
  • S3 хранилище: все фото в папке gallery/ с датой и номером
  • Сайт: автоматически обновляется через webhook после git push

Ключевой момент: Исправлена ошибка параметров функции git_add_commit_push(files, message) - правильный порядок (files первым, message вторым).

2. Исправления в формах

Файлы: forms/forms_helper.php, forms/send_plan.php, forms/send_ask.php

Что исправлено:

  • Улучшена обработка ошибок отправки email
  • Добавлено логирование для отладки проблем с msmtp
  • Проверка наличия переменных окружения перед использованием
  • Корректная работа с FORMS_SEND_TELEGRAM флагом

3. Обновление dropdown поездок - добавлена опция "Предложить свое"

Файл: static/js/trip-form-loader.js (строки 70-74)

Что добавлено:

const customOption = document.createElement('option');
customOption.value = 'Предложить свое';
customOption.textContent = 'Предложить свое';
select.appendChild(customOption);

История этой задачи:

  1. Изначально была опция "Свой вариант без БВС" - удалена (была неправильная формулировка)
  2. Добавлена новая опция "Предложить свое" (более понятная пользователям)
  3. Опция загружается динамически из JavaScript, синхронизирована с управлением в Telegram боте

4. Обновление условий участия в поездках без БВС

Файл: content/plan.md

Что изменилось:

  • Было: Две отдельные строки:
    • "Подача заявки: минимум за 2-3 дня"
    • "Обсуждение деталей: [Telegram чат]"
  • Стало: Одна консолидированная строка:
    • "Подача заявки: минимум за 2-3 дня через [Telegram чат 'Пока ты спал']"

Результат: Более компактная и понятная информация на странице

5. Созданы две практические справки для развертывания

Файл 1: INFO/Deployment/TELEGRAM_BOT_UPDATE.md (Новый файл)

  • Содержание: Как обновлять Telegram бота на VPS и перезапускать сервис
  • Быстрый старт (2 минуты): scp копирование + systemctl restart
  • Полный процесс с проверкой прав доступа
  • Проверка статуса через journalctl
  • Откат изменений
  • Типичные ошибки и решения
  • Интерпретация для других способов запуска (screen/tmux)

Файл 2: INFO/Deployment/PHP_FORMS_UPDATE.md (Новый файл)

  • Содержение: Как обновлять PHP формы и устанавливать правильные права доступа
  • Быстрый старт (1 минута): git add → commit → push (webhook автоматически обновит)
  • Полный процесс обновления на VPS
  • Таблица прав доступа для всех файлов
  • Одна команда установки всех прав сразу
  • Проверка что формы работают (curl + логи)
  • Типичные проблемы (403, 500, не отправляется, email не приходит)

Назначение этих файлов:

  • Быстрая справка при изменении кода (не нужно помнить все команды)
  • Используются как références в документации
  • Разделены по задачам (бот отдельно, формы отдельно)
  • Содержат практические примеры и команды

6. Открыта важная находка о webhook

Проблема: После миграции на новый домен sleeptrip.ru webhook не срабатывал автоматически Причина: GitHub webhook был настроен с URL старого домена/тестовой версии Решение: Обновлены GitHub webhook настройки указать новый Payload URL Документирование: Добавлено в VPS_SINGLE_DEPLOYMENT.md как КРИТИЧЕСКИЙ момент - при смене домена ОБЯЗАТЕЛЬНО обновить webhook URL в GitHub

Проверка: Тестирование с маркером "ТЕСТ-WEBHOOK" в plan.md подтвердило что webhook работает после обновления URL

Коммиты сегодня:

  1. ea9ca59 - Remove 'Свой вариант без БВС' option from trip selection dropdown
  2. 21e00bf - Update trips without drones section - combine submission and discussion into one line
  3. d352bba - Test webhook with new domain - check if auto deploy works
  4. 6a3603c - Fix ask form and improve .env parsing (из предыдущей сессии)

Статус проекта

  • Прогресс: ~82% (все критичные компоненты работают, система полностью функциональна)
  • Новые возможности: загрузка фотографий в галерею прямо из Telegram бота
  • Документирование: созданы справочники по развертыванию
  • Следующие задачи: S3 file listing feature (отдельная задача), дополнительные оптимизации

[2025-11-05] Обновление страницы "Хочу поехать" (Plan page) + Webhook документация

ВЫПОЛНЕНО - Изменения в форме поездок и инструкции

Файлы изменены:

  • static/js/trip-form-loader.js - Удалена опция "Свой вариант без БВС" из dropdown
  • content/plan.md - Обновлен текст условий участия для поездок без дронов
  • INFO/Deployment/VPS_SINGLE_DEPLOYMENT.md - Добавлена критическая информация о Webhook

Что изменилось:

  1. Dropdown поездок: Удалена статичная опция "Свой вариант без БВС"

    • Теперь список содержит только активные поездки из upcoming-trips.json
    • Пользователи по-прежнему могут предложить свой вариант через поле bvs_number (textarea)
  2. Условия участия: Переформулировано для поездок без дронов

    • Было: Две отдельные строки (подача заявки и обсуждение деталей)
    • Стало: Одна строка - "Подача заявки: минимум за 2-3 дня до поездки через Telegram чат 'Пока ты спал'"
  3. GitHub Webhook - ВАЖНО: Добавлена новая секция в инструкцию развертывания

    • ⚠️ КРИТИЧЕСКИЙ момент: При смене домена ОБЯЗАТЕЛЬНО обновить Payload URL в GitHub webhook настройках
    • Без обновления webhook URL автоматический deploy не будет работать
    • Добавлены инструкции для тестирования webhook (делать изменение → push → проверить что обновилось на сайте)
    • Добавлены инструкции для отладки если webhook не работает

Тестирование:

  • Проверена работа webhook с новым доменом sleeptrip.ru
  • Webhook работает корректно - сайт обновляется за несколько секунд после push на main ветку

Коммиты:

  • ea9ca59 - Remove 'Свой вариант без БВС' option from trip selection dropdown
  • 21e00bf - Update trips without drones section - combine submission and discussion into one line
  • d352bba - Test webhook with new domain - check if auto deploy works
  • [следующий] - Remove test marker, update deployment docs with webhook critical info

[2025-10-29] ВЕЧЕР - Полный Пакет Зеркалирования VPS и Автоматизации

🎉 ЗАВЕРШЕНО - БОЛЬШОЕ ОБНОВЛЕНИЕ

Создан полный пакет для:

  • Зеркалирования VPS (production → testing)
  • Автоматических бэкапов на S3 (еженедельно + ежедневно)
  • Проверки целостности бэкапов (ежемесячно)
  • Синхронизации тестового VPS (еженедельно)
  • Мониторинга и оповещений по email

Создано файлов:

Документация:

  • INFO/mirror/00_START_HERE.md - Быстрый старт (5 минут)
  • INFO/mirror/QUICK_START.md - Полный гайд (30 мин)
  • INFO/mirror/TESTING_VPS_SETUP.md - Подробный гайд (4-5 часов)
  • INFO/mirror/INDEX.md - Полный обзор пакета

Скрипты (2,663 строк кода):

  • scripts/backup-to-s3.sh - Полные + инкрементальные бэкапы (400 строк)
  • scripts/restore-from-s3.sh - Восстановление из бэкапов (350 строк)
  • scripts/verify-backups.sh - Проверка целостности (450 строк)
  • scripts/sync-vps-full.sh - Синхронизация VPS (300 строк)
  • scripts/setup-backup-automation.sh - Настройка cron (350 строк)
  • scripts/setup-git-workflow.sh - Настройка git (350 строк)
  • scripts/install-all.sh - Интерактивный установщик (600 строк)
  • scripts/.env.backup - Шаблон конфигурации

Расписание автоматизации:

  • 1:00 AM ежедневно (Пн-Сб) → Инкрементальный бэкап
  • 2:00 AM по воскресеньям → Полный бэкап
  • 1:00 AM 1-го числа → Проверка целостности
  • 4:00 AM по пятницам → Синхронизация test VPS

Возможности:

  • Полная автоматизация бэкапов (0 ручного вмешательства)
  • 7 встроенных тестов для проверки целостности
  • Email уведомления при ошибках
  • Автоматическая ротация старых бэкапов (28-дневное хранение)
  • Логирование всех операций
  • Dry-run режим для тестирования

Помощь с Конфигурацией

  • Объяснено где находится конфиг почты (.env файлы и /etc/msmtprc)
  • Объяснены правильные права доступа для msmtp:
    • /etc/msmtprc → 640 root:mail (для доступа www-data через группу)
    • /var/www/forms/.env → 600 www-data:www-data
    • /var/log/msmtp.log → 666 root:root (логирование)
  • Показано как проверить Telegram бота и API
  • Проведена диагностика проблем с правами доступа

[2025-10-29] ДЕНЬ - Email через формы, Миграция на sleeptrip.ru

Завершено

  • Email отправка через формы (КРИТИЧНЫЙ ФИкС)

    • Добавлена функция send_email_notification() в forms_helper.php
    • Обновлены send_plan.php и send_ask.php для вызова функции
    • КРИТИЧНО: www-data должен быть в группе mail для доступа к msmtp
      sudo usermod -a -G mail www-data
      sudo systemctl restart php8.3-fpm
      
    • Настроен PHP error logging: /var/log/php_errors.log
    • Формы теперь работают в 3 каналах: Email + Telegram + JSON
  • Календарь поездок обновлен

    • upcoming-trips.json: ноябрь/декабрь 2025 заменили сентябрь/октябрь
    • last_updated: 2025-10-29
  • Миграция на основной домен sleeptrip.ru

    • config.toml: baseURL изменен на https://sleeptrip.ru/
    • SSL сертификат получен через Let's Encrypt
    • Сайт работает на production домене
    • Nginx автоматически настроен через certbot

Исправлено

  • Права доступа www-data к msmtp

    • Проблема: mail() возвращал FALSE, письма не отправлялись
    • Причина: www-data не мог читать /etc/msmtprc (группа mail)
    • Решение: добавление www-data в группу mail
  • PHP error_log не работал

    • Добавлен error_log = /var/log/php_errors.log в php.ini
    • Добавлен catch_workers_output = yes в pool.d/www.conf
    • Создан файл лога с правами www-data:www-data

Не решено

  • ⚠️ Шифрование PHP↔Python - отложено
    • Telegram бот по-прежнему не может расшифровать PHP-encrypted заявки
    • Ошибка: "Padding is incorrect"
    • Приоритет снижен, т.к. Email и Telegram уведомления работают

Статус проекта

  • Прогресс: ~80% (критичные компоненты работают, основной домен)
  • Время затрачено: ~8 часов (текущая + предыдущие сессии)
  • Осталось: ~2 часа (шифрование + добавление админа в бот)

[2025-10-27] - Security Headers, Оптимизация фона, Отладка шифрования

Завершено

  • Формы AJAX - исправлены белые страницы

    • Формы теперь возвращают JSON вместо HTTP redirect
    • Обе формы (plan и ask) работают через AJAX без перезагрузки
    • Убран тестовый текст из map.md
  • Security Headers - добавлены 6 HTTP заголовков безопасности

    • Базовые headers (X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy)
    • HSTS (Strict-Transport-Security)
    • CSP (Content-Security-Policy) в режиме Report-Only
    • Создана документация: INFO/Deployment/SECURITY_HEADERS.md
    • Добавлен раздел 3.7 в VPS_SINGLE_DEPLOYMENT.md
  • Оптимизация фона - DESKTOP_NEW_1.jpg → WebP

    • Размер: 4.5MB → 571KB (экономия 87%)
    • Разрешение: 5418x3070 → 1920x1088
    • Формат: JPG → WebP
    • Ускорение загрузки страницы на 3-4 секунды
  • Документация ошибок - создан ERRORS_COLLECTION.md

    • 7 категорий ошибок при развертывании
    • Git push problems
    • S3 upload issues
    • Telegram bot path issues
    • Forms AJAX/redirect incompatibility
    • .env file parsing bug
    • Permission errors
    • Script line endings

В процессе

  • ⚠️ Шифрование PHP↔Python - проблема остается
    • Заявки сохраняются в /var/secure/forms/*.json
    • Ключи шифрования совпадают
    • forms_helper.php обновлен (openssl параметр 0)
    • PHP-FPM перезапущен
    • Проблема: Python выдает Padding is incorrect при расшифровке
    • План на завтра: Тесты совместимости PHP/Python шифрования

Исправлено

  • Forms Git tracking - формы добавлены в git

    • Обновлен .gitignore: forms/forms/.env
    • Формы теперь версионируются в git
    • .env файл защищен от коммита
    • Автоматический deploy через webhook
  • .env parsing bug - исправлена функция load_env_file()

    • Проблема: Пробелы и inline комментарии не удалялись
    • FORMS_SEND_TELEGRAM=true # comment читалось как 'true # comment'
    • Решение: Добавлен trim() после удаления комментариев
    • Обновлен forms_helper.php (строки 22-24, 34)
  • Nginx configuration - Security Headers в HTTPS блоке

    • Заголовки добавлены в правильное место (port 443)
    • Проверено через curl
    • Работают все 4 базовых заголовка

Добавлено

  • Скрипты permissions/ - набор скриптов для проверки прав

    • check-permissions.sh - проверка прав доступа
    • fix-*.sh - исправление прав для разных компонентов
    • Автоматическая диагностика проблем
  • TOMORROW_PLAN.md - подробный план на 2025-10-28

    • 10 задач с приоритетами
    • Критично: исправить шифрование PHP↔Python
    • Добавить ноябрь/декабрь в поездки
    • Форма с загрузкой файлов
    • Кнопка "отметить рассмотренной" в боте
    • Оптимизации: Font-display, Cache headers, Lazy loading
    • SEO исправления
  • INFO/Deployment/.gitignore - защита документации

    • Разрешены только .md файлы в INFO/Deployment/
    • Скрипты и другие файлы защищены

Статус проекта

  • Прогресс: ~75% (критичные компоненты работают)
  • Время затрачено: ~6 часов (сегодняшняя сессия + предыдущие)
  • Осталось: ~2 часа (шифрование + мелкие задачи)

Следующие шаги (2025-10-28)

  1. 🔥 Критично: Исправить шифрование PHP↔Python
  2. Добавить ноябрь/декабрь в поездки
  3. Исправить управление поездками в боте
  4. Форма с загрузкой файлов (30 минут автоочистка)
  5. Кнопка "отметить рассмотренной"
  6. Font-display: swap
  7. Cache headers в Nginx
  8. Документация переноса домена
  9. Оптимизация изображений (lazy load)
  10. SEO исправления

[2025-10-25] - Исправление прав доступа, архитектуры и Telegram бота

Критическое исправление Telegram бота

  • Git синхронизация не работала:

    • Проблема: GIT_REPO_PATH = '/var/www/telegram-bot/ptp' (hardcoded неправильный путь)
    • Ошибка: fatal: not a git repository (or any of the parent directories): .git
    • Решение: GIT_REPO_PATH = os.getenv('GIT_REPO_PATH', '/var/www/hugo-source')
    • Результат: Git sync, создание постов, отображение постов теперь работают
  • Управление календарем поездок не работало:

    • Проблема: TRIPS_JSON_PATH использовал путь относительно telegram_bot.py
    • Решение: TRIPS_JSON_PATH = os.path.join(GIT_REPO_PATH, 'static', 'data', 'upcoming-trips.json')
    • Результат: Календарь корректно читается и обновляется
  • Обновление сайта после изменения календаря:

    • Добавлен автоматический git commit и push в функцию handle_trips_update_site()
    • Теперь кнопка "Обновить сайт" делает: сохранение → commit → push → webhook → deploy
    • Workflow аналогичен созданию постов
  • Файл: ptp/telegram/telegram_bot.py (строки 36, 40, 1928-1978)

Критическое исправление архитектуры

  • PHP формы перенесены в отдельную директорию:
    • Проблема: Формы в /var/www/html/ удалялись Hugo при каждом deploy (--cleanDestinationDir)
    • Решение: Создана отдельная директория /var/www/forms/ для PHP форм
    • Обновлен Nginx: добавлен location блок /forms/ в этапе 3.1
    • Обновлен этап 1.5: создание директории /var/www/forms/
    • Обновлен этап 5.1: копирование форм в /var/www/forms/
    • Обновлен этап 5.2: .env файл теперь в /var/www/forms/.env
    • Обновлены все ссылки и комментарии в документации
    • Преимущества: формы защищены от удаления, доступны через https://domain.com/forms/send_plan.php

Исправлено

  • Git dubious ownership error: Исправлена критическая ошибка при работе webhook

    • Проблема: Репозиторий принадлежал пользователю ptp, а deploy скрипт запускался от www-data
    • Решение: Добавлена команда sudo chown -R www-data:www-data /var/www/hugo-source
    • Обновлены разделы: 2.2 (клонирование), 3.4 (sudo права)
    • Добавлен раздел в Troubleshooting
  • Permission denied для .env файла: Исправлена ошибка при запуске Telegram бота

    • Проблема: .env файл создавался от текущего пользователя, а бот работает от www-data
    • Решение: Добавлены команды chown www-data:www-data в этап 4.3
    • Добавлен раздел в Troubleshooting: "Permission denied: .env файл"

Добавлено

  • Новый файл TODAY.md:

    • Быстрый ежедневный статус: на чем остановились, следующий шаг
    • Важные исправления текущей сессии
    • Полезные команды для VPS
    • План на следующий раз
    • Местоположение: ptp/INFO/Deployment/TODAY.md
  • Документация про заявки в Telegram боте:

    • Заявки сохраняются в /var/secure/forms/ в зашифрованном виде
    • ApplicationsReader расшифровывает и отображает их
    • Поддерживает два типа: 'plan' (заявки на поездки) и 'ask' (вопросы)
    • Требуется совпадение FORMS_ENCRYPTION_KEY в обоих .env файлах
    • Меню бота: 📋 Заявки → Новые заявки / Все заявки / Статистика
  • Новый раздел "Важные концепции" в начале документа

    • Объяснение роли пользователя www-data
    • Почему все компоненты используют единого пользователя
    • Преимущества такого подхода
    • Важные правила для .env файлов и репозитория
  • Расширенные пояснения про FORMS_ENCRYPTION_KEY:

    • Этап 4.3: зачем боту ключ шифрования форм
    • Этап 5.2: как работает схема шифрования/расшифрования
    • Важность совпадения ключей в обоих .env файлах
  • Новые разделы Troubleshooting:

    • "Git dubious ownership" - проблема прав репозитория
    • "Permission denied: .env файл" - проблема прав конфигурации

Обновлено

  • Скрипт 2.2-clone-repo.sh: автоматически меняет владельца на www-data
  • Скрипт 3.3-setup-webhook-sudo.sh: добавляет safe.directory и проверяет ошибки
  • Этап 2.2 (клонирование): добавлены команды установки прав на репозиторий
  • Этап 3.4 (sudo права): добавлены safe.directory и подсказки при ошибках
  • Этап 4.3 (.env для бота):
    • Добавлено объяснение важности www-data
    • Автоматическая установка правильных прав на .env
    • Инструкции по проверке прав после редактирования

Завершено

  • ЭТАП 3: Nginx и SSL полностью выполнен

    • 3.1 Настройка Nginx (с location блоком /forms/)
    • 3.2 Настройка DNS
    • 3.3 Установка SSL сертификата
    • 3.4 Настройка sudo прав для webhook (с фиксом ownership)
    • 3.5 Создание лог файлов
    • 3.6 Настройка GitHub Webhook
  • ЭТАП 4: Telegram Bot полностью выполнен

    • 4.1 Python окружение
    • 4.2 Копирование файлов бота
    • 4.3 Настройка .env для бота (с фиксом прав www-data)
    • 4.4 Настройка Git для www-data
    • 4.5 Создание Systemd сервиса
    • 4.6 Тестирование бота

Статус проекта

  • Прогресс: ~70% (4 из 6 этапов + 5.1)
  • Время затрачено: ~5.2 часа
  • Осталось: ~2.3 часа

[2025-10-24] - Исправления и завершение Этапа 2

Исправлено

  • Критическая ошибка путей: Исправлены все упоминания /var/www/hugo-source/ptp на /var/www/hugo-source
    • Обновлен VPS_SINGLE_DEPLOYMENT.md (9 упоминаний)
    • Исправлены скрипты 2.3 и 2.4
    • Причина: репозиторий клонируется напрямую в hugo-source/, Hugo файлы в корне

Добавлено

  • Инструкции по получению токенов в разделе "Подготовка перед началом":
    • GitHub Personal Access Token - пошаговая инструкция
    • Telegram Bot Token - через @BotFather
    • Telegram User ID - через @userinfobot
  • Предупреждения о безопасности токенов
  • Ссылки на нужные страницы GitHub и Telegram

Завершено

  • ЭТАП 2: Git и Hugo полностью выполнен
    • 2.1 Настройка Git
    • 2.2 Клонирование репозитория
    • 2.3 Первая сборка Hugo
    • 2.4 Создание Deploy скрипта (с правильным путем)
    • 2.5 Создание Webhook обработчика

Статус проекта

  • Прогресс: 33.3% (2 из 6 этапов)
  • Время затрачено: ~2 часа
  • Осталось: ~5.5 часов

[2025-10-21] - Начальная версия

Что было сделано

1. Добавлена поддержка российских почтовых сервисов

Теперь вы можете выбрать из трёх вариантов для отправки email:

  • Yandex - рекомендуется для проектов в РФ (стабильная работа)
  • Gmail - для международных проектов (может блокироваться в РФ)
  • Mail.ru - российская альтернатива

Обновлено в документации:

2. Созданы автоматизированные bash-скрипты

Все 19 скриптов извлечены из документации и готовы к использованию:

ЭТАП 1: Базовая подготовка (5 скриптов)

  • 1.1-initial-setup.sh - Обновление системы
  • 1.2-install-packages.sh - Установка пакетов
  • 1.3-install-hugo.sh - Установка Hugo
  • 1.4-setup-firewall.sh - Настройка firewall
  • 1.5-create-directories.sh - Создание директорий

ЭТАП 2: Git и Hugo (5 скриптов)

  • 2.1-setup-git.sh - Настройка Git
  • 2.2-clone-repo.sh - Клонирование репозитория
  • 2.3-build-hugo.sh - Сборка Hugo
  • 2.4-create-deploy-script.sh - Deploy скрипт
  • 2.5-create-webhook.sh - GitHub webhook

ЭТАП 3: Nginx и SSL (4 скрипта)

  • 3.1-setup-nginx.sh - Настройка Nginx
  • 3.2-setup-ssl.sh - Установка SSL
  • 3.3-setup-webhook-sudo.sh - Sudo права
  • 3.4-create-logs.sh - Лог файлы

ЭТАП 5: Email (4 скрипта)

  • 5.3a-setup-msmtp-gmail.sh - Gmail
  • 5.3b-setup-msmtp-yandex.sh - Yandex
  • 5.3c-setup-msmtp-mailru.sh - Mail.ru
  • 5.4-setup-php-msmtp.sh - Настройка PHP

Мастер-скрипт

  • deploy-all.sh - Автоматическое выполнение всех этапов

3. Реорганизована структура файлов

Старая структура:

ptp/INFO/
└── VPS_SINGLE_DEPLOYMENT.md

Новая структура:

ptp/INFO/Deployment/
├── README.md                    # Обзор и быстрый старт
├── VPS_SINGLE_DEPLOYMENT.md     # Полная инструкция
├── CHANGES.md                   # Этот файл
└── scripts/                     # Автоматизация
    ├── README.md
    ├── deploy-all.sh
    └── [19 скриптов этапов]

4. Обновлена документация

Добавлено:

  • Ссылки на скрипты в каждом разделе инструкции
  • Блок "Автоматизация" в начале каждого этапа
  • Три README файла с разным уровнем детализации
  • Таблица сравнения почтовых сервисов

Улучшено:

  • Чеклист подготовки теперь включает выбор email сервиса
  • Инструкции по получению App Password для Yandex
  • Описание лимитов и особенностей каждого сервиса

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

Для разработчика

  • Быстрое развертывание через deploy-all.sh
  • Каждый скрипт можно запустить отдельно
  • Интерактивные подсказки при выполнении
  • Автоматическая проверка на ошибки (set -e)

Для проекта в РФ

  • Поддержка Yandex и Mail.ru
  • Стабильная работа без зависимости от внешних сервисов
  • Гибкий выбор почтового провайдера

Для поддержки

  • Код скриптов вынесен из документации
  • Легко обновлять и тестировать
  • Версионирование через Git

Использование

Быстрый старт (автоматически):

cd ptp/INFO/Deployment/scripts
./deploy-all.sh

Пошаговое выполнение:

# Этап 1
./1.1-initial-setup.sh
./1.2-install-packages.sh
# ... и так далее

# Этап 5 - выбрать один из вариантов
./5.3b-setup-msmtp-yandex.sh  # Рекомендуется для РФ

Ручная установка:

Следуйте инструкциям в VPS_SINGLE_DEPLOYMENT.md

Обратная совместимость

Все существующие инструкции остались в документации - можно выполнять вручную копируя команды.

Скрипты созданы на основе этих инструкций, поэтому результат идентичен.

Следующие шаги

Возможные улучшения в будущем:

  • Добавить скрипты для Этапа 4 (Telegram Bot)
  • Создать скрипт полной проверки системы после развертывания
  • Добавить скрипт резервного копирования
  • Интеграция с CI/CD

Миграция со старой версии

Если вы уже развернули систему по старой инструкции:

  1. Скрипты не требуются - они для новых развертываний
  2. Для добавления Yandex/Mail.ru вместо Gmail:
    • Запустите 5.3b-setup-msmtp-yandex.sh или
    • Следуйте новому разделу 5.3 в документации

Контакты: