Как установить и настроить Cachet на VPS
Когда сервис падает, клиенты узнают об этом раньше, чем вы успеваете открыть мониторинг — и первым делом идут спрашивать в поддержку «у вас что, всё лежит?». Публичная статус-страница снимает часть этой нагрузки: она показывает состояние компонентов и историю инцидентов открыто, без десятка одинаковых тикетов. Cachet — старый и проверенный open-source вариант такой страницы, который можно поднять на своём VPS за час и полностью контролировать.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что нужно перед установкой
Cachet — это PHP-приложение на Laravel, поэтому ему нужен обычный LEMP-стек: веб-сервер, PHP-FPM, база данных и кэш. Минимальный набор для боевой установки:
- VPS с 1-2 vCPU и 2 ГБ RAM — для одной статус-страницы с десятком компонентов этого достаточно с запасом;
- Ubuntu 24.04 LTS (команды ниже под неё, на Debian 12 отличия минимальны);
- домен или поддомен, у которого A-запись уже указывает на IP сервера (например, status.вашдомен.ru) — без него не получится выпустить SSL;
- MySQL или PostgreSQL для хранения данных и Redis для очередей и кэша;
- root-доступ или sudo-пользователь.
Важный нюанс, который стоит знать заранее: проект CachetHQ в последние годы развивается медленно, официальные релизы выходят редко, а Laravel внутри — довольно старой версии. Это не значит, что Cachet не работает — тысячи статус-страниц крутятся на нём годами стабильно, — но перед установкой стоит свериться с актуальными тегами в репозитории, а не слепо доверять версии из старых мануалов.
Устанавливаем PHP, MySQL и Redis
Ubuntu 24.04 идёт с PHP 8.3 по умолчанию, а Cachet рассчитан на более раннюю линейку PHP. Чтобы не ломать системный PHP, ставим отдельную версию через PPA и не трогаем дефолтную:
apt update && apt install -y software-properties-common curl git unzip
add-apt-repository ppa:ondrej/php -y
apt update
apt install -y php8.1-fpm php8.1-cli php8.1-mysql php8.1-mbstring \
php8.1-xml php8.1-bcmath php8.1-curl php8.1-zip php8.1-gd \
php8.1-redis php8.1-tokenizer
Ставим MySQL и Redis:
apt install -y mysql-server redis-server
mysql_secure_installation
systemctl enable --now mysql redis-server
Создаём базу и пользователя для Cachet:
mysql -u root -p
CREATE DATABASE cachet CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'cachet'@'localhost' IDENTIFIED BY 'СЛОЖНЫЙ_ПАРОЛЬ';
GRANT ALL PRIVILEGES ON cachet.* TO 'cachet'@'localhost';
FLUSH PRIVILEGES;
EXIT;
И Composer — им ставятся PHP-зависимости самого Cachet:
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
composer --version
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверСкачиваем Cachet и ставим зависимости
Тянем код из официального репозитория и переключаемся на последний стабильный тег — не на ветку master, там может быть незавершённая разработка:
git clone https://github.com/CachetHQ/Cachet.git /var/www/cachet
cd /var/www/cachet
git fetch --tags
git tag | sort -V | tail -5
Посмотрите на вывод последней команды и возьмите самый свежий тег из списка (на момент написания статьи актуальна ветка 2.5.x, но лучше свериться самостоятельно):
git checkout <последний_тег>
composer install --no-dev --optimize-autoloader
Флаг --no-dev важен: без него Composer подтянет пакеты для разработки и тестов, которые в проде не нужны и увеличивают поверхность для потенциальных проблем с зависимостями.
Настраиваем .env и базу данных
Копируем пример конфига и генерируем ключ приложения:
cp .env.example .env
php artisan key:generate
Открываем .env и правим ключевые параметры:
APP_ENV=production
APP_DEBUG=false
APP_URL=https://status.вашдомен.ru
APP_TIMEZONE=Europe/Moscow
DB_DRIVER=mysql
DB_HOST=127.0.0.1
DB_DATABASE=cachet
DB_USERNAME=cachet
DB_PASSWORD=СЛОЖНЫЙ_ПАРОЛЬ
CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_DRIVER=redis
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
MAIL_DRIVER=smtp
MAIL_HOST=smtp.вашпочтовик.ru
MAIL_PORT=587
MAIL_USERNAME=noreply@вашдомен.ru
MAIL_PASSWORD=пароль_от_почты
MAIL_ENCRYPTION=tls
Почта нужна не для красоты: без рабочего SMTP не будут уходить уведомления подписчикам о новых инцидентах — это одна из главных функций Cachet.
Прогоняем миграции и запускаем установочный мастер:
php artisan migrate --force
php artisan app:install
Мастер спросит имя сайта, e-mail и пароль администратора, домен. Если команда app:install не находится (в некоторых версиях название отличается), посмотрите точное имя доступных команд:
php artisan list | grep -i install
После установки выставляем права, иначе веб-сервер не сможет писать логи и кэш:
chown -R www-data:www-data /var/www/cachet
chmod -R 775 /var/www/cachet/storage /var/www/cachet/bootstrap/cache
Nginx, домен и SSL
Ставим Nginx, если его ещё нет, и создаём конфиг сайта:
apt install -y nginx
nano /etc/nginx/sites-available/cachet
server {
listen 80;
server_name status.вашдомен.ru;
root /var/www/cachet/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
Активируем конфиг и проверяем синтаксис:
ln -s /etc/nginx/sites-available/cachet /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
Дальше выпускаем сертификат — подробный разбор certbot и типичных проблем есть в отдельной статье про установку Let's Encrypt SSL на VPS, здесь коротко:
apt install -y certbot python3-certbot-nginx
certbot --nginx -d status.вашдомен.ru
Certbot сам пропишет редирект с 80 на 443 и подставит пути к сертификатам в конфиг Nginx.
Очереди, планировщик и автозапуск
Cachet отправляет уведомления и обновляет метрики через очереди Laravel, а часть задач — по расписанию. Без запущенного воркера подписчики просто не получат письма об инциденте, страница при этом будет выглядеть рабочей — эта тонкость легко упускается при первой установке.
Ставим Supervisor, чтобы воркер очереди не умирал при перезагрузке сервера:
apt install -y supervisor
nano /etc/supervisor/conf.d/cachet-worker.conf
[program:cachet-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/cachet/artisan queue:work redis --sleep=3 --tries=3 --timeout=60
directory=/var/www/cachet
autostart=true
autorestart=true
user=www-data
numprocs=1
redirect_stderr=true
stdout_logfile=/var/log/cachet-worker.log
supervisorctl reread
supervisorctl update
supervisorctl start cachet-worker:*
И добавляем планировщик Laravel в cron — он отвечает за плановую очистку и внутренние задачи по расписанию (детальнее про настройку cron-задач на VPS есть отдельный материал):
crontab -e -u www-data
* * * * * cd /var/www/cachet && php artisan schedule:run >> /dev/null 2>&1
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Cachet ещё поддерживается разработчиками?
Формально да, репозиторий жив, но релизы выходят нечасто, а сам проект давно перешёл в режим неспешного сопровождения. Для боевой статус-страницы это рабочий вариант, но перед обновлением стоит внимательно читать changelog, а не обновляться вслепую.
Можно ли обойтись без Redis, оставить только MySQL?
Технически да — можно указать file или database в качестве драйвера кэша и сессий, но очереди без Redis (или другого брокера) работают заметно хуже, а на нагруженной странице с частыми обновлениями метрик это чувствуется. Redis на 2 ГБ VPS почти ничего не стоит по ресурсам, отказываться от него смысла нет.
Как сбросить пароль администратора, если забыл?
Через тинкер Laravel: php artisan tinker, затем найти пользователя по e-mail и обновить поле пароля через Hash::make(). Отдельной консольной команды для сброса пароля из коробки нет.
Чем Cachet отличается от Uptime Kuma?
Uptime Kuma — это в первую очередь мониторинг с проверками доступности и алертами, статус-страница у него дополнительная функция. Cachet — наоборот, целиком заточен под публичную статус-страницу с ручным управлением инцидентами и метриками, но сам ничего не мониторит — проверки нужно делать отдельно и дёргать API Cachet. Если у вас уже стоит Uptime Kuma для мониторинга, его встроенной статус-страницы может хватить без Cachet — присмотритесь к обоим вариантам перед выбором.
Как автоматически обновлять компоненты по API?
У Cachet есть REST API — можно из внешнего скрипта или из системы мониторинга дёргать эндпоинт /api/v1/components/{id} с токеном администратора и менять статус компонента при падении проверки. Это стандартный способ связать статус-страницу с реальным мониторингом.
Нужен ли отдельный сервер под Cachet или можно на одном VPS с другими проектами?
Можно совмещать — приложение лёгкое, но учитывайте, что при падении основного сервера ляжет и статус-страница, которая должна как раз сообщать о падении. Для честной картины статус-страницу лучше держать на отдельном сервере или хотя бы в другом дата-центре от основной инфраструктуры.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →