Getting Started

Welcome to Status Nugget documentation. Get up and running quickly with our comprehensive guides.

Cloud Deployment

Get started with our managed cloud service. Quick setup, no infrastructure management required.

Learn More

Self-Hosted

Deploy Status Nugget on your own infrastructure. Full control and customization options.

Learn More

Overview

Status Nugget is a powerful status page and monitoring solution that helps you keep your users informed about the health and availability of your services.

What is Status Nugget?

Status Nugget provides real-time status updates, incident management, and service monitoring capabilities. Whether you're running a small application or managing enterprise infrastructure, Status Nugget helps you maintain transparency with your users.

Key Benefits

  • Real-time Monitoring: Track your services 24/7 with automated health checks
  • Incident Management: Communicate outages and maintenance windows effectively
  • User Transparency: Build trust by keeping users informed about service status
  • Customizable: Brand your status page to match your company identity
  • Multiple Deployment Options: Choose between cloud or self-hosted solutions

Features

Real-time Status Monitoring

Monitor your services in real-time with automated health checks and status updates.

Incident Management

Create, update, and resolve incidents with detailed timelines and impact assessments.

Custom Branding

Customize your status page with your brand colors, logo, and domain.

Analytics & Reports

Track uptime, response times, and incident frequency with detailed analytics.

Security & Privacy

Enterprise-grade security with SSL encryption and privacy controls.

RESTful API

Integrate Status Nugget with your existing tools using our comprehensive API.

Cloud Deployment

Deploy Status Nugget on our managed cloud infrastructure. Get started in minutes with zero configuration.

Cloud Setup

Quick Start

Getting started with Status Nugget Cloud is simple and takes just a few minutes.

Step 1: Sign Up

Visit our website and create your account. You can start with a free trial that includes all features.

1. Navigate to https://statusnugget.com/signup
2. Enter your email address and create a password
3. Verify your email address
4. Complete your profile setup

Step 2: Create Your Status Page

After signing up, you'll be guided through creating your first status page.

1. Click "Create Status Page" from the dashboard
2. Enter your page name and URL slug
3. Choose a template or start from scratch
4. Configure basic settings

Step 3: Add Your Services

Add the services you want to monitor to your status page.

1. Go to "Services" in the navigation
2. Click "Add Service"
3. Enter service name and description
4. Configure monitoring endpoints (optional)
5. Set service status

Step 4: Configure Monitoring

Set up automated health checks for your services.

1. Navigate to "Monitoring" settings
2. Add monitoring endpoints (HTTP, HTTPS, TCP, etc.)
3. Configure check intervals
4. Set up alert notifications
5. Enable automatic status updates
Success! Your status page is now live and monitoring your services.

Cloud Configuration

General Settings

Configure your status page appearance and behavior from the settings page.

Page Settings

  • Page Name: The display name for your status page
  • Page URL: Your custom status page URL (e.g., status.yourcompany.com)
  • Language: Select the default language for your status page
  • Timezone: Set the timezone for incident timestamps

Branding

Customize your status page to match your brand identity.

Settings → Branding → Customize:
- Upload your logo (PNG, SVG recommended)
- Set primary and secondary colors
- Choose font family
- Configure favicon
- Set meta tags for SEO

Notifications

Configure how you receive alerts and updates.

  • Email Notifications: Receive alerts via email
  • Slack Integration: Get updates in your Slack channels
  • Webhook Support: Send custom webhooks to your endpoints
  • SMS Alerts: Get critical alerts via SMS (premium feature)

API Configuration

Generate API keys to integrate Status Nugget with your applications.

Settings → API → Generate API Key:
1. Click "Generate New API Key"
2. Name your API key (e.g., "Production App")
3. Set permissions (read, write, admin)
4. Copy and securely store your API key
5. Use the key in your API requests

Custom Domain

Use your own domain for your status page (available on Pro and Enterprise plans).

Settings → Custom Domain → Configure:
1. Enter your domain (e.g., status.yourcompany.com)
2. Add CNAME record pointing to statusnugget.com
3. Verify domain ownership
4. Enable SSL certificate (automatic)
5. Update DNS settings

Cloud-Specific Features

Managed Infrastructure

We handle all server management, updates, and maintenance. Focus on your business, not infrastructure.

Automatic Scaling

Your status page automatically scales to handle traffic spikes without any configuration.

Global CDN

Fast loading times worldwide with our global content delivery network.

Automatic Backups

Your data is automatically backed up daily with point-in-time recovery options.

99.9% Uptime SLA

Guaranteed uptime with our enterprise-grade infrastructure and monitoring.

24/7 Support

Get help when you need it with our round-the-clock support team.

Self-Hosted Deployment

Deploy Status Nugget on your own infrastructure for complete control and customization.

Self-Hosted Setup

Choose your preferred deployment method: Standalone installation or Docker containerization.

CPU Architecture Notice: Status Nugget requires x86/x86_64 compatible CPUs. ARM architecture (ARM64/ARMv8) is not fully supported yet, but we're actively working on a fix. Please ensure your hosting provider offers x86 compatible instances.

System Requirements

Component Minimum Recommended
CPU 2 cores (x86 compatible) 4+ cores (x86 compatible)
RAM 4 GB 8+ GB
Storage 20 GB 50+ GB SSD
OS Linux (Ubuntu 20.04+, Debian 11+, CentOS 8+)
Database PostgreSQL 12+ or MySQL 8+

Choose Your Deployment Method

Standalone Setup

Manual Installation

Install Status Nugget directly on your server with full control over the environment and dependencies.

Best For:

  • Custom server configurations
  • Existing infrastructure
  • Maximum control and customization
  • Specific PHP/Node.js versions
View Standalone Guide

Docker Setup

Recommended

Deploy Status Nugget using Docker containers for easy setup, updates, and portability.

Best For:

  • Quick deployment
  • Consistent environments
  • Easy updates and maintenance
  • Isolated dependencies
View Docker Guide

Standalone Setup

Install Status Nugget directly on your server without Docker. This method gives you full control over your environment.

Note: This installation method requires manual setup of PHP, Node.js, database, and web server. For easier deployment, consider using Docker Setup.

Prerequisites

Before you begin, ensure you have a server with:

  • x86/x86_64 CPU architecture
  • Root or sudo access
  • Ubuntu 20.04+, Debian 11+, or CentOS 8+
  • At least 2 CPU cores, 4GB RAM, and 20GB storage

Step 1: Install System Dependencies

Ubuntu/Debian

# Update package index
sudo apt update
sudo apt upgrade -y

