-
Notifications
You must be signed in to change notification settings - Fork 131
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
109 additions
and
4 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
FROM praekeltfoundation/python-base | ||
MAINTAINER Praekelt Foundation <dev@praekeltfoundation.org> | ||
|
||
ENV VUMI_VERSION "0.6.2" | ||
RUN pip install vumi==$VUMI_VERSION | ||
|
||
COPY ./vumi-entrypoint.sh /app/vumi-entrypoint.sh | ||
WORKDIR /app | ||
|
||
ENTRYPOINT ["eval-args.sh", "dinit", "/app/vumi-entrypoint.sh"] | ||
CMD [] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
# Vumi Docker image | ||
Documentation for Vumi is available online at http://vumi.readthedocs.org/ and in the `docs` directory of the repository. | ||
|
||
## Usage | ||
The Docker image provides an entrypoint for Vumi that allows the configuration of Vumi workers via environment variables. | ||
|
||
### Environment variables | ||
#### Basic options: | ||
* `TWISTD_COMMAND`: the command to pass to `twistd` (default: `vumi_worker`) | ||
* `WORKER_CLASS`: the Vumi worker class to use | ||
* `CONFIG_FILE`: the path to the YAML configuration file to use | ||
* `SENTRY_DSN`: the Sentry DSN to use for reporting errors | ||
|
||
#### AMQP options: | ||
AMQP/RabbitMQ options can be set via environment variables. At a minimum, the `AMQP_HOST` variable must be set or else none of the other AMQP variables will take effect. | ||
* `AMQP_HOST`: the address for the RabbitMQ server | ||
* `AMQP_PORT`: the port for the RabbitMQ server (default: `5672`) | ||
* `AMQP_VHOST`: the name of the RabbitMQ vhost to use (default: `/`) | ||
* `AMQP_USERNAME`: the username to authenticate with RabbitMQ (default: `guest`) | ||
* `AMQP_PASSWORD`: the password to authenticate with RabbitMQ (default: `guest`) | ||
|
||
#### `VUMI_OPT_` options | ||
Additional options can be passed to Vumi via variables that start with `VUMI_OPT_`. These variables will be converted to `--set-option` CLI options. For example, the environment variable `VUMI_OPT_BUCKET=1` will result in the CLI option `--set-option=bucket:1`. | ||
|
||
### `/app` directory | ||
The `/app` directory is created and set as the current working directory. This is the directory where the files (e.g. YAML config) for your application should be put. | ||
|
||
### Examples | ||
Running a built-in worker class without a config file: | ||
```shell | ||
docker run --rm -it \ | ||
-e WORKER_CLASS=vumi.blinkenlights.MetricTimeBucket \ | ||
-e AMQP_HOST=rabbitmq.service.consul \ | ||
-e VUMI_OPT_BUCKETS=3 \ | ||
-e VUMI_OPT_BUCKET_SIZE=10 \ | ||
praekeltfoundation/vumi | ||
``` | ||
|
||
Dockerfile for an image with an external worker class and a config file: | ||
```dockerfile | ||
FROM praekeltfoundation/vumi | ||
RUN pip install vumi-http-api | ||
COPY ./my-config.yaml /app/my-config.yaml | ||
ENV WORKER_CLASS="vumi_http_api.VumiApiWorker" \ | ||
CONFIG_FILE="my-config.yaml" \ | ||
AMQP_HOST="rabbitmq.service.consul" | ||
EXPOSE 8000 | ||
``` | ||
|
||
Dockerfile for an image with custom arguments: | ||
```dockerfile | ||
FROM praekeltfoundation/vumi | ||
RUN pip install go-metrics-api | ||
COPY ./my-config.yaml /app/my-config.yaml | ||
ENV TWISTD_COMMAND="cyclone" | ||
EXPOSE 8000 | ||
CMD ["--app", "go_metrics.server.MetricsApi", \ | ||
"--port", "8000", \ | ||
"--app-opts", "my-config.yaml"] | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
#!/bin/bash -e | ||
|
||
TWISTD_COMMAND="${TWISTD_COMMAND:-vumi_worker}" | ||
|
||
WORKER_CLASS_OPT="" | ||
if [ -n "$WORKER_CLASS" ]; then | ||
WORKER_CLASS_OPT="--worker-class $WORKER_CLASS" | ||
fi | ||
|
||
CONFIG_OPT="" | ||
if [ -n "$CONFIG_FILE" ]; then | ||
CONFIG_OPT="--config $CONFIG_FILE" | ||
fi | ||
|
||
AMQP_OPTS="" | ||
if [ -n "$AMQP_HOST" ]; then | ||
AMQP_OPTS="--hostname $AMQP_HOST \ | ||
--port ${AMQP_PORT:-5672} \ | ||
--vhost ${AMQP_VHOST:-/} \ | ||
--username ${AMQP_USERNAME:-guest} \ | ||
--password ${AMQP_PASSWORD:-guest}" | ||
fi | ||
|
||
SENTRY_OPT="" | ||
if [ -n "$SENTRY_DSN" ]; then | ||
SENTRY_OPT="--sentry $SENTRY_DSN" | ||
fi | ||
|
||
SET_OPTS=$(env | grep ^VUMI_OPT_ | sed -e 's/^VUMI_OPT_//' -e 's/=/ /' | awk '{printf("%s=%s:%s ", "--set-option", tolower($1), $2);}') | ||
|
||
exec twistd --nodaemon \ | ||
$TWISTD_COMMAND \ | ||
$WORKER_CLASS_OPT \ | ||
$CONFIG_OPT \ | ||
$AMQP_OPTS \ | ||
$SENTRY_OPT \ | ||
$SET_OPTS \ | ||
"$@" |