parent
628f37fa37
commit
8cc7d6e3c9
@ -0,0 +1,26 @@ |
|||||||
|
version: "3" |
||||||
|
|
||||||
|
services: |
||||||
|
grafana: |
||||||
|
image: grafana/grafana-oss:8.5.1 |
||||||
|
user: "0:0" |
||||||
|
environment: |
||||||
|
GF_AUTH_GENERIC_OAUTH_ENABLED: 'True' |
||||||
|
GF_AUTH_GENERIC_OAUTH_ALLOW_SIGN_UP: 'True' # otherwise no login is possible |
||||||
|
#GF_AUTH_GENERIC_OAUTH_TEAM_IDS: '' |
||||||
|
#GF_AUTH_GENERIC_OAUTH_ALLOWED_ORGANIZATIONS: '' |
||||||
|
#GF_AUTH_GENERIC_OAUTH_ALLOWED_DOMAINS: '<domains>' |
||||||
|
GF_AUTH_GENERIC_OAUTH_NAME: Keycloak |
||||||
|
GF_AUTH_GENERIC_OAUTH_CLIENT_ID: grafana |
||||||
|
GF_AUTH_GENERIC_OAUTH_SCOPES: openid profile email |
||||||
|
# GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET is in env.secrets |
||||||
|
# auth URLs are in the env.secrets since they have hostname expansion |
||||||
|
volumes: |
||||||
|
- ./data/grafana:/var/lib/grafana |
||||||
|
restart: unless-stopped |
||||||
|
ports: |
||||||
|
- 8000:3000 |
||||||
|
env_file: |
||||||
|
- ../env.production |
||||||
|
- env.production |
||||||
|
- env.secrets |
@ -0,0 +1,46 @@ |
|||||||
|
#!/bin/bash |
||||||
|
die() { echo >&2 "$@" ; exit 1 ; } |
||||||
|
|
||||||
|
DIRNAME="$(dirname $0)" |
||||||
|
cd "$DIRNAME" |
||||||
|
source ../env.production || die "no top level env?" |
||||||
|
source env.production || die "no local env?" |
||||||
|
|
||||||
|
BASE="https://$KEYCLOAK_HOSTNAME/realms/$REALM/protocol/openid-connect" |
||||||
|
|
||||||
|
if [ ! -r "env.secrets" ]; then |
||||||
|
GRAFANA_CLIENT_SECRET="$(openssl rand -hex 32)" |
||||||
|
GRAFANA_ADMIN_PASSWORD="$(openssl rand -hex 4)" |
||||||
|
|
||||||
|
echo "Generating secrets: admin password $GRAFANA_ADMIN_PASSWORD" |
||||||
|
cat <<EOF > env.secrets |
||||||
|
# Do not check in! |
||||||
|
GRAFANA_ADMIN_PASSWORD=$GRAFANA_ADMIN_PASSWORD |
||||||
|
GF_SERVER_ROOT_URL=https://$GRAFANA_HOSTNAME/ |
||||||
|
GF_SERVER_DOMAIN=$GRAFANA_HOSTNAME |
||||||
|
GF_AUTH_GENERIC_OAUTH_AUTH_URL=$BASE/auth |
||||||
|
GF_AUTH_GENERIC_OAUTH_TOKEN_URL=$BASE/token |
||||||
|
GF_AUTH_GENERIC_OAUTH_API_URL=$BASE/userinfo |
||||||
|
GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET=$GRAFANA_CLIENT_SECRET |
||||||
|
EOF |
||||||
|
else |
||||||
|
source env.secrets || die "no secret env?" |
||||||
|
fi |
||||||
|
|
||||||
|
docker-compose down |
||||||
|
|
||||||
|
../keycloak/client-delete 'grafana' || echo "client did not exist?" |
||||||
|
|
||||||
|
../keycloak/client-create << EOF || die "unable to create client id" |
||||||
|
{ |
||||||
|
"clientId": "grafana", |
||||||
|
"rootUrl": "https://$GRAFANA_HOSTNAME/", |
||||||
|
"adminUrl": "https://$GRAFANA_HOSTNAME/", |
||||||
|
"redirectUris": [ "https://$GRAFANA_HOSTNAME/*" ], |
||||||
|
"webOrigins": [ "https://$GRAFANA_HOSTNAME" ], |
||||||
|
"clientAuthenticatorType": "client-secret", |
||||||
|
"secret": "$GRAFANA_CLIENT_SECRET" |
||||||
|
} |
||||||
|
EOF |
||||||
|
|
||||||
|
docker-compose up -d || die "unable to bring up grafana" |
@ -0,0 +1,60 @@ |
|||||||
|
server { |
||||||
|
listen 80; |
||||||
|
server_name ${GRAFANA_HOSTNAME}; |
||||||
|
location / { |
||||||
|
return 301 https://$host$request_uri; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
map $http_upgrade $connection_upgrade { |
||||||
|
default upgrade; |
||||||
|
'' close; |
||||||
|
} |
||||||
|
|
||||||
|
server { |
||||||
|
server_name ${GRAFANA_HOSTNAME}; |
||||||
|
client_max_body_size 128m; |
||||||
|
|
||||||
|
sendfile on; |
||||||
|
tcp_nopush on; |
||||||
|
tcp_nodelay on; |
||||||
|
keepalive_timeout 65; |
||||||
|
types_hash_max_size 2048; |
||||||
|
#include /etc/nginx/mime.types; |
||||||
|
#default_type application/octet-stream; |
||||||
|
|
||||||
|
gzip on; |
||||||
|
gzip_disable "msie6"; |
||||||
|
|
||||||
|
proxy_read_timeout 1800s; |
||||||
|
|
||||||
|
# required to avoid HTTP 411: see Issue #1486 (https://github.com/dotcloud/docker/issues/1486) |
||||||
|
chunked_transfer_encoding on; |
||||||
|
|
||||||
|
location / { |
||||||
|
proxy_pass http://host.docker.internal:8000; |
||||||
|
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; |
||||||
|
} |
||||||
|
|
||||||
|
location /socket.io/ { |
||||||
|
proxy_pass http://host.docker.internal:8000; |
||||||
|
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; |
||||||
|
proxy_set_header Upgrade $http_upgrade; |
||||||
|
proxy_set_header Connection $connection_upgrade; |
||||||
|
} |
||||||
|
|
||||||
|
listen 443 ssl; |
||||||
|
ssl_certificate /etc/letsencrypt/live/${DOMAIN_NAME}/fullchain.pem; |
||||||
|
ssl_certificate_key /etc/letsencrypt/live/${DOMAIN_NAME}/privkey.pem; |
||||||
|
include /etc/nginx/includes/options-ssl-nginx.conf; |
||||||
|
include /etc/nginx/includes/challenge.conf; |
||||||
|
ssl_dhparam /etc/nginx/includes/ssl-dhparams.pem; |
||||||
|
} |
||||||
|
|
||||||
|
|
Loading…
Reference in new issue