AssetHub Документация

Часто задаваемые вопросы

Можно ли запустить 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, ежемесячно и т. д.). Для cPanel настройте в Advanced → Cron Jobs. Для Hostinger используйте hPanel → Advanced → Cron Jobs. Смотрите Настройка cPanel → Шаг 7 или Настройка Hostinger → Шаг 5. Если на вашем хостинге нет cron, используйте Cron URL приложения с бесплатным сервисом cron-job.org.

Какие методы амортизации поддерживаются?

Три метода: Линейный (равномерная годовая амортизация), Уменьшаемого остатка (ускоренная, обычно для налоговых целей) и Производственный (по использованию, для производственного оборудования). Стоимость активов автоматически обновляется 1-го числа каждого месяца.

Работает ли сканер QR на телефонах?

Да — он использует камеру браузера через html5-qrcode и работает в любом современном браузере телефона/планшета/ПК. Единственное требование — HTTPS. AutoSSL в cPanel и Let's Encrypt SSL в Hostinger работают сразу из коробки.

Можно ли добавить свои поля без кода?

Да. Админ → Пользовательские поля позволяет добавлять неограниченное число атрибутов (текст, число, дата, выпадающий список, текстовая область, файл, чекбокс), ограничивать их конкретными категориями, отмечать как обязательные и переупорядочивать перетаскиванием — всё из интерфейса.

Сколько языков поддерживает AssetHub?

11 locale из коробки: English, Vietnamese, Spanish, French, German, Chinese, Japanese, Portuguese (BR), Russian, Arabic (с полной поддержкой RTL) и Hindi (हिन्दी). Админы управляют переводами в Administration → Translations (требуется право manage translations).

Можно ли установить AssetHub на shared hosting cPanel?

Да — AssetHub работает на любом стандартном тарифе shared hosting cPanel с PHP 8.2+, MySQL и Cron Jobs. Composer и Node.js на сервере не требуются — пакет поставляется в готовом виде. Многие хосты cPanel не предоставляют веб-Terminal; это нормально. Смотрите раздел Настройка cPanel для полного пошагового руководства (включая генерацию APP_KEY без Terminal).

Как изменить брендинг AssetHub (страница входа, заголовок вкладки и цвета)?

AssetHub можно полностью ребрендировать из панели администратора — без правки кода и npm run build. С v3.1.0 логотип, footer и badge входа следуют Settings → Branding → App Name. v4.0 добавляет заголовок вкладки браузера в реальном времени и вкладку Appearance для цветов всего приложения в светлой и тёмной теме.

Полный чеклист ребрендинга: обновите App Name (логотип, вход, заголовок вкладки) → отредактируйте auth.login_subtitle для каждого языка → настройте цвета в Settings → Appearance.

Краткая справка:

ЭлементПримерКак изменить
Top-left logo & wordmarkVimoticFARSettings → Branding → App Name
Login subtitleEnter your credentials to access AssetHubAdministration → Translationsauth.login_subtitle
Footer copyright© 2026 VimoticFARSettings → Branding → App Name
Right panel badgeVIMOTICFARSettings → Branding → App Name
Browser page title (tab)YourAppNameSettings → Branding → App Name (v4.0+)
App colors (buttons, sidebar, badges…)Custom green / blue paletteSettings → Appearance (v4.0+)

1. Logo and wordmark:

  1. Sign in as an administrator.
  2. Go to Settings → Branding.
  3. Update App Name (and optionally upload a logo).
  4. Save.

This name appears on the login page (logo, footer, badge), in the sidebar, and — since v4.0 — in the browser tab title on every page.

2. Browser page title (v4.0):

The text shown in the browser tab follows Settings → Branding → App Name at runtime. Change App Name, save, and refresh — no .env edit or rebuild needed. The title updates on the login screen and after sign-in.

3. Login subtitle: the line below the main heading uses the translation key auth.login_subtitle (not App Name).

  • In the app (recommended): Administration → Translations → select language → group auth → key login_subtitle → replace AssetHub with your app name → Save. Repeat for each language.
  • In code: edit lang/{locale}/auth.php — e.g. 'login_subtitle' => 'Enter your credentials to access YourAppName',

4. Footer and right-panel badge: since v3.1.0, the footer (© {year} …) and the uppercase badge on the right column use the same App Name as the logo. Change it once under Settings → Branding and refresh the login page.

5. App colors — Appearance (v4.0):

The Appearance tab lets you change the color scheme for the entire application — buttons, sidebar highlights, badges, links, and themed text — separately for light and dark mode. Colors are saved to the database.

  • Open: Sidebar → SettingsAppearance (requires manage settings permission).
  • Color groups: Brand & Accent (primary UI), Success / Warning / Danger / Info (status badges), Primary / Secondary / Muted / Link (text).
  • Light & dark: use the Editing: Light / Dark toggle — configure both if your team uses dark mode. Live Preview on the right.
  • Save: click Save appearance to apply app-wide. Reset to defaults restores AssetHub's built-in palette (save afterward to persist).

Branding vs Appearance: Branding = app name, logo, page title. Appearance = colors only. For a complete visual rebrand, update both tabs.

Notes:

  • Changing App Name does not update translation strings — edit auth.login_subtitle (and other auth.* keys) per language.
  • Translation overrides in Administration → Translations are stored in the database and survive app updates.
  • The login page right column (headline, features) uses other auth.* keys — edit them under the same auth group if needed.
  • If colors do not update after saving Appearance, hard-refresh (Ctrl+F5) and confirm you are editing the correct light/dark palette.
  • After upgrading from an older package, upload the full current source/ files (including pre-built public/build/) if branding features are missing.

Обзор

AssetHub — полноценная система управления активами на Laravel 11, Vue 3 и Tailwind CSS. Версия 3.0 добавляет полноценный Translation Editor, пользовательские locale, CSV import/export и эффективную локализацию часового пояса/валюты — поверх v2: пакетное/лотовое отслеживание, распределения, Disposals и публичные QR-страницы передачи.

Отслеживание по QR

Автогенерация QR-кодов для каждого актива. Сканируйте любой камерой браузера.

Амортизация

