diff --git a/base/files/.welcome.sh b/base/files/.welcome.sh index a2390b08..f37312f6 100644 --- a/base/files/.welcome.sh +++ b/base/files/.welcome.sh @@ -8,6 +8,7 @@ printf " * Documentation: https://docs.stackstorm.com/\n" printf " * Community: https://stackstorm.com/community-signup\n" printf " * Forum: https://forum.stackstorm.com/\n" printf " * \033[1;38;5;93mEnterprise: https://stackstorm.com/#product\033[0m\n\n" +# User logged into st2client container if [ -n "$ST2CLIENT" ]; then printf " Here you can use StackStorm CLI. Examples:\n" printf " st2 action list --pack=core\n" @@ -15,9 +16,11 @@ if [ -n "$ST2CLIENT" ]; then printf " st2 run core.local_sudo cmd='apt-get update' --tail\n" printf " st2 execution list\n" printf "\n" +else + printf " \033[1mNotice!\033[0m It's recommended to use \033[1mst2client\033[0m container to work with StackStorm cluster.\n" fi -printf " \033[1mWarning!\033[0m Do not edit configs, packs or any content inplace as they will be overridden. Modify Helm values.yaml instead!\n" -if [ ! -n "$ST2CLIENT" ]; then - printf " It's recommended to use \033[1mst2client\033[0m container to work with StackStorm cluster.\n" +# Is K8s environment +if [ -n "$KUBERNETES_PORT" ]; then + printf " \033[1mWarning!\033[0m Do not edit configs, packs or any content inplace as they will be overridden. Modify Helm values.yaml instead!\n" fi printf "\n" diff --git a/stackstorm-compose/README.md b/stackstorm-compose/README.md new file mode 100644 index 00000000..43e9cdfe --- /dev/null +++ b/stackstorm-compose/README.md @@ -0,0 +1,306 @@ +# StackStorm in Docker Compose + +This docker-compose is provided as a way to allow someone to "get up and running" quickly with StackStorm using Docker. It is not designed to be used in production, but rather a way to test out StackStorm and facilitate pack development. + +## TL;DR + +```shell +git clone git@github.com:stackstorm/st2-dockerfiles +cd st2-dockerfiles/stackstorm-compose +docker-compose up -d +docker-compose exec st2client bash # this gives you access to the st2 command line +``` + +Open `http://localhost:8000` in your browser. StackStorm Username/Password by default is: st2admin/Ch@ngeMe. + +## Usage + +### Prerequisites + +- Docker Engine 18.09+ +- Docker Compose 1.12+ + +### Compose Configuration + +The image version, exposed ports, and "packs.dev" directory is configurable with environment variables. + +- **ST2_VERSION** this is the tag at the end of the docker image (ie: stackstorm/st2api:v3.3dev) +- **ST2_IMAGE_REPO** The image or path to the images. Default is "stackstorm/". You may change this is using the Enterprise version or a private docker repository. +- **ST2_EXPOSE_HTTP** Port to expose st2web port 80 on. Default is `127.0.0.1:8000`, and you may want to do `0.0.0.0:8000` to expose on all interfaces. +- **ST2_PACKS_DEV** Directory to development packs, absolute or relative to docker-compose.yml. This allows you to develop packs locally. Default is `./packs.dev`. When making a number of packs, it is recommended to make a directory outside of st2-dockerfiles, with each subdirectory underneath that being an independent git repo. Example: `ST2_PACKS_DEV=${HOME}/mypacks`, with `${HOME}/mypacks/st2-helloworld` being a git repo for the "helloworld" pack. + +### Credentials + +The `htpasswd` file is created with a default username of `st2admin` and a default password of `Ch@ngeMe`. This can be changed using the [htpasswd utility](https://httpd.apache.org/docs/2.4/programs/htpasswd.html). + +Another file (`st2-cli.conf`) contains default credentials and is mounted into the "st2client" container. If you change credentials in htpasswd, you will probably want to change them in st2-cli.conf. + +### Further configuration + +The base st2 docker images have a built-in `/etc/st2/st2.conf` configuration file. Each st2 Docker image will load: + +- /etc/st2/st2.conf +- /etc/st2/st2.docker.conf (values here will override st2.conf) +- /etc/st2/st2.user.conf (values here will override st2.docker.conf) + +Review `../base/files/st2.tmp.conf` and `st2.docker.conf` for currently set values, and it is recommended to place overrides in `st2.user.conf`. + +### Step by step first time instructions + +First, optionally set and export all the environment variables you want to change. You could make a .env file with customizations. + +Example: + +```shell +export ST2_PACKS_DEV=$HOME/projects/stackstorm-packs +export ST2_EXPOSE_HTTP=0.0.0.0:8000 +``` + +Secondly make any customizations to st2.user.conf, htpasswd, and st2-cli.conf. + +Example: + +To enable [sharing code between actions and sensors](https://docs.stackstorm.com/reference/sharing_code_sensors_actions.html), add these two lines to st2.user.conf: + +```ini +[packs] +enable_common_libs = True +``` + +Third, start the docker environment: + +```shell +docker-compose up -d +``` + +This will pull the required images from docker hub, and then start them. + +To stop the docker environment, run: + +```shell +docker-compose down +``` + +## Regular Usage + +To run st2 commands, you can use the st2client service: + +```shell +docker-compose exec st2client st2 +``` + +Example: + +```shell +$ docker-compose exec st2client st2 run core.echo message=hello +. +id: 5eb30d77afe5aa8493f31187 +action.ref: core.echo +context.user: st2admin +parameters: + message: hello +status: succeeded +start_timestamp: Wed, 06 May 2020 19:18:15 UTC +end_timestamp: Wed, 06 May 2020 19:18:15 UTC +result: + failed: false + return_code: 0 + stderr: '' + stdout: hello + succeeded: true +``` + +Alternatively, you could run `docker-compose exec st2client bash` to be dropped into a container with st2. At that point, you can just run `st2` commands. + +Example: + +```shell +$ docker-compose exec st2client bash +Welcome to StackStorm HA v3.3dev (Ubuntu 16.04 LTS GNU/Linux x86_64) + * Documentation: https://docs.stackstorm.com/ + * Community: https://stackstorm.com/community-signup + * Forum: https://forum.stackstorm.com/ + * Enterprise: https://stackstorm.com/#product + + Warning! Do not edit configs, packs or any content inplace as they will be overridden. Modify Helm values.yaml instead! + It's recommended to use st2client container to work with StackStorm cluster. + +root@aaabd11745f0:/opt/stackstorm# st2 run core.echo message="from the inside" +. +id: 5eb310f571af8f57a4582430 +action.ref: core.echo +context.user: st2admin +parameters: + message: from the inside +status: succeeded +start_timestamp: Wed, 06 May 2020 19:33:09 UTC +end_timestamp: Wed, 06 May 2020 19:33:09 UTC +result: + failed: false + return_code: 0 + stderr: '' + stdout: from the inside + succeeded: true +``` + +## Pack Configuration + +Pack configs will be in /opt/stackstorm/configs/$PACKNAME, which is a docker volume shared between st2api, st2actionrunner, and st2sensorcontainer. You can use the `st2 pack config ` in the st2client container in order to configure a pack. + +### Use st2 pack config + +```shell +$ docker-compose exec st2client st2 pack config git +repositories[0].url: https://github.com/StackStorm/st2-dockerfiles.git +repositories[0].branch [master]: +~~~ Would you like to add another item to "repositories" array / list? [y]: n +--- +Do you want to preview the config in an editor before saving? [y]: n +--- +Do you want me to save it? [y]: y ++----------+--------------------------------------------------------------+ +| Property | Value | ++----------+--------------------------------------------------------------+ +| id | 5eb3164f566aa824ea88f536 | +| pack | git | +| values | { | +| | "repositories": [ | +| | { | +| | "url": | +| | "https://github.com/StackStorm/st2-dockerfiles.git", | +| | "branch": "master" | +| | } | +| | ] | +| | } | ++----------+--------------------------------------------------------------+ +``` + +### Copy a config file into a container + +First, find the actual container name of st2api by running `docker-compose ps st2api`. + +```shell +$ docker-compose ps st2api + Name Command State Ports +-------------------------------------------------------------------- +compose_st2api_1 /opt/stackstorm/st2/bin/st ... Up 9101/tcp +``` + +Next, use `docker cp` to copy your file into place. + +```shell +docker cp git.yaml compose_st2api_1:/opt/stackstorm/configs/git.yaml +``` + +## Register the pack config + +If you used `docker cp` to copy the config in, you will need to manually load that configuration. The st2client service does not need access to the configs directory, as it will talk to st2api. + +```shell +$ docker-compose exec st2client st2 run packs.load packs=git register=configs +. +id: 5eb3171c566aa824ea88f538 +action.ref: packs.load +context.user: st2admin +parameters: + packs: + - git + register: configs +status: succeeded +start_timestamp: Wed, 06 May 2020 19:59:24 UTC +end_timestamp: Wed, 06 May 2020 19:59:25 UTC +result: + exit_code: 0 + result: + configs: 1 + stdout: '' +``` + +## Local Pack Development + +See [Create and Contribute a Pack](https://docs.stackstorm.com/reference/packs.html) for how to actually develop a pack. + +If you are working on a development pack, you will need to register it and install the virutalenv (if it's python). + +### packs.dev directory + +As mentioned above, your default `packs.dev` directory is relative to your `docker-compose.yml` file. However, if you start developing here, git will not like being inside another git directory. You will want to set `ST2_PACKS_DEV` to a directory outside of `st2-dockerfiles` and restart the docker-compose services. + +Example: We have a pack called helloworld in `packs.dev/helloworld`. The directory name has to match the pack name. So even if you have a git repo named "st2-helloworld", it should be cloned locally as "helloworld". + +For these examples, we will be operating inside the st2client container. + +### Register the pack + +Register the pack by running `st2 run packs.load packs=, register=all`. Alternatively you can specify different register option (like register=actions) to focus on the parts you need to (re)register. You will be running this command a lot as you develop actions, sensors, rules and workflows. + +```shell +root@aaabd11745f0:/opt/stackstorm# st2 run packs.load packs=helloworld register=all +. +id: 5eb3100f71af8f57a458241f +action.ref: packs.load +context.user: st2admin +parameters: + packs: + - helloworld + register: all +status: succeeded +start_timestamp: Wed, 06 May 2020 19:29:19 UTC +end_timestamp: Wed, 06 May 2020 19:29:21 UTC +result: + exit_code: 0 + result: + actions: 13 + aliases: 0 + configs: 0 + policies: 0 + policy_types: 3 + rule_types: 2 + rules: 0 + runners: 15 + sensors: 0 + triggers: 0 +``` + +### Create the Python Virtual Environment + +If you are using python-runners in your locally developed pack, you will need to create the virtual environment by hand. You should typically only have to run this if you have changed your requirements.txt. + +To setup the virtual environment: `st2 run packs.setup_virtualenv packs=,` + +```shell +root@aaabd11745f0:/opt/stackstorm# st2 run packs.setup_virtualenv packs=helloworld +.... +id: 5eb311f871af8f57a4582433 +action.ref: packs.setup_virtualenv +context.user: st2admin +parameters: + packs: + - helloworld +status: succeeded +start_timestamp: Wed, 06 May 2020 19:37:28 UTC +end_timestamp: Wed, 06 May 2020 19:37:36 UTC +result: + exit_code: 0 + result: 'Successfully set up virtualenv for the following packs: helloworld' + stderr: 'st2.actions.python.SetupVirtualEnvironmentAction: DEBUG Setting up virtualenv for pack "helloworld" (/opt/stackstorm/packs.dev/helloworld) + st2.actions.python.SetupVirtualEnvironmentAction: INFO Virtualenv path "/opt/stackstorm/virtualenvs/helloworld" doesn''t exist + st2.actions.python.SetupVirtualEnvironmentAction: DEBUG Creating virtualenv for pack "helloworld" in "/opt/stackstorm/virtualenvs/helloworld" + st2.actions.python.SetupVirtualEnvironmentAction: DEBUG Creating virtualenv in "/opt/stackstorm/virtualenvs/helloworld" using Python binary "/opt/stackstorm/st2/bin/python" + st2.actions.python.SetupVirtualEnvironmentAction: DEBUG Running command "/opt/stackstorm/st2/bin/virtualenv -p /opt/stackstorm/st2/bin/python --always-copy --no-download /opt/stackstorm/virtualenvs/helloworld" to create virtualenv. + st2.actions.python.SetupVirtualEnvironmentAction: DEBUG Installing base requirements + st2.actions.python.SetupVirtualEnvironmentAction: DEBUG Installing requirement six>=1.9.0,<2.0 with command /opt/stackstorm/virtualenvs/helloworld/bin/pip install six>=1.9.0,<2.0. + st2.actions.python.SetupVirtualEnvironmentAction: DEBUG Installing pack specific requirements from "/opt/stackstorm/packs.dev/helloworld/requirements.txt" + st2.actions.python.SetupVirtualEnvironmentAction: DEBUG Installing requirements from file /opt/stackstorm/packs.dev/helloworld/requirements.txt with command /opt/stackstorm/virtualenvs/helloworld/bin/pip install -U -r /opt/stackstorm/packs.dev/helloworld/requirements.txt. + st2.actions.python.SetupVirtualEnvironmentAction: DEBUG Virtualenv for pack "helloworld" successfully created in "/opt/stackstorm/virtualenvs/helloworld" + ' + stdout: '' +``` + +# Remove everything + +If you want to uninstall, or start from a "clean" installation, docker-compose can remove all the containers and volumes in one comamnd. + +```shell +docker-compose down --remove-orphans -v +``` \ No newline at end of file diff --git a/stackstorm-compose/docker-compose.yml b/stackstorm-compose/docker-compose.yml new file mode 100644 index 00000000..2b7e07be --- /dev/null +++ b/stackstorm-compose/docker-compose.yml @@ -0,0 +1,237 @@ +version: '3' + +services: + st2web: + image: ${ST2_IMAGE_REPO:-stackstorm/}st2web:${ST2_VERSION:-3.3dev} + restart: on-failure + environment: + ST2_AUTH_URL: ${ST2_AUTH_URL:-http://st2auth:9100/} + ST2_API_URL: ${ST2_API_URL:-http://st2api:9101/} + ST2_STREAM_URL: ${ST2_STREAM_URL:-http://st2stream:9102/} + ST2WEB_HTTPS: ${ST2WEB_HTTPS:-0} + depends_on: + - st2auth + - st2api + - st2stream + healthcheck: + test: ["CMD", "/st2web-healthcheck.sh"] + interval: 30s + timeout: 1s + retries: 1 + volumes: + - ./st2web-healthcheck.sh:/st2web-healthcheck.sh + ports: + - "${ST2_EXPOSE_HTTP:-127.0.0.1:8000}:80" + # - "${ST2_EXPOSE_HTTPS:-127.0.0.1:8443}:443" + # more work would be needed with certificate generate to make https work. + networks: + - private + - public + dns_search: . + st2makesecrets: + image: ${ST2_IMAGE_REPO:-stackstorm/}st2actionrunner:${ST2_VERSION:-3.3dev} + restart: on-failure + networks: + - private + volumes: + - ./makesecrets.sh:/makesecrets.sh + - stackstorm-keys:/etc/st2/keys:rw + dns_search: . + command: /makesecrets.sh + st2api: + image: ${ST2_IMAGE_REPO:-stackstorm/}st2api:${ST2_VERSION:-3.3dev} + restart: on-failure + depends_on: ["mongo", "rabbitmq", "st2makesecrets"] + networks: + - private + environment: + ST2_AUTH_URL: ${ST2_AUTH_URL:-http://st2auth:9100/} + ST2_API_URL: ${ST2_API_URL:-http://st2api:9101/} + ST2_STREAM_URL: ${ST2_STREAM_URL:-http://st2stream:9102/} + volumes: + - ./st2.docker.conf:/etc/st2/st2.docker.conf:ro + - ./st2.user.conf:/etc/st2/st2.user.conf:ro + - stackstorm-keys:/etc/st2/keys:rw + - stackstorm-packs-configs:/opt/stackstorm/configs:rw + - stackstorm-packs:/opt/stackstorm/packs:rw + - ${ST2_PACKS_DEV:-./packs.dev}:/opt/stackstorm/packs.dev:rw + dns_search: . + st2stream: + image: ${ST2_IMAGE_REPO:-stackstorm/}st2stream:${ST2_VERSION:-3.3dev} + restart: on-failure + depends_on: ["st2api"] + networks: + - private + volumes: + - ./st2.docker.conf:/etc/st2/st2.docker.conf:ro + - ./st2.user.conf:/etc/st2/st2.user.conf:ro + dns_search: . + st2scheduler: + image: ${ST2_IMAGE_REPO:-stackstorm/}st2scheduler:${ST2_VERSION:-3.3dev} + restart: on-failure + depends_on: ["st2api"] + networks: + - private + volumes: + - ./st2.docker.conf:/etc/st2/st2.docker.conf:ro + - ./st2.user.conf:/etc/st2/st2.user.conf:ro + dns_search: . + st2workflowengine: + image: ${ST2_IMAGE_REPO:-stackstorm/}st2workflowengine:${ST2_VERSION:-3.3dev} + restart: on-failure + depends_on: ["st2api"] + networks: + - private + volumes: + - ./st2.docker.conf:/etc/st2/st2.docker.conf:ro + - ./st2.user.conf:/etc/st2/st2.user.conf:ro + dns_search: . + st2auth: + image: ${ST2_IMAGE_REPO:-stackstorm/}st2auth:${ST2_VERSION:-3.3dev} + restart: on-failure + depends_on: ["st2api"] + networks: + - private + volumes: + - ./st2.docker.conf:/etc/st2/st2.docker.conf:ro + - ./st2.user.conf:/etc/st2/st2.user.conf:ro + - ./htpasswd:/etc/st2/htpasswd:ro + dns_search: . + st2actionrunner: + image: ${ST2_IMAGE_REPO:-stackstorm/}st2actionrunner:${ST2_VERSION:-3.3dev} + restart: on-failure + depends_on: ["st2api"] + networks: + - private + volumes: + - ./st2.docker.conf:/etc/st2/st2.docker.conf:ro + - ./st2.user.conf:/etc/st2/st2.user.conf:ro + - stackstorm-packs-configs:/opt/stackstorm/configs:rw + - stackstorm-packs:/opt/stackstorm/packs:rw + - ${ST2_PACKS_DEV:-./packs.dev}:/opt/stackstorm/packs.dev:rw + - stackstorm-virtualenvs:/opt/stackstorm/virtualenvs:rw + - stackstorm-ssh:/home/stanley.ssh + dns_search: . + st2garbagecollector: + image: ${ST2_IMAGE_REPO:-stackstorm/}st2garbagecollector:${ST2_VERSION:-3.3dev} + restart: on-failure + depends_on: ["st2api"] + networks: + - private + volumes: + - ./st2.docker.conf:/etc/st2/st2.docker.conf:ro + - ./st2.user.conf:/etc/st2/st2.user.conf:ro + dns_search: . + st2notifier: + image: ${ST2_IMAGE_REPO:-stackstorm/}st2notifier:${ST2_VERSION:-3.3dev} + restart: on-failure + depends_on: ["st2api"] + networks: + - private + volumes: + - ./st2.docker.conf:/etc/st2/st2.docker.conf:ro + - ./st2.user.conf:/etc/st2/st2.user.conf:ro + dns_search: . + st2resultstracker: + image: ${ST2_IMAGE_REPO:-stackstorm/}st2resultstracker:${ST2_VERSION:-3.3dev} + restart: on-failure + depends_on: ["st2api"] + networks: + - private + volumes: + - ./st2.docker.conf:/etc/st2/st2.docker.conf:ro + - ./st2.user.conf:/etc/st2/st2.user.conf:ro + dns_search: . + st2rulesengine: + image: ${ST2_IMAGE_REPO:-stackstorm/}st2rulesengine:${ST2_VERSION:-3.3dev} + restart: on-failure + depends_on: ["st2api"] + networks: + - private + volumes: + - ./st2.docker.conf:/etc/st2/st2.docker.conf:ro + - ./st2.user.conf:/etc/st2/st2.user.conf:ro + dns_search: . + st2sensorcontainer: + image: ${ST2_IMAGE_REPO:-stackstorm/}st2sensorcontainer:${ST2_VERSION:-3.3dev} + restart: on-failure + depends_on: ["st2api"] + networks: + - private + dns_search: . + volumes: + - ./st2.docker.conf:/etc/st2/st2.docker.conf:ro + - ./st2.user.conf:/etc/st2/st2.user.conf:ro + - stackstorm-virtualenvs:/opt/stackstorm/virtualenvs:ro + - stackstorm-packs:/opt/stackstorm/packs:ro + - stackstorm-packs-configs:/opt/stackstorm/configs:ro + - ${ST2_PACKS_DEV:-./packs.dev}:/opt/stackstorm/packs.dev:ro + st2timersengine: + image: ${ST2_IMAGE_REPO:-stackstorm/}st2timersengine:${ST2_VERSION:-3.3dev} + restart: on-failure + depends_on: ["st2api"] + networks: + - private + dns_search: . + volumes: + - ./st2.docker.conf:/etc/st2/st2.docker.conf:ro + st2client: + image: ${ST2_IMAGE_REPO:-stackstorm/}st2actionrunner:${ST2_VERSION:-3.3dev} + restart: on-failure + depends_on: + - st2auth + - st2api + - st2stream + command: /st2client-startup.sh + networks: + - private + environment: + ST2CLIENT: 1 + ST2_AUTH_URL: ${ST2_AUTH_URL:-http://st2auth:9100/} + ST2_API_URL: ${ST2_API_URL:-http://st2api:9101/} + ST2_STREAM_URL: ${ST2_STREAM_URL:-http://st2stream:9102/} + volumes: + - ./st2client-startup.sh:/st2client-startup.sh + - ./st2-cli.conf:/root/.st2/config + # external services + mongo: + image: mongo:3.4 + restart: on-failure + networks: + - private + volumes: + - stackstorm-mongodb:/data/db + dns_search: . + rabbitmq: + image: rabbitmq:3.8 + restart: on-failure + networks: + - private + dns_search: . + volumes: + - stackstorm-rabbitmq:/var/lib/rabbitmq + redis: + image: redis:6.0 + restart: on-failure + networks: + - private + dns_search: . + volumes: + - stackstorm-redis:/data + +volumes: + stackstorm-mongodb: + stackstorm-rabbitmq: + stackstorm-redis: + stackstorm-postgres: + stackstorm-packs: + stackstorm-packs-configs: + stackstorm-keys: + stackstorm-virtualenvs: + stackstorm-ssh: + +networks: + public: + driver: bridge + private: + driver: bridge diff --git a/stackstorm-compose/htpasswd b/stackstorm-compose/htpasswd new file mode 100644 index 00000000..a9771452 --- /dev/null +++ b/stackstorm-compose/htpasswd @@ -0,0 +1,2 @@ +# st2admin:Ch@ngeMe +st2admin:$apr1$GjA7KmRf$nmbcSB1XoYRPfQrL9ZBD5. diff --git a/stackstorm-compose/makesecrets.sh b/stackstorm-compose/makesecrets.sh new file mode 100755 index 00000000..edc9c6ec --- /dev/null +++ b/stackstorm-compose/makesecrets.sh @@ -0,0 +1,11 @@ +#!/bin/bash +# this needs to run as root, so can't be ran in the st2api container +KEYPATH=/etc/st2/keys/datastore_key.json +if [ ! -f "/etc/st2/keys/datastore_key.json" ] +then + echo "Generating ${KEYPATH}" + st2-generate-symmetric-crypto-key --key-path /etc/st2/keys/datastore_key.json + chown -R st2:st2 /etc/st2/keys + chmod -R 750 /etc/st2/keys +fi + diff --git a/stackstorm-compose/st2-cli.conf b/stackstorm-compose/st2-cli.conf new file mode 100644 index 00000000..94a9bba3 --- /dev/null +++ b/stackstorm-compose/st2-cli.conf @@ -0,0 +1,3 @@ +[credentials] +username = st2admin +password = Ch@ngeMe diff --git a/stackstorm-compose/st2.docker.conf b/stackstorm-compose/st2.docker.conf new file mode 100644 index 00000000..f5ea3f6d --- /dev/null +++ b/stackstorm-compose/st2.docker.conf @@ -0,0 +1,28 @@ +# /etc/st2/st2.docker.conf +# +# This st2.docker.conf overrides st2.conf in the base image, and has been written to facilitate operation of +# stackstorm-compose/docker-compose.yml. It is recommended to not alter this file as an end-user, as this file +# is updated as necessary by the StackStorm st2-dockerfile maintainers. Instead, make local changes in the +# file "st2.user.conf". +# The order of merging: st2.conf < st2.docker.conf < st2.user.conf +[auth] +api_url = http://st2api:9101/ +[messaging] +url = amqp://guest:guest@rabbitmq:5672 + +[keyvalue] +encryption_key_path = /etc/st2/keys/datastore_key.json + +[database] +host = mongo +# st2.conf for kubernetes disables retry (relying on kubernetes), but +# for straight docker, we want to re-enable these. +# Connection retry total time (minutes). +connection_retry_max_delay_m = 1 +# Backoff multiplier (seconds). +connection_retry_backoff_mul = 1 +# Connection and server selection timeout (in ms). +connection_timeout = 3000 + +[content] +packs_base_paths=/opt/stackstorm/packs.dev diff --git a/stackstorm-compose/st2.user.conf b/stackstorm-compose/st2.user.conf new file mode 100644 index 00000000..9db6d427 --- /dev/null +++ b/stackstorm-compose/st2.user.conf @@ -0,0 +1,6 @@ +# /etc/st2/st2.user.conf +# +# This file is provided with no custom overrides and should be utilized by end-users to make any +# desired configuration changes. No changes to this file should be checked into the st2-dockerfiles +# repository. +# The order of merging: st2.conf < st2.docker.conf < st2.user.conf diff --git a/stackstorm-compose/st2client-startup.sh b/stackstorm-compose/st2client-startup.sh new file mode 100755 index 00000000..8676922b --- /dev/null +++ b/stackstorm-compose/st2client-startup.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +#st2client startup and registration +while true +do +ACTIONS=$(st2 action list) +if [ "$?" -ne 0 ] +then + echo "unable to reach downstream, will try again" + sleep 5 +elif [ "$ACTIONS" == "No matching items found" ] +then + echo "No packs registered, will register" + st2 pack register +else + echo "actions found st2client ready" + sleep infinity +fi +done \ No newline at end of file diff --git a/stackstorm-compose/st2web-healthcheck.sh b/stackstorm-compose/st2web-healthcheck.sh new file mode 100755 index 00000000..227f5629 --- /dev/null +++ b/stackstorm-compose/st2web-healthcheck.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +# check downstream services and mark container unhealthy if downstream is not unreachable +DOWNSTREAM_API_STATUS=$(curl --write-out "%{http_code}\n" --silent --output /dev/null $ST2_API_URL/v1) +if [ "${DOWNSTREAM_API_STATUS}" != "404" ]; then echo "st2api downstream failure"; exit 1; fi + +DOWNSTREAM_STREAM_STATUS=$(curl --write-out "%{http_code}\n" --silent --output /dev/null $ST2_STREAM_URL/v1/stream) +if [ "${DOWNSTREAM_STREAM_STATUS}" != "404" ]; then echo "st2stream downstream failure"; exit 1; fi + +DOWNSTREAM_AUTH_STATUS=$(curl --write-out "%{http_code}\n" --silent --output /dev/null $ST2_AUTH_URL/v1) +if [ "${DOWNSTREAM_AUTH_STATUS}" != "404" ]; then echo "st2auth downstream failure"; exit 1; fi + +# Check each service through the nginx reverse proxy for a specific return code. If the curl request +# fails to work through nginx, a stop signal will be sent to nginx, causing the container to restart. +API_STATUS=$(curl --write-out "%{http_code}\n" --silent --output /dev/null http://localhost/api/v1/) +if [ "${API_STATUS}" != "401" ]; then echo "st2api nginx failure"; nginx -s stop; fi + +STREAM_STATUS=$(curl --write-out "%{http_code}\n" --silent --output /dev/null http://localhost/stream/v1/stream) +if [ "${STREAM_STATUS}" != "401" ]; then echo "st2stream nginx failure"; nginx -s stop; fi + +AUTH_STATUS=$(curl --write-out "%{http_code}\n" --silent --output /dev/null http://localhost/auth/v1/) +if [ "${AUTH_STATUS}" != "404" ]; then echo "st2auth nginx failure"; nginx -s stop; fi + +exit 0 \ No newline at end of file