diff --git a/INFO/Deployment/CHANGES.md b/INFO/Deployment/CHANGES.md new file mode 100644 index 0000000..1c9753f --- /dev/null +++ b/INFO/Deployment/CHANGES.md @@ -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"` в тег `
` для корректной работы с файлами + +**Структура данных в форме:** +```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) diff --git a/content/plan.md b/content/plan.md index 02f95ff..fb8bc9b 100755 --- a/content/plan.md +++ b/content/plan.md @@ -227,8 +227,7 @@ disableComments = true -
СОГЛАСИЕ НА ОБРАБОТКУ ПЕРСОНАЛЬНЫХ ДАННЫХ
-
Я выражаю своё согласие на обработку персональных данных
+ Я выражаю своё согласие на обработку персональных данных

Персональные данные обрабатываются исключительно для получения разрешения на полёты БВС. Согласие действует 1 месяц. Отзыв согласия – заявление на sleep-trip@ya.ru