Set up a docker compose file to run all images

For ease-of-use, we use a jsonnet file to generate the yaml.
Jsonnet is a language for generating JSON documents.

In this case it's useful to us because it lets us have comments,
references to settings defined at the top, and some basic logic
like converting qualities from a list of strings to a comma-seperated string.

To avoid requiring jsonnet to be installed, we use the official jsonnet docker image
in the generate script.
pull/21/head
Mike Lang 6 years ago committed by Christopher Usher
parent 25185f8f1f
commit 78a9a4e525

2
.gitignore vendored

@ -1 +1 @@
config.yaml docker-compose.yml

@ -18,3 +18,7 @@ but a brief overview of the components:
All components are built as docker images. All components are built as docker images.
Components which access the disk expect a shared directory mounted at `/mnt`. Components which access the disk expect a shared directory mounted at `/mnt`.
A docker-compose file is provided to run all components. See `docker-compose.jsonnet`
to set configuration options, then generate the compose file with `./generate-docker-compose`.
Then run `docker-compose up`.

@ -0,0 +1,60 @@
// This is a jsonnet file, it generates a docker-compose.yml file.
// To generate, run "make docker-compose.yml".
{
// These are the important top-level settings.
// Change these to configure the services.
// Image tag (application version) to use.
// Note: "latest" is not reccomended in production, as you can't be sure what version
// you're actually running, and must manually re-pull to get an updated copy.
image_tag:: "latest",
// Twitch channel to capture
channel:: "desertbus",
// Stream qualities to capture in addition to source.
qualities:: ["480p"],
// Local path to save segments to. Full path must already exist. Cannot contain ':'.
segments_path:: "/var/lib/wubloader/",
// The host's port to expose the restreamer on.
restreamer_port:: 8080,
// Now for the actual docker-compose config
// docker-compose version
version: "3",
services: {
downloader: {
image: "quay.io/ekimekim/wubloader-downloader:%s" % $.image_tag,
// Args for the downloader: set channel and qualities
command: [
$.channel,
"--qualities", std.join(",", $.qualities),
],
// Mount the segments directory at /mnt
volumes: ["%s:/mnt" % $.segments_path],
// If the application crashes, restart it.
restart: "on-failure",
},
restreamer: {
image: "quay.io/ekimekim/wubloader-restreamer:%s" % $.image_tag,
// Mount the segments directory at /mnt
volumes: ["%s:/mnt" % $.segments_path],
// If the application crashes, restart it.
restart: "on-failure",
// Expose on the configured host port by mapping that port to the default
// port for restreamer, which is 8000.
ports: ["%s:8000" % $.restreamer_port],
},
},
}

@ -0,0 +1,14 @@
#!/bin/bash
set -eu
# We generate first, and capture the output, to avoid overwriting the file on error.
# To avoid jsonnet needing to exist locally, we run it in a container.
output=$(docker run -i sparkprime/jsonnet - < docker-compose.jsonnet)
{
echo "# DO NOT EDIT THIS FILE!"
echo "# This file is generated from docker-compose.jsonnet"
echo "# It can be generated by running ./generate-docker-compose"
echo "$output"
} > docker-compose.yml
Loading…
Cancel
Save