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