2026-02-12 23:11:58 +03:00
2026-02-12 18:47:12 +03:00
2026-02-12 16:06:53 +00:00
2026-02-12 23:11:58 +03:00
2026-02-12 18:47:12 +03:00
2026-02-12 18:47:12 +03:00
2026-02-12 23:11:58 +03:00
2026-02-12 18:47:12 +03:00
2026-02-12 18:47:12 +03:00
2026-02-12 18:47:12 +03:00
2026-02-12 18:47:12 +03:00

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)

  1. Создайте .env:
Copy-Item .env.example .env
  1. Запустите контейнер:
docker compose up -d --build
  1. Проверьте сервис:
  • Сайт: 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:

  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 - проверка состояния
Description
No description provided
Readme 743 KiB
Languages
HTML 66.1%
Python 16.8%
CSS 15.3%
JavaScript 1.3%
Dockerfile 0.5%