# Install PHP 8.1+ and required extensions
sudo apt install -y php8.1 php8.1-fpm php8.1-cli \
php8.1-pgsql php8.1-mysql php8.1-curl \
php8.1-mbstring php8.1-xml php8.1-zip php8.1-gd \
php8.1-bcmath php8.1-intl php8.1-redis

# Install Composer
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
sudo chmod +x /usr/local/bin/composer

# Install Node.js 18.x and npm
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs

# Install PostgreSQL (or MySQL if preferred)
sudo apt install -y postgresql postgresql-contrib

# Install Redis (recommended for caching and queues)
sudo apt install -y redis-server

# Install Nginx (or Apache if preferred)
sudo apt install -y nginx

# Verify installations
php -v
composer --version
node -v
npm -v
psql --version

CentOS/RHEL

# Install EPEL repository
sudo yum install -y epel-release

# Install Remi repository for PHP 8.1
sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
sudo dnf module reset php
sudo dnf module enable php:remi-8.1

# Install PHP and extensions
sudo yum install -y php php-fpm php-cli \
php-pgsql php-mysqlnd php-curl \
php-mbstring php-xml php-zip php-gd \
php-bcmath php-intl php-redis

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

# Install Node.js 18.x
curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
sudo yum install -y nodejs

# Install PostgreSQL
sudo yum install -y postgresql-server postgresql-contrib
sudo postgresql-setup --initdb

# Install Redis
sudo yum install -y redis

# Install Nginx
sudo yum install -y nginx

# Start and enable services
sudo systemctl start postgresql redis nginx
sudo systemctl enable postgresql redis nginx

Step 2: Configure Database

PostgreSQL Setup

# Switch to postgres user
sudo -u postgres psql

# Create database and user
CREATE DATABASE statusnugget;
CREATE USER statusnugget WITH PASSWORD 'your-secure-password';
ALTER ROLE statusnugget SET client_encoding TO 'utf8';
ALTER ROLE statusnugget SET default_transaction_isolation TO 'read committed';
ALTER ROLE statusnugget SET timezone TO 'UTC';
GRANT ALL PRIVILEGES ON DATABASE statusnugget TO statusnugget;
\q

# Test connection
psql -U statusnugget -d statusnugget -h localhost

MySQL Setup (Alternative)

# Install MySQL
sudo apt install -y mysql-server # Ubuntu/Debian
# OR
sudo yum install -y mysql-server # CentOS/RHEL

# Secure MySQL installation
sudo mysql_secure_installation

# Create database and user
sudo mysql -u root -p

CREATE DATABASE statusnugget CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'statusnugget'@'localhost' IDENTIFIED BY 'your-secure-password';
GRANT ALL PRIVILEGES ON statusnugget.* TO 'statusnugget'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Step 3: Install Status Nugget

# Create application directory
sudo mkdir -p /var/www/statusnugget
sudo chown $USER:$USER /var/www/statusnugget
cd /var/www/statusnugget

# Clone the repository
git clone https://github.com/statusnugget/statusnugget.git .

# Install PHP dependencies
composer install --no-dev --optimize-autoloader

# Install Node.js dependencies
npm install

# Build frontend assets
npm run build

# Copy environment file
cp .env.example .env

# Generate application key
php artisan key:generate

Step 4: Configure Environment

Edit the .env file with your configuration:

# Edit environment file
nano /var/www/statusnugget/.env

Configure the following essential settings:

APP_NAME="Status Nugget"
APP_ENV=production
APP_DEBUG=false
APP_URL=https://status.yourdomain.com

# Database Configuration (PostgreSQL)
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=statusnugget
DB_USERNAME=statusnugget
DB_PASSWORD=your-secure-password

# Redis Configuration
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
CACHE_DRIVER=redis
QUEUE_CONNECTION=redis

# Mail Configuration
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=your-username
MAIL_PASSWORD=your-password
MAIL_FROM_ADDRESS=noreply@yourdomain.com
MAIL_FROM_NAME="${APP_NAME}"

Step 5: Initialize Database

# Run database migrations
php artisan migrate

# Create admin user
php artisan user:create

# Cache configuration for better performance
php artisan config:cache
php artisan route:cache
php artisan view:cache

Step 6: Configure Web Server

Nginx Configuration

Create an Nginx configuration file:

# Create Nginx configuration
sudo nano /etc/nginx/sites-available/statusnugget

Add the following configuration:

server {
listen 80;
server_name status.yourdomain.com;
root /var/www/statusnugget/public;

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

index index.php;

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:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_hide_header X-Powered-By;
}

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

Enable the site and restart Nginx:

# Enable site (Ubuntu/Debian)
sudo ln -s /etc/nginx/sites-available/statusnugget /etc/nginx/sites-enabled/

# Test Nginx configuration
sudo nginx -t

# Restart Nginx
sudo systemctl restart nginx

Apache Configuration (Alternative)

If using Apache instead of Nginx:

# Create Apache virtual host
sudo nano /etc/apache2/sites-available/statusnugget.conf
<VirtualHost *:80>
ServerName status.yourdomain.com
DocumentRoot /var/www/statusnugget/public

<Directory /var/www/statusnugget/public>
AllowOverride All
Require all granted
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# Enable site and required modules
sudo a2ensite statusnugget.conf
sudo a2enmod rewrite
sudo systemctl restart apache2

Step 7: Set Permissions

# Set proper ownership
sudo chown -R www-data:www-data /var/www/statusnugget

# Set directory permissions
sudo chmod -R 755 /var/www/statusnugget
sudo chmod -R 775 /var/www/statusnugget/storage
sudo chmod -R 775 /var/www/statusnugget/bootstrap/cache

Step 8: Set Up Queue Worker

Status Nugget uses queues for background jobs. Set up a supervisor to keep the queue worker running:

# Install Supervisor
sudo apt install -y supervisor # Ubuntu/Debian
# OR
sudo yum install -y supervisor # CentOS/RHEL

