* Modify `docker-compose-developer` configuration files, and `Makefile` to support running everything in containers for local development - Make use of the COMPOSE_PROFILES env var that is supported by docker-compose to allow swapping-out/turning off certain docker-compose services. - add makefile cleanup command. Will remove all docker resources related to running the project locally - The "restart grafana container" issue, where users would need to restart their grafana container when setting up the project for the first time, is now fixed (make command now runs yarn build:dev before docker-compose startup; this ensures grafana-plugin/dist is available for grafana container before it starts up) - The DEVELOPER.md has been updated as well to reflect these new changes. It has been moved to ./dev/README.md (and references to the old file have been updated). - The redis image that is referenced in the docker-compose files has been pinned to v7.0.5 (latest version as of this commit) to avoid any surprises w/ future releases. - remove root .dockerignore in favour of individual .dockerignore files in ./engine and ./grafana-plugin
273 lines
6.7 KiB
YAML
273 lines
6.7 KiB
YAML
version: "3.8"
|
|
|
|
x-labels: &oncall-labels
|
|
- "com.grafana.oncall.env=dev"
|
|
|
|
x-oncall-build: &oncall-build-args
|
|
context: ./engine
|
|
target: dev
|
|
labels: *oncall-labels
|
|
|
|
x-oncall-volumes: &oncall-volumes
|
|
- ./engine:/etc/app
|
|
- ./engine/oncall.db:/var/lib/oncall/oncall.db
|
|
|
|
x-env-files: &oncall-env-files
|
|
- ./dev/.env.dev
|
|
- ./dev/.env.${DB}.dev
|
|
|
|
x-env-vars: &oncall-env-vars
|
|
BROKER_TYPE: ${BROKER_TYPE}
|
|
|
|
services:
|
|
oncall_ui:
|
|
container_name: oncall_ui
|
|
labels: *oncall-labels
|
|
build:
|
|
context: ./grafana-plugin
|
|
dockerfile: Dockerfile.dev
|
|
labels: *oncall-labels
|
|
volumes:
|
|
- ./grafana-plugin:/etc/app
|
|
- /etc/app/node_modules
|
|
profiles:
|
|
- oncall_ui
|
|
|
|
oncall_engine:
|
|
container_name: oncall_engine
|
|
labels: *oncall-labels
|
|
build: *oncall-build-args
|
|
restart: always
|
|
command: "python manage.py runserver 0.0.0.0:8080"
|
|
env_file: *oncall-env-files
|
|
environment: *oncall-env-vars
|
|
volumes: *oncall-volumes
|
|
ports:
|
|
- "8080:8080"
|
|
depends_on:
|
|
oncall_db_migration:
|
|
condition: service_completed_successfully
|
|
profiles:
|
|
- engine
|
|
|
|
# used to invoke one-off commands, primarily from the Makefile
|
|
# oncall_engine couldn't (easily) be used due to it's depends_on property
|
|
# we could alternatively just use `docker run` however that would require
|
|
# duplicating the env-files, volume mounts, etc in the Makefile
|
|
oncall_engine_commands:
|
|
container_name: oncall_engine_commands
|
|
labels: *oncall-labels
|
|
build: *oncall-build-args
|
|
env_file: *oncall-env-files
|
|
environment: *oncall-env-vars
|
|
volumes: *oncall-volumes
|
|
profiles:
|
|
# no need to start this except from within the Makefile
|
|
- _engine_commands
|
|
|
|
oncall_celery:
|
|
container_name: oncall_celery
|
|
labels: *oncall-labels
|
|
build: *oncall-build-args
|
|
restart: always
|
|
command: "python manage.py start_celery"
|
|
env_file: *oncall-env-files
|
|
environment: *oncall-env-vars
|
|
volumes: *oncall-volumes
|
|
depends_on:
|
|
oncall_db_migration:
|
|
condition: service_completed_successfully
|
|
profiles:
|
|
- engine
|
|
|
|
oncall_db_migration:
|
|
container_name: oncall_db_migration
|
|
labels: *oncall-labels
|
|
build: *oncall-build-args
|
|
command: "python manage.py migrate --noinput"
|
|
env_file: *oncall-env-files
|
|
environment: *oncall-env-vars
|
|
volumes: *oncall-volumes
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
mysql:
|
|
condition: service_healthy
|
|
rabbitmq:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_healthy
|
|
profiles:
|
|
- engine
|
|
|
|
redis:
|
|
container_name: redis
|
|
labels: *oncall-labels
|
|
image: redis:7.0.5
|
|
restart: always
|
|
ports:
|
|
- "6379:6379"
|
|
deploy:
|
|
labels: *oncall-labels
|
|
resources:
|
|
limits:
|
|
memory: 500m
|
|
cpus: "0.5"
|
|
healthcheck:
|
|
test: ["CMD", "redis-cli", "ping"]
|
|
timeout: 5s
|
|
interval: 5s
|
|
retries: 10
|
|
volumes:
|
|
- redisdata_dev:/data
|
|
profiles:
|
|
- redis
|
|
|
|
rabbitmq:
|
|
container_name: rabbitmq
|
|
labels: *oncall-labels
|
|
image: "rabbitmq:3.7.15-management"
|
|
restart: always
|
|
environment:
|
|
RABBITMQ_DEFAULT_USER: "rabbitmq"
|
|
RABBITMQ_DEFAULT_PASS: "rabbitmq"
|
|
RABBITMQ_DEFAULT_VHOST: "/"
|
|
ports:
|
|
- "15672:15672"
|
|
- "5672:5672"
|
|
deploy:
|
|
labels: *oncall-labels
|
|
resources:
|
|
limits:
|
|
memory: 1000m
|
|
cpus: "0.5"
|
|
healthcheck:
|
|
test: rabbitmq-diagnostics -q ping
|
|
interval: 30s
|
|
timeout: 30s
|
|
retries: 3
|
|
volumes:
|
|
- rabbitmqdata_dev:/var/lib/rabbitmq
|
|
profiles:
|
|
- rabbitmq
|
|
|
|
mysql:
|
|
container_name: mysql
|
|
labels: *oncall-labels
|
|
image: mysql:5.7
|
|
platform: linux/x86_64
|
|
command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
|
|
restart: always
|
|
environment:
|
|
MYSQL_ROOT_PASSWORD: empty
|
|
MYSQL_DATABASE: oncall_local_dev
|
|
ports:
|
|
- "3306:3306"
|
|
deploy:
|
|
labels: *oncall-labels
|
|
resources:
|
|
limits:
|
|
memory: 500m
|
|
cpus: "0.5"
|
|
healthcheck:
|
|
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
|
|
timeout: 20s
|
|
retries: 10
|
|
volumes:
|
|
- mysqldata_dev:/var/lib/mysql
|
|
profiles:
|
|
- mysql
|
|
|
|
mysql_to_create_grafana_db:
|
|
container_name: mysql_to_create_grafana_db
|
|
labels: *oncall-labels
|
|
image: mysql:5.7
|
|
platform: linux/x86_64
|
|
command: bash -c "mysql -h mysql -uroot -pempty -e 'CREATE DATABASE IF NOT EXISTS grafana CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'"
|
|
depends_on:
|
|
mysql:
|
|
condition: service_healthy
|
|
profiles:
|
|
- mysql
|
|
|
|
postgres:
|
|
container_name: postgres
|
|
labels: *oncall-labels
|
|
image: postgres:14.4
|
|
restart: always
|
|
environment:
|
|
POSTGRES_DB: oncall_local_dev
|
|
POSTGRES_PASSWORD: empty
|
|
POSTGRES_INITDB_ARGS: --encoding=UTF-8
|
|
ports:
|
|
- "5432:5432"
|
|
deploy:
|
|
labels: *oncall-labels
|
|
resources:
|
|
limits:
|
|
memory: 500m
|
|
cpus: "0.5"
|
|
healthcheck:
|
|
test: ["CMD", "pg_isready", "-U", "postgres"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
volumes:
|
|
- postgresdata_dev:/var/lib/postgresql/data
|
|
profiles:
|
|
- postgres
|
|
|
|
postgres_to_create_grafana_db:
|
|
container_name: postgres_to_create_grafana_db
|
|
labels: *oncall-labels
|
|
image: postgres:14.4
|
|
command: bash -c "PGPASSWORD=empty psql -U postgres -h postgres -tc \"SELECT 1 FROM pg_database WHERE datname = 'grafana'\" | grep -q 1 || PGPASSWORD=empty psql -U postgres -h postgres -c \"CREATE DATABASE grafana\""
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
profiles:
|
|
- postgres
|
|
|
|
grafana:
|
|
container_name: grafana
|
|
labels: *oncall-labels
|
|
image: "grafana/grafana:${GRAFANA_VERSION:-main}"
|
|
restart: always
|
|
environment:
|
|
GF_SECURITY_ADMIN_USER: oncall
|
|
GF_SECURITY_ADMIN_PASSWORD: oncall
|
|
GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS: grafana-oncall-app
|
|
env_file:
|
|
- ./dev/.env.${DB}.dev
|
|
ports:
|
|
- "3000:3000"
|
|
deploy:
|
|
labels: *oncall-labels
|
|
resources:
|
|
limits:
|
|
memory: 500m
|
|
cpus: "0.5"
|
|
extra_hosts:
|
|
- "host.docker.internal:host-gateway"
|
|
volumes:
|
|
- grafanadata_dev:/var/lib/grafana
|
|
- ./grafana-plugin:/var/lib/grafana/plugins/grafana-plugin
|
|
profiles:
|
|
- grafana
|
|
|
|
volumes:
|
|
redisdata_dev:
|
|
labels: *oncall-labels
|
|
grafanadata_dev:
|
|
labels: *oncall-labels
|
|
rabbitmqdata_dev:
|
|
labels: *oncall-labels
|
|
postgresdata_dev:
|
|
labels: *oncall-labels
|
|
mysqldata_dev:
|
|
labels: *oncall-labels
|
|
|
|
networks:
|
|
default:
|
|
name: oncall_dev
|
|
labels: *oncall-labels
|