From dd95fc311d76447d8931c9e1914b97ae8a0a6c3d Mon Sep 17 00:00:00 2001 From: RGalyaviev Date: Thu, 12 Feb 2026 22:48:41 +0300 Subject: [PATCH] docs: add comprehensive project README --- README.md | 140 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..e7b3080 --- /dev/null +++ b/README.md @@ -0,0 +1,140 @@ +# InfraIT Landing + Admin + +Лендинг для IT-аутсорсинга на Flask с формой заявок, админкой настроек и уведомлениями в Telegram. + +## Что реализовано + +- Публичная страница с SEO-блоками, FAQ и формой обратной связи. +- Сохранение заявок в SQLite (`data/infra.db`, таблица `leads`). +- Админ-панель для редактирования контактов, SEO-параметров и интеграций. +- Опциональная отправка новой заявки в Telegram (bot token + chat id). +- Healthcheck-эндпоинт для мониторинга (`/health`). +- Готовый Docker-стек (`Dockerfile` + `docker-compose.yml`). + +## Технологии + +- Python 3.12 +- Flask 3.1 +- Gunicorn 23 +- SQLite +- HTML/CSS/JS (Jinja2 шаблоны) + +## Структура проекта + +```text +infraIT/ + app.py + Dockerfile + docker-compose.yml + gunicorn_conf.py + requirements.txt + templates/ + static/ + data/ +``` + +## Переменные окружения + +Используется `.env` (пример в `.env.example`): + +```env +SECRET_KEY=replace-with-a-long-random-string +``` + +`SECRET_KEY` обязателен для продакшена (сессии админки). + +## Быстрый старт (Docker) + +1. Создайте `.env`: + +```powershell +Copy-Item .env.example .env +``` + +2. Запустите контейнер: + +```powershell +docker compose up -d --build +``` + +3. Проверьте сервис: + +- Сайт: `http://localhost:4545` +- Healthcheck: `http://localhost:4545/health` + +Остановка: + +```powershell +docker compose down +``` + +## Локальный запуск (без Docker) + +```powershell +python -m venv .venv +.\.venv\Scripts\Activate.ps1 +pip install -r requirements.txt +$env:SECRET_KEY = "your-strong-secret" +python app.py +``` + +Сервис поднимется на `http://127.0.0.1:5000` (режим Flask debug). + +## Админка + +- URL: `http://localhost:4545/admin/login` (или `http://127.0.0.1:5000/admin/login` при локальном запуске) +- После входа: `/admin/settings` + +Что можно менять через админку: + +- название компании и контакты +- canonical URL +- Yandex verification token +- ID Яндекс.Метрики +- Telegram Bot Token / Telegram Chat ID +- географию обслуживания + +### Важный момент по паролю админки + +Сейчас хэш пароля зашит в `app.py` в `ADMIN_PASSWORD_HASH`. +Для смены пароля сгенерируйте новый хэш и замените значение. + +Пример генерации: + +```powershell +python -c "from werkzeug.security import generate_password_hash; print(generate_password_hash('NEW_PASSWORD'))" +``` + +## Telegram-уведомления + +Чтобы получать заявки в Telegram: + +1. В админке заполните `Telegram Bot Token`. +2. В админке заполните `Telegram Chat ID`. +3. Сохраните настройки. + +Если один из параметров пустой, отправка в Telegram отключена. + +## Данные и хранение + +- База: `data/infra.db` +- В Docker папка `data/` проброшена как volume (`./data:/app/data`) +- Лого компании: `static/img/infrait-logo.png` + +Рекомендуется регулярно делать бэкап `data/infra.db`. + +## Продакшен заметки + +- Обязательно задайте сильный `SECRET_KEY`. +- Не публикуйте `app.py` с дефолтным хэшем админского пароля. +- Ограничьте доступ к `/admin/*` на уровне reverse-proxy/VPN/IP allowlist. +- Настройте HTTPS на внешнем прокси (Nginx/Caddy/Traefik). + +## Полезные эндпоинты + +- `GET /` - лендинг +- `POST /` - отправка заявки +- `GET /admin/login` - вход в админку +- `GET/POST /admin/settings` - настройки +- `GET /admin/logout` - выход +- `GET /health` - проверка состояния \ No newline at end of file