Быстрый старт
Установите AssetHub на Hostinger или собственный VPS менее чем за 10 минут.
Пользователи и роли
5 предустановленных ролей с правами Spatie, тонкая настройка для каждого пользователя.
Функции продукта
Активы, процессы, обслуживание, амортизация, журнал аудита и многое другое.
Настройка
Добавляйте неограниченное число полей, меняйте брендинг, языки и темы.
Настройка Hostinger
Пошаговое развёртывание на самом дешёвом тарифе Single shared hosting.
Безопасность и QR
HTTPS, webhook'и с HMAC-подписью, журнал аудита и сканер QR через камеру.
Отчёты и экспорт
8 встроенных отчётов с экспортом в Excel + PDF и фильтрами по дате.
E-mail-уведомления
Напоминания о гарантии, обслуживании, окончании документов и просроченных checkout'ах.
Часто задаваемые вопросы
Можно ли запустить AssetHub на самом дешёвом тарифе Hostinger Single?
Да — AssetHub полностью совместим с Hostinger Single (~$2,99/мес). Single включает PHP 8.3, MySQL, нативные Cron Jobs и бесплатный SSL — всё, что нужно AssetHub. Без SSH, Composer и командной строки. Смотрите раздел Настройка Hostinger для пошагового руководства.
Нужны ли технические навыки для установки?
Нет. Веб-установщик делает всё: проверка требований, настройка базы данных, миграции и создание учётной записи admin. Просто загрузите файлы, откройте /install в браузере и следуйте мастеру.
Как работают запланированные письма (уведомления о гарантии/обслуживании)?
AssetHub использует планировщик Laravel. Нужно настроить только один cron job, который запускается каждую минуту, а Laravel внутренне распределяет каждую задачу на нужное время (ежедневно 08:00, ежемесячно и т. д.). На Hostinger настройте его в hPanel → Дополнительно → Cron Jobs. Если у вашего хостинга нет cron, используйте Cron URL из приложения с бесплатным сервисом cron-job.org.
Какие методы амортизации поддерживаются?
Три метода: Линейный (равномерная годовая амортизация), Уменьшаемого остатка (ускоренная, обычно для налоговых целей) и Производственный (по использованию, для производственного оборудования). Стоимость активов автоматически обновляется 1-го числа каждого месяца.
Работает ли сканер QR на телефонах?
Да — он использует камеру браузера через html5-qrcode и работает в любом современном браузере на телефоне/планшете/десктопе. Единственное требование — HTTPS. Hostinger предоставляет бесплатный SSL через Let's Encrypt, так что всё работает из коробки.
Можно ли добавить свои поля без кода?
Да. Админ → Пользовательские поля позволяет добавлять неограниченное число атрибутов (текст, число, дата, выпадающий список, текстовая область, файл, чекбокс), ограничивать их конкретными категориями, отмечать как обязательные и переупорядочивать перетаскиванием — всё из интерфейса.
Сколько языков поддерживает AssetHub?
10 языков из коробки: английский, вьетнамский, испанский, французский, немецкий, китайский, японский, португальский (BR), русский и арабский (с полной поддержкой RTL). Переводы редактируются из Админ → Translations.
Обзор
AssetHub — это полноценная система управления IT-активами, построенная на Laravel 11, Vue 3 и Tailwind CSS. Она помогает организациям отслеживать жизненный цикл оборудования, управлять назначениями, планировать обслуживание, рассчитывать амортизацию и формировать подробные отчёты.
Отслеживание по QR
Автогенерация QR-кодов для каждого актива. Сканируйте любой камерой браузера.
Амортизация
3 метода: линейный, уменьшаемого остатка, производственный.
Пользовательские поля
Неограниченные пользовательские атрибуты — текст, дата, выпадающий список, файл, чекбокс.
Webhook'и
15 типов событий с HMAC-подписью и автоповтором.
Журнал аудита
Каждое изменение фиксируется с полным просмотрщиком diff.
Отчёты
8 отчётов с графиками, экспорт в Excel и PDF.
Требования к серверу
- PHP 8.2 или выше
- MySQL 5.7+ или MariaDB 10.3+
- Composer 2.x
- Node.js 18+ и npm 9+
- Веб-сервер: Apache или Nginx
Необходимые расширения PHP
- OpenSSL, PDO, PDO_MySQL, Mbstring, Tokenizer, XML, Ctype, JSON, GD, Fileinfo
Дисковое пространство
Минимум ~ 200 МБ. Зарезервируйте дополнительно место для фотографий активов и вложений документов.
Установка
Вариант A — Веб-установщик (Рекомендуется)
- Загрузите файлы проекта на ваш веб-сервер.
- Укажите document root домена на
public/. - Установите права:
storage/иbootstrap/cache/должны быть доступны для записи (chmod 775). - Скопируйте
.env.exampleв.envи выполнитеphp artisan key:generate. - Откройте
https://yourdomain.com/installв браузере. - Следуйте мастеру — Requirements → Database → Migrate → Admin Account → Done.
Вариант B — Установка через CLI
# 1. Установить зависимости
composer install --no-dev --optimize-autoloader
npm install
npm run build
# 2. Настроить окружение
cp .env.example .env
php artisan key:generate
# 3. Отредактировать .env для учётных данных БД
# DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD
# 4. Создать таблицы БД и заполнить начальные данные
php artisan migrate --seed
# 5. Создать symlink storage для загрузок
php artisan storage:link
# 6. Кэшировать конфиг для production
php artisan config:cache
php artisan route:cache
php artisan view:cache
# 7. Отметить как установленный
echo "Installed" > storage/installed.lock
public/. Для Apache включённый .htaccess обрабатывает перезапись URL. Для Nginx см. руководство по развёртыванию Laravel.
Wizard Step 2 — Database Configuration
When the wizard reaches Step 2, you must enter the MySQL connection details for the database you created in your hosting panel. The database must already exist (it can be empty — the next wizard step will create the tables).
| Field | Default / Example | Notes |
|---|---|---|
| Host | 127.0.0.1 | Works on 99% of shared hosts (Hostinger, cPanel, Plesk). Keep this default unless your hosting provides a custom MySQL hostname (managed DB services like AWS RDS, DigitalOcean Managed Database). |
| Port | 3306 | Standard MySQL port. Only change if your provider uses a non-standard port (rare). |
| Database name | uXXXXXX_assethub | The full name shown in your hosting panel. Most shared hosts prefix it with your user ID (e.g. Hostinger: u287094729_assethub). |
| Username | uXXXXXX_assethub | MySQL user with permissions on the database above. Do not use root — shared hosts don't allow it. |
| Password | (your DB password) | The password you set or copied when creating the MySQL user. Most hosts show it once on creation — use "View / Reset" if you didn't save it. |
Where to find these credentials by hosting panel
- Hostinger: hPanel → Databases → Management → click your database. The page shows name, username, and a "Show password" button.
- cPanel: cPanel → MySQL Databases. The database list shows names; users are listed below. Use "Change Password" if needed.
- Plesk: Plesk → Databases → click the database name. The detail page shows credentials and offers a password reset.
- DirectAdmin: DirectAdmin → MySQL Management → click the database. Credentials and password reset are on the database detail page.
- External / managed DB: AWS RDS, DigitalOcean Managed Database, etc. Use the custom hostname, port (often
3306but verify), DB name, user, and password from your cloud console. Make sure the server's IP is whitelisted in the DB firewall.
Common errors and how to fix them
| Error message | Cause and fix |
|---|---|
SQLSTATE[HY000] [1045] Access denied | Wrong username or password, or the user doesn't have access to this database. Double-check spelling (including the user prefix on shared hosts). Reset the password in the hosting panel if unsure. |
SQLSTATE[HY000] [1049] Unknown database | The database name is wrong, or you haven't created the database yet in your hosting panel. Create it first, then re-enter the exact name (including any prefix). |
SQLSTATE[HY000] [2002] Connection refused | The MySQL server can't be reached. Verify Host and Port. On shared hosts try localhost instead of 127.0.0.1 or vice versa. For managed DBs, make sure your server IP is whitelisted. |
SQLSTATE[42S02] Base table not found: sessions | Happens when SESSION_DRIVER=database or CACHE_STORE=database is set in .env before the tables exist. Edit .env and change both to file, save, then reload the wizard. You can switch back to database after install if you prefer. |
could not find driver | PHP pdo_mysql extension is missing or disabled. Enable it in your hosting panel (PHP Configuration → Extensions). On Hostinger: hPanel → Advanced → PHP Configuration → PHP Extensions tab. |
127.0.0.1 and 3306) — leave them as-is on shared hosting. You only need to type Database name, Username, and Password. Click Test & Save → to verify the connection and move to Step 3.
Localhost (Локальная разработка)
Краткое руководство по запуску AssetHub на вашем компьютере для тестирования или разработки перед деплоем в продакшн. Выберите среду, подходящую вашей операционной системе.
Вариант 1 — Laravel Herd (Рекомендуется, macOS и Windows)
Laravel Herd — официальная локальная среда от команды Laravel: бесплатная, нативная, без Docker. Включает PHP 8.2/8.3/8.4, Nginx и (в Herd Pro) MySQL/Redis.
- Скачайте и установите Laravel Herd с herd.laravel.com.
- Поместите папку проекта AssetHub в
~/Herd/(macOS) или%USERPROFILE%\Herd\(Windows). Herd автоматически создаст домен.test— напримерhttp://assethub.test. - Откройте Herd → Sites и подтвердите версию PHP 8.2 или 8.3. Правая кнопка по сайту → Secure, чтобы включить HTTPS (нужно для QR-сканера).
- Создайте базу MySQL. В Herd Pro используйте Services → MySQL → Open in TablePlus. Иначе установите MySQL Community или используйте SQLite (
DB_CONNECTION=sqlite,touch database/database.sqlite). - Скопируйте
.env.exampleв.env, заполните учётные данные БД и выполнитеphp artisan key:generateв корне проекта. - Откройте
http://assethub.test/installв браузере и следуйте мастеру установки.
Вариант 2 — XAMPP (Windows, macOS, Linux)
XAMPP упаковывает Apache, MySQL/MariaDB и PHP. Бесплатно и кроссплатформенно. Обязательно выберите версию с PHP 8.2 или новее.
- Скачайте XAMPP 8.2+ с apachefriends.org и установите.
- Скопируйте проект AssetHub в
C:\xampp\htdocs\AssetHub\(Windows) или/Applications/XAMPP/htdocs/AssetHub/(macOS). - Откройте XAMPP Control Panel и запустите Apache и MySQL. Если порты заняты, используйте Config → service.conf, чтобы переключить Apache на 8080.
- Перейдите на
http://localhost/phpmyadmin→ Создать → создайте БДassethubс сопоставлением utf8mb4. - В папке проекта: скопируйте
.env.exampleв.env, задайтеDB_DATABASE=assethub,DB_USERNAME=root, оставьтеDB_PASSWORDпустым (по умолчанию XAMPP). Выполнитеphp artisan key:generate. - Откройте
http://localhost/AssetHub/public/installдля запуска мастера установки.
/public/: создайте виртуальный хост в C:\xampp\apache\conf\extra\httpd-vhosts.conf, указав DocumentRoot на папку public/ проекта, затем добавьте 127.0.0.1 assethub.local в файл hosts.
Вариант 3 — Laragon (Windows)
Laragon — портативный Windows-стек, разработанный для Laravel: автоматические vhost, чистые URL, MySQL/MariaDB и встроенный HeidiSQL.
- Скачайте Laragon Full с laragon.org и установите.
- В Laragon: Меню → PHP → Version — переключите на PHP 8.2 или 8.3.
- Скопируйте проект AssetHub в
C:\laragon\www\AssetHub\. - Нажмите Start All. Laragon автоматически создаст vhost:
http://assethub.test(указывает на папкуpublic/). - Откройте HeidiSQL (встроен) → создайте базу
assethub. Учётные данные по умолчанию: пользовательroot, пароль пустой. - Отредактируйте
.envс учётными данными БД, выполнитеphp artisan key:generateи откройтеhttp://assethub.test/install.
Вариант 4 — Встроенный PHP-сервер (без веб-сервера)
Самый простой вариант: Laravel поставляется с artisan serve, который запускает разработческий PHP-сервер. Apache или Nginx не нужны. Лучше всего для быстрого тестирования.
# Установить зависимости и настроить
cd /path/to/AssetHub
composer install
cp .env.example .env
php artisan key:generate
# Запустить миграции и заполнить начальные данные
php artisan migrate --seed
# Запустить dev-сервер
php artisan serve
# Затем откройте: http://127.0.0.1:8000/install
Частые подводные камни localhost
QR-сканер не открывает камеру по http://
API камеры браузера требуют HTTPS, с одним исключением: http://localhost и http://127.0.0.1 считаются безопасными контекстами. Если открыть AssetHub по LAN IP (например http://192.168.1.10), камера будет отклонена. Для разработки используйте localhost или включите HTTPS через Herd / mkcert.
Permission denied на storage (macOS / Linux)
Если возникают ошибки записи, когда приложение логирует или кеширует, исправьте права: chmod -R 775 storage bootstrap/cache. На Windows обычно не требуется.
Порт уже занят
Если порт 8000 занят другим приложением, используйте другой:
php artisan serve --port=8001
Тестирование email локально
Реальный SMTP недоступен в большинстве localhost-настроек. Два безопасных варианта: (1) задайте MAIL_MAILER=log в .env — письма сохраняются в storage/logs/laravel.log вместо отправки; или (2) используйте Mailtrap / MailHog, чтобы перехватывать исходящую почту в фальшивый ящик.
MAIL_MAILER=log
# Все письма записываются в storage/logs/laravel.log
Frontend-ассеты (Vite / Tailwind)
Vue/Tailwind фронтенд AssetHub предварительно собран в пакете. Если вы редактируете Vue-компоненты или конфиг Tailwind, понадобится Node.js 18+:
npm install
npm run dev # Горячая перезагрузка во время разработки
npm run build # Production-сборка (выполнить перед деплоем)
Развёртывание на Hostinger Single (Shared Hosting)
Это рекомендуемый путь для пользователей без VPS или технического опыта. AssetHub полностью совместим с самым дешёвым тарифом Hostinger Single Web Hosting (~$2,99/мес). Без SSH, Composer и командной строки — Single включает нативные cron jobs, PHP 8.3 и бесплатный SSL.
Шаг 1 — Подготовка хостинга
- Войдите в Hostinger hPanel.
- Перейдите в Хостинг → Управление для вашего домена.
- Установите версию PHP на 8.2 или 8.3 через Дополнительно → Конфигурация PHP.
- Убедитесь, что эти расширения PHP включены (обычно по умолчанию):
- OpenSSL, PDO, PDO_MySQL, Mbstring, GD, Tokenizer, XML, Ctype, JSON, Fileinfo
Шаг 2 — Создание базы данных MySQL
- В hPanel перейдите в Базы данных → MySQL Databases.
- Нажмите Создать новую базу данных.
- Запишите эти 3 значения:
Имя базы данных— напр.u123_AssetHubИмя пользователя— напр.u123_adminПароль— автоматически сгенерированный, храните в безопасности
Шаг 3 — Загрузка файлов
- Перейдите в Файлы → File Manager в hPanel.
- Перейдите в
public_html/(это корень вашего домена). - Удалите любые дефолтные
index.htmlилиdefault.phpв этой папке. - Нажмите Загрузить файлы и загрузите весь
source.zipиз пакета.
Или загрузите содержимое папки/source/напрямую через FTP, если предпочитаете. - Если загрузили ZIP, правая кнопка → Распаковать. После распаковки все файлы должны быть в корне
public_html/. - Убедитесь, что
public_html/содержит:app/,public/,vendor/,.htaccess,index.php(вpublic/),.envи т. д.
.htaccess существует в корне public_html/. Он содержит правила переписывания URL. Если File Manager скрывает скрытые файлы, нажмите Настройки → Показать скрытые файлы.
Шаг 4 — Запуск установщика
- Откройте браузер и перейдите по
https://yourdomain.com/install. - Вы увидите AssetHub Installer.
- Шаг 1: Requirements — Все проверки должны быть пройдены (зелёные). Если какие-то не пройдены, свяжитесь с поддержкой Hostinger для включения недостающего PHP-расширения.
- Шаг 2: Database — Введите учётные данные из Шага 2 выше:
- Хост:
localhost - Порт:
3306 - База данных:
u123_AssetHub - Имя пользователя:
u123_admin - Пароль: (сгенерированный Hostinger)
- Хост:
- Шаг 3: Migrate — Нажмите "Run Migrations & Seed". Занимает ~10 секунд. Не обновляйте страницу.
- Шаг 4: Admin — Создайте учётную запись администратора. Используйте надёжный пароль.
- Готово! — Вы увидите Cron URL (сохраните!) и кнопку входа.
Шаг 5 — Настройка автоматических e-mail-уведомлений через Hostinger Cron
AssetHub использует планировщик Laravel для фоновых задач: уведомления о гарантии, напоминания об обслуживании, окончание документов, обновление амортизации и просроченные checkout. Настройте один cron job в hPanel, и Laravel решит, какую задачу когда запускать.
- В hPanel перейдите в Дополнительно → Cron Jobs.
- Нажмите Создать Cron job.
- Выберите тип: Custom (не "PHP" — нам нужно передать аргумент).
- Для команды введите (замените
uXXXXXXна ваше имя пользователя Hostinger):
Совет: откройте File Manager, найдите файл/usr/bin/php /home/uXXXXXX/public_html/artisan schedule:runartisan(корень проекта), правая кнопка → Свойства, чтобы скопировать полный путь. - Установите расписание на Каждую минуту — все пять полей (Минуты, Часы, День, Месяц, День недели) на
*. - Нажмите Сохранить.
Готово — AssetHub теперь автоматически отправляет напоминания о просроченных checkout, уведомления о обслуживании, окончании документов, гарантии и обновляет значения амортизации. Laravel внутренне планирует каждую задачу с правильной частотой (ежедневно 08:00, ежемесячно и т. д.).
public_html/public/? Не проблема — ваш код Laravel по-прежнему в корне public_html/, поэтому путь cron остаётся /home/uXXXX/public_html/artisan (не добавляйте /public/).
- Войдите как admin → Настройки → вкладка Система → скопируйте ваш Cron URL.
- Бесплатно зарегистрируйтесь на cron-job.org.
- Создайте cronjob, вставьте URL, установите Каждые 15 минут, сохраните.
Шаг 6 — Настройка e-mail (SMTP)
Hostinger предоставляет почтовые учётные записи с каждым тарифом. Чтобы использовать их для уведомлений AssetHub:
- В hPanel перейдите в Email → Почтовые ящики и создайте один (напр.
noreply@yourdomain.com). - Отредактируйте файл
.envвpublic_html/через File Manager:MAIL_MAILER=smtp MAIL_HOST=smtp.hostinger.com MAIL_PORT=587 MAIL_USERNAME=noreply@yourdomain.com MAIL_PASSWORD=your_email_password MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=noreply@yourdomain.com MAIL_FROM_NAME="Your Company Name" - Сохраните файл.
- Войдите в AssetHub → Настройки → вкладка Email → Отправить тестовое письмо. Если получили — готово.
Частые проблемы на Hostinger Single
"500 Internal Server Error" после загрузки
- Проверьте, что
.htaccessсуществует в корнеpublic_html/и содержит правила rewrite. - Проверьте, что версия PHP установлена на 8.2 или 8.3 в hPanel.
- Проверьте
storage/logs/laravel.logчерез File Manager для реальной ошибки.
"Permission denied" при загрузках
Hostinger обычно устанавливает правильные права, но если нет:
- Правая кнопка на
storage/в File Manager → Права → установите755рекурсивно. - То же для
bootstrap/cache/.
Сканер QR не открывает камеру
API камеры браузера требуют HTTPS. Hostinger предоставляет бесплатный SSL через Let's Encrypt — включите его в hPanel в SSL → Управление.
Запланированные письма не отправляются
- В hPanel → Cron Jobs → проверьте колонку Last run у вашей записи cron. Если пусто, cron не запускается — проверьте путь к artisan.
- Протестируйте команду вручную: откройте Terminal в hPanel (если доступен) и запустите команду cron. Если возникнет ошибка, сообщение укажет на проблему (не та версия PHP, не тот путь и т. д.).
- Проверьте, что SMTP правильно настроен (Настройки → Email → Отправить тест).
- Проверьте
storage/logs/laravel.logна ошибки планировщика.
Медленная производительность
Hostinger Single использует общие CPU/RAM. Если у вас в команде более 20 пользователей, рассмотрите:
- Обновление до Premium (~$3,99/мес) — более быстрые серверы, больше ресурсов, несколько баз данных.
- Или Business (~$5,99/мес) — выделенные ресурсы, ежедневные бэкапы, среда staging.
Конфигурация
Файл .env
| Ключ | Описание | Пример |
|---|---|---|
APP_NAME | Имя приложения, отображаемое в заголовке | AssetHub |
APP_URL | Публичный URL вашей установки | https://assets.example.com |
APP_DEBUG | Установите false на production | false |
DB_* | Параметры подключения к БД | mysql, 127.0.0.1, 3306, ... |
MAIL_MAILER | Драйвер почты | smtp, log, mailgun |
MAIL_HOST | Хост SMTP-сервера | smtp.gmail.com |
MAIL_PORT | Порт SMTP | 587 |
MAIL_USERNAME | Имя пользователя SMTP | your@email.com |
MAIL_PASSWORD | Пароль SMTP или app token | ********** |
MAIL_FROM_ADDRESS | Адрес From по умолчанию | noreply@example.com |
Настройки в приложении
Большинство не чувствительных опций настраиваются из Админ → Настройки:
- Общие: имя/email/телефон компании, префикс asset tag
- Email: отправить тестовое письмо для проверки SMTP
- Уведомления: пороги предупреждения гарантии, окно напоминания об обслуживании
- Локализация: часовой пояс, формат даты, валюта
Поддержка нескольких языков
AssetHub поставляется с 10 языками "из коробки", включая арабский с RTL. Пользователи переключают язык через выпадающее меню флагов в правом верхнем углу.
Встроенные языки
| Код | Язык | Направление |
|---|---|---|
en | English (default) | LTR |
vi | Tiếng Việt | LTR |
es | Español | LTR |
fr | Français | LTR |
de | Deutsch | LTR |
zh | 简体中文 | LTR |
ja | 日本語 | LTR |
pt-BR | Português (Brasil) | LTR |
ru | Русский | LTR |
ar | العربية | RTL |
Как переключить язык
- Нажмите на иконку флага в правом верхнем углу, чтобы открыть меню.
- Выберите ваш язык из списка.
- Страница перезагрузится; все метки UI, даты и форматы валют переключатся.
- Ваш выбор сохраняется как в вашей учётной записи, так и в cookie (1 год).
/locale/{code}, что работает только при запущенном PHP-сервере. Всегда заходите через ваш реальный домен (продакшен) или http://localhost:8000 (разработка с php artisan serve). А вот файлы документации, такие как этот, полностью автономны и могут быть открыты напрямую.
Добавление пользовательского языка (админ)
Админ → Настройки → Переводы:
- Нажмите "Добавить локаль" — укажите код (например,
thдля тайского), отображаемое имя, родное имя, флаг, направление и базовую локаль для копирования переводов. - Редактируйте переводы прямо в редакторе переводов или через импорт/экспорт CSV.
- Переводы из БД автоматически переопределяют файловые переводы.
Локаль по умолчанию для пользователя
У каждого пользователя есть колонка locale. Email-уведомления автоматически отправляются на предпочитаемом языке получателя благодаря контракту HasLocalePreference Laravel.
Список функций
Управление активами
- Автогенерация asset tag
- Несколько изображений на актив
- Генерация QR-кода
- Отслеживание статуса и состояния
- Массовый импорт/экспорт
- Клонирование актива
Рабочие процессы
- Назначить / Вернуть / Передать
- Запросы с утверждением
- Бронирование Check-in / Check-out
- Обнаружение конфликтов
Обслуживание
- Планирование профилактики/корректирующего
- Календарный вид
- Автопланирование следующего
- Отслеживание затрат
- E-mail-напоминания
Документы
- Прикреплять счета, руководства
- Inline-просмотр
- Уведомления об окончании
- Различные типы документов
Амортизация
- 3 метода расчёта
- Автообновление стоимости
- График графика
- Годовой свод
Отчёты
- 8 типов отчётов
- Экспорт Excel + PDF
- Графики и дашборды
- Фильтры по дате
Пользователи и роли
AssetHub поставляется с 5 предустановленными ролями:
| Роль | Возможности |
|---|---|
| Admin | Полный доступ к системе — пользователи, отделы, настройки, журнал аудита, webhook'и, переводы |
| IT-менеджер | Управление активами, категориями, обслуживанием, запросами; утверждение передач; просмотр отчётов и амортизации |
| Бухгалтер | Управление активами и амортизацией, проведение инвентаризаций, утверждение передач, полный доступ к отчётам (фокус финансовый) |
| Супервайзер | Утверждение запросов отдела, управление checkout, участие в инвентаризациях, просмотр отчётов |
| Сотрудник | Просмотр назначенных активов, создание запросов, управление своими checkout |
Права хранятся как роли Spatie — администраторы могут тонко настраивать каждое право через БД.
Управление активами
Создание активов
- Перейдите в Активы → Новый актив.
- Заполните имя, категорию, бренд, модель, серийный номер.
- Добавьте дату покупки и цену (требуется для амортизации).
- Загрузите изображения (поддерживается несколько файлов, максимум 5 МБ каждый).
- Сохраните — asset tag и QR-код генерируются автоматически.
Формат Asset Tag
По умолчанию: {PREFIX}-{YEAR}-{NNNN}, напр. AS-2026-0001. Настраивается через Настройки → Общие → Префикс Asset Tag.
Массовый импорт
- Нажмите Импорт на странице Активов.
- Скачайте шаблон Excel.
- Заполните данные — обязательные колонки:
name,category_name. - Загрузите файл.
QR-коды
Каждый актив автоматически получает QR-код при создании. QR кодирует URL актива, поэтому сканирование сразу ведёт пользователя на страницу деталей актива.
Печать этикеток
- Одиночная этикетка: нажмите иконку принтера в любой строке актива.
- Формат PDF: A4, 2 этикетки в строке, включает asset tag, имя, бренд, серийный номер.
Сканирование
Нажмите Сканировать QR на странице Активов. Разрешите доступ к камере. Сканер использует html5-qrcode и работает в любом современном браузере. Примечание: доступ к камере требует HTTPS или localhost.
Рабочие процессы
Назначение актива
- Откройте страницу деталей актива.
- Нажмите Назначить (видно, если актив доступен).
- Выберите пользователя, опциональную дату возврата, заметки.
- Отправьте — создаётся транзакция и отправляется e-mail-уведомление.
Запросы активов
Сотрудники могут отправлять запросы на нужные активы. У запросов 4 статуса: pending → approved → fulfilled или rejected. Письма утверждения отправляются автоматически.
Check-in / Check-out
Для общих активов (камеры, проекторы, транспорт). У бронирований есть диапазоны дат; система предотвращает пересекающиеся checkout. Календарный вид показывает все бронирования с одного взгляда.
Амортизация
AssetHub рассчитывает амортизацию активов одним из трёх методов:
| Метод | Формула | Применение |
|---|---|---|
| Линейный | (Cost - Salvage) / Useful Life | Самый распространённый; равномерная годовая амортизация |
| Уменьшаемого остатка | 2 / Useful Life × Book Value | Ускоренный; для налоговых целей |
| Производственный | По использованию | Производственное оборудование |
Значения по умолчанию наследуются от категории актива. Записи графика генерируются ежемесячно. current_value актива автоматически обновляется 1-го числа каждого месяца.
Пользовательские поля
Админ → Пользовательские поля позволяет добавить неограниченное число пользовательских атрибутов к активам:
- Типы: текст, число, дата, выпадающий список, текстовая область, файл, чекбокс
- Область: применить ко всем категориям или к конкретной
- Перестановка: перетаскивание за ручку
- Обязательные поля проверяются при сохранении актива
Отчёты
Восемь встроенных отчётов, доступных из меню Отчёты:
- Сводка активов — итоги по статусу, состоянию, категории, отделу
- Амортизация — потеря стоимости по категории, наиболее амортизированные активы
- Транзакции — активность назначения, возврата, передачи во времени
- Стоимость обслуживания — расходы по месяцу, категории, типу
- Окончание гарантии — активы, требующие внимания через 30/60/180 дней
- Активы по отделам — распределение активов и использование бюджета по отделам
- Активы по источнику — распределение по закупке, проекту, пожертвованию, передаче
- Сводка инвентаризации — расхождения по периодическим циклам аудита
Все отчёты поддерживают экспорт в Excel и PDF через кнопки в заголовке страницы.
Webhook'и
AssetHub может уведомлять внешние сервисы о ключевых событиях.
Доступные события
asset.created,asset.updated,asset.deletedasset.assigned,asset.returned,asset.transferredrequest.created,request.approved,request.rejected,request.fulfilledmaintenance.scheduled,maintenance.started,maintenance.completedcheckout.created,checkout.returned
Формат Payload
{
"event": "asset.assigned",
"timestamp": "2026-05-05T08:00:00+00:00",
"data": {
"asset_id": 1,
"asset_tag": "AS-2026-0001",
"asset_name": "HP EliteDesk 800",
"to_user_id": 4,
"transaction_id": 12
}
}
Проверка подписи
Если настроен secret, запросы содержат заголовок X-AssetHub-Signature с HMAC-SHA256 тела. Проверяйте на вашей стороне:
$expected = hash_hmac('sha256', $rawBody, $secret);
if (hash_equals($expected, $request->header('X-AssetHub-Signature'))) {
// валидно
}
Политика повторов
Неудачные доставки повторяются 3 раза с задержкой 200 мс. После 10 последовательных сбоев webhook автоматически отключается.
Запланированные задачи
AssetHub использует планировщик Laravel для фоновых задач. Вам нужна только одна запись cron — Laravel внутренне распределяет каждую задачу в нужное время.
Hostinger / Shared hosting (UI Cron Jobs в hPanel)
См. раздел Настройка Hostinger → Шаг 5 для инструкций со скриншотами. Кратко: Дополнительно → Cron Jobs → Custom, команда:
/usr/bin/php /home/uXXXXXX/public_html/artisan schedule:run
Расписание: каждую минуту (* во всех пяти полях).
VPS / выделенный сервер (crontab)
Запустите crontab -e от имени веб-пользователя (часто www-data) и добавьте:
* * * * * cd /path/to/AssetHub && php artisan schedule:run >> /dev/null 2>&1
Резервный вариант: внешний URL-пингер
Если у вашего хостинга вообще нет cron, используйте Cron URL в приложении (Настройки → вкладка Система) с cron-job.org (бесплатно, каждые 15 мин).
Задачи, выполняемые автоматически
| Время | Команда | Назначение |
|---|---|---|
| Ежедневно 08:00 | send-overdue-checkout-alerts | E-mail-напоминания о просроченных checkout |
| Ежедневно 08:30 | send-maintenance-reminders | Напоминания о предстоящем обслуживании |
| Ежедневно 09:00 | send-document-expiry-alerts | Документы, истекающие через 30/14/7/1 дней |
| Ежедневно 09:30 | send-warranty-alerts | Уведомления об окончании гарантии + страховки |
| Ежедневно 10:00 | assethub:send-depreciation-end-alerts | Уведомления, когда активы достигают конца срока службы |
| Ежедневно 10:30 | send-inventory-audit-reminders | Напоминания для активных инвентаризаций |
| Ежемесячно 1-го числа, 02:00 | update-asset-values | Обновить current_value актива из амортизации |
Устранение неполадок
"Permission denied" на storage
chmod -R 775 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache
Сканер QR не открывает камеру
API камеры браузера требуют HTTPS. Установите SSL-сертификат или используйте localhost для тестирования.
Письма не приходят
Проверьте storage/logs/laravel.log на ошибки. Используйте Настройки → Email → Отправить тестовое письмо для проверки учётных данных SMTP. Убедитесь, что ваш SMTP-сервер разрешает отправляющий IP.
Сброс установки
Удалите storage/installed.lock и зайдите снова на /install. Существующие данные будут стёрты, если вы перезапустите миграции.
Производительность — медленный список активов
Запустите php artisan optimize для кэширования config, routes, views. Убедитесь, что у MySQL есть индексы на assets.asset_tag, assets.serial_number, assets.status (создаются автоматически миграциями).
Журнал изменений
v1.0.0 — Первоначальный релиз (2026-05)
- CRUD активов с автогенерацией QR-кода
- 5 пользовательских ролей (Admin, IT-менеджер, Бухгалтер, Супервайзер, Сотрудник) с детальными правами
- Отслеживание Источника актива (централизованная закупка, децентрализованная закупка, инвестиционный проект, пожертвование, внутренняя передача)
- Процессы назначения, возврата с e-mail-уведомлениями
- Процесс утверждения передач (pending → approved/rejected) с контролем прав
- Процесс утверждения запросов активов
- Check-in/check-out с календарным видом
- Планирование обслуживания с автообновлением
- Вложения документов с уведомлениями об окончании
- Амортизация с 3 методами расчёта + уведомления о конце срока службы
- Модуль инвентаризации — периодическая инвентаризация с отслеживанием расхождений
- Пользовательские поля с 7 типами ввода и drag-drop сортировкой
- 8 отчётов с графиками, экспорт в Excel и PDF (вкл. Активы по источнику, Сводка инвентаризации)
- Журнал аудита через Spatie Activitylog с просмотрщиком diff
- Webhook'и с HMAC-подписью и автоповтором
- Многоязычный UI: 10 локалей (en, vi, es, fr, de, zh, ja, pt-BR, ru, ar с RTL)
- UI настроек для компании, e-mail, уведомлений, локализации, переводов
- Веб-мастер установки
- Тёмный режим с палитрой emerald-teal
Благодарности
Используемые open-source библиотеки
- Laravel 11 — MIT
- Vue 3 — MIT
- Inertia.js — MIT
- Tailwind CSS — MIT
- Spatie Permission, Media Library, Activitylog — MIT
- Phosphor Icons — MIT (duotone weight)
- ApexCharts — MIT
- html5-qrcode — Apache 2.0
- Simple QrCode — MIT
- Laravel Excel — MIT
- Laravel DomPDF — MIT