Server Monitoring Tools: Grafana, Prometheus and Netdata
Prometheus + Grafana stack setup, Netdata, node_exporter, alert rules, dashboard creation and server metric monitoring.
Nginx Proxy Manager Docker installation, automatic SSL certificate renewal, proxy host configuration, access lists, redirects, streams and custom locations.
Nginx Proxy Manager (NPM) is an open-source tool that allows you to manage Nginx reverse proxy through a user-friendly web interface. You can handle SSL certificate management, proxy host configuration, and access control without needing the command line.
Key features of Nginx Proxy Manager:
# docker-compose.yml
version: '3.8'
services:
npm:
image: 'jc21/nginx-proxy-manager:latest'
container_name: nginx-proxy-manager
restart: unless-stopped
ports:
- '80:80' # HTTP
- '443:443' # HTTPS
- '81:81' # Admin Panel
volumes:
- npm_data:/data
- npm_letsencrypt:/etc/letsencrypt
environment:
- TZ=Europe/Istanbul
volumes:
npm_data:
npm_letsencrypt:
# Start installation
docker compose up -d
# Check container status
docker ps | grep nginx-proxy-manager
Access the admin panel after installation:
http://SERVER_IP:81
Default credentials:
Email: admin@example.com
Password: changeme
You will be prompted to change your password and email on first login.
To put a web application behind a reverse proxy:
app.example.comhttp192.168.1.10 (or container name)3000In the SSL tab when creating a proxy host:
The SSL certificate will be automatically obtained and renewed.
Use the same network to proxy Docker containers:
# docker-compose.yml
version: '3.8'
services:
npm:
image: 'jc21/nginx-proxy-manager:latest'
container_name: nginx-proxy-manager
restart: unless-stopped
ports:
- '80:80'
- '443:443'
- '81:81'
volumes:
- npm_data:/data
- npm_letsencrypt:/etc/letsencrypt
networks:
- proxy_network
webapp:
image: your-webapp:latest
container_name: webapp
restart: unless-stopped
expose:
- "3000"
networks:
- proxy_network
networks:
proxy_network:
driver: bridge
volumes:
npm_data:
npm_letsencrypt:
Use the container name as Forward Hostname in the proxy host:
webapp:3000Restrict access to specific IPs or users:
Admin OnlyIn the Access tab:
Allow: 192.168.1.0/24
Allow: 10.0.0.0/8
Deny: all
In the Authorization tab:
Username: admin
Password: StrongPassword123!
Assign the access list to a proxy host: Proxy Host → Edit → Access List → Select Admin Only.
To create URL redirections:
old.example.comhttpsnew.example.com301 (Permanent redirect)To forward TCP or UDP ports:
25565 (e.g., Minecraft)192.168.1.5025565Example use cases:
In the Advanced tab when editing a proxy host:
# Custom headers
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;
# Large file uploads
client_max_body_size 100M;
# Timeout settings
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
# WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
To route different paths to different backends within a proxy host:
/apihttpapi-server8080To obtain a wildcard certificate with DNS Challenge:
*.example.com# Backup NPM data
docker exec nginx-proxy-manager tar -czf /tmp/npm-backup.tar.gz /data /etc/letsencrypt
docker cp nginx-proxy-manager:/tmp/npm-backup.tar.gz ./npm-backup-$(date +%Y%m%d).tar.gz
# Restore
docker cp ./npm-backup.tar.gz nginx-proxy-manager:/tmp/
docker exec nginx-proxy-manager tar -xzf /tmp/npm-backup.tar.gz -C /
docker restart nginx-proxy-manager
docker compose pull
docker compose up -d
docker image prune -f
# Make admin panel accessible only from specific IPs
ports:
- '80:80'
- '443:443'
- '127.0.0.1:81:81' # Localhost only
# Access via SSH tunnel
ssh -L 81:localhost:81 user@server-ip
# In browser: http://localhost:81
With Nginx Proxy Manager on your REXE servers, you can manage all your web applications from a single point, automatically obtain and renew SSL certificates. The web interface lets you set up professional reverse proxy without dealing with Nginx configuration files.
Check that port 81 is open in the firewall: 'ufw allow 81/tcp'. Verify the container is running: 'docker ps | grep nginx-proxy-manager'. Check Docker logs: 'docker logs nginx-proxy-manager'. If there's a port conflict, change the admin port in docker-compose.yml (e.g., 8181:81).
Check that the domain's DNS record points to the server IP. Verify that port 80 is accessible from outside (required for Let's Encrypt HTTP-01 challenge). If using Cloudflare, temporarily disable the proxy (DNS Only). For wildcard certificates, you need to use DNS Challenge.
Check that the backend service is running and listening on the specified port. Docker containers must be on the same network. If using container name as Forward Hostname, ensure both containers are connected to the same Docker network. If using IP address, try the Docker bridge IP (172.17.0.x).
Enable 'Websockets Support' in the proxy host settings. Add the following in the Advanced tab: 'proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";'. Make sure the backend application supports WebSocket.
Add 'client_max_body_size 100M;' (or larger as needed) in the proxy host's Advanced tab. Make sure the backend application also allows large file uploads. Increase timeout values: 'proxy_read_timeout 300;'.
Settings should be preserved if Docker volumes are correctly configured. Check that volumes are defined in docker-compose.yml. Always backup before updating. If using bind mounts instead of named volumes, ensure directory paths are correct.
Prometheus + Grafana stack setup, Netdata, node_exporter, alert rules, dashboard creation and server metric monitoring.
Squid forward proxy, HAProxy load balancer, SSL termination, ACL rules, caching, health checks and high availability.
CrowdSec installation, bouncer configuration, attack detection, IP blocking, dashboard, collection and scenario management.