docs: add comprehensive project README
This commit is contained in:
@@ -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` - проверка состояния
|
||||||
Reference in New Issue
Block a user