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
This commit is contained in:
Kirik
2025-11-11 09:32:44 +01:00
parent 2510dc9110
commit 93dc90ce31
2 changed files with 758 additions and 2 deletions
+757
View File
@@ -0,0 +1,757 @@
# Изменения в системе развертывания
**Последнее обновление:** 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>` для корректной работы с файлами
**Структура данных в форме:**
```php
$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:**
```bash
# Скопировать обновленный файл формы
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:**
```bash
# Статус формы (должно вернуть 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)
**Что добавлено:**
```javascript
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
```bash
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** - российская альтернатива
**Обновлено в документации:**
- Чеклист подготовки ([VPS_SINGLE_DEPLOYMENT.md](VPS_SINGLE_DEPLOYMENT.md#L108-L111))
- Раздел 5.3 с тремя вариантами настройки ([VPS_SINGLE_DEPLOYMENT.md](VPS_SINGLE_DEPLOYMENT.md#L883-L1008))
- Таблица сравнения сервисов ([VPS_SINGLE_DEPLOYMENT.md](VPS_SINGLE_DEPLOYMENT.md#L1001-L1008))
### 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
## Использование
### Быстрый старт (автоматически):
```bash
cd ptp/INFO/Deployment/scripts
./deploy-all.sh
```
### Пошаговое выполнение:
```bash
# Этап 1
./1.1-initial-setup.sh
./1.2-install-packages.sh
# ... и так далее
# Этап 5 - выбрать один из вариантов
./5.3b-setup-msmtp-yandex.sh # Рекомендуется для РФ
```
### Ручная установка:
Следуйте инструкциям в [VPS_SINGLE_DEPLOYMENT.md](VPS_SINGLE_DEPLOYMENT.md)
## Обратная совместимость
Все существующие инструкции остались в документации - можно выполнять вручную копируя команды.
Скрипты созданы на основе этих инструкций, поэтому результат идентичен.
## Следующие шаги
Возможные улучшения в будущем:
- [ ] Добавить скрипты для Этапа 4 (Telegram Bot)
- [ ] Создать скрипт полной проверки системы после развертывания
- [ ] Добавить скрипт резервного копирования
- [ ] Интеграция с CI/CD
## Миграция со старой версии
Если вы уже развернули систему по старой инструкции:
1. Скрипты **не требуются** - они для новых развертываний
2. Для добавления Yandex/Mail.ru вместо Gmail:
- Запустите `5.3b-setup-msmtp-yandex.sh` или
- Следуйте новому разделу 5.3 в документации
---
**Контакты:**
- Документация: [README.md](README.md)
- Полная инструкция: [VPS_SINGLE_DEPLOYMENT.md](VPS_SINGLE_DEPLOYMENT.md)
- Скрипты: [scripts/README.md](scripts/README.md)