MAATRIX / Блог / Как установить и настроить Crater на VPS

Как установить и настроить Crater на VPS

MAATRIX

Если Invoice Ninja кажется вам избыточным — там и таск-трекинг, и десятки платёжных шлюзов, и настроек на пару вечеров изучения, — присмотритесь к Crater. Это более компактный open-source инструмент на Laravel и Vue: счета, сметы (estimates), клиенты, платежи и PDF с брендингом, без лишнего интерфейсного шума. Ниже — рабочая инструкция по установке на чистый VPS: вручную через LEMP-стек и через Docker Compose, с доменом и SSL на выходе.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что такое Crater и когда он подходит

Crater — открытая (AGPLv3) система для выставления счетов и смет, написанная на Laravel (бэкенд) и Vue (фронтенд). По задачам она пересекается с Invoice Ninja, но по объёму функций меньше: нет встроенного таск-трекера с таймером, набор платёжных шлюзов скромнее, зато интерфейс проще и разворачивается быстрее — меньше сущностей, в которых можно запутаться на старте.

Crater закрывает типовой набор:

  • счета (invoices) и сметы (estimates) с конвертацией сметы в счёт в один клик;
  • карточки клиентов, повторяющиеся счета, учёт платежей и расходов;
  • PDF с собственным логотипом, шаблоны и мультивалютность;
  • API для интеграции с внешними системами.

Кому имеет смысл ставить именно Crater, а не более тяжёлые аналоги:

  • фрилансерам и небольшим командам, которым нужны только счета/сметы/клиенты без CRM-обвеса;
  • тем, кто уже пробовал Invoice Ninja и посчитал его слишком громоздким для своих задач;
  • тем, кто хочет отдельный лёгкий сервис на своём VPS рядом с другими self-hosted приложениями.

Стоит сразу оговорить ограничение: Crater — не самый активно обновляемый проект (у него бывают паузы между релизами), поэтому перед установкой загляните в репозиторий на GitHub (crater-invoice-inc/crater) и проверьте дату последнего коммита — это займёт минуту, а картину прояснит сразу.

Требования к серверу и подготовка VPS

Crater — это классическое Laravel-приложение, поэтому требования умеренные, но сборка фронтенда (npm run production) на этапе установки просит памяти больше, чем сам сервис потом потребляет в работе.

ПараметрМинимумКомфортно
CPU1 vCPU2 vCPU
RAM1 ГБ2 ГБ (иначе сборка ассетов может падать по OOM)
Диск10 ГБ SSD20+ ГБ SSD
ОСUbuntu 24.04 LTSUbuntu 24.04 LTS

Если оперативной памяти впритык — на время установки временно добавьте swap, соберёте ассеты без падений, потом можно уменьшить обратно.

Перед установкой:

  1. Обновите систему: sudo apt update && sudo apt upgrade -y.
  2. Создайте отдельного пользователя без root: sudo adduser crateradmin && sudo usermod -aG sudo crateradmin.
  3. Настройте домен или поддомен (A-запись на IP сервера) — без домена SSL не выпустить, а Crater по документации рекомендуют ставить именно на основной домен/поддомен, а не в подпапку.
  4. Откройте порты 80 и 443 на файрволе.

Если домен ещё не привязан к серверу — сначала разберитесь с DNS, это отдельная тема, чтобы не запутаться в TTL и типах записей: настройка домена и DNS с нуля.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Устанавливаем PHP, MySQL, Node.js и Composer

Crater требует PHP версии не ниже 7.4 (на новых VPS разумно ставить актуальную ветку 8.x — репозиторий Ondřej Surý её поддерживает) с расширениями BCMath, Ctype, cURL, DOM, Filter, Iconv, JSON, Mbstring, OpenSSL, PDO, Session, Tokenizer, XML и ZIP.

sudo apt install -y software-properties-common
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update

sudo apt install -y php8.2 php8.2-fpm php8.2-mysql php8.2-mbstring \
  php8.2-xml php8.2-bcmath php8.2-curl php8.2-zip php8.2-gd php8.2-intl \
  php8.2-cli php8.2-common unzip git nginx

Composer — менеджер зависимостей PHP:

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
composer --version

MySQL или MariaDB — как база данных:

sudo apt install -y mysql-server
sudo mysql_secure_installation

Создайте базу и пользователя:

CREATE DATABASE crater CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'crater'@'localhost' IDENTIFIED BY 'замените-на-надёжный-пароль';
GRANT ALL PRIVILEGES ON crater.* TO 'crater'@'localhost';
FLUSH PRIVILEGES;

Node.js нужен только для сборки фронтенда на этапе установки (в рантайме приложению он не требуется):

curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
node -v && npm -v

Разворачиваем Crater: от клонирования до мастера установки

Клонируйте репозиторий в рабочую директорию Nginx:

cd /var/www
sudo git clone https://github.com/crater-invoice-inc/crater.git
sudo chown -R crateradmin:crateradmin crater
cd crater

Установите PHP-зависимости и соберите фронтенд:

