# 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` - проверка состояния