3 метода: линейный, уменьшаемого остатка, производственный.

Пользовательские поля

Неограниченные пользовательские атрибуты — текст, дата, выпадающий список, файл, чекбокс.

Webhook'и

15 типов событий с HMAC-подписью и автоповтором.

Журнал аудита

Каждое изменение фиксируется с полным просмотрщиком diff.

Отчёты

12 отчётов с графиками, экспортом в 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 — Веб-установщик (Рекомендуется)

  1. Загрузите файлы проекта на ваш веб-сервер.
  2. Укажите document root домена на public/.
  3. Установите права: storage/ и bootstrap/cache/ должны быть доступны для записи (chmod 775).
  4. Скопируйте .env.example в .env и задайте APP_KEY (выполните php artisan key:generate при наличии SSH/Terminal, или смотрите Настройка cPanel → Шаг 5 для альтернатив через File Manager).
  5. Откройте https://yourdomain.com/install в браузере.
  6. Следуйте мастеру — 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
Настройка веб-сервера: Document root должен указывать на каталог public/. Для Apache включённый .htaccess обрабатывает перезапись URL. Для Nginx см. руководство по развёртыванию Laravel.

Шаг мастера 2 — Настройка базы данных

Когда мастер дойдёт до шага 2, введите данные подключения MySQL для базы, созданной в панели хостинга. База должна уже существовать (может быть пустой — на следующем шаге мастера будут созданы таблицы).

ПолеПо умолчанию / ПримерПримечания
Host127.0.0.1Работает на 99% shared hosting (Hostinger, cPanel, Plesk). Оставьте значение по умолчанию, если хостинг не предоставляет собственный hostname MySQL (managed DB: AWS RDS, DigitalOcean Managed Database и т. п.).
Port3306Стандартный порт MySQL. Меняйте только если провайдер использует нестандартный порт (редко).
Имя базы данныхuXXXXXX_assethubПолное имя в панели хостинга. На большинстве shared hosting к имени добавляется префикс user ID (напр. Hostinger: u287094729_assethub).
Имя пользователяuXXXXXX_assethubПользователь MySQL с правами на указанную базу. Не используйте root — на shared hosting это запрещено.
Пароль(ваш пароль БД)Пароль, заданный или скопированный при создании пользователя MySQL. Большинство хостингов показывают его один раз при создании — используйте «View / Reset», если не сохранили.

Где найти эти учётные данные в панели хостинга

  • Hostinger: hPanel → Databases → Management → нажмите на вашу базу данных. На странице отображаются имя, имя пользователя и кнопка «Show password».
  • cPanel: cPanel → MySQL Databases. Список баз данных показывает имена; пользователи перечислены ниже. При необходимости используйте «Change Password».
  • Plesk: Plesk → Databases → нажмите имя базы данных. На странице деталей — учётные данные и сброс пароля.
  • DirectAdmin: DirectAdmin → MySQL Management → нажмите на базу данных. На странице деталей — учётные данные и сброс пароля.
  • Внешняя / managed БД: AWS RDS, DigitalOcean Managed Database и т. п. Используйте пользовательский hostname, порт (часто 3306, но проверьте), имя БД, пользователя и пароль из облачной консоли. Убедитесь, что IP сервера в whitelist файрвола БД.

Типичные ошибки и способы исправления

Сообщение об ошибкеПричина и решение
SQLSTATE[HY000] [1045] Access deniedНеверное имя пользователя или пароль, либо у пользователя нет доступа к этой базе данных. Перепроверьте написание (включая префикс пользователя на shared hosting). Сбросьте пароль в панели хостинга, если не уверены.
SQLSTATE[HY000] [1049] Unknown databaseНеверное имя базы данных или вы ещё не создали её в панели хостинга. Сначала создайте базу, затем введите точное имя (включая префикс).
SQLSTATE[HY000] [2002] Connection refusedСервер MySQL недоступен. Проверьте Host и Port. На shared hosting попробуйте localhost вместо 127.0.0.1 или наоборот. Для managed DB убедитесь, что IP сервера внесён в whitelist.
SQLSTATE[42S02] Base table not found: sessionsВозникает, когда в .env заданы SESSION_DRIVER=database или CACHE_STORE=database до создания таблиц. Отредактируйте .env и измените оба значения на file, сохраните и перезагрузите мастер. После установки можно вернуть database, если нужно.
could not find driverРасширение PHP pdo_mysql отсутствует или отключено. Включите его в панели хостинга (Конфигурация PHP → Расширения). На cPanel: MultiPHP INI Editor → Расширения или Select PHP Version → Расширения. На Hostinger: hPanel → Advanced → PHP Configuration → вкладка PHP Extensions.
Совет: поля Host и Port предзаполнены наиболее распространёнными значениями (127.0.0.1 и 3306) — на shared hosting оставьте как есть. Нужно ввести только Database name, Username и Password. Нажмите Test & Save →, чтобы проверить подключение и перейти к шагу 3.

Localhost (Локальная разработка)

Краткое руководство по запуску AssetHub на вашем компьютере для тестирования или разработки перед деплоем в продакшн. Выберите среду, подходящую вашей операционной системе.

Рекомендуется: Laravel Herd — самый быстрый путь на macOS и Windows: без Docker, без ручной настройки Apache/MySQL. XAMPP и Laragon — хорошие бесплатные альтернативы, если вы предпочитаете традиционный стек.

Вариант 1 — Laravel Herd (Рекомендуется, macOS и Windows)

Laravel Herd — официальная локальная среда от команды Laravel: бесплатная, нативная, без Docker. Включает PHP 8.2/8.3/8.4, Nginx и (в Herd Pro) MySQL/Redis.

  1. Скачайте и установите Laravel Herd с herd.laravel.com.
  2. Поместите папку проекта AssetHub в ~/Herd/ (macOS) или %USERPROFILE%\Herd\ (Windows). Herd автоматически создаст домен .test — например http://assethub.test.
  3. Откройте Herd → Sites и подтвердите версию PHP 8.2 или 8.3. Правая кнопка по сайту → Secure, чтобы включить HTTPS (нужно для QR-сканера).
  4. Создайте базу MySQL. В Herd Pro используйте Services → MySQL → Open in TablePlus. Иначе установите MySQL Community или используйте SQLite (DB_CONNECTION=sqlite, touch database/database.sqlite).
  5. Скопируйте .env.example в .env, заполните учётные данные БД и выполните php artisan key:generate в корне проекта.
  6. Откройте http://assethub.test/install в браузере и следуйте мастеру установки.

