Files
ptp/INFO/Deployment/CHANGES.md
T
2026-01-15 22:24:06 +03:00

758 lines
44 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Изменения в системе развертывания
**Последнее обновление:** 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)