Service Manager (devservices)
A standalone CLI tool called devservices
is used to bring up and manage service dependencies. The tool reads from a config.yml
file within a repository's devservices
directory. It is an abstraction built on top of Docker Compose and Docker.
Copied
usage: devservices [-h] [--version] COMMAND ...
CLI tool for managing service dependencies.
options:
-h, --help show this help message and exit
--version show program's version number and exit
commands:
up Bring up a service and its dependencies
down Bring down a service and its dependencies
list-dependencies List the dependencies of a service
list-services (ls) List the services installed locally
status View status of a service
logs View logs for a service
update update devservices to the latest version
purge Purge the local devservices cache
Copied
devservices logs
Copied
# redis
docker exec -it redis-redis-1 redis-cli
# clickhouse
docker exec -it snuba-clickhouse-1 clickhouse-client
# psql
docker exec -it sentry-postgres-1 psql -U postgres
Should you really bamboozle your containers or volumes, you can use devservices purge
to start over.
Copied
# Remove all data (containers, volumes, and networks) associated with ALL services
devservices purge
As an example, let's say we've managed to corrupt our postgres database while working on a migration, and you want to reset your postgres data you can do:
Copied
# Remove all data (containers, volumes, and networks) associated with a single service
docker container rm sentry-postgres-1
docker volume rm sentry_postgres-data
Common modes:
symbolicator
: Bring up sentry dependencies and symbolicatorchartcuterie
: Bring up sentry dependencies and chartcuterieminimal
: Bring up minimal services for local developmentprofiling
: Bring up sentry dependencies and vroomfull
: Bring up all services (symbolicator, taskbroker, snuba, vroom, etc)
Copied
devservices up --mode symbolicator
Important
These instructions can result in data loss. Please proceed with caution. This is an example with postgres, but can be done with other docker volumes as well.
Volume names are different for each service.
Clickhouse:
- old:
sentry_clickhouse
- new:
snuba_clickhouse-data
Postgres:
- old:
sentry_postgres
- new:
sentry_postgres-data
Kafka:
- old:
sentry_kafka
- new:
kafka_kafka-data
Redis:
- old:
sentry_redis
- new:
redis_redis-data
Copied
# Create a new postgres volume
docker volume create sentry_postgres-data
# Copy over the data from the old volume
docker run --rm \
-v sentry_postgres:/old_volume \
-v sentry_postgres-data:/new_volume \
ubuntu \
bash -c "cd /old_volume && cp -a . /new_volume"
# Validate that data has been copied over
docker run --rm -v sentry_postgres-data:/data ubuntu ls -l /data
Help improve this content
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").