Вариант 2 — XAMPP (Windows, macOS, Linux)

XAMPP упаковывает Apache, MySQL/MariaDB и PHP. Бесплатно и кроссплатформенно. Обязательно выберите версию с PHP 8.2 или новее.

  1. Скачайте XAMPP 8.2+ с apachefriends.org и установите.
  2. Скопируйте проект AssetHub в C:\xampp\htdocs\AssetHub\ (Windows) или /Applications/XAMPP/htdocs/AssetHub/ (macOS).
  3. Откройте XAMPP Control Panel и запустите Apache и MySQL. Если порты заняты, используйте Config → service.conf, чтобы переключить Apache на 8080.
  4. Перейдите на http://localhost/phpmyadminСоздать → создайте БД assethub с сопоставлением utf8mb4.
  5. В папке проекта: скопируйте .env.example в .env, задайте DB_DATABASE=assethub, DB_USERNAME=root, оставьте DB_PASSWORD пустым (по умолчанию XAMPP). Выполните php artisan key:generate.
  6. Откройте http://localhost/AssetHub/public/install для запуска мастера установки.
Чистые URL без /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.

  1. Скачайте Laragon Full с laragon.org и установите.
  2. В Laragon: Меню → PHP → Version — переключите на PHP 8.2 или 8.3.
  3. Скопируйте проект AssetHub в C:\laragon\www\AssetHub\.
  4. Нажмите Start All. Laragon автоматически создаст vhost: http://assethub.test (указывает на папку public/).
  5. Откройте HeidiSQL (встроен) → создайте базу assethub. Учётные данные по умолчанию: пользователь root, пароль пустой.
  6. Отредактируйте .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.

Протестировано на: тарифах Hostinger Single, Premium, Business (PHP 8.2+, MySQL 5.7+, нативные Cron Jobs включены во всех тарифах).

Шаг 1 — Подготовка хостинга

  1. Войдите в Hostinger hPanel.
  2. Перейдите в Хостинг → Управление для вашего домена.
  3. Установите версию PHP на 8.2 или 8.3 через Дополнительно → Конфигурация PHP.
  4. Убедитесь, что эти расширения PHP включены (обычно по умолчанию):
    • OpenSSL, PDO, PDO_MySQL, Mbstring, GD, Tokenizer, XML, Ctype, JSON, Fileinfo

Шаг 2 — Создание базы данных MySQL

  1. В hPanel перейдите в Базы данных → MySQL Databases.
  2. Нажмите Создать новую базу данных.
  3. Запишите эти 3 значения:
    • Имя базы данных — напр. u123_AssetHub
    • Имя пользователя — напр. u123_admin
    • Пароль — автоматически сгенерированный, храните в безопасности

Шаг 3 — Загрузка файлов

  1. Перейдите в Файлы → File Manager в hPanel.
  2. Перейдите в public_html/ (это корень вашего домена).
  3. Удалите любые дефолтные index.html или default.php в этой папке.
  4. Нажмите Загрузить файлы и загрузите весь source.zip из пакета.
    Или загрузите содержимое папки /source/ напрямую через FTP, если предпочитаете.
  5. Если загрузили ZIP, правая кнопка → Распаковать. После распаковки все файлы должны быть в корне public_html/.
  6. Убедитесь, что public_html/ содержит: app/, public/, vendor/, .htaccess, index.phppublic/), .env и т. д.
Важно: Убедитесь, что файл .htaccess существует в корне public_html/. Он содержит правила переписывания URL. Если File Manager скрывает скрытые файлы, нажмите Настройки → Показать скрытые файлы.

Шаг 4 — Запуск установщика

  1. Откройте браузер и перейдите по https://yourdomain.com/install.
  2. Вы увидите AssetHub Installer.
  3. Шаг 1: Requirements — Все проверки должны быть пройдены (зелёные). Если какие-то не пройдены, свяжитесь с поддержкой Hostinger для включения недостающего PHP-расширения.
  4. Шаг 2: Database — Введите учётные данные из Шага 2 выше:
    • Хост: localhost
    • Порт: 3306
    • База данных: u123_AssetHub
    • Имя пользователя: u123_admin
    • Пароль: (сгенерированный Hostinger)
  5. Шаг 3: Migrate — Нажмите "Run Migrations & Seed". Занимает ~10 секунд. Не обновляйте страницу.
  6. Шаг 4: Admin — Создайте учётную запись администратора. Используйте надёжный пароль.
  7. Готово! — Вы увидите Cron URL (сохраните!) и кнопку входа.

Шаг 5 — Настройка автоматических e-mail-уведомлений через Hostinger Cron

AssetHub использует планировщик Laravel для фоновых задач: уведомления о гарантии, напоминания об обслуживании, окончание документов, обновление амортизации и просроченные checkout. Настройте один cron job в hPanel, и Laravel решит, какую задачу когда запускать.

  1. В hPanel перейдите в Дополнительно → Cron Jobs.
  2. Нажмите Создать Cron job.
  3. Выберите тип: Custom (не "PHP" — нам нужно передать аргумент).
  4. Для команды введите (замените uXXXXXX на ваше имя пользователя Hostinger):
    /usr/bin/php /home/uXXXXXX/public_html/artisan schedule:run
    Совет: откройте File Manager, найдите файл artisan (корень проекта), правая кнопка → Свойства, чтобы скопировать полный путь.
  5. Установите расписание на Каждую минуту — все пять полей (Минуты, Часы, День, Месяц, День недели) на *.
  6. Нажмите Сохранить.

Готово — AssetHub теперь автоматически отправляет напоминания о просроченных checkout, уведомления о обслуживании, окончании документов, гарантии и обновляет значения амортизации. Laravel внутренне планирует каждую задачу с правильной частотой (ежедневно 08:00, ежемесячно и т. д.).