# Create supervisor configuration
sudo nano /etc/supervisor/conf.d/statusnugget-worker.conf
[program:statusnugget-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/statusnugget/artisan queue:work redis --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
numprocs=2
redirect_stderr=true
stdout_logfile=/var/www/statusnugget/storage/logs/worker.log
stopwaitsecs=3600
# Reload supervisor configuration
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start statusnugget-worker:*

Step 9: Set Up Scheduled Tasks

Configure cron to run scheduled tasks:

# Edit crontab
sudo crontab -e -u www-data

Add the following line:

* * * * * cd /var/www/statusnugget && php artisan schedule:run >> /dev/null 2>&1

Step 10: Set Up SSL Certificate

Secure your installation with Let's Encrypt:

# Install Certbot
sudo apt install -y certbot python3-certbot-nginx # For Nginx
# OR
sudo apt install -y certbot python3-certbot-apache # For Apache

# Obtain SSL certificate
sudo certbot --nginx -d status.yourdomain.com
# OR
sudo certbot --apache -d status.yourdomain.com

# Test auto-renewal
sudo certbot renew --dry-run
Installation Complete! Your Status Nugget instance should now be accessible at your configured domain. Visit the admin panel to complete the setup.

Troubleshooting Standalone Installation

Permission Issues

# Fix storage permissions
sudo chown -R www-data:www-data /var/www/statusnugget/storage
sudo chmod -R 775 /var/www/statusnugget/storage

PHP-FPM Not Running

# Check PHP-FPM status
sudo systemctl status php8.1-fpm

# Restart PHP-FPM
sudo systemctl restart php8.1-fpm

Database Connection Errors

# Test database connection
psql -U statusnugget -d statusnugget -h localhost

# Check PostgreSQL is running
sudo systemctl status postgresql

# Verify .env database credentials

Docker Setup

Deploy Status Nugget using Docker - the easiest and most portable deployment method. Works on any x86 compatible Linux server.

Recommended: Docker deployment is the recommended method for self-hosting Status Nugget. It simplifies setup, updates, and maintenance.

Prerequisites

Before you begin, ensure you have:

  • A server with x86/x86_64 architecture
  • Root or sudo access
  • At least 2 CPU cores, 4GB RAM, and 20GB storage
  • Ubuntu 20.04+, Debian 11+, or compatible Linux distribution

Step 1: Install Docker and Docker Compose

Ubuntu/Debian Installation

# Update package index
sudo apt update

# Install prerequisites
sudo apt install -y ca-certificates curl gnupg lsb-release

# Add Docker's official GPG key
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# Set up Docker repository
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Install Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Start and enable Docker
sudo systemctl start docker
sudo systemctl enable docker

# Add your user to docker group (optional, to run without sudo)
sudo usermod -aG docker $USER

# Log out and back in for group changes to take effect
# Verify installation
docker --version
docker compose version

CentOS/RHEL Installation

# Install required packages
sudo yum install -y yum-utils

# Add Docker repository
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# Install Docker Engine
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Start and enable Docker
sudo systemctl start docker
sudo systemctl enable docker

# Verify installation
docker --version
docker compose version

Step 2: Prepare Your Environment

Create a directory for your Status Nugget installation:

# Create project directory
mkdir -p ~/statusnugget
cd ~/statusnugget

# Clone the repository (or download the docker-compose.yml)
git clone https://github.com/statusnugget/statusnugget.git .
# OR download just the docker-compose.yml file

Step 3: Configure Environment Variables

Create a .env file with your configuration:

# Copy example environment file
cp .env.example .env

# Edit the .env file
nano .env

Configure the following essential variables:

# Application Settings
APP_NAME="Status Nugget"
APP_ENV=production
APP_DEBUG=false
APP_URL=https://status.yourdomain.com

# Database Configuration
DB_CONNECTION=pgsql
DB_HOST=db
DB_PORT=5432
DB_DATABASE=statusnugget
DB_USERNAME=statusnugget
DB_PASSWORD=your-secure-password-here

# Redis Configuration
REDIS_HOST=redis
REDIS_PORT=6379

# Mail Configuration (optional)
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=your-username
MAIL_PASSWORD=your-password
MAIL_FROM_ADDRESS=noreply@yourdomain.com

Step 4: Docker Compose Configuration

Here's a complete docker-compose.yml example:

version: '3.8'

services:
app:
image: statusnugget/app:latest
container_name: statusnugget_app
restart: unless-stopped
working_dir: /var/www
volumes:
- ./storage:/var/www/storage
- ./bootstrap/cache:/var/www/bootstrap/cache
environment:
- APP_ENV=production
- APP_DEBUG=false
- DB_HOST=db
- DB_DATABASE=statusnugget
- DB_USERNAME=statusnugget
- DB_PASSWORD=${DB_PASSWORD}
- REDIS_HOST=redis
depends_on:
- db
- redis
networks:
- statusnugget

web:
image: nginx:alpine
container_name: statusnugget_web
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./public:/var/www/public
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- app
networks:
- statusnugget

db:
image: postgres:15-alpine
container_name: statusnugget_db
restart: unless-stopped
environment:
- POSTGRES_DB=statusnugget
- POSTGRES_USER=statusnugget
- POSTGRES_PASSWORD=${DB_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- statusnugget

redis:
image: redis:7-alpine
container_name: statusnugget_redis
restart: unless-stopped
volumes:
- redis_data:/data
networks:
- statusnugget

volumes:
postgres_data:
redis_data:

networks:
statusnugget:
driver: bridge

Step 5: Deploy Status Nugget

Now you're ready to start your Status Nugget instance:

# Start all services in detached mode
docker compose up -d

# Check if all containers are running
docker compose ps

# View logs to ensure everything started correctly
docker compose logs -f

Step 6: Initialize the Application

Once the containers are running, initialize the database and create an admin user:

# Run database migrations
docker compose exec app php artisan migrate

# Create admin user
docker compose exec app php artisan user:create

# Generate application key (if not already set)
docker compose exec app php artisan key:generate

# Clear and cache configuration
docker compose exec app php artisan config:cache
docker compose exec app php artisan route:cache
docker compose exec app php artisan view:cache
Success! Your Status Nugget instance should now be accessible at http://your-server-ip or your configured domain.

Docker Management Commands

Common commands for managing your Status Nugget Docker deployment:

Container Management

# Start all services
docker compose up -d

# Stop all services
docker compose stop

# Stop and remove all containers
docker compose down

# Restart all services
docker compose restart

# Restart a specific service
docker compose restart app

# View running containers
docker compose ps

# View container logs
docker compose logs
docker compose logs -f app # Follow logs for app container
docker compose logs --tail=100 app # Last 100 lines

Application Commands

# Run Artisan commands
docker compose exec app php artisan [command]

# Examples:
docker compose exec app php artisan migrate
docker compose exec app php artisan cache:clear
docker compose exec app php artisan queue:work
docker compose exec app php artisan tinker

# Access container shell
docker compose exec app bash
docker compose exec db psql -U statusnugget -d statusnugget

Backup and Restore

# Backup database
docker compose exec db pg_dump -U statusnugget statusnugget > backup_$(date +%Y%m%d_%H%M%S).sql

# Backup volumes (storage, etc.)
docker run --rm -v statusnugget_storage:/data -v $(pwd):/backup alpine tar czf /backup/storage_backup.tar.gz /data

# Restore database
docker compose exec -T db psql -U statusnugget statusnugget < backup_20240101_120000.sql

# Restore volumes
docker run --rm -v statusnugget_storage:/data -v $(pwd):/backup alpine tar xzf /backup/storage_backup.tar.gz -C /

Updates and Maintenance

# Pull latest images
docker compose pull

# Update to latest version
docker compose pull
docker compose up -d
docker compose exec app php artisan migrate
docker compose exec app php artisan config:cache

# View image versions
docker compose images

# Clean up unused images and containers
docker system prune -a

Configuring Web Server (Nginx/Apache)

If you want to use an external web server instead of the Docker nginx container, configure it as a reverse proxy:

Nginx Reverse Proxy Configuration

server {
listen 80;
server_name status.yourdomain.com;

location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

Then update your docker-compose.yml to expose the app on port 8080 instead of using the web container:

app:
# ... other config ...
ports:
- "8080:80" # Expose on port 8080

SSL/HTTPS Setup

To enable HTTPS, use Let's Encrypt with Certbot:

# Install Certbot
sudo apt install certbot python3-certbot-nginx

# Obtain SSL certificate
sudo certbot --nginx -d status.yourdomain.com

# Certbot will automatically configure Nginx
# Auto-renewal is set up automatically

Troubleshooting Docker Deployment

Containers Won't Start

# Check container status
docker compose ps

# View detailed logs
docker compose logs

# Check Docker daemon
sudo systemctl status docker

# Verify Docker Compose version
docker compose version

Database Connection Issues

# Check if database container is running
docker compose ps db

# Test database connection
docker compose exec db psql -U statusnugget -d statusnugget

# Check database logs
docker compose logs db

# Verify environment variables
docker compose exec app env | grep DB_

Permission Issues

# Fix storage permissions
sudo chown -R $USER:$USER storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache

# Or run as root user in container (not recommended for production)
# Add to docker-compose.yml:
# user: root

Port Already in Use

# Check what's using the port
sudo netstat -tulpn | grep :80
sudo lsof -i :80

# Change port in docker-compose.yml
ports:
- "8080:80" # Use different host port

Out of Disk Space

# Check disk usage
df -h
docker system df

# Clean up unused Docker resources
docker system prune -a --volumes

# Remove old images
docker image prune -a

Docker on Specific Hosting Providers

PebbleHost

  1. Provision a VPS with Ubuntu 20.04+ or Debian 11+
  2. SSH into your server
  3. Follow Step 1 above to install Docker
  4. Continue with the remaining steps

Zaphosting

  1. Create a VPS instance with x86 architecture
  2. Select Ubuntu or Debian during setup
  3. Install Docker using the instructions above
  4. Deploy Status Nugget with Docker Compose

Best Practices

Tips for Production:
  • Always use strong passwords for database and application
  • Set up automated backups for your database and volumes
  • Keep Docker and images updated regularly
  • Monitor container resource usage
  • Use environment variables for sensitive data (never commit .env files)
  • Set up log rotation to prevent disk space issues
  • Use a reverse proxy (Nginx/Apache) for SSL termination
  • Enable firewall and restrict access to necessary ports only

Self-Hosted Configuration

Environment Variables

Configure Status Nugget using environment variables in your .env file.

Application Settings

APP_NAME="Status Nugget"
APP_ENV=production
APP_KEY=base64:your-generated-key
APP_DEBUG=false
APP_URL=https://status.yourdomain.com

# Timezone
APP_TIMEZONE=UTC

Database Configuration

# PostgreSQL
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=statusnugget
DB_USERNAME=statusnugget
DB_PASSWORD=your-secure-password

# Or MySQL
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=statusnugget
DB_USERNAME=statusnugget
DB_PASSWORD=your-secure-password

Cache Configuration

# Redis (Recommended)
CACHE_DRIVER=redis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

# Or use file cache
CACHE_DRIVER=file

Queue Configuration

# Redis Queue (Recommended)
QUEUE_CONNECTION=redis

# Or database queue
QUEUE_CONNECTION=database

# Start queue worker
php artisan queue:work

Mail Configuration

MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=your-username
MAIL_PASSWORD=your-password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=noreply@yourdomain.com
MAIL_FROM_NAME="${APP_NAME}"

Web Server Configuration

Nginx Configuration

server {
listen 80;
server_name status.yourdomain.com;
root /var/www/statusnugget/public;

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

index index.php;

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:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}

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

Apache Configuration

<VirtualHost *:80>
ServerName status.yourdomain.com
DocumentRoot /var/www/statusnugget/public

<Directory /var/www/statusnugget/public>
AllowOverride All
Require all granted
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

SSL Certificate

Secure your installation with SSL using Let's Encrypt.

# Install Certbot
sudo apt install certbot python3-certbot-nginx

# Obtain certificate
sudo certbot --nginx -d status.yourdomain.com

# Auto-renewal is set up automatically
# Test renewal
sudo certbot renew --dry-run

Cron Jobs

Set up scheduled tasks for monitoring and maintenance.

# Edit crontab
crontab -e

# Add the following lines
* * * * * cd /var/www/statusnugget && php artisan schedule:run >> /dev/null 2>&1

System Requirements Details

Operating System

  • Ubuntu 20.04 LTS or newer
  • Debian 11 or newer
  • CentOS 8 or newer
  • RHEL 8 or newer

Software Dependencies

  • PHP 8.1 or higher with extensions: pdo, pdo_pgsql/pdo_mysql, curl, mbstring, xml, zip, gd
  • Composer 2.0 or higher
  • Node.js 18.x or higher
  • npm 9.x or higher
  • PostgreSQL 12+ or MySQL 8+
  • Redis 6+ (recommended for caching and queues)
  • Nginx 1.18+ or Apache 2.4+

CPU Architecture

Important: Status Nugget currently requires x86/x86_64 compatible CPUs. ARM architecture (ARM64/ARMv8) is not fully supported at this time, but we're actively working on ARM compatibility. Please ensure your hosting provider offers x86 compatible instances.
  • Supported: x86, x86_64 (Intel/AMD processors)
  • Not Supported (yet): ARM, ARM64, ARMv8 (Apple Silicon, AWS Graviton, etc.)
  • Status: ARM support is in development - stay tuned for updates!

Network Requirements

  • Outbound HTTPS access for monitoring endpoints
  • Port 80 and 443 open for web traffic
  • SMTP access for email notifications (optional)

Hosting Providers

Deploy Status Nugget on popular hosting providers with one-click installations and managed services.

Note: All hosting providers listed below offer x86 compatible instances suitable for Status Nugget deployment.

Docker Deployment

Recommended

Deploy Status Nugget using Docker on any hosting provider. Docker provides the easiest and most portable deployment method.

Why Docker?

  • Easy setup and updates
  • Consistent environment across providers
  • Isolated dependencies
  • Simple backup and restore
  • Works on any x86 Linux server
  • Easy scaling and management
  • Version control for deployments
  • Quick rollback capabilities

Requirements

  • Any VPS or dedicated server with x86 architecture
  • Docker Engine 20.10+ and Docker Compose 2.0+
  • Minimum 2 CPU cores, 4GB RAM, 20GB storage
  • Ubuntu 20.04+, Debian 11+, or any Docker-compatible Linux

Hosting Providers

PebbleHost

Available Now

Deploy Status Nugget on PebbleHost's reliable infrastructure with affordable pricing and excellent support.

Features

  • One-click Docker deployment
  • SSD storage with fast I/O
  • 24/7 customer support
  • DDoS protection included
  • Full root access
  • Multiple data center locations

Recommended Plans

  • Budget VPS: 2 vCPU, 4GB RAM, 50GB SSD - Perfect for small deployments
  • Premium VPS: 4 vCPU, 8GB RAM, 100GB SSD - Recommended for production

Getting Started with Docker

  1. Sign up for a PebbleHost account
  2. Choose a VPS plan with x86 architecture
  3. Select Ubuntu 20.04+ or Debian 11+
  4. Install Docker and Docker Compose (see Docker Setup)
  5. Follow our Docker Setup Guide
  6. Deploy Status Nugget with docker-compose up -d
Visit PebbleHost

Zaphosting

Available Now

Host Status Nugget on Zaphosting's high-performance servers with competitive pricing and global reach.

Features

  • High-performance x86 servers
  • Automated backups
  • 99.9% uptime guarantee
  • Free SSL certificates
  • Control panel access
  • Global network infrastructure

Recommended Plans

  • Starter VPS: 2 vCPU, 4GB RAM, 60GB SSD - Great for testing
  • Business VPS: 4 vCPU, 8GB RAM, 120GB SSD - Ideal for production
  • Enterprise VPS: 8 vCPU, 16GB RAM, 240GB SSD - For high-traffic deployments

Getting Started with Docker

  1. Create a Zaphosting account
  2. Select a VPS with x86 architecture
  3. Choose Ubuntu 20.04+ or Debian 11+
  4. Install Docker and Docker Compose
  5. Follow our Docker Setup Guide
  6. Configure monitoring and alerts
Visit Zaphosting

Elestio

Coming Soon

Elestio will offer managed Status Nugget deployments with automated updates and professional support.

Coming Soon: We're working with Elestio to provide a one-click managed deployment option. Stay tuned for updates!

Planned Features

  • One-click Status Nugget deployment
  • Automated updates and maintenance
  • Managed database and backups
  • Built-in monitoring and alerts
  • Professional support included
  • Scalable infrastructure

Expected Benefits

  • Zero-configuration setup
  • Automatic security patches
  • High availability by default
  • Performance optimization
  • 24/7 monitoring

Want to be notified? Subscribe to our newsletter or follow us on social media to get updates when Elestio support is available.

Choosing a Hosting Provider

When selecting a hosting provider for Status Nugget, consider the following factors:

Essential Requirements

  • x86/x86_64 CPU architecture
  • Minimum 2 CPU cores, 4GB RAM
  • Ubuntu 20.04+ or Debian 11+
  • Root/SSH access
  • Outbound internet connectivity

Recommended Features

  • SSD storage for better performance
  • Automated backups
  • DDoS protection
  • Multiple data center locations
  • 24/7 customer support

Deployment Tips

Pro Tips:
  • Always verify CPU architecture before purchasing a hosting plan
  • Start with a smaller plan and scale up as needed
  • Enable automated backups from day one
  • Use Docker Compose for easier management and updates
  • Set up monitoring for your Status Nugget instance itself

Updates & Maintenance

Updating Status Nugget

Keep your self-hosted installation up to date with the latest features and security patches.

# Backup your database first
pg_dump -U statusnugget statusnugget > backup_$(date +%Y%m%d).sql

# Pull latest changes
git pull origin main

# Update dependencies
composer install --no-dev --optimize-autoloader
npm install
npm run build

# Run database migrations
php artisan migrate

# Clear caches
php artisan config:clear
php artisan cache:clear
php artisan view:clear

# Restart services
sudo systemctl restart php8.1-fpm
sudo systemctl restart nginx

Backup Strategy

  • Database backups: Daily automated backups
  • File backups: Weekly backups of storage and configuration
  • Test restores: Monthly restore tests to verify backup integrity

Monitoring & Logs

Monitor your self-hosted installation for issues and performance.

# View application logs
tail -f storage/logs/laravel.log

# View web server logs
tail -f /var/log/nginx/error.log
tail -f /var/log/nginx/access.log

# Check queue status
php artisan queue:monitor

# View scheduled tasks
php artisan schedule:list

API Documentation

Integrate Status Nugget with your applications using our comprehensive RESTful API.

Authentication

All API requests require authentication using an API key. Include your API key in the request header:

Authorization: Bearer YOUR_API_KEY

Generating API Keys

  1. Log in to your Status Nugget admin panel
  2. Navigate to Settings → API
  3. Click "Generate New API Key"
  4. Name your key (e.g., "Production App")
  5. Set permissions (read, write, admin)
  6. Copy and securely store your API key
Security: Never commit API keys to version control. Store them securely and rotate them regularly.

Base URL

All API endpoints are relative to your Status Nugget installation:

https://status.yourdomain.com/api/v1

Endpoints

Status Pages

# Get all status pages
GET /api/v1/status-pages

# Get specific status page
GET /api/v1/status-pages/{id}

# Create status page
POST /api/v1/status-pages
Content-Type: application/json

{
"name": "My Status Page",
"slug": "my-status-page",
"description": "Status page description"
}

# Update status page
PUT /api/v1/status-pages/{id}

# Delete status page
DELETE /api/v1/status-pages/{id}

Services

# Get all services
GET /api/v1/services

# Get specific service
GET /api/v1/services/{id}

# Create service
POST /api/v1/services
{
"name": "API Service",
"description": "Main API endpoint",
"status": "operational",
"monitor_url": "https://api.example.com/health"
}

# Update service status
PATCH /api/v1/services/{id}/status
{
"status": "degraded"
}

Incidents

# Get all incidents
GET /api/v1/incidents

# Get specific incident
GET /api/v1/incidents/{id}

# Create incident
POST /api/v1/incidents
{
"title": "Service Outage",
"description": "We are experiencing issues",
"status": "investigating",
"impact": "major",
"affected_services": [1, 2, 3]
}

# Update incident
PUT /api/v1/incidents/{id}

# Resolve incident
POST /api/v1/incidents/{id}/resolve

Metrics

# Get service metrics
GET /api/v1/services/{id}/metrics?start=2024-01-01&end=2024-01-31

# Get uptime statistics
GET /api/v1/services/{id}/uptime?period=30d

Response Format

All API responses follow a consistent format:

Success Response

{
"success": true,
"data": {
"id": 1,
"name": "API Service",
"status": "operational"
}
}

Error Response

{
"success": false,
"error": {
"message": "Resource not found",
"code": 404
}
}

Rate Limiting

API requests are rate-limited to prevent abuse:

  • Free tier: 60 requests per minute
  • Pro tier: 300 requests per minute
  • Enterprise: Custom limits

Rate limit headers are included in all responses:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1640995200

Example Usage

cURL

# Get all services
curl -X GET \
https://status.yourdomain.com/api/v1/services \
-H "Authorization: Bearer YOUR_API_KEY"

# Create incident
curl -X POST \
https://status.yourdomain.com/api/v1/incidents \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Service Maintenance",
"status": "scheduled",
"impact": "minor"
}'

JavaScript (Fetch API)

// Get services
fetch('https://status.yourdomain.com/api/v1/services', {
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
})
.then(response => response.json())
.then(data => console.log(data));

// Create incident
fetch('https://status.yourdomain.com/api/v1/incidents', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
title: 'Service Maintenance',
status: 'scheduled',
impact: 'minor'
})
})
.then(response => response.json())
.then(data => console.log(data));

