Given that the cache directory is configurable via hugo --cacheDir
and environment variable CACHE_DIR
, I was wondering, why the same is not the case for the value of resourceDir
.
I am using a parametrized docker-compose.yml
file to run the same Hugo project simulating different environments from development to production. For development, I use hugo server
, for production I use hugo --watch
with a local Caddy server. This allows me to have consistent builds and even run Chrome Lighthouse locally with realistic scores.
How to separate the resourceDir
instances?
I have not yet found out, how to configure, where Hugo puts the resources
folder through the docker-compose.yml
file.
Workaround 1: configure resourceDir
in config/hugo.yaml
to be located within cacheDir
A workaround is to configure the resourceDir
via config/hugo.yaml
. However, I would like to avoid adapting the config to my local setup. When building with GitHub Actions, I would prefer Hugo to behave as close to the defaults as possible, which would not be the case if I changed the production configuration to put resources into the cache dir.
Workaround 2: mount a local directory at /srv/resources
I currently map a local directory to /srv/resources
, which allows me to separate the resources between environments. However, it also comes with the side-effect of creating a resources
directory owned by root at the top-level of the Hugo project. This side-effect is a consequence of Docker mounting my custom resources
directory into /srv
and that cannot avoided (see for example Nested bind mounts create empty directory on the host · Issue #26051 · moby/moby · GitHub)
For illustration, here is the top part of my docker-compose.yml
:
version: "3.8"
name: hugo_server_controller
services:
devel_hugo_server:
container_name: ${SITE_ID}_${DEVEL_SERVE_ENV}_hugo_server
image: ${IMAGE_HUGO_FULL} # Hugo Modules and Node.js
env_file:
- ${GLOBAL_ENV_FILE:-/dev/null} # The values for all environment variables for container are generated using a Python script
ports:
- "${DEVEL_SERVE_HUGO_SERVER_ADDR}:${DEVEL_SERVE_HUGO_SERVER_PORT}:${DEVEL_SERVE_HUGO_SERVER_PORT}"
volumes:
- ${DEVEL_SERVE_HUGO_ROOT}:/src
- ${DEVEL_SERVE_HUGO_MODULES}:/modules
- ${DEVEL_SERVE_CONTENT}:/content
- ${DEVEL_SERVE_HUGO_CONF}:/config
- ${DEVEL_SERVE_CACHE}:/cache
- ${DEVEL_SERVE_RESOURCES}:/src/resources
- ${DEVEL_SERVE_DESTINATION}:/destination
environment:
- HUGO_MODULE_WORKSPACE=${DEVEL_SERVE_HUGO_MODULE_WORKSPACE}
command:
- hugo
- server
- --contentDir=/content
- --configDir=/config
- --cacheDir=/cache
- --destination=/destination
- --environment=${DEVEL_SERVE_HUGO_ENV}
- --baseURL=${DEVEL_SERVE_HUGO_BASE_URL}