Files
infrait/README.md

140 lines
3.1 KiB
Markdown
Raw Permalink 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.

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