This guide walks through self-hosted installation of Statping-ng on Linux servers. Statping-ng supports multiple deployment methods: Docker Compose (recommended), Ansible automation, binary installation, and systemd service.
| Component | Minimum | Recommended |
|---|---|---|
| CPU | 1 core | 2+ cores |
| RAM | 256 MB | 512 MB+ |
| Disk | 1 GB | 5 GB+ (for logs, database) |
| OS | Debian 10+, Ubuntu 20.04+, RHEL 9+ | Debian 12, Ubuntu 24.04, RHEL 9+ |
For Docker installation, see Docker.
Docker Compose provides the easiest deployment with proper isolation and persistence.
# Create project directory
mkdir -p ~/statping-ng && cd ~/statping-ng
# Create docker-compose.yml
cat > docker-compose.yml << 'EOF'
services:
statping-ng:
image: adamboutcher/statping-ng:latest
container_name: statping-ng
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- statping_data:/app
environment:
- NAME=My Status Page
- DESCRIPTION=Service monitoring dashboard
volumes:
statping_data:
EOF
# Start the service
docker compose up -d
Access at http://localhost:8080 and complete the setup wizard.
For production, use PostgreSQL database and TLS termination. See full guide: Docker Setup
# Clone example configuration
git clone https://github.com/statping-ng/statping-ng.git
cd statping-ng
# Review and customize docker-compose.yml
# Start with PostgreSQL
docker compose up -d
Automate deployment across multiple servers with Ansible.
# Install Ansible
sudo apt-get install -y ansible # Debian/Ubuntu
sudo dnf install -y ansible # RHEL/Fedora
# Run the playbook
ansible-playbook -i inventory.ini statping-ng.yml
See complete guide: Ansible Setup
Install Statping-ng as a standalone binary with systemd service management.
# Download latest release (v0.93.0)
wget https://github.com/statping-ng/statping-ng/releases/download/v0.93.0/statping-ng_linux_amd64.tar.gz
# Extract and install
tar -xzf statping-ng_linux_amd64.tar.gz
sudo mv statping-ng /usr/local/bin/
sudo chmod +x /usr/local/bin/statping-ng
sudo mkdir -p /etc/statping-ng
sudo mkdir -p /var/lib/statping-ng
sudo chown -R $USER:$USER /var/lib/statping-ng
sudo cat > /etc/systemd/system/statping-ng.service << 'EOF'
[Unit]
Description=Statping-ng Status Page
After=network.target
[Service]
Type=simple
User=statping
Group=statping
WorkingDirectory=/var/lib/statping-ng
ExecStart=/usr/local/bin/statping-ng
Restart=on-failure
RestartSec=5
Environment="DB_CONN=sqlite"
# Security hardening
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/var/lib/statping-ng
[Install]
WantedBy=multi-user.target
EOF
# Create user and set permissions
sudo useradd -r -s /bin/false statping
sudo chown -R statping:statping /var/lib/statping-ng
# Enable and start service
sudo systemctl daemon-reload
sudo systemctl enable statping-ng
sudo systemctl start statping-ng
sudo systemctl status statping-ng
Deploy Statping-ng on Kubernetes with Helm or raw manifests.
apiVersion: apps/v1
kind: Deployment
metadata:
name: statping-ng
labels:
app: statping-ng
spec:
replicas: 1
selector:
matchLabels:
app: statping-ng
template:
metadata:
labels:
app: statping-ng
spec:
containers:
- name: statping-ng
image: adamboutcher/statping-ng:latest
ports:
- containerPort: 8080
volumeMounts:
- name: data
mountPath: /app
env:
- name: NAME
value: "My Status Page"
- name: DB_CONN
value: "postgres"
- name: DB_HOST
valueFrom:
secretKeyRef:
name: statping-db-secret
key: host
resources:
limits:
memory: "512Mi"
cpu: "500m"
requests:
memory: "256Mi"
cpu: "250m"
volumes:
- name: data
persistentVolumeClaim:
claimName: statping-pvc
---
apiVersion: v1
kind: Service
metadata:
name: statping-ng
spec:
selector:
app: statping-ng
ports:
- port: 80
targetPort: 8080
type: ClusterIP
Access http://your-server:8080 and complete the setup:
Never expose Statping-ng over HTTP in production.
server {
listen 80;
server_name status.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name status.example.com;
ssl_certificate /etc/letsencrypt/live/status.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/status.example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://127.0.0.1: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;
}
}
See Docker Setup for automatic SSL with nginx-proxy-companion.
Set up notification channels in Admin → Notifications:
Add services to monitor in Admin → Services:
After installation, configure Statping-ng via environment variables or the web UI.
| Variable | Description | Example |
|---|---|---|
NAME |
Status page name | My Services |
DESCRIPTION |
Status page description | Monitoring dashboard |
DB_CONN |
Database type | postgres, mysql, sqlite |
DB_HOST |
Database host | localhost or postgres |
DB_USER |
Database username | statping |
DB_PASS |
Database password | secure-password |
DB_DATABASE |
Database name | statping |
DISABLE_LOGS |
Disable logging | false |
See complete reference: Configuration
Apply these security measures before production exposure:
See complete guide: Security
# Check logs
docker logs statping-ng
# Verify volume permissions
ls -la /var/lib/statping-ng
# Test database connectivity
docker exec -it statping-ng ping -c 3 postgres
# Verify environment variables
docker exec statping-ng env | grep DB_
# Test PostgreSQL connection
docker exec -it postgres psql -U statping -d statping -c "\l"
# Limit container memory in docker-compose.yml
services:
statping-ng:
deploy:
resources:
limits:
memory: 512M
reservations:
memory: 256M
Any questions?
Feel free to contact us. Find all contact information on our contact page.