Skip to content

PLGT Stack Installation Guide

Last Updated: 2026-01-05


ResourceMinimumRecommended
CPU2 cores4 cores
RAM4 GB8 GB
Disk50 GB SSD100 GB SSD
OSUbuntu 20.04+Ubuntu 22.04 LTS
  • Docker Engine 20.10+
  • Docker Compose 2.0+
  • Git

Terminal window
# Update package index
sudo apt update
# Install prerequisites
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
# Add Docker GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Add Docker repository
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Install Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# Add user to docker group
sudo usermod -aG docker $USER

Terminal window
# Navigate to deployment directory
cd /opt
# Clone PLG stack repository
git clone https://github.com/isutech/plg-unified.git
cd plg-unified

Terminal window
# Copy example configuration
cp .env.example .env
# Edit configuration
nano .env

Required Configuration:

# Grafana Admin (CHANGE THESE!)
GRAFANA_ADMIN_USER=admin
GRAFANA_ADMIN_PASSWORD=your-secure-password
# External URL
GRAFANA_ROOT_URL=https://monitor.isutech.co.za
# Email Alerts
SMTP_ENABLED=true
SMTP_HOST=smtp.gmail.com:587
SMTP_USER=alerts@isutech.co.za
SMTP_PASSWORD=your-app-password
SMTP_FROM=alerts@isutech.co.za

Edit alertmanager/alertmanager.yml:

receivers:
- name: 'isutech-team'
email_configs:
- to: 'nhlanhla@isutech.co.za'
send_resolved: true

Terminal window
# Make scripts executable
chmod +x scripts/*.sh
# Deploy
./scripts/deploy.sh deploy

Terminal window
# Check health
./scripts/health-check.sh

Expected Output:

========================================
PLGT Stack Health Check - iSu Technologies
========================================
[OK] Prometheus is healthy (HTTP 200)
[OK] Alertmanager is healthy (HTTP 200)
[OK] Loki is healthy (HTTP 200)
[OK] Tempo is healthy (HTTP 200)
[OK] Grafana is healthy (HTTP 200)
[OK] Node Exporter is healthy (HTTP 200)
[OK] cAdvisor is healthy (HTTP 200)
[OK] Blackbox Exporter is healthy (HTTP 200)
[OK] Alloy is healthy (HTTP 200)
========================================
Summary: 9/9 services healthy
========================================
All services are healthy!

server {
listen 80;
server_name monitor.isutech.co.za;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name monitor.isutech.co.za;
ssl_certificate /etc/letsencrypt/live/monitor.isutech.co.za/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/monitor.isutech.co.za/privkey.pem;
# Grafana
location / {
proxy_pass http://localhost:3004;
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;
}
# Loki API proxy (for external log shipping)
location /loki/ {
proxy_pass http://localhost:3100/;
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-Scope-OrgID $http_x_scope_orgid;
}
}

Terminal window
# Allow essential ports only
sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
# Enable firewall
sudo ufw enable

  1. Open browser: https://monitor.isutech.co.za
  2. Login with credentials from .env
  3. Navigate to DashboardsiSu Technologies
  1. Go to ConfigurationData sources
  2. Click Test on each data source (Prometheus, Loki, Tempo)
  3. All should show “Data source is working”

Terminal window
cd /opt/plg-unified
# Pull latest changes
git pull origin main
# Pull latest images
docker compose pull
# Restart with new images
docker compose up -d
# Verify health
./scripts/health-check.sh

Terminal window
# Stop and remove containers
docker compose down
# Remove volumes (WARNING: Deletes all data!)
docker compose down -v
# Remove images
docker compose down --rmi all

Next: Configuration Reference