A template for Docker stack project layouts. Bootstrap it from github.com/dargmuesli/dargstack_template!
This template solves the problem of separated development and production environments in the otherwise well-defined, containerized software development process. It focuses on the development configuration, derives the production configuration from it and makes deployments a breeze!
When using bash, you could setup this script as an executable the following way:
mkdir ~/scripts/ \
&& wget https://raw.githubusercontent.com/dargmuesli/dargstack/master/src/dargstack -O ~/scripts/dargstack \
&& chmod +x ~/scripts/dargstack \
&& echo 'export PATH="$PATH:$HOME/scripts/"' >> ~/.bashrc \
&& . ~/.bashrc
Feel free to deviate from this example and use your personal preference!
-
getopt
on macOS differs from its Linux counterpart in that it does not support long options with two hyphens. To solve this problemgnu-getopt
has to be installed on macOS:brew install gnu-getopt
Dargstack will then automatically detect a getopt installation under
/opt/homebrew/opt/gnu-getopt/bin/getopt
. -
Bash on macOS is of version 3.x which does not support globstars. To run dargstack you need to install a newer bash version, i.e. from brew:
brew install bash
You must then always use the newly installed bash version to invoke dargstack. To simplify the call, you might want to add an alias to your
~/.bashrc
/opt/homebrew/Cellar/bash/5.2.2/bin/bash dargstack # or echo "alias dargstack='/opt/homebrew/Cellar/bash/5.2.2/bin/bash dargstack'" >> ~/.bashrc
The essential idea of this template. Read the full and detailed skeleton specification at ./README-skeleton.md.
Requires sudo >= 1.8.21 due to usage of the extended --preserve-env list syntax.
That means the minimum supported Debian version is buster
.
DargStack template helper script.
usage: dargstack <module> <options>
modules
build [sibling] Builds the main project or the specified sibling, tagged as dev. Only for development.
deploy Deploys a Docker project either from a full local development clone of the project or, with the --production parameter provided, by doing a sparse Git checkout containing only the production configuration. In the latter case derive is executed first and the existence of required environment variables is checked before deployment starts.
derive Derives a ./production/stack.yml from ./development/stack.yml.
rgen Generate the README.
rm Removes the stack.
self-update Updates the helper script.
validate Checks for an up-2-date README.
options
-a, --advertise-addr The address Docker Swarm advertises.
-h, --help Display this help. Usable with modules: all.
-o, --offline Do not try to update the checkout
-p, --production <tag> Execute in production mode. Version must equal a tag name or latest. Usable with modules: deploy.
-u, --url <url> The URL to clone from. May include the substrings <owner> and <name> that are replaced by their corresponding value that is inferred from the DargStack directory structure. Usable with modules: deploy.
A few setup strategies for the development environment have proven themselves useful, e.g. running a local dns server.