Python

import requests

# Get services
response = requests.get(
'https://status.yourdomain.com/api/v1/services',
headers={'Authorization': 'Bearer YOUR_API_KEY'}
)
print(response.json())

# Create incident
response = requests.post(
'https://status.yourdomain.com/api/v1/incidents',
headers={
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
json={
'title': 'Service Maintenance',
'status': 'scheduled',
'impact': 'minor'
}
)
print(response.json())

Advanced Configuration

Advanced configuration options for power users and enterprise deployments.

Performance Optimization

OPcache Configuration

Enable OPcache for improved PHP performance:

# Edit php.ini
sudo nano /etc/php/8.1/fpm/php.ini

# Add or modify:
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0 # Set to 1 in development
opcache.revalidate_freq=0
opcache.fast_shutdown=1

# Restart PHP-FPM
sudo systemctl restart php8.1-fpm

Redis Configuration

Optimize Redis for better caching performance:

# Edit redis.conf
sudo nano /etc/redis/redis.conf

# Recommended settings:
maxmemory 256mb
maxmemory-policy allkeys-lru
save "" # Disable persistence for cache-only Redis

# Restart Redis
sudo systemctl restart redis

Database Optimization

Optimize your database for better performance:

# PostgreSQL optimization
# Edit postgresql.conf
sudo nano /etc/postgresql/15/main/postgresql.conf

# Recommended settings:
shared_buffers = 256MB
effective_cache_size = 1GB
maintenance_work_mem = 128MB
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 200
work_mem = 4MB
min_wal_size = 1GB
max_wal_size = 4GB

Load Balancing

Set up load balancing for high availability:

Nginx Load Balancer Configuration

upstream statusnugget_backend {
least_conn;
server 10.0.0.1:80 weight=3 max_fails=3 fail_timeout=30s;
server 10.0.0.2:80 weight=3 max_fails=3 fail_timeout=30s;
server 10.0.0.3:80 weight=2 max_fails=3 fail_timeout=30s backup;
}

server {
listen 80;
server_name status.yourdomain.com;

location / {
proxy_pass http://statusnugget_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

Session Configuration

Configure session storage for better performance:

# In .env file
SESSION_DRIVER=redis
SESSION_LIFETIME=120
SESSION_ENCRYPT=true
SESSION_PATH=/
SESSION_DOMAIN=null

# For Redis sessions
REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
REDIS_DB=1 # Use separate DB for sessions

Queue Configuration

Optimize queue processing for high-volume deployments:

# In .env file
QUEUE_CONNECTION=redis
QUEUE_DEFAULT=default

# Supervisor configuration for multiple workers
# /etc/supervisor/conf.d/statusnugget-workers.conf
[program:statusnugget-worker-1]
command=php /var/www/statusnugget/artisan queue:work redis --sleep=3 --tries=3
autostart=true
autorestart=true
numprocs=1

[program:statusnugget-worker-2]
command=php /var/www/statusnugget/artisan queue:work redis --sleep=3 --tries=3
autostart=true
autorestart=true
numprocs=1

Logging Configuration

Configure advanced logging options:

# In .env file
LOG_CHANNEL=stack
LOG_LEVEL=info
LOG_DEPRECATIONS_CHANNEL=null
LOG_STDERR_FORMATTER=null

# For file logging with rotation
# In config/logging.php
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'info'),
'days' => 14, # Keep logs for 14 days
],

Monitoring Configuration

Set up advanced monitoring options:

# Health check intervals
MONITOR_INTERVAL=60 # Check every 60 seconds
MONITOR_TIMEOUT=10 # 10 second timeout
MONITOR_RETRIES=3 # Retry 3 times before marking as down

# Notification thresholds
NOTIFICATION_DOWNTIME_THRESHOLD=300 # Notify after 5 minutes
NOTIFICATION_DEGRADED_THRESHOLD=180 # Notify after 3 minutes

Custom Domain Configuration

Configure custom domains for your status pages:

# In .env file
ALLOWED_DOMAINS=status.yourdomain.com,status2.yourdomain.com

# Nginx configuration for custom domain
server {
listen 80;
server_name status.yourdomain.com;
return 301 https://$server_name$request_uri;
}

server {
listen 443 ssl http2;
server_name status.yourdomain.com;
# ... SSL configuration ...
# ... Application configuration ...
}

Security

Best practices and recommendations for securing your Status Nugget installation.

General Security Practices

Keep Software Updated

  • Regularly update Status Nugget to the latest version
  • Keep your operating system and dependencies updated
  • Monitor security advisories
  • Enable automatic security updates where possible

Strong Passwords

Use strong, unique passwords for:

  • Admin accounts
  • Database users
  • API keys
  • SSH access
# Generate strong password
openssl rand -base64 32

# Or use password manager

Application Security

Environment Variables

# Never commit .env file
# Add to .gitignore
echo ".env" >> .gitignore

# Use strong APP_KEY
php artisan key:generate

# Keep APP_DEBUG=false in production
APP_DEBUG=false
APP_ENV=production

File Permissions

# Secure file permissions
find /var/www/statusnugget -type f -exec chmod 644 {} \;
find /var/www/statusnugget -type d -exec chmod 755 {} \;
chmod -R 775 storage bootstrap/cache
chown -R www-data:www-data /var/www/statusnugget

Web Server Security

Nginx Security Headers

# Add to Nginx configuration
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

SSL/TLS Configuration

# Use strong SSL ciphers
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

Database Security

PostgreSQL Security

# Edit pg_hba.conf
sudo nano /etc/postgresql/15/main/pg_hba.conf

# Restrict access to local connections only
host statusnugget statusnugget 127.0.0.1/32 md5

# Use strong passwords
# Change default postgres user password
ALTER USER postgres PASSWORD 'strong-password';

MySQL Security

# Run MySQL secure installation
sudo mysql_secure_installation

# Create dedicated database user
CREATE USER 'statusnugget'@'localhost' IDENTIFIED BY 'strong-password';
GRANT ALL PRIVILEGES ON statusnugget.* TO 'statusnugget'@'localhost';
FLUSH PRIVILEGES;

Firewall Configuration

# UFW firewall setup
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status

API Security

  • Use HTTPS for all API requests
  • Rotate API keys regularly
  • Use the minimum required permissions for API keys
  • Monitor API usage for suspicious activity
  • Implement rate limiting

Backup Security

  • Encrypt backups before storing
  • Store backups in secure, off-site locations
  • Test backup restoration regularly
  • Use strong encryption for backup files
# Encrypt database backup
pg_dump -U statusnugget statusnugget | gpg -c > backup.sql.gpg

# Restore encrypted backup
gpg -d backup.sql.gpg | psql -U statusnugget statusnugget

Troubleshooting Guide

Comprehensive solutions to common issues and problems you might encounter while using Status Nugget.

Tip: Use the chatbot in the bottom-right corner for quick answers to common questions, or search this page using Ctrl+F (Cmd+F on Mac).

Installation Issues

Database Connection Errors

Problem: Unable to connect to database

Symptoms:

  • Error: "SQLSTATE[HY000] [2002] Connection refused"
  • Error: "SQLSTATE[HY000] [1045] Access denied"
  • Application fails to start

Solutions:

# Verify database service is running
sudo systemctl status postgresql # For PostgreSQL
sudo systemctl status mysql # For MySQL

# Check database credentials in .env
cat .env | grep DB_

# Test database connection
psql -U statusnugget -d statusnugget -h localhost # PostgreSQL
mysql -u statusnugget -p statusnugget # MySQL

# Verify database exists
# PostgreSQL:
sudo -u postgres psql -l | grep statusnugget
# MySQL:
mysql -u root -p -e "SHOW DATABASES;" | grep statusnugget

# Check firewall rules
sudo ufw status
sudo iptables -L -n | grep 5432 # PostgreSQL port
sudo iptables -L -n | grep 3306 # MySQL port

Permission Errors

Problem: Permission denied errors when writing files

Symptoms:

  • Error: "The stream or file could not be opened"
  • Logs show permission denied
  • Uploads fail

Solutions:

# Fix storage permissions (Standalone)
sudo chown -R www-data:www-data /var/www/statusnugget/storage
sudo chown -R www-data:www-data /var/www/statusnugget/bootstrap/cache
sudo chmod -R 775 /var/www/statusnugget/storage
sudo chmod -R 775 /var/www/statusnugget/bootstrap/cache

# Fix storage permissions (Docker)
sudo chown -R $USER:$USER storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache

# Verify permissions
ls -la storage/
ls -la bootstrap/cache/

Composer Installation Fails

Problem: Composer install fails with memory or dependency errors

Solutions:

# Increase PHP memory limit
php -d memory_limit=2G /usr/local/bin/composer install

# Or set in php.ini
sudo nano /etc/php/8.1/cli/php.ini
# Change: memory_limit = 512M to memory_limit = 2G

# Clear Composer cache
composer clear-cache

# Install with verbose output
composer install -vvv

# Skip platform requirements if needed
composer install --ignore-platform-reqs

Node.js/npm Installation Issues

Problem: npm install fails or takes too long

Solutions:

# Clear npm cache
npm cache clean --force

# Delete node_modules and reinstall
rm -rf node_modules package-lock.json
npm install

# Use yarn instead
npm install -g yarn
yarn install

# Increase npm timeout
npm config set timeout 60000
npm install

Application Issues

Queue Not Processing

Problem: Jobs stuck in queue

Symptoms:

  • Jobs remain in "pending" status
  • Notifications not sent
  • Background tasks not executing

Solutions:

# Check if queue worker is running (Standalone)
ps aux | grep "queue:work"
sudo supervisorctl status statusnugget-worker:*

# Start queue worker manually
php artisan queue:work redis --tries=3

# Check queue connection (Docker)
docker compose exec app php artisan queue:monitor

# Restart queue worker (Docker)
docker compose restart app
docker compose exec app php artisan queue:restart

# Check Redis connection
redis-cli ping # Should return PONG

# View failed jobs
php artisan queue:failed

# Retry failed jobs
php artisan queue:retry all

500 Internal Server Error

Problem: Application returns 500 error

Solutions:

# Check application logs
tail -f storage/logs/laravel.log

# Enable debug mode temporarily
# In .env: APP_DEBUG=true
# Remember to set back to false in production!

# Clear all caches
php artisan config:clear
php artisan cache:clear
php artisan route:clear
php artisan view:clear

# Rebuild caches
php artisan config:cache
php artisan route:cache
php artisan view:cache

# Check PHP error log
tail -f /var/log/php8.1-fpm.log
tail -f /var/log/nginx/error.log

White Screen / Blank Page

Problem: Page loads but shows blank screen

Solutions:

# Check PHP errors
php artisan config:clear
php artisan view:clear

# Verify file permissions
ls -la storage/logs/

# Check disk space
df -h

# Verify .env file exists and is readable
cat .env | head -20

# Check browser console for JavaScript errors
# Press F12 in browser

Slow Performance

Problem: Application is slow or unresponsive

Solutions:

# Enable OPcache (PHP)
# Edit php.ini
sudo nano /etc/php/8.1/fpm/php.ini
# Uncomment and set:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000

# Restart PHP-FPM
sudo systemctl restart php8.1-fpm

# Use Redis for caching
# In .env: CACHE_DRIVER=redis
php artisan config:cache

# Optimize autoloader
composer install --optimize-autoloader --no-dev

# Check server resources
htop
free -h
df -h

# Check database performance
# Enable slow query log in MySQL/PostgreSQL

Web Server Issues

Nginx 502 Bad Gateway

Problem: Nginx returns 502 error

Solutions:

# Check PHP-FPM status
sudo systemctl status php8.1-fpm
sudo systemctl restart php8.1-fpm

# Verify PHP-FPM socket path
ls -la /var/run/php/php8.1-fpm.sock

# Check Nginx error log
sudo tail -f /var/log/nginx/error.log

# Verify PHP-FPM pool configuration
sudo nano /etc/php/8.1/fpm/pool.d/www.conf
# Ensure listen = /var/run/php/php8.1-fpm.sock

SSL Certificate Issues

Problem: SSL certificate errors or renewal failures

Solutions:

# Verify domain DNS records
dig status.yourdomain.com
nslookup status.yourdomain.com

# Check firewall allows ports 80 and 443
sudo ufw status
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Test certificate renewal
sudo certbot renew --dry-run

# Force certificate renewal
sudo certbot renew --force-renewal

# Check certificate expiration
sudo certbot certificates

# Verify Nginx configuration
sudo nginx -t

# Check certificate files exist
ls -la /etc/letsencrypt/live/yourdomain.com/

403 Forbidden Error

Problem: Access denied to application

Solutions:

# Check file ownership
ls -la /var/www/statusnugget/

# Fix ownership
sudo chown -R www-data:www-data /var/www/statusnugget

# Check directory permissions
sudo chmod -R 755 /var/www/statusnugget
sudo chmod -R 775 /var/www/statusnugget/storage

# Verify Nginx/Apache user
# Nginx: www-data or nginx
# Apache: www-data

# Check SELinux (if enabled)
getenforce
sudo setenforce 0 # Temporarily disable for testing

Docker-Specific Issues

Containers Won't Start

Problem: Docker containers fail to start

Solutions:

# Check Docker daemon
sudo systemctl status docker
sudo systemctl start docker

# View container logs
docker compose logs
docker compose logs app
docker compose logs db

# Check container status
docker compose ps
docker ps -a

# Remove and recreate containers
docker compose down
docker compose up -d

# Check disk space
df -h
docker system df

# Clean up Docker resources
docker system prune -a

Port Already in Use

Problem: Docker can't bind to port

Solutions:

# Find what's using the port
sudo netstat -tulpn | grep :80
sudo lsof -i :80
sudo ss -tulpn | grep :80

# Stop conflicting service
sudo systemctl stop nginx # If Nginx is using port 80
sudo systemctl stop apache2 # If Apache is using port 80

# Or change Docker port mapping
# In docker-compose.yml, change:
ports:
- "8080:80" # Use port 8080 instead

Docker Volume Permission Issues

Problem: Containers can't write to volumes

Solutions:

# Fix volume permissions
sudo chown -R $USER:$USER .
sudo chmod -R 775 storage bootstrap/cache

# Or run container as current user
# Add to docker-compose.yml:
user: "${UID}:${GID}"

# Check volume mounts
docker compose config
docker volume ls

Monitoring & Health Check Issues

Health Checks Not Working

Problem: Service monitoring not updating

Solutions:

# Check queue worker is running
php artisan queue:work

# Verify cron is running scheduled tasks
# Check crontab:
crontab -l

# Test health check manually
php artisan status:check [service-id]

# Check monitoring logs
tail -f storage/logs/laravel.log | grep "health"

# Verify network connectivity from server
curl -I https://your-monitored-service.com
ping your-monitored-service.com

Notifications Not Sending

Problem: Email/SMS notifications not delivered

Solutions:

# Test email configuration
php artisan tinker
Mail::raw('Test email', function($msg) {
$msg->to('your@email.com')->subject('Test');
});

# Check mail settings in .env
cat .env | grep MAIL_

# Verify SMTP credentials
# Test SMTP connection
telnet smtp.yourprovider.com 587

# Check queue for failed jobs
php artisan queue:failed

# Retry failed notification jobs
php artisan queue:retry all

Database Issues

Migration Errors

Problem: Database migrations fail

Solutions:

# Check migration status
php artisan migrate:status

# Rollback last migration
php artisan migrate:rollback

# Rollback all migrations
php artisan migrate:reset

# Fresh migration (WARNING: Deletes all data)
php artisan migrate:fresh

# Check database connection
php artisan tinker
DB::connection()->getPdo();

# Verify database user permissions
# PostgreSQL:
sudo -u postgres psql
\du statusnugget
# MySQL:
mysql -u root -p
SHOW GRANTS FOR 'statusnugget'@'localhost';

Database Performance Issues

Problem: Slow database queries

Solutions:

# Enable query logging (temporarily)
# In .env: DB_LOG_QUERIES=true

# Check slow queries
# PostgreSQL:
sudo -u postgres psql -d statusnugget
SELECT * FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10;

# MySQL:
mysql -u root -p
SHOW FULL PROCESSLIST;

# Add database indexes
php artisan migrate

# Optimize database
# PostgreSQL:
VACUUM ANALYZE;
# MySQL:
OPTIMIZE TABLE table_name;

API Issues

API Authentication Fails

Problem: API requests return 401 Unauthorized

Solutions:

# Verify API key is set
php artisan tinker
config('app.api_key');

# Check API key format
# Should be a valid token string

# Verify API key in request header
# Header: Authorization: Bearer YOUR_API_KEY

# Check API rate limiting
# Review rate limit settings in config/api.php

# Test API endpoint
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://status.yourdomain.com/api/v1/status

General Debugging Tips

Enable Debug Mode

# Enable debug mode (development only!)
# In .env:
APP_DEBUG=true
APP_ENV=local

# Clear config cache
php artisan config:clear

# View detailed error pages
# Remember to disable in production!

Check Logs

# Application logs
tail -f storage/logs/laravel.log

# Web server logs
tail -f /var/log/nginx/error.log
tail -f /var/log/nginx/access.log
tail -f /var/log/apache2/error.log

# PHP-FPM logs
tail -f /var/log/php8.1-fpm.log

# System logs
sudo journalctl -u nginx -f
sudo journalctl -u php8.1-fpm -f
sudo dmesg | tail

System Resource Checks

# Check disk space
df -h
du -sh /var/www/statusnugget/*

# Check memory usage
free -h
top
htop

# Check CPU usage
top
htop

# Check network connectivity
ping google.com
curl -I https://google.com

# Check open ports
sudo netstat -tulpn
sudo ss -tulpn

Getting Help

If you're still experiencing issues after trying these solutions, here are additional resources:

Documentation

Browse this comprehensive documentation for detailed guides and examples.

GitHub Issues

Report bugs, request features, or search existing issues on our GitHub repository.

Community Forum

Ask questions and share solutions with the Status Nugget community.

Email Support

Contact support@statusnugget.com for enterprise support and priority assistance.

Status Nugget Assistant

Hello! I'm your Status Nugget assistant. How can I help you today?