diff --git a/compose-standalone/.env b/compose-standalone/.env new file mode 100644 index 000000000..38f097d76 --- /dev/null +++ b/compose-standalone/.env @@ -0,0 +1,48 @@ +CONTAINER_NAME_PREFIX=standalone_ + +ZOOKEEPER_TAG=3.3.6 + +KAFKA_TAG=0.9.0.1-2.11 +ZOOKEEPER_CONNECTION_STRING=zookeeper:2181 +KAFKA_DELETE_TOPIC_ENABLE=true +KAFKA_TOPIC_CONFIG=segment.ms=900000 +KAFKA_CREATE_TOPICS=metrics:64:1,alarm-state-transitions:12:1,alarm-notifications:12:1,retry-notifications:3:1,events:12:1,60-seconds-notifications:3:1 + +INFLUXDB_TAG=1.1.3 +INFLUXDB_RETENTION_ENABLED=false +INFLUXDB_ADMIN_ENABLED=true + +INFLUXDB_INIT_TAG=latest + +MYSQL_TAG=5.5.54 +MYSQL_ROOT_PASSWORD=secretmysql + +MYSQL_INIT_TAG=1.1.0 +MYSQL_INIT_DISABLE_REMOTE_ROOT=false +MYSQL_INIT_RANDOM_PASSWORD=false + +KEYSTONE_TAG=latest +KEYSTONE_HOST=keystone +KEYSTONE_PASSWORD=secretadmin +KEYSTONE_DATABASE_BACKEND=mysql +KEYSTONE_MYSQL_HOST=mysql +KEYSTONE_MYSQL_USER=keystone +KEYSTONE_MYSQL_PASSWORD=keystone +KEYSTONE_MYSQL_DATABASE=keystone + +MONASCA_API_TAG=1.6.0 + +MONASCA_SIDECAR_TAG=1.0.0 +SIDECAR_URL=http://monasca-sidecar:4888/v1/ingest + +MONASCA_PERSISTER_TAG=1.4.0 + +MONASCA_GRAFANA_TAG=master-keystone +MONASCA_GRAFANA_BRANCH=master +MONASCA_GRAFANA_REPO=https://github.com/openstack/monasca-grafana-datasource + +MONASCA_GRAFANA_INIT_TAG=latest + +GRAFANA_OFFICIAL_TAG=4.1.2 +GF_SERVER_ROOT_URL=http://localhost +GF_AUTH_ANONYMOUS_ENABLED=true diff --git a/compose-standalone/README.md b/compose-standalone/README.md new file mode 100644 index 000000000..07621f48f --- /dev/null +++ b/compose-standalone/README.md @@ -0,0 +1,122 @@ +# Standalone Monasca + + +This repository contains a Docker Compose configuration for running +a standalone Monasca and its required components in containers. Stability and repeatability is important, so +The goal is component versions should declared if possible, instead of `latest`. +Typical use case is demo. + +## Tags + +Tags can be set in .env file. + +## Usage + +### First-time run + +At the first time, initializer containers must be run, too. +Example command for running all initializer containers with all services: + +`docker-compose --file docker-compose.yml --file compose-init.yml up` + +This command builds and run initializer containers and all of components. +Initializer containers will exit automatically. See more details in [docker-compose up][1]. + +For debugging purposes, pulling, building and running can be executed separated. +Below script creates separated GNOME Terminal tab for each pulling and building of services: + +`./build-all_gnome-terminal.sh` + +Press any key if all of images already pulled, in order to start building. +Below messages may not be error: +* `ERROR: manifest for not found` +* ` uses an image, skipping` + +Initializer containers must be run only once. Example for running initializer containers, including its dependencies: + +`docker-compose --file docker-compose.yml --file compose-init.yml up mysql-init influxdb-init` + +After exit of initializer containers, stop all containers, for example: + +`docker-compose stop` + +Below script creates separated GNOME Terminal tab for each service up: + +`./up-all_gnome-terminal.sh` + + +### Stop + +Default services can be stopped by below command: + +`docker-compose stop` + +Example command for stopping optional services (for example: initializer containers): + +`docker-compose --file docker-compose.yml --file compose-init.yml stop` + +See more details in [docker-compose stop][2]. + +### Start + +In case of all containers stopped, the simplest command for starting all default services is: + +`docker-compose up` + +Starting only one or a few containers can be by below command: + +`docker-compose start ...` + +See more details in [docker-compose start][3]. + +For debugging purposes, below script creates separated GNOME Terminal tab for each service up: + +`./up-all_gnome-terminal.sh` + +This script uses `up` command, so all of containers must be stopped before executing the script. + + +### Down + +Below command stops and removes containers and images: + +`docker-compose --file docker-compose.yml --file compose-init.yml down -v` + +## Configuration + +More compose files can be specified to `docker-compose`, which combines them into a single configuration. +Using alternate compose files is a good idea for keeping related service configuration of different use cases in sync. +See more details in [Overview of docker-compose CLI][4]. + +Another preferred way for using different configuration is editing `.env` file or setting environment variables. +See more details in [https://docs.docker.com/compose/env-file/][5] + +### Official Grafana + +Official Grafana service name is `grafana-official`. It has limitations to Monasca Keystone authentications, moreover, +Monasca datasource plugin must be installed manually by below command: +``` +docker-compose exec grafana-official /bin/bash +grafana-cli plugins install monasca-datasource +exit +``` +Influx database can be accessed directly by using InfluxDB datasource. +See default values for Grafana datasource options: + +| Option | Value | +|----------|-----------------------| +| Url | http://localhost:8086 | +| Access | direct | +| Database | mon | +| User | mon_persister | +| Password | password | + +Values are declared in [`monasca-persister-python`](../monasca-persister-python/README.md) + +## TODO + +[1]: https://docs.docker.com/compose/reference/up/ +[2]: https://docs.docker.com/compose/reference/stop/ +[3]: https://docs.docker.com/compose/reference/start/ +[4]: https://docs.docker.com/compose/reference/overview/ +[5]: https://docs.docker.com/compose/env-file/ diff --git a/compose-standalone/build-all_gnome-terminal.sh b/compose-standalone/build-all_gnome-terminal.sh new file mode 100755 index 000000000..5ca791156 --- /dev/null +++ b/compose-standalone/build-all_gnome-terminal.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +cd "$(dirname "$0")" +source gnome-terminal_helper.sh + +docker-compose ${FILE_LIST} config --quiet || exit 1 + +FILE_LIST="--file docker-compose.yml --file compose-init.yml" +SERVICE_LIST="$(docker-compose ${FILE_LIST} config --services)" + +echo -e "Services:\n${SERVICE_LIST}" + +echo +do_compose "pull" "${FILE_LIST}" "$(docker-compose ${FILE_LIST} config --services)" + +echo "Press any key when all of images are already pulled..." +read -n1 + +echo +do_compose "build" "${FILE_LIST}" "$(docker-compose ${FILE_LIST} config --services)" diff --git a/compose-standalone/compose-init.yml b/compose-standalone/compose-init.yml new file mode 100644 index 000000000..16b5ef55d --- /dev/null +++ b/compose-standalone/compose-init.yml @@ -0,0 +1,22 @@ +version: '3' + +services: + + influxdb-init: + image: monasca/influxdb-init:${INFLUXDB_INIT_TAG} + build: + context: ../influxdb-init + container_name: ${CONTAINER_NAME_PREFIX}influxdb-init + depends_on: + - influxdb + + mysql-init: + image: monasca/mysql-init:${MYSQL_INIT_TAG} + build: + context: ../mysql-init + container_name: ${CONTAINER_NAME_PREFIX}mysql-init + environment: + MYSQL_INIT_DISABLE_REMOTE_ROOT: ${MYSQL_INIT_DISABLE_REMOTE_ROOT} + MYSQL_INIT_RANDOM_PASSWORD: ${MYSQL_INIT_RANDOM_PASSWORD} + depends_on: + - mysql diff --git a/compose-standalone/compose-sidecar.yml b/compose-standalone/compose-sidecar.yml new file mode 100644 index 000000000..11351d8e2 --- /dev/null +++ b/compose-standalone/compose-sidecar.yml @@ -0,0 +1,12 @@ +version: '3' + +services: + + monasca: + environment: + SIDECAR_URL: ${SIDECAR_URL} + depends_on: + - monasca-sidecar + + monasca-sidecar: + image: timothyb89/monasca-sidecar:${MONASCA_SIDECAR_TAG} diff --git a/compose-standalone/docker-compose.yml b/compose-standalone/docker-compose.yml new file mode 100644 index 000000000..6fa3e6c90 --- /dev/null +++ b/compose-standalone/docker-compose.yml @@ -0,0 +1,94 @@ +version: '3' + +services: + + influxdb: + image: influxdb:${INFLUXDB_TAG} + container_name: ${CONTAINER_NAME_PREFIX}influxdb + environment: + INFLUXDB_RETENTION_ENABLED: ${INFLUXDB_RETENTION_ENABLED} + INFLUXDB_ADMIN_ENABLED: ${INFLUXDB_ADMIN_ENABLED} + ports: + - "8083:8083" + - "8086:8086" + + zookeeper: + image: zookeeper:${ZOOKEEPER_TAG} + container_name: ${CONTAINER_NAME_PREFIX}zookeeper + + kafka: + image: monasca/kafka:${KAFKA_TAG} + build: + context: ../kafka + container_name: ${CONTAINER_NAME_PREFIX}kafka + environment: + ZOOKEEPER_CONNECTION_STRING: ${ZOOKEEPER_CONNECTION_STRING} + KAFKA_DELETE_TOPIC_ENABLE: ${KAFKA_DELETE_TOPIC_ENABLE} + KAFKA_TOPIC_CONFIG: ${KAFKA_TOPIC_CONFIG} + KAFKA_CREATE_TOPICS: ${KAFKA_CREATE_TOPICS} + depends_on: + - zookeeper + + mysql: + image: mysql:${MYSQL_TAG} + container_name: ${CONTAINER_NAME_PREFIX}mysql + environment: + MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} + + keystone: + image: monasca/keystone:${KEYSTONE_TAG} + build: + context: ../keystone + container_name: ${CONTAINER_NAME_PREFIX}keystone + environment: + KEYSTONE_HOST: ${KEYSTONE_HOST} + KEYSTONE_PASSWORD: ${KEYSTONE_PASSWORD} + KEYSTONE_DATABASE_BACKEND: ${KEYSTONE_DATABASE_BACKEND} + KEYSTONE_MYSQL_HOST: ${KEYSTONE_MYSQL_HOST} + KEYSTONE_MYSQL_USER: ${KEYSTONE_MYSQL_USER} + KEYSTONE_MYSQL_PASSWORD: ${KEYSTONE_MYSQL_PASSWORD} + KEYSTONE_MYSQL_DATABASE: ${KEYSTONE_MYSQL_DATABASE} + volumes: + - ../keystone/preload.yml:/preload.yml + depends_on: + - mysql + ports: + - "5000:5000" + - "35357:35357" + + monasca: + image: monasca/api:${MONASCA_API_TAG} + build: + context: ../monasca-api-python + container_name: ${CONTAINER_NAME_PREFIX}monasca-api + depends_on: + - influxdb + - keystone + - mysql + - zookeeper + - kafka + ports: + - "8070:8070" + + monasca-persister: + image: monasca/persister:${MONASCA_PERSISTER_TAG} + build: + context: ../monasca-persister-python + container_name: ${CONTAINER_NAME_PREFIX}monasca-persister + depends_on: + - monasca + - influxdb + - zookeeper + - kafka + + grafana-official: + image: grafana/grafana:${GRAFANA_OFFICIAL_TAG} + container_name: ${CONTAINER_NAME_PREFIX}grafana-official + environment: + GF_SERVER_ROOT_URL: ${GF_SERVER_ROOT_URL} + GF_AUTH_ANONYMOUS_ENABLED: ${GF_AUTH_ANONYMOUS_ENABLED} + ports: + - "3000:3000" + depends_on: + - keystone + - monasca diff --git a/compose-standalone/gnome-terminal_helper.sh b/compose-standalone/gnome-terminal_helper.sh new file mode 100755 index 000000000..cc2df0765 --- /dev/null +++ b/compose-standalone/gnome-terminal_helper.sh @@ -0,0 +1,14 @@ +#@IgnoreInspection BashAddShebang +function do_compose { + COMPOSE_COMMAND=$1 + FILE_LIST=$2 + SERVICE_LIST=$3 + + TERM_CMD="gnome-terminal --geometry=132x43" + for i in ${SERVICE_LIST}; do + TERM_CMD="${TERM_CMD} --tab --command 'bash -c \"printf \\\"\033]0;${i}\007\\\"; docker-compose ${FILE_LIST} ${COMPOSE_COMMAND} ${i}; read -n1;\"'" + done; + + echo "docker-compose ${COMPOSE_COMMAND}" + eval "${TERM_CMD}" +} diff --git a/compose-standalone/up-all_gnome-terminal.sh b/compose-standalone/up-all_gnome-terminal.sh new file mode 100755 index 000000000..711a63f12 --- /dev/null +++ b/compose-standalone/up-all_gnome-terminal.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +cd "$(dirname "$0")" +source gnome-terminal_helper.sh + +docker-compose ${FILE_LIST} config --quiet || exit 1 + +FILE_LIST="--file docker-compose.yml" +SERVICE_LIST="$(docker-compose ${FILE_LIST} config --services)" + +echo -e "Services:\n${SERVICE_LIST}" + +echo +do_compose "up" "${FILE_LIST}" "$(docker-compose ${FILE_LIST} config --services)"