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 Dashboards → iSu Technologies
  1. Go to Configuration → Data 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