Set up your Juju deployment - offline

For an offline (to be more precise, proxy-restricted) deployment:

  1. Set up a private cloud.

  1. Figure out the list of external services required for your deployment and set up proxies / local mirrors for them. Depending on whether your deployment is on machines or Kubernetes, and on a localhost cloud or not, and which one, these services may include:

  2. Configure Juju to make use of the proxies / local mirrors you’ve set up by means of the following model configuration keys:

Example: Configure the client to use an HTTP proxy

Set up an HTTP proxy, export it to an environment variable, then use the http-proxy model configuration key to point the client to that value.

Example: Configure all models to use an APT mirror

Set up an APT mirror, export it to the environment variable $MIRROR_APT, then set the apt-mirror model config key to point to that environment variable. For example, for a controller on AWS:

juju bootstrap --model-default apt-mirror=$MIRROR_APT aws
Example: Have all models use local resources for both Juju agent binaries and cloud images

Get the resources for Juju agent binaries and cloud images locally; create simplestreams for these binaries and images (juju metadata); define and export export environment variables pointing to the simplestreams; then set the agent-metadata-url and image-metadata-url model configuration keys to point to those environment variables. For example:

juju bootstrap \
    --model-default agent-metadata-url=$LOCAL_AGENTS \
    --model-default image-metadata-url=$LOCAL_IMAGES \
    localhost
Example: Set up HTTP and HTTPS proxies but exclude the localhost cloud

Set up HTTP and HTTPS proxies and define and export environment variables pointing to them (below, PROXY_HTTP and PROXY_HTTPS); define and export a variable pointing to the IP addresses for your localhost cloud to the environment variable (below,PROXY_NO); then bootstrap setting the http_proxy, https_proxy, and no-proxy model configuration keys to the corresponding environment variable. For example:

$ export PROXY_HTTP=http://squid.internal:3128
$ export PROXY_HTTPS=http://squid.internal:3128
$ export PROXY_NO=$(echo localhost 127.0.0.1 10.245.67.130 10.44.139.{1..255} | sed 's/ /,/g')

$ export http_proxy=$PROXY_HTTP
$ export https_proxy=$PROXY_HTTP
$ export no_proxy=$PROXY_NO

$ juju bootstrap \
--model-default http-proxy=$PROXY_HTTP \
--model-default https-proxy=$PROXY_HTTPS \
--model-default no-proxy=$PROXY_NO \
localhost lxd
  1. Continue as usual by setting up users, storage, etc.; adding models; and deploying, configuring, integrating, etc., applications.