b1bff87a25614e67b9cf969715698e6d79fc84a8
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 шаблоны)
Структура проекта
infraIT/
app.py
Dockerfile
docker-compose.yml
gunicorn_conf.py
requirements.txt
templates/
static/
data/
Переменные окружения
Используется .env (пример в .env.example):
SECRET_KEY=replace-with-a-long-random-string
SECRET_KEY обязателен для продакшена (сессии админки).
Быстрый старт (Docker)
- Создайте
.env:
Copy-Item .env.example .env
- Запустите контейнер:
docker compose up -d --build
- Проверьте сервис:
- Сайт:
http://localhost:4545 - Healthcheck:
http://localhost:4545/health
Остановка:
docker compose down
Локальный запуск (без Docker)
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.
Для смены пароля сгенерируйте новый хэш и замените значение.
Пример генерации:
python -c "from werkzeug.security import generate_password_hash; print(generate_password_hash('NEW_PASSWORD'))"
Telegram-уведомления
Чтобы получать заявки в Telegram:
- В админке заполните
Telegram Bot Token. - В админке заполните
Telegram Chat ID. - Сохраните настройки.
Если один из параметров пустой, отправка в 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- проверка состояния
Description
Languages
HTML
66.1%
Python
16.8%
CSS
15.3%
JavaScript
1.3%
Dockerfile
0.5%