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