This guide covers all configuration aspects of Cachet, including environment variables, database settings, email configuration, and operational best practices.
| Variable |
Description |
Default |
Example |
APP_ENV |
Application environment |
production |
production, staging, local |
APP_DEBUG |
Debug mode (disable in production) |
false |
true, false |
APP_KEY |
Laravel encryption key |
required |
base64:YourGeneratedKey== |
APP_URL |
Public URL of your status page |
http://localhost |
https://status.example.com |
APP_NAME |
Application name |
Cachet |
My Company Status |
APP_TIMEZONE |
Default timezone |
UTC |
America/New_York, Europe/Berlin |
APP_LOCALE |
Default language |
en |
en, de, fr, es |
| Variable |
Description |
Default |
Example |
DB_DRIVER |
Database type |
sqlite |
mysql, pgsql, sqlite |
DB_HOST |
Database host |
127.0.0.1 |
db, 127.0.0.1, localhost |
DB_PORT |
Database port |
3306 |
3306 (MySQL), 5432 (PostgreSQL) |
DB_DATABASE |
Database name |
cachet |
cachet |
DB_USERNAME |
Database username |
root |
cachet |
DB_PASSWORD |
Database password |
required |
YourSecurePassword |
DB_CONNECTION |
Connection name |
mysql |
mysql, pgsql |
| Variable |
Description |
Default |
Example |
CACHE_DRIVER |
Cache backend |
file |
redis, memcached, file |
CACHE_PREFIX |
Cache key prefix |
cachet |
cachet_prod |
REDIS_HOST |
Redis server host |
127.0.0.1 |
redis, 127.0.0.1 |
REDIS_PORT |
Redis server port |
6379 |
6379 |
REDIS_PASSWORD |
Redis password |
null |
YourRedisPassword |
REDIS_DATABASE |
Redis database number |
0 |
0-16 |
| Variable |
Description |
Default |
Example |
SESSION_DRIVER |
Session storage |
file |
redis, database, file |
SESSION_LIFETIME |
Session timeout (minutes) |
120 |
60, 120, 480 |
SESSION_DOMAIN |
Session cookie domain |
null |
.example.com |
SESSION_SECURE_COOKIE |
HTTPS-only cookies |
false |
true (production) |
| Variable |
Description |
Default |
Example |
QUEUE_DRIVER |
Queue backend |
sync |
redis, database, sqs |
QUEUE_CONNECTION |
Default connection |
sync |
redis, database |
| Variable |
Description |
Default |
Example |
MAIL_DRIVER |
Mail backend |
smtp |
smtp, sendmail, mailgun |
MAIL_HOST |
SMTP server |
smtp.mailtrap.io |
smtp.gmail.com |
MAIL_PORT |
SMTP port |
587 |
587 (TLS), 465 (SSL) |
MAIL_USERNAME |
SMTP username |
required |
status@example.com |
MAIL_PASSWORD |
SMTP password |
required |
YourMailPassword |
MAIL_ENCRYPTION |
Encryption type |
tls |
tls, ssl |
MAIL_FROM_ADDRESS |
Sender address |
required |
noreply@example.com |
MAIL_FROM_NAME |
Sender name |
Cachet |
Status Page |
| Variable |
Description |
Default |
Example |
CACHET_URL |
Override for APP_URL |
null |
https://status.example.com |
CACHET_MONITORING |
Enable monitoring features |
enabled |
enabled, disabled |
CACHET_SUBSCRIBERS |
Enable subscriber notifications |
true |
true, false |
CACHET_SUPPORT_URL |
Support link URL |
null |
https://support.example.com |
CACHET_API_KEY |
Pre-generated API key |
null |
your-api-key |
CACHET_INCIDENT_TEMPLATE |
Default incident template |
null |
Template ID |
# Application
APP_ENV=production
APP_DEBUG=false
APP_KEY=base64:xJ8K9mN2pQ4rT6vW8yZ0aB3cD5eF7gH9i==
APP_URL=https://status.example.com
APP_NAME="Example Corp Status"
APP_TIMEZONE=Europe/Berlin
APP_LOCALE=en
# Database (MySQL/MariaDB)
DB_DRIVER=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=cachet
DB_USERNAME=cachet
DB_PASSWORD=Str0ng!DbP@ssw0rd#2026
# Redis Cache
CACHE_DRIVER=redis
CACHE_PREFIX=cachet_prod
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=Str0ng!RedisP@ss#2026
REDIS_DATABASE=0
# Session
SESSION_DRIVER=redis
SESSION_LIFETIME=120
SESSION_SECURE_COOKIE=true
# Queue
QUEUE_DRIVER=redis
QUEUE_CONNECTION=redis
# Mail (SMTP)
MAIL_DRIVER=smtp
MAIL_HOST=smtp.example.com
MAIL_PORT=587
MAIL_USERNAME=noreply@example.com
MAIL_PASSWORD=Str0ng!MailP@ss#2026
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=noreply@example.com
MAIL_FROM_NAME="Example Corp Status"
# Cachet Settings
CACHET_URL=https://status.example.com
CACHET_MONITORING=enabled
CACHET_SUBSCRIBERS=true
CACHET_SUPPORT_URL=https://support.example.com
# Security
TRUSTED_PROXIES=*
-- Create database
CREATE DATABASE cachet CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- Create user
CREATE USER 'cachet'@'%' IDENTIFIED BY 'YourSecurePassword';
-- Grant privileges
GRANT ALL PRIVILEGES ON cachet.* TO 'cachet'@'%';
FLUSH PRIVILEGES;
-- Create database
CREATE DATABASE cachet OWNER cachet ENCODING 'UTF8';
-- Set connection limit (optional)
ALTER DATABASE cachet CONNECTION LIMIT 100;
DB_DRIVER=sqlite
DB_DATABASE=/var/www/cachet/database/database.sqlite
⚠️ Warning: SQLite is not recommended for production. Use MySQL, MariaDB, or PostgreSQL for production deployments.
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=your-email@gmail.com
MAIL_PASSWORD=your-app-password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=your-email@gmail.com
MAIL_FROM_NAME="Status Page"
📝 Note: For Gmail, use an App Password instead of your regular password.
MAIL_DRIVER=smtp
MAIL_HOST=smtp.sendgrid.net
MAIL_PORT=587
MAIL_USERNAME=apikey
MAIL_PASSWORD=YourSendGridAPIKey
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=noreply@example.com
MAIL_FROM_NAME="Status Page"
MAIL_DRIVER=mailgun
MAILGUN_DOMAIN=mg.example.com
MAILGUN_SECRET=key-your-mailgun-key
MAILGUN_ENDPOINT=api.mailgun.net
| Status |
Color |
Description |
| Operational |
🟢 Green |
Service is fully functional |
| Performance Issues |
🟡 Yellow |
Service is experiencing degraded performance |
| Partial Outage |
🟠 Orange |
Some users affected |
| Major Outage |
🔴 Red |
Service is unavailable |
Create reusable templates for common incident types:
## Impact
- Affected services: [List services]
- User impact: [Describe impact]
## Investigation
- Started: [Timestamp]
- Status: Investigating
## Next Update
Expected within: [Timeframe]
¶ Scheduled Maintenance Template
## Maintenance Window
- **Start:** [Date/Time]
- **End:** [Date/Time]
- **Duration:** [Expected duration]
## Affected Services
- [List affected components]
## Impact
[Describe expected impact during maintenance]
-
Admin Access:
- Limit admin users to essential personnel
- Enable two-factor authentication (v3.x)
- Use strong, unique passwords
-
API Access:
- Generate API keys for integrations
- Rotate keys periodically
- Use separate keys per integration
-
Subscriber Management:
- Enable email verification for subscribers
- Configure unsubscribe preferences
- Set notification frequency limits
{
"url": "https://hooks.example.com/cachet",
"secret": "your-webhook-secret",
"events": [
"incident.created",
"incident.updated",
"incident.resolved",
"component.status_changed",
"scheduled_maintenance.created"
]
}
¶ Backup and Recovery 💾
#!/bin/bash
# /usr/local/bin/cachet-backup.sh
BACKUP_DIR="/backup/cachet"
DATE=$(date +%Y%m%d_%H%M%S)
DB_HOST="db"
DB_USER="cachet"
DB_PASS="YourSecurePassword"
DB_NAME="cachet"
# Create backup directory
mkdir -p "$BACKUP_DIR"
# Backup database
mysqldump -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" | \
gzip > "$BACKUP_DIR/cachet-db-$DATE.sql.gz"
# Backup volumes (Docker)
docker run --rm -v cachet_data:/data -v "$BACKUP_DIR:/backup" \
alpine tar -czf "/backup/cachet-data-$DATE.tar.gz" -C /data .
# Retention: Keep last 30 days
find "$BACKUP_DIR" -name "cachet-*.gz" -mtime +30 -delete
echo "Backup completed: $DATE"
# Add to crontab (daily at 2:00 AM)
0 2 * * * /usr/local/bin/cachet-backup.sh >> /var/log/cachet-backup.log 2>&1
# Stop Cachet
docker compose down
# Restore database
gunzip -c /backup/cachet/cachet-db-20260216_020000.sql.gz | \
mysql -h db -u cachet -p cachet
# Restore volumes
docker run --rm -v cachet_data:/data -v /backup/cachet:/backup \
alpine tar -xzf /backup/cachet/cachet-data-20260216_020000.tar.gz -C /data
# Restart
docker compose up -d
¶ Monitoring and Logging 📈
| Endpoint |
Description |
/api |
API availability check |
/api/v1/incidents |
Incidents API check |
/setup |
Setup status (returns 404 if configured) |
| Deployment |
Log Location |
| Docker |
docker compose logs cachet |
| Manual |
/var/www/cachet/storage/logs/laravel.log |
| Nginx |
/var/log/nginx/cachet_access.log |
| PHP-FPM |
/var/log/php-fpm/error.log |
# /etc/logrotate.d/cachet
/var/www/cachet/storage/logs/*.log {
daily
rotate 30
compress
delaycompress
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload php-fpm
endscript
}
; /etc/php/8.2/fpm/pool.d/cachet.conf
[cachet]
user = www-data
group = www-data
listen = /run/php/php8.2-fpm-cachet.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 15
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 10
pm.max_requests = 500
php_value[upload_max_filesize] = 10M
php_value[max_execution_time] = 60
# /etc/redis/redis.conf
maxmemory 256mb
maxmemory-policy allkeys-lru
appendonly yes
appendfsync everysec
-- Analyze tables periodically
ANALYZE TABLE incidents, components, metrics;
-- Add indexes for frequently queried columns
CREATE INDEX idx_incidents_status ON incidents(status);
CREATE INDEX idx_components_group_id ON components(group_id);
Any questions?
Feel free to contact us. Find all contact information on our contact page.