We will setup:
docker network create -d bridge proxy_network
mkdir /datadrive/codes/nginx
nano docker-compose.yml
version: "3"
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # Public HTTP Port
- '443:443' # Public HTTPS Port
- '81:81' # Admin Web Port
# - '21:21' # FTP
networks:
- proxy_network
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
networks:
proxy_network:
external: true
Email: [email protected]
Password: changeme
mkdir /datadrive/codes/portainer
nano docker-compose.yml
version: '3'
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: unless-stopped
security_opt:
- no-new-privileges:true
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./portainer-data:/data
ports:
- 9000:9000
networks:
- proxy_network
networks:
proxy_network:
external: true
docker-compose up -d
portainer is now up and runing , you can visit it either by <your machine ip>:9000 or you can setup NPM to proxy calls.
sudo mkdir /etc/prometheus
sudo nano /etc/prometheus/prometheus.yml
global:
scrape_interval: 15s
# Attach these labels to any time series or alerts when communicating with
# external systems (federation, remote storage, Alertmanager).
# external_labels:
# monitor: 'codelab-monitor'
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
# Example job for node_exporter
- job_name: 'node_exporter'
static_configs:
- targets: ['node_exporter:9100']
# Example job for cadvisor
- job_name: 'cadvisor'
static_configs:
- targets: ['cadvisor:8080']
3 jobs configured for prometheus:
version: '3'
volumes:
prometheus-data:
driver: local
grafana-data:
driver: local
networks:
proxy_network:
external: true
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
ports:
- "9090:9090"
volumes:
- /etc/prometheus:/etc/prometheus
- prometheus-data:/prometheus
restart: unless-stopped
command:
- "--config.file=/etc/prometheus/prometheus.yml"
networks:
- proxy_network
grafana:
image: grafana/grafana-oss:latest
container_name: grafana
ports:
- "3000:3000"
volumes:
- grafana-data:/var/lib/grafana
restart: unless-stopped
networks:
- proxy_network
node_exporter:
image: quay.io/prometheus/node-exporter:latest
container_name: node_exporter
command:
- '--path.rootfs=/host'
pid: host
restart: unless-stopped
volumes:
- '/:/host:ro,rslave'
networks:
- proxy_network
cadvisor:
image: google/cadvisor:latest
container_name: cadvisor
# ports:
# - "8080:8080"
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
- /dev/disk/:/dev/disk:ro
devices:
- /dev/kmsg
restart: unless-stopped
networks:
- proxy_network
prometheus and grafana are up and runing , you can visit it either by <your machine ip>:9090 for prometheus and <your machine ip>:3000 for grafana or you can setup NPM to proxy calls.
- note: prometheus is not protected, you should not expose it to public
admin:admin
sudo mkdir -p /datadrive/codes/heimdall/config
version: '3'
services:
heimdall:
image: lscr.io/linuxserver/heimdall
container_name: heimdall
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Paris
volumes:
- /datadrive/codes/heimdall/config:/config
restart: unless-stopped
ports:
- 82:80
networks:
- proxy_network
networks:
proxy_network:
external: true
heimdall is up and runing , you can visit it either by <your machine ip>:82 or you can setup NPM to proxy calls.
visiting nginx.example.com or <ip>:81 for admin nginx we ui:
setup heimdall: