diff options
Diffstat (limited to 'compose')
-rw-r--r-- | compose/app/Dockerfile | 5 | ||||
-rw-r--r-- | compose/app/app.py | 29 | ||||
-rw-r--r-- | compose/app/requirements.txt | 2 | ||||
-rw-r--r-- | compose/es/Dockerfile | 5 | ||||
-rw-r--r-- | compose/es/docker-compose.yml | 13 | ||||
-rw-r--r-- | compose/es/kibana.yml | 5 | ||||
-rw-r--r-- | compose/monitoring/prometheus/prometheus.yml | 40 | ||||
-rw-r--r-- | compose/nginx/Dockerfile | 4 | ||||
-rw-r--r-- | compose/nginx/conf.d/dybiec.info.conf | 168 | ||||
-rw-r--r-- | compose/nginx/nginx.conf | 31 | ||||
-rw-r--r-- | compose/nginx/static-html/index.html | 1 |
11 files changed, 303 insertions, 0 deletions
diff --git a/compose/app/Dockerfile b/compose/app/Dockerfile new file mode 100644 index 0000000..8e67d74 --- /dev/null +++ b/compose/app/Dockerfile @@ -0,0 +1,5 @@ +FROM python:3.4-alpine +ADD . /code +WORKDIR /code +RUN pip install -r requirements.txt +CMD ["python", "app.py"] diff --git a/compose/app/app.py b/compose/app/app.py new file mode 100644 index 0000000..9bf5d90 --- /dev/null +++ b/compose/app/app.py @@ -0,0 +1,29 @@ +import time + +import redis +from flask import Flask + + +app = Flask(__name__) +cache = redis.Redis(host='redis', port=6379) + + +def get_hit_count(): + retries = 5 + while True: + try: + return cache.incr('hits') + except redis.exceptions.ConnectionError as exc: + if retries == 0: + raise exc + retries -= 1 + time.sleep(0.5) + + +@app.route('/') +def hello(): + count = get_hit_count() + return 'Hello from this site! I have been seen {} times.\n'.format(count) + +if __name__ == "__main__": + app.run(host="0.0.0.0", debug=True) diff --git a/compose/app/requirements.txt b/compose/app/requirements.txt new file mode 100644 index 0000000..1a5dc97 --- /dev/null +++ b/compose/app/requirements.txt @@ -0,0 +1,2 @@ +flask +redis diff --git a/compose/es/Dockerfile b/compose/es/Dockerfile new file mode 100644 index 0000000..8e67d74 --- /dev/null +++ b/compose/es/Dockerfile @@ -0,0 +1,5 @@ +FROM python:3.4-alpine +ADD . /code +WORKDIR /code +RUN pip install -r requirements.txt +CMD ["python", "app.py"] diff --git a/compose/es/docker-compose.yml b/compose/es/docker-compose.yml new file mode 100644 index 0000000..3edf4c0 --- /dev/null +++ b/compose/es/docker-compose.yml @@ -0,0 +1,13 @@ +version: '3' +services: + elasticsearch: + image: "docker.elastic.co/elasticsearch/elasticsearch:6.3.1" + environment: + - "discovery.type=single-node" + #ports: + # - "9200:9200" + # - "9300:9300" + kibana: + image: "docker.elastic.co/kibana/kibana:6.3.1" + ports: + - "5601:5601" diff --git a/compose/es/kibana.yml b/compose/es/kibana.yml new file mode 100644 index 0000000..59691ca --- /dev/null +++ b/compose/es/kibana.yml @@ -0,0 +1,5 @@ +server.name: kibana +server.host: "0" +elasticsearch.url: http://elasticsearch:9200 +xpack.monitoring.ui.container.elasticsearch.enabled: true +xpack.monitoring.enabled: true diff --git a/compose/monitoring/prometheus/prometheus.yml b/compose/monitoring/prometheus/prometheus.yml new file mode 100644 index 0000000..2903091 --- /dev/null +++ b/compose/monitoring/prometheus/prometheus.yml @@ -0,0 +1,40 @@ +# my global config +global: + scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. + evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. + # scrape_timeout is set to the global default (10s). + + # Attach these labels to any time series or alerts when communicating with + # external systems (federation, remote storage, Alertmanager). + external_labels: + monitor: 'codelab-monitor' + +# Load rules once and periodically evaluate them according to the global 'evaluation_interval'. +rule_files: + # - "first.rules" + # - "second.rules" + +# 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' + + # metrics_path defaults to '/metrics' + # scheme defaults to 'http'. + + static_configs: + - targets: ['localhost:9090'] + + - job_name: 'docker' + # metrics_path defaults to '/metrics' + # scheme defaults to 'http'. + + static_configs: + - targets: ['dockerhost:9323'] + - job_name: 'cadvisor' + # metrics_path defaults to '/metrics' + # scheme defaults to 'http'. + + static_configs: + - targets: ['cadvisor:8080'] diff --git a/compose/nginx/Dockerfile b/compose/nginx/Dockerfile new file mode 100644 index 0000000..fcca1df --- /dev/null +++ b/compose/nginx/Dockerfile @@ -0,0 +1,4 @@ +FROM nginx:1.15.8-alpine +COPY static-html /usr/share/nginx/html +COPY conf.d /etc/nginx/conf.d +COPY nginx.conf /etc/nginx/nginx.conf diff --git a/compose/nginx/conf.d/dybiec.info.conf b/compose/nginx/conf.d/dybiec.info.conf new file mode 100644 index 0000000..90cd471 --- /dev/null +++ b/compose/nginx/conf.d/dybiec.info.conf @@ -0,0 +1,168 @@ +server { + listen 80; + listen 443 ssl; + server_name .dybiec.info; + + ssl_certificate /etc/letsencrypt/live/dybiec.info/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/dybiec.info/privkey.pem; + + location / { + root /usr/share/nginx/html; + index index.html; + } + +} +server { + listen 80; + listen 443 ssl; + server_name cnt.dybiec.info; + + ssl_certificate /etc/letsencrypt/live/dybiec.info/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/dybiec.info/privkey.pem; + + location / { + proxy_pass http://localhost:5004; + } +} +server { + listen 80; + listen 443 ssl; + server_name registry.dybiec.info; + + ssl_certificate /etc/letsencrypt/live/dybiec.info/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/dybiec.info/privkey.pem; + + location / { + proxy_pass http://localhost:5000; + proxy_set_header Host $http_host; # required for docker client's sake + proxy_set_header X-Real-IP $remote_addr; # pass on real client's IP + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + client_max_body_size 0; + } +} +server { + listen 80; + server_name git.dybiec.info; + return 301 https://$server_name$request_uri; +} +server { + listen 443 ssl; + server_name git.dybiec.info; + + ssl_certificate /etc/letsencrypt/live/dybiec.info/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/dybiec.info/privkey.pem; + + location / { + proxy_pass http://localhost:5001; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $http_host; + proxy_redirect off; + proxy_http_version 1.1; + } + gzip_proxied any; + gzip_types + text/css + text/javascript + text/xml + text/plain + application/javascript + application/x-javascript + application/json; + +} +server { + listen 80; + server_name grafana.dybiec.info; + return 301 https://$server_name$request_uri; +} +server { + listen 443 ssl; + server_name grafana.dybiec.info; + + ssl_certificate /etc/letsencrypt/live/dybiec.info/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/dybiec.info/privkey.pem; + + location / { + proxy_pass http://localhost:5002; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $http_host; + proxy_redirect off; + proxy_http_version 1.1; + } + gzip_proxied any; + gzip_types + text/css + text/javascript + text/xml + text/plain + application/javascript + application/x-javascript + application/json; + +} +server { + listen 80; + server_name prometheus.dybiec.info; + return 301 https://$server_name$request_uri; +} +server { + listen 443 ssl; + server_name prometheus.dybiec.info; + + ssl_certificate /etc/letsencrypt/live/dybiec.info/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/dybiec.info/privkey.pem; + + location / { + proxy_pass http://localhost:5003; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $http_host; + proxy_redirect off; + proxy_http_version 1.1; + } + gzip_proxied any; + gzip_types + text/css + text/javascript + text/xml + text/plain + application/javascript + application/x-javascript + application/json; + +} +server { + listen 80; + server_name octoprint.dybiec.info; + return 301 https://$server_name$request_uri; +} +server { + listen 443 ssl; + server_name octoprint.dybiec.info; + + ssl_certificate /etc/letsencrypt/live/dybiec.info/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/dybiec.info/privkey.pem; + + location / { + proxy_pass http://192.168.255.6/; + proxy_redirect off; + proxy_http_version 1.1; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + + client_max_body_size 0; + } + gzip_proxied any; + gzip_types + text/css + text/javascript + text/xml + text/plain + application/javascript + application/x-javascript + application/json; + +} diff --git a/compose/nginx/nginx.conf b/compose/nginx/nginx.conf new file mode 100644 index 0000000..aa6cbd7 --- /dev/null +++ b/compose/nginx/nginx.conf @@ -0,0 +1,31 @@ +user nginx; +worker_processes 1; + +error_log /var/log/nginx/error.log warn; +pid /var/run/nginx.pid; + + +events { + worker_connections 1024; +} + + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + + sendfile on; + tcp_nopush on; + + keepalive_timeout 65; + + gzip on; + + include /etc/nginx/conf.d/*.conf; +} diff --git a/compose/nginx/static-html/index.html b/compose/nginx/static-html/index.html new file mode 100644 index 0000000..ce01362 --- /dev/null +++ b/compose/nginx/static-html/index.html @@ -0,0 +1 @@ +hello |