Document root установлен на public_html/public/? Не проблема — ваш код Laravel по-прежнему в корне public_html/, поэтому путь cron остаётся /home/uXXXX/public_html/artisan (не добавляйте /public/).
Резервный вариант для хостингов без cron: Если вы не на Hostinger или ваш провайдер не поддерживает cron jobs, AssetHub также предоставляет URL для запуска через webhook.
  1. Войдите как admin → Настройки → вкладка Система → скопируйте ваш Cron URL.
  2. Бесплатно зарегистрируйтесь на cron-job.org.
  3. Создайте cronjob, вставьте URL, установите Каждые 15 минут, сохраните.

Шаг 6 — Настройка e-mail (SMTP)

Hostinger предоставляет почтовые учётные записи с каждым тарифом. Чтобы использовать их для уведомлений AssetHub:

  1. В hPanel перейдите в Email → Почтовые ящики и создайте один (напр. noreply@yourdomain.com).
  2. Отредактируйте файл .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"
  3. Сохраните файл.
  4. Войдите в AssetHub → Настройки → вкладка Email → Отправить тестовое письмо. Если получили — готово.
Ограничения SMTP на Single: Hostinger Single позволяет ~100 исходящих писем в час. Для больших развёртываний используйте специализированных провайдеров вроде SendGrid, Mailgun или Postmark (с бесплатными тарифами).

Частые проблемы на 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.

Развёртывание на cPanel (Shared Hosting)

Это руководство охватывает стандартный shared hosting cPanel (Namecheap, Bluehost, GoDaddy и большинство бюджетных хостингов). AssetHub поставляется с vendor/ и заранее собранными frontend-ассетами — Composer, npm и веб-Terminal не требуются. Если в вашем cPanel нет Terminal, используйте SSH Access или варианты работы через File Manager ниже.

Протестировано на: cPanel 110+ с PHP 8.2/8.3, MySQL 5.7+/MariaDB 10.3+, Apache и нативными Cron Jobs. Домашний каталог обычно /home/CPANELUSER/ — проверьте боковую панель в cPanel в разделе Общая информация.

Шаг 1 — Установить версию PHP и расширения

  1. Войдите в cPanel.
  2. Откройте MultiPHP Manager (или Select PHP Version) и задайте домену PHP 8.2 или 8.3.
  3. Откройте MultiPHP INI Editor или PHP Extensions и убедитесь, что включены:
    • OpenSSL, PDO, PDO_MySQL, Mbstring, GD, Tokenizer, XML, Ctype, JSON, Fileinfo
  4. Если расширение отсутствует, включите его в списке расширений или обратитесь в поддержку хостинга.

Шаг 2 — Включить SSL (HTTPS)

  1. Перейдите в SSL/TLS Status (или Let's Encrypt SSL / AutoSSL).
  2. Запустите AutoSSL или установите бесплатный сертификат для вашего домена.
  3. HTTPS обязателен для доступа браузерного QR-сканера к камере.
Совет: Подождите несколько минут после включения SSL, затем откройте https://yourdomain.com, чтобы убедиться, что значок замка появился.

Шаг 3 — Создать базу данных MySQL и пользователя

  1. Откройте Manage My Databases (в разделе Databases).
  2. В разделе Create New Database введите имя (напр. assethub) и нажмите Create. cPanel автоматически добавит префикс вашего аккаунта — полное имя будет выглядеть как cpaneluser_assethub.
  3. В разделе MySQL Users создайте пользователя с надёжным паролем. Скопируйте полное имя пользователя с префиксом.
  4. В разделе Add User To Database выберите пользователя и базу данных, нажмите Add, затем выдайте ALL PRIVILEGES. Этот шаг легко пропустить — без него вы получите ошибки Access denied (1045).
  5. Запишите эти три значения точно так, как они показаны в cPanel:
    • Имя базы данных — напр. u123_AssetHub
    • Имя пользователя — напр. u123_admin
    • Пароль — автоматически сгенерированный, храните в безопасности

Шаг 4 — Загрузить файлы

  1. Откройте File Manager и перейдите в public_html/ (корень документов вашего домена).
  2. Включите Настройки → Показать скрытые файлы, чтобы видеть .htaccess и .env.
  3. Удалите любой дефолтный index.html в public_html/, если он есть.
  4. Загрузите пакет source.zip и Распакуйте его, или загрузите содержимое папки /source/ через FTP.
  5. После распаковки public_html/ должна содержать app/, public/, vendor/, корневой .htaccess и artisan на одном уровне.
Важно: Корневой .htaccess перенаправляет все запросы в папку public/ — на большинстве хостингов не нужно вручную менять корень документов.

Шаг 5 — Подготовить .env перед запуском установщика

Выполните этот шаг до открытия /install. Laravel требует действительный APP_KEY и корректные настройки базы данных в .env.

  1. В File Manager скопируйте .env.example в .env (та же папка, что и artisan).
  2. Отредактируйте .env и укажите как минимум:
    APP_NAME=AssetHub
    APP_ENV=production
    APP_DEBUG=false
    APP_URL=https://yourdomain.com
    
    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=cpaneluser_assethub
    DB_USERNAME=cpaneluser_admin
    DB_PASSWORD="your_password"
    
    SESSION_DRIVER=file
    CACHE_STORE=file
  3. Установите DB_CONNECTION=mysql — в .env.example по умолчанию SQLite; shared hosting требует MySQL.
  4. Установите SESSION_DRIVER=file и CACHE_STORE=file до первой миграции (избежите ошибок "таблица sessions не найдена").
  5. Оберните DB_PASSWORD в двойные кавычки, если он содержит специальные символы (#, $, ! и т. д.).

Сгенерировать APP_KEY (Terminal не требуется)

Многие тарифы cPanel не включают веб-Terminal. Используйте один из методов:

  • SSH Access (cPanel → Безопасность → SSH Access): подключитесь через PuTTY или PowerShell, затем выполните cd ~/public_html && php artisan key:generate.
  • Вспомогательный файл в File Manager — создайте временно файл public/genkey.php, откройте его в браузере, скопируйте результат в APP_KEY=, затем сразу удалите файл.
    <?php
    echo 'base64:' . base64_encode(random_bytes(32));
  • На вашем ПК — если PHP установлен локально, выполните php -r "echo 'base64:'.base64_encode(random_bytes(32));" и вставьте результат в .env.
Безопасность: Удалите genkey.php сразу после копирования ключа. Никогда не оставляйте вспомогательные скрипты на production-сервере.
  • Установите права на storage/ и bootstrap/cache/ в значение 755 (рекурсивно), если установщик сообщает об ошибках записи.

Шаг 6 — Запустить веб-установщик

  1. Откройте https://yourdomain.com/install в браузере.
  2. Шаг 1: Требования — все проверки должны быть пройдены (зелёные). Исправьте недостающие PHP-расширения по инструкции из Шага 1 выше.
  3. Шаг 2: База данных — введите точные имена с префиксами из Шага 3:
    • Хост: 127.0.0.1 or localhost
    • Порт: 3306
    • База данных: cpaneluser_assethub
    • Имя пользователя: cpaneluser_admin
    • Пароль: (your MySQL password)
  4. Шаг 3: Migrate — нажмите "Run Migrations & Seed". Занимает ~10 секунд. Не обновляйте страницу.
  5. Снимите флажок Include demo data для чистой production-установки.
  6. Шаг 4: Admin — создайте учётную запись администратора.
  7. Готово! — сохраните Cron URL, отображённый на последнем экране.

Шаг 7 — Настроить Cron Jobs для e-mail-уведомлений

AssetHub требует один cron job, запускаемый каждую минуту, чтобы Laravel мог отправлять предупреждения о гарантии, напоминания об обслуживании и другие запланированные письма.

  1. В cPanel перейдите в Advanced → Cron Jobs.
  2. В разделе Add New Cron Job установите расписание на Каждую минуту (* * * * *).
  3. Введите команду (замените CPANELUSER на ваше имя пользователя cPanel из раздела Общая информация):
    /usr/local/bin/php /home/CPANELUSER/public_html/artisan schedule:run
    Совет: путь к PHP может быть /usr/local/bin/php или /usr/bin/php — уточните у хостинга, если не уверены. Путь к artisan — это место, куда вы загрузили проект (обычно /home/CPANELUSER/public_html/artisan).
  4. Нажмите Add New Cron Job для сохранения.
Корень документов задан как public_html/public/? Cron по-прежнему указывает на /home/CPANELUSER/public_html/artisan — не добавляйте /public/.
Нет доступного cron? Используйте вместо него Cron URL приложения:
  1. Войдите как admin → Настройки → вкладка Система → скопируйте Cron URL.
  2. Зарегистрируйтесь на cron-job.org (бесплатно).
  3. Создайте задание, которое обращается к этому URL каждые 15 минут.

Шаг 8 — Настроить e-mail (SMTP)

Создайте почтовый аккаунт cPanel для исходящих уведомлений:

  1. Перейдите в Email Accounts → создайте, например, noreply@yourdomain.com.
  2. Отредактируйте .env в File Manager:
    MAIL_MAILER=smtp
    MAIL_HOST=mail.yourdomain.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"
  3. Сохраните, затем в AssetHub: Настройки → Email → Отправить тестовое письмо.
Ограничения SMTP на shared hosting: Многие хосты cPanel ограничивают исходящую почту (~100–500/час). Для больших команд используйте SendGrid, Mailgun или Postmark.

Типичные проблемы на cPanel

"Access denied for user" (SQLSTATE 1045)

  • Скопируйте имя базы данных и имя пользователя точно из cPanel — включая префикс аккаунта.
  • Убедитесь, что выполнили Add User To Database с ALL PRIVILEGES.
  • Сбросьте пароль MySQL в cPanel и обновите .env — заключите DB_PASSWORD в кавычки, если он содержит специальные символы.

Миграция завершается ошибкой после успешного шага Database

  • Установщик проверяет учётные данные из формы, но Migrate читает из .env. Убедитесь, что оба совпадают.
  • Удалите bootstrap/cache/config.php, если он существует, затем повторите.
  • Убедитесь, что DB_CONNECTION=mysql задан в .env (не sqlite).

"Invalid default value" при миграции (1067)

Исправлено в AssetHub v2.1.0+ (таблица checkouts использует столбцы dateTime). Если у вас старая копия, обновите файл миграции или скачайте последний пакет с CodeCanyon.

"500 Internal Server Error" после загрузки

  • Убедитесь, что корневой .htaccess существует и PHP версии 8.2+.
  • Проверьте storage/logs/laravel.log для реальной ошибки.
  • Подтвердите, что APP_KEY задан в .env — пустой ключ вызывает ошибки 500.

Нет Terminal в cPanel

Это нормально для многих тарифов shared hosting. Используйте SSH Access (если включён), временный метод genkey.php из Шага 5 или сгенерируйте ключ на локальном ПК.

Камера QR-сканера не открывается

Включите SSL через SSL/TLS Status → AutoSSL и откройте сайт по https://.

Конфигурация

Файл .env

КлючОписаниеПример
APP_NAMEИмя приложения, отображаемое в заголовкеAssetHub
APP_URLПубличный URL вашей установкиhttps://assets.example.com
APP_DEBUGУстановите false на productionfalse
DB_*Параметры подключения к БДmysql, 127.0.0.1, 3306, ...
MAIL_MAILERДрайвер почтыsmtp, log, mailgun
MAIL_HOSTХост SMTP-сервераsmtp.gmail.com
MAIL_PORTПорт SMTP587
MAIL_USERNAMEИмя пользователя SMTPyour@email.com
MAIL_PASSWORDПароль SMTP или app token**********
MAIL_FROM_ADDRESSАдрес From по умолчаниюnoreply@example.com

Настройки в приложении

Большинство не чувствительных опций настраиваются из Админ → Настройки:

  • Общие: имя/email/телефон компании, префикс asset tag
  • Email: отправить тестовое письмо для проверки SMTP
  • Уведомления: пороги предупреждения гарантии, окно напоминания об обслуживании
  • Локализация: часовой пояс (поисковый список, вкл. Europe/Skopje), формат даты, код валюты (вкл. MKD — македонский денар), символ и его позиция — применяется по всему приложению после сохранения
  • Общие → Public Asset Page: видимость QR (публично / вход / отключено) и пересоздание всех QR-кодов после смены URL
  • Вкладка Локализация ведёт в Administration → Translations для полного Translation Editor (только admin)
  • Branding: имя и логотип — обновляет логотип входа, footer, badge и заголовок вкладки браузера (v4.0+). Подзаголовок входа: auth.login_subtitle в Administration → Translations
  • Appearance (v4.0+): настройка цветов бренда, статусов и текста для светлой и тёмной темы — см. руководство по ребрендингу в FAQ

Поддержка нескольких языков

AssetHub поставляется с 11 языками из коробки, включая RTL Arabic и Hindi. Пользователи переключают язык через выпадающий список флагов в правом верхнем углу.

Встроенные языки

КодЯзыкНаправление
enEnglish (default)LTR
viTiếng ViệtLTR
esEspañolLTR
frFrançaisLTR
deDeutschLTR
zh简体中文LTR
ja日本語LTR
pt-BRPortuguês (Brasil)LTR
ruРусскийLTR
arالعربيةRTL
hiहिन्दीLTR

Как переключить язык

  1. Нажмите на иконку флага в правом верхнем углу, чтобы открыть меню.
  2. Выберите ваш язык из списка.
  3. Страница перезагрузится; все метки UI, даты и форматы валют переключатся.
  4. Ваш выбор сохраняется как в вашей учётной записи, так и в cookie (1 год).
Не открывайте .html файлы приложения напрямую. AssetHub — это серверное приложение Laravel + Vue. Переключение языка отправляет POST на /locale/{code}, что работает только при запущенном PHP-сервере. Всегда заходите через ваш реальный домен (продакшен) или http://localhost:8000 (разработка с php artisan serve). А вот файлы документации, такие как этот, полностью автономны и могут быть открыты напрямую.

Добавление пользовательского языка (админ)

Перейдите в Administration → Translations (админы с правом manage translations):

  • Нажмите «Add Locale» — укажите код (напр. mk для македонского), отображаемое имя, родное имя, имя SVG-файла флага, направление (LTR/RTL) и базовый locale для копирования переводов.
  • Новый locale появится в переключателе языка и в списке языка по умолчанию в Настройки → Локализация.
  • Переводы в БД автоматически переопределяют файловые переводы в lang/{code}/.

Translation Editor

Редактор перечисляет каждый ключ перевода по файлам (assets, nav, settings и т. д.). Для ключа показаны базовая линия файла и любое переопределение в БД.

  • Фильтр по locale, группе переводов или тексту поиска.
  • Нажмите значение для инлайн-редактирования; изменения сразу сохраняются в БД.
  • Сбросьте ключ, чтобы вернуться к базовой линии файла.
  • Встроенные locale (en, vi, es, …) можно редактировать; пользовательские locale полностью управляются из БД.
  • Доступ к этой странице только у пользователей с правом manage translations.

CSV import / export

  • Export — скачать все ключи locale в CSV (group,key,value).
  • Import — загрузить CSV с теми же столбцами; существующие переопределения в БД обновляются, новые ключи добавляются.

Локаль по умолчанию для пользователя

У каждого пользователя есть колонка locale. Email-уведомления автоматически отправляются на предпочитаемом языке получателя благодаря контракту HasLocalePreference Laravel.

Язык сайта по умолчанию задаётся в Настройки → Локализация → Default Language. Отдельные пользователи переопределяют его через переключатель языка в заголовке.

Список функций

Управление активами

  • Автогенерация asset tag
  • Несколько изображений на актив
  • Генерация QR-кода
  • Отслеживание статуса и состояния
  • Массовый импорт/экспорт
  • Клонирование актива
  • Учёт количества пакетов / лотов (v2)

Рабочие процессы

  • Назначить / Вернуть / Передать
  • Запросы с утверждением
  • Бронирование Check-in / Check-out
  • Обнаружение конфликтов

Обслуживание

  • Планирование профилактики/корректирующего
  • Календарный вид
  • Автопланирование следующего
  • Отслеживание затрат
  • E-mail-напоминания

Документы

  • Прикреплять счета, руководства
  • Inline-просмотр
  • Уведомления об окончании
  • Различные типы документов

Амортизация

  • 3 метода расчёта
  • Автообновление стоимости
  • График графика
  • Годовой свод

Отчёты

  • 12 типов отчётов
  • Экспорт Excel + PDF
  • Графики и дашборды
  • Фильтры по дате

Операционные функции (v2)

  • Пакетные / лотовые активы со сверкой в реальном времени
  • Распределение сотрудникам, отделам, на склад
  • Disposals с утверждением и разделением обязанностей
  • Публичная QR-страница передачи /a/{tag}

Локализация и переводы (v3)

  • 11 встроенных языков UI + пользовательские locale
  • Translation Editor: поиск, фильтр по группам, инлайн-редактирование
  • CSV import/export для массового обновления переводов
  • Настройки часового пояса и валюты применяются по всему приложению

Брендинг и внешний вид (v4)

  • Заголовок вкладки браузера обновляется через Настройки → Брендинг → Имя приложения
  • Настройка цветов в Настройки → Внешний вид (светлая и тёмная тема)

Пользователи и роли

AssetHub поставляется с 5 предустановленными ролями:

РольВозможности
AdminПолный доступ к системе — пользователи, отделы, настройки, журнал аудита, webhook'и, переводы
IT-менеджерУправление активами (одиночные + пакет/лот), категориями, обслуживанием, запросами; утверждение передач; просмотр отчётов и амортизации
БухгалтерУправление активами и амортизацией, инвентаризации, утверждение передач и Disposals, полный доступ к отчётам (финансовый фокус)
СупервайзерУтверждение запросов отдела, управление checkout, участие в инвентаризациях, просмотр отчётов
СотрудникПросмотр назначенных активов, создание запросов, управление своими checkout

Права хранятся как роли Spatie — администраторы могут тонко настраивать каждое право через БД.

Управление активами

Создание активов

  1. Перейдите в Активы → Новый актив.
  2. Заполните имя, категорию, бренд, модель, серийный номер.
  3. Добавьте дату покупки и цену (требуется для амортизации).
  4. Загрузите изображения (поддерживается несколько файлов, максимум 5 МБ каждый).
  5. Сохраните — asset tag и QR-код генерируются автоматически.

Формат Asset Tag

По умолчанию: {PREFIX}-{YEAR}-{NNNN}, напр. AS-2026-0001. Настраивается через Настройки → Общие → Префикс Asset Tag.

Массовый импорт

  1. Нажмите Импорт на странице Активов.
  2. Скачайте шаблон Excel.
  3. Заполните данные — обязательные колонки: name, category_name.
  4. Загрузите файл.

Пакетные / лотовые активы (v2)

Для одинаковых товаров в количестве (стулья, клавиатуры, форма) выберите Тип отслеживания → Batch / Lot в форме «Новый актив» вместо создания дублирующих записей.

  1. Введите количество и единицу (штука, комплект, коробка). При сохранении запас помещается в складской пул.
  2. Откройте актив → вкладка AllocationsAllocate единицы сотруднику или отделу.
  3. Используйте Return, Adjust (повреждённые/утерянные/на ремонте) или действия по утилизации — сводка в реальном времени должна сходиться с общим количеством.
  4. Пакетные активы поддерживают только цену за единицу; амортизация необязательна и по умолчанию отключена для быстрой настройки.
Примечание по обновлению: Существующие однопозиционные активы v1 не изменяются. После обновления до v2 выполните php artisan migrate — потери данных не будет.

QR-коды

Каждый актив автоматически получает QR-код при создании. Сканирование открывает публичную или авторизованную страницу актива (см. ниже). Сканирование в приложении переходит на экран деталей актива.

Печать этикеток

  • Одиночная этикетка: нажмите иконку принтера в любой строке актива.
  • Формат PDF: A4, 2 этикетки в строке, включает asset tag, имя, бренд, серийный номер.

Сканирование

Нажмите Сканировать QR на странице Активов. Разрешите доступ к камере. Сканер использует html5-qrcode и работает в любом современном браузере. Примечание: доступ к камере требует HTTPS или localhost.

Публичная QR-страница передачи (v2)

У каждого актива также есть печатаемый публичный URL /a/{asset_tag} — удобно для физической передачи без входа в систему.

  • Настройте в Настройки → Общие → Public Asset Page: Public, Login required или Disabled.
  • Страница показывает фото, ключевые поля и (для пакетов) разбивку по количеству. Можно распечатать как акт передачи.
  • После изменения APP_URL нажмите Regenerate all QR codes в той же панели настроек.

Рабочие процессы

Назначение актива

  1. Откройте страницу деталей актива.
  2. Нажмите Назначить (видно, если актив доступен).
  3. Выберите пользователя, опциональную дату возврата, заметки.
  4. Отправьте — создаётся транзакция и отправляется e-mail-уведомление.

Запросы активов

Сотрудники могут отправлять запросы на нужные активы. У запросов 4 статуса: pending → approved → fulfilled или rejected. Письма утверждения отправляются автоматически.

Check-in / Check-out

Для общих активов (камеры, проекторы, транспорт). У бронирований есть диапазоны дат; система предотвращает пересекающиеся checkout. Календарный вид показывает все бронирования с одного взгляда.

Disposals — официальное списание (v2)

Изношенные или повреждённые позиции списываются документированными пакетами с разделением обязанностей (инициатор ≠ утверждающий). Требуются права manage disposals и approve disposals.

  1. Боковая панель → DisposalsNew Disposal. Укажите заголовок и период (Q1–Q4, годовой или разовый).
  2. Откройте черновик → Add items — подходящие повреждённые единицы пакета или одиночные активы в состоянии Poor.
  3. Нажмите Submit for approval — пакет блокируется.
  4. Другой утверждающий нажимает Approve & execute — активы/единицы помечаются как disposed.
  5. Распечатайте disposal minutes (PDF) для учёта соответствия.
Необратимо: Утверждённые Disposals нельзя отменить. Храните подписанный PDF вместе с журналом аудита.

Амортизация

AssetHub рассчитывает амортизацию активов одним из трёх методов:

МетодФормулаПрименение
Линейный(Cost - Salvage) / Useful LifeСамый распространённый; равномерная годовая амортизация
Уменьшаемого остатка2 / Useful Life × Book ValueУскоренный; для налоговых целей
ПроизводственныйПо использованиюПроизводственное оборудование

Значения по умолчанию наследуются от категории актива. Записи графика генерируются ежемесячно. current_value актива автоматически обновляется 1-го числа каждого месяца.

Пользовательские поля

Админ → Пользовательские поля позволяет добавить неограниченное число пользовательских атрибутов к активам:

  • Типы: текст, число, дата, выпадающий список, текстовая область, файл, чекбокс
  • Область: применить ко всем категориям или к конкретной
  • Перестановка: перетаскивание за ручку
  • Обязательные поля проверяются при сохранении актива

Отчёты

Двенадцать встроенных отчётов, доступных из меню «Отчёты»:

  1. Сводка активов — итоги по статусу, состоянию, категории, отделу
  2. Амортизация — потеря стоимости по категории, наиболее амортизированные активы
  3. Транзакции — активность назначения, возврата, передачи во времени
  4. Стоимость обслуживания — расходы по месяцу, категории, типу
  5. Окончание гарантии — активы, требующие внимания через 30/60/180 дней
  6. Активы по отделам — распределение активов и использование бюджета по отделам
  7. Активы по источнику — распределение по закупке, проекту, пожертвованию, передаче
  8. Сводка инвентаризации — расхождения по периодическим циклам аудита
  9. Employee Assignments (v2) — кто что держит, включая пакетные распределения
  10. Department / Location (v2) — активы и количества по отделу или местоположению
  11. Inventory Reconciliation (v2) — запас vs распределено vs повреждено/утеряно/списано
  12. Damaged Assets (v2) — позиции, отмеченные для ремонта или списания

Все отчёты поддерживают экспорт в Excel и PDF через кнопки в заголовке страницы. Отчёты v2 учитывают количество (число активов + общее число единиц).

Webhook'и

AssetHub может уведомлять внешние сервисы о ключевых событиях.

Доступные события

  • asset.created, asset.updated, asset.deleted
  • asset.assigned, asset.returned, asset.transferred
  • request.created, request.approved, request.rejected, request.fulfilled
  • maintenance.scheduled, maintenance.started, maintenance.completed
  • checkout.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 внутренне распределяет каждую задачу в нужное время.

Shared hosting (интерфейс Cron Jobs cPanel / Hostinger)

Смотрите раздел Настройка cPanel → Шаг 7 или Настройка Hostinger → Шаг 5 для инструкций со скриншотами. Кратко: Advanced → Cron Jobs, команда:

/usr/bin/php /home/uXXXXXX/public_html/artisan schedule:run

Расписание: каждую минуту (* во всех пяти полях).

Команда cron для cPanel

Замените CPANELUSER на ваше имя пользователя cPanel:

/usr/local/bin/php /home/CPANELUSER/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:00send-overdue-checkout-alertsE-mail-напоминания о просроченных checkout
Ежедневно 08:30send-maintenance-remindersНапоминания о предстоящем обслуживании
Ежедневно 09:00send-document-expiry-alertsДокументы, истекающие через 30/14/7/1 дней
Ежедневно 09:30send-warranty-alertsУведомления об окончании гарантии + страховки
Ежедневно 10:00assethub:send-depreciation-end-alertsУведомления, когда активы достигают конца срока службы
Ежедневно 10:30send-inventory-audit-remindersНапоминания для активных инвентаризаций
Ежемесячно 1-го числа, 02:00update-asset-valuesОбновить current_value актива из амортизации

Upgrade Guides

Step-by-step guides for updating an existing installation. Open the guide that matches your current version.

Устранение неполадок

"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.

База данных "Access denied" (1045) на cPanel

Неверное имя пользователя/пароль, пользователь не назначен к базе данных или специальные символы в пароле нарушают разбор .env. Смотрите Настройка cPanel → Типичные проблемы.

Ошибка миграции 1067 (Invalid default value)

Строгий режим MySQL на shared hosting отвергает несколько столбцов timestamp NOT NULL. Исправлено в v2.1.0+. Обновите пакет или измените checkout_date / expected_return_date на dateTime в миграции checkouts.

Отсутствует APP_KEY / ошибка 500 до установки

Laravel требует APP_KEY в .env перед загрузкой приложения. Если в cPanel нет Terminal, смотрите Настройка cPanel → Шаг 5 для методов SSH, genkey.php или локальной генерации.

Сброс установки

Удалите storage/installed.lock и зайдите снова на /install. Существующие данные будут стёрты, если вы перезапустите миграции.

Производительность — медленный список активов

Запустите php artisan optimize для кэширования config, routes, views. Убедитесь, что у MySQL есть индексы на assets.asset_tag, assets.serial_number, assets.status (создаются автоматически миграциями).

Upgrading from v3.0.x to v3.1

Download the v3.1 package from CodeCanyon, replace application files (keep your .env and storage/ uploads). No new migrations are required. The new visible_locales setting is optional — if unset, all languages remain visible in the navbar picker.

v3.0 → v3.1 — Full upgrade guide

Обновление с v2.x до v3.0

Скачайте ZIP v3 с CodeCanyon, замените файлы приложения (сохраните .env и загрузки в storage/), затем выполните php artisan migrate. Новые таблицы для пользовательских locale и переопределений переводов добавляются автоматически. Существующие настройки и активы сохраняются.

v2.x → v3.0 — Full upgrade guide

Обновление с v1.x до v2.0

Скачайте ZIP v2 с CodeCanyon, замените файлы приложения (сохраните .env и загрузки в storage/), затем выполните php artisan migrate. Обновление не ломает данные — однопозиционные активы продолжают работать; таблицы пакетов/Disposals добавляются автоматически.

v1.x → v2.0 — Full upgrade guide

Журнал изменений

v3.1.0 — Visible Language Picker (2026-06)

  • Settings → Localization: checklist to choose which languages appear in the navbar language dropdown (built-in + custom locales)
  • Default language is always visible; picker auto-hides when only one language is selected
  • Backend validates locale switches; users on a hidden locale fall back to the default language
  • No database migration required — upgrade is file-replace only
  • Брендинг login: footer и badge следуют Settings → Branding → App Name (без правки кода)

v3.0.0 — Локализация & Translation Editor (2026-06)

  • UI Translation Editor в Administration → Translations (Add Locale, инлайн-редактирование, поиск/фильтр по группам)
  • Пользовательские locale в БД — код, отображаемое имя, родное имя, SVG флага, направление, базовый locale
  • CSV import/export для массового обновления переводов
  • Настройки часового пояса и валюты применяются по всему приложению (config/localization.php вкл. Europe/Skopje, MKD)
  • Настройки → Локализация: выпадающие списки часовых поясов/валют с поиском и поддержкой пользовательских значений
  • Hindi (hi) добавлен как 11-й встроенный locale; date_format учитывается на страницах Vue
  • Право manage translations; переопределения в БД объединяются с базовой линией файлов lang/

v2.0.0 — Операционный релиз (2026-06)

  • Пакетные / лотовые активы — учёт количества, распределения, возвраты, сверка в реальном времени
  • 4 операционных отчёта: Employee Assignments, Department/Location, Inventory Reconciliation, Damaged Assets
  • Модуль Disposals — пакеты списания, утверждение с разделением обязанностей, печатаемый протокол PDF
  • Публичная QR-страница актива /a/{tag} с настраиваемой видимостью
  • Устаревшие отчёты обновлены: количество активов + общее число единиц
  • QR-коды ведут на публичную страницу передачи; журнал транзакций фиксирует количество при перемещениях пакетов
  • Обновлены демо-данные, руководство пользователя (поставляется отдельно в documentation/) и строки i18n

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 библиотеки