├── .version ├── .gitignore ├── docker ├── php │ ├── php-fpm.conf │ ├── web.ini │ └── pool.conf └── nginx │ ├── nginx.conf │ └── web.conf ├── composer.json ├── bin ├── consul-get-all-keys.sh ├── consul-get.sh ├── consul-get-all-dashboard-keys.sh ├── cmd-kv-set.sh ├── consul-get-all-values.sh ├── consul-is-reachable.sh ├── consul-set.sh ├── cmd-kv-ping.sh ├── docker-health-check.sh ├── notify-hipchat.sh ├── project-config.sh ├── ldap-check-credentials.sh ├── notify-slack.sh ├── core.sh └── docker-entrypoint.sh ├── docker-compose-dev.yml ├── docker-compose-example.yml ├── .dockerignore ├── Makefile.docker ├── src ├── ConsulConf │ ├── Entity │ │ ├── Collection │ │ │ ├── DashboardCollection.php │ │ │ ├── Base.php │ │ │ └── FieldCollection.php │ │ ├── Base.php │ │ ├── Dashboard.php │ │ └── Field.php │ ├── Service │ │ ├── Config.php │ │ ├── Shell.php │ │ ├── Dashboard.php │ │ ├── Notify.php │ │ ├── ConsulKv.php │ │ └── User.php │ └── Application.php ├── tpl │ ├── dashboard │ │ ├── list-entry │ │ │ ├── dashboard-description.phtml │ │ │ ├── dashboard.phtml │ │ │ └── field.phtml │ │ ├── show.phtml │ │ └── index.phtml │ ├── common │ │ ├── footer.phtml │ │ └── nav.phtml │ ├── index.phtml │ └── login │ │ └── index.phtml └── public │ ├── index.php │ ├── css │ └── style.css │ └── js │ └── consul-conf.js ├── Makefile.ci ├── LICENSE.md ├── docs ├── CONSUL.md ├── TROUBLESHOOTING.md ├── CONFIGURE.md └── CUSTOMIZE.md ├── Dockerfile ├── docker-compose.yml ├── Makefile ├── .gitlab-ci.yml ├── composer.lock ├── install ├── install-examples └── README.md /.version: -------------------------------------------------------------------------------- 1 | 1.0 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | docker/data 3 | composer.phar 4 | bin/tini 5 | src/tpl/**/*.phtml.php 6 | vendor/ 7 | TODO.md -------------------------------------------------------------------------------- /docker/php/php-fpm.conf: -------------------------------------------------------------------------------- 1 | [global] 2 | pid = /run/php7.0-fpm.pid 3 | error_log = /proc/1/fd/1 4 | 5 | include = /etc/php/7.0/fpm/pool.d/*.conf -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "require": { 3 | "erusev/parsedown": "1.6.*" 4 | }, 5 | "require-dev": { 6 | "phalcon/ide-stubs": "3.3.*" 7 | } 8 | } -------------------------------------------------------------------------------- /bin/consul-get-all-keys.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | . /consul-conf/bin/core.sh 4 | 5 | BASE_PATH="$1" 6 | consul_kv_request "$BASE_PATH?recurse=true&keys=true" -------------------------------------------------------------------------------- /docker/php/web.ini: -------------------------------------------------------------------------------- 1 | [PHP] 2 | error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE 3 | memory_limit=32M 4 | log_errors=On 5 | display_errors=Off 6 | html_errors=Off 7 | error_log=/proc/1/fd/1 -------------------------------------------------------------------------------- /bin/consul-get.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | . /consul-conf/bin/core.sh 4 | 5 | CONSUL_KEY="$1" 6 | ( 7 | consul_kv_request "$CONSUL_KEY" | \ 8 | jq -r '.[0].Value' 9 | ) || true -------------------------------------------------------------------------------- /docker-compose-dev.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | consul-conf: 5 | volumes: 6 | - ./bin:/consul-conf/bin 7 | - ./src:/consul-conf/src 8 | - ./vendor:/consul-conf/vendor -------------------------------------------------------------------------------- /bin/consul-get-all-dashboard-keys.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | 4 | /consul-conf/bin/consul-get-all-keys.sh | \ 5 | jq -r 'map(select(. | endswith(".dashboard/.config")) | gsub("/\\.dashboard/\\.config$"; ""))' -------------------------------------------------------------------------------- /bin/cmd-kv-set.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | CONSUL_KEY="$1" 4 | VALUE="$2" 5 | ACL_TOKEN="$3" 6 | if [[ "$ACL_TOKEN" != "" ]]; then 7 | export CONSUL_ACL_TOKEN="$ACL_TOKEN" 8 | fi 9 | /consul-conf/bin/consul-set.sh "$CONSUL_KEY" "$VALUE" -------------------------------------------------------------------------------- /docker-compose-example.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | consul-conf: 5 | image: consul-conf:latest 6 | container_name: consul_conf 7 | ports: 8 | - 80 9 | environment: 10 | - CONSUL_API_URL=http://localhost:8500 -------------------------------------------------------------------------------- /bin/consul-get-all-values.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | . /consul-conf/bin/core.sh 4 | 5 | BASE_PATH="${1}" 6 | consul_kv_request "$BASE_PATH?recurse=true" | \ 7 | jq -r '[.[] | {(.Key|tostring): .Value}] | add | with_entries(select(.key | test("/$") | not))' -------------------------------------------------------------------------------- /bin/consul-is-reachable.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | HTTP_CODE=`curl -sk -m 1 -w "%{http_code}" -o /dev/null "$CONSUL_API_URL/v1/kv/consul-conf-health-check"` 4 | if [[ "$HTTP_CODE" == "200" ]] || [[ "$HTTP_CODE" == "404" ]]; then 5 | exit 0 6 | fi 7 | exit 1 -------------------------------------------------------------------------------- /bin/consul-set.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | . /consul-conf/bin/core.sh 4 | 5 | CONSUL_KEY="$1" 6 | VALUE="$2" 7 | if ! consul_kv_request "$CONSUL_KEY" -X PUT -d "$VALUE" | grep true &>/dev/null; then 8 | log_error "Failed to store $CONSUL_KEY" 9 | exit 1 10 | fi -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | .dockerignore 2 | .gitignore 3 | .gitlab-ci.yml 4 | docker-compose*.yml 5 | Dockerfile 6 | .idea/ 7 | docker/data 8 | bin/tini 9 | src/tpl/**/*.phtml.php 10 | composer.phar 11 | vendor/ 12 | *.md 13 | .version 14 | Makefile* 15 | !Makefile.docker 16 | install* 17 | docs/ 18 | .git/ -------------------------------------------------------------------------------- /docker/php/pool.conf: -------------------------------------------------------------------------------- 1 | [www] 2 | user = www-data 3 | group = www-data 4 | clear_env = no 5 | 6 | listen.owner = www-data 7 | listen.group = www-data 8 | listen = 127.0.0.1:9000 9 | 10 | pm = dynamic 11 | pm.max_children = 8 12 | pm.start_servers = 2 13 | pm.min_spare_servers = 1 14 | pm.max_spare_servers = 3 -------------------------------------------------------------------------------- /Makefile.docker: -------------------------------------------------------------------------------- 1 | SHELL := /bin/bash -x 2 | CD ?= /consul-conf 3 | MAKE := $(MAKE) -f Makefile.docker 4 | 5 | .PHONY: build clean 6 | 7 | build: 8 | rm -rf vendor/ 9 | composer install -n --no-dev 10 | find ${CD} 11 | ${MAKE} clean 12 | 13 | clean: 14 | rm -f \ 15 | $(CD)/composer.* \ 16 | $(CD)/Makefile.docker -------------------------------------------------------------------------------- /src/ConsulConf/Entity/Collection/DashboardCollection.php: -------------------------------------------------------------------------------- 1 | setClassMap(Dashboard::class); 12 | } 13 | } -------------------------------------------------------------------------------- /bin/cmd-kv-ping.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | if [[ "$1" != "" ]]; then 4 | export CONSUL_API_URL="$1" 5 | fi 6 | set +e 7 | /consul-conf/bin/consul-is-reachable.sh 8 | if [[ "$?" != "0" ]]; then 9 | echo "Failed to connect to $CONSUL_API_URL" 10 | exit 1 11 | fi 12 | echo "Successfully connected to $CONSUL_API_URL" 13 | exit 0 14 | -------------------------------------------------------------------------------- /src/tpl/dashboard/list-entry/dashboard-description.phtml: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 |
6 | {{ dashboardEntity.getVisibleDescription() }} 7 |
8 |
9 | 10 |
-------------------------------------------------------------------------------- /bin/docker-health-check.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -ex 3 | 4 | # local connection to nginx 5 | curl -sSf http://localhost:80/ping &>/dev/null 6 | if nc -z 127.0.0.1 443; then 7 | curl -sSfk https://localhost:443/ping &>/dev/null 8 | fi 9 | # local process existence 10 | pgrep php-fpm &>/dev/null 11 | pgrep nginx &>/dev/null 12 | /consul-conf/bin/consul-is-reachable.sh -------------------------------------------------------------------------------- /src/tpl/common/footer.phtml: -------------------------------------------------------------------------------- 1 | {% if dashboardEntity is defined %} 2 |