composer install --no-dev --optimize-autoloader
npm install
npm run production

Скопируйте пример конфига и сгенерируйте ключ приложения:

cp .env.example .env
php artisan key:generate

В .env укажите домен и параметры БД, созданной на предыдущем шаге:

APP_URL=https://invoice.вашдомен.ru
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=crater
DB_USERNAME=crater
DB_PASSWORD=замените-на-надёжный-пароль

Права на директории, куда Laravel пишет кэш и логи:

sudo chown -R www-data:www-data storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache

Дальше есть два пути. Штатный — открыть домен в браузере: Crater покажет пошаговый мастер установки (проверка требований, подключение к БД, создание администратора), который сам выполнит миграции и сидинг. Если предпочитаете консоль и хотите зафиксировать шаг в скрипте деплоя — прогоните миграции вручную заранее:

php artisan migrate --force

и тогда мастер в браузере просто подтвердит, что база уже готова, и попросит только данные администратора компании.

Nginx, домен и SSL для Crater

Создайте конфиг виртуального хоста:

# /etc/nginx/sites-available/crater
server {
    listen 80;
    server_name invoice.вашдомен.ru;
    root /var/www/crater/public;

    index index.php;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

Активируйте сайт и перезапустите Nginx:

sudo ln -s /etc/nginx/sites-available/crater /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

Выпустите SSL через Certbot:

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d invoice.вашдомен.ru

Certbot сам пропишет редирект с 80 на 443 и настроит автопродление — проверить его можно командой sudo certbot renew --dry-run.

Docker-путь, автообновление и резервные копии

Если не хочется вручную собирать LEMP-стек, в репозитории Crater есть готовый docker-compose.yml. Это быстрее для теста и удобно, когда на сервере уже развёрнуты другие сервисы в контейнерах и вы хотите единый подход к деплою — подробно про сам Docker и Docker Compose на чистой Ubuntu смотрите здесь: установка Docker с нуля.

git clone https://github.com/crater-invoice-inc/crater.git
cd crater
cp .env.example .env
docker compose up -d
./docker-compose/setup.sh

По умолчанию контейнер с БД поднимается с учётными данными crater/crater — обязательно смените пароль в .env перед первым запуском, если сервер смотрит в интернет напрямую, а не только через внутреннюю сеть за обратным прокси. Сам Crater в этом сценарии слушает локальный порт, а наружу его нужно вывести тем же Nginx + Certbot, что описаны выше, только proxy_pass вместо PHP-FPM сокета.

Обновление при ручной установке — стандартный для Laravel-проекта набор шагов:

cd /var/www/crater
sudo -u crateradmin git pull
composer install --no-dev --optimize-autoloader
npm install && npm run production
php artisan migrate --force
php artisan config:cache

Перед обновлением всегда снимайте бэкап базы и директории storage — миграции иногда необратимы:

mysqldump -u crater -p crater > crater_backup_$(date +%F).sql
tar -czf crater_storage_$(date +%F).tar.gz storage

Если хотите, чтобы бэкапы делались сами по расписанию, а не по памяти раз в квартал — вынесите это в cron сразу после установки: автоматические бэкапы на Ubuntu 24.04. Отдельно храните копию хотя бы в другом месте, не на том же диске — иначе смысл бэкапа теряется при отказе диска целиком.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Crater бесплатен полностью или есть платная версия?

Self-hosted версия с открытым кодом (AGPLv3) бесплатна без ограничений на число клиентов и счетов. У проекта также была облачная версия — на момент установки проверяйте актуальный статус на официальном сайте, у open-source проектов такие детали со временем меняются.

Нужен ли Node.js после установки?

Нет, npm нужен только для сборки фронтенд-ассетов на этапе установки или обновления. В рантайме приложению достаточно PHP-FPM, MySQL/MariaDB и веб-сервера.

Чем Crater принципиально отличается от Invoice Ninja?

Меньшим набором функций (нет встроенного таск-трекера, платёжных шлюзов меньше) и более простым интерфейсом — если нужен полноценный учёт задач и времени, посмотрите установку Invoice Ninja; если нужны только счета и сметы без лишнего — Crater подходит лучше.

Можно ли использовать PostgreSQL вместо MySQL?

Официально и по умолчанию Crater ориентирован на MySQL/MariaDB, миграции и типы данных тестируются под них — переход на PostgreSQL потребует ручной проверки миграций и не гарантирован «из коробки».

Что делать, если после установки не приходят email-уведомления?

Проверьте блок MAIL_* в .env (хост, порт, шифрование, логин/пароль SMTP) и убедитесь, что порт исходящей почты (обычно 587) не заблокирован у провайдера VPS — некоторые хостинги закрывают его по умолчанию для новых серверов.

Как перенести Crater на другой сервер?

Перенесите dump базы данных, директорию storage (там хранятся загруженные логотипы и сгенерированные файлы) и файл .env с ключом APP_KEY — без совпадающего ключа зашифрованные в БД данные не расшифруются.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →