758 lines
44 KiB
Markdown
Executable File
758 lines
44 KiB
Markdown
Executable File
# Изменения в системе развертывания
|
||
|
||
**Последнее обновление:** 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)
|