- 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
44 KiB
Изменения в системе развертывания
Последнее обновление: 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 URLhttps://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 data427ac1b- Update plan page content with form improvements856bace- Fix December trip image URL to S3 link328f32b- Add custom file upload button with Russian label9d5a0e1- 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 с сообщением "Добавлено фото в галлерею"
- Обработка ошибок и логирование
- Загружает S3 URL в файл
-
Обработка загрузки фото в
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);
История этой задачи:
- Изначально была опция "Свой вариант без БВС" - удалена (была неправильная формулировка)
- Добавлена новая опция "Предложить свое" (более понятная пользователям)
- Опция загружается динамически из 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
Коммиты сегодня:
ea9ca59- Remove 'Свой вариант без БВС' option from trip selection dropdown21e00bf- Update trips without drones section - combine submission and discussion into one lined352bba- Test webhook with new domain - check if auto deploy works6a3603c- 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- Удалена опция "Свой вариант без БВС" из dropdowncontent/plan.md- Обновлен текст условий участия для поездок без дроновINFO/Deployment/VPS_SINGLE_DEPLOYMENT.md- Добавлена критическая информация о Webhook
Что изменилось:
-
Dropdown поездок: Удалена статичная опция "Свой вариант без БВС"
- Теперь список содержит только активные поездки из
upcoming-trips.json - Пользователи по-прежнему могут предложить свой вариант через поле
bvs_number(textarea)
- Теперь список содержит только активные поездки из
-
Условия участия: Переформулировано для поездок без дронов
- Было: Две отдельные строки (подача заявки и обсуждение деталей)
- Стало: Одна строка - "Подача заявки: минимум за 2-3 дня до поездки через Telegram чат 'Пока ты спал'"
-
GitHub Webhook - ВАЖНО: Добавлена новая секция в инструкцию развертывания
- ⚠️ КРИТИЧЕСКИЙ момент: При смене домена ОБЯЗАТЕЛЬНО обновить Payload URL в GitHub webhook настройках
- Без обновления webhook URL автоматический deploy не будет работать
- Добавлены инструкции для тестирования webhook (делать изменение → push → проверить что обновилось на сайте)
- Добавлены инструкции для отладки если webhook не работает
Тестирование:
- Проверена работа webhook с новым доменом sleeptrip.ru
- ✅ Webhook работает корректно - сайт обновляется за несколько секунд после push на main ветку
Коммиты:
ea9ca59- Remove 'Свой вариант без БВС' option from trip selection dropdown21e00bf- Update trips without drones section - combine submission and discussion into one lined352bba- 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для доступа к msmtpsudo 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
- Обновлен .gitignore:
-
.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)
- 🔥 Критично: Исправить шифрование PHP↔Python
- Добавить ноябрь/декабрь в поездки
- Исправить управление поездками в боте
- Форма с загрузкой файлов (30 минут автоочистка)
- Кнопка "отметить рассмотренной"
- Font-display: swap
- Cache headers в Nginx
- Документация переноса домена
- Оптимизация изображений (lazy load)
- 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 аналогичен созданию постов
- Добавлен автоматический git commit и push в функцию
-
Файл:
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
- 3.1 Настройка Nginx (с location блоком
-
✅ ЭТАП 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 - российская альтернатива
Обновлено в документации:
- Чеклист подготовки (VPS_SINGLE_DEPLOYMENT.md)
- Раздел 5.3 с тремя вариантами настройки (VPS_SINGLE_DEPLOYMENT.md)
- Таблица сравнения сервисов (VPS_SINGLE_DEPLOYMENT.md)
2. Созданы автоматизированные bash-скрипты
Все 19 скриптов извлечены из документации и готовы к использованию:
ЭТАП 1: Базовая подготовка (5 скриптов)
1.1-initial-setup.sh- Обновление системы1.2-install-packages.sh- Установка пакетов1.3-install-hugo.sh- Установка Hugo1.4-setup-firewall.sh- Настройка firewall1.5-create-directories.sh- Создание директорий
ЭТАП 2: Git и Hugo (5 скриптов)
2.1-setup-git.sh- Настройка Git2.2-clone-repo.sh- Клонирование репозитория2.3-build-hugo.sh- Сборка Hugo2.4-create-deploy-script.sh- Deploy скрипт2.5-create-webhook.sh- GitHub webhook
ЭТАП 3: Nginx и SSL (4 скрипта)
3.1-setup-nginx.sh- Настройка Nginx3.2-setup-ssl.sh- Установка SSL3.3-setup-webhook-sudo.sh- Sudo права3.4-create-logs.sh- Лог файлы
ЭТАП 5: Email (4 скрипта)
5.3a-setup-msmtp-gmail.sh- Gmail5.3b-setup-msmtp-yandex.sh- Yandex ⭐5.3c-setup-msmtp-mailru.sh- Mail.ru5.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
Миграция со старой версии
Если вы уже развернули систему по старой инструкции:
- Скрипты не требуются - они для новых развертываний
- Для добавления Yandex/Mail.ru вместо Gmail:
- Запустите
5.3b-setup-msmtp-yandex.shили - Следуйте новому разделу 5.3 в документации
- Запустите
Контакты:
- Документация: README.md
- Полная инструкция: VPS_SINGLE_DEPLOYMENT.md
- Скрипты: scripts/README.md