From 8096beab5c605a7433cc6bfc10969a6519b98d2a Mon Sep 17 00:00:00 2001 From: Ben Sturmfels Date: Mon, 16 Sep 2019 18:08:57 +1000 Subject: [PATCH] Add Python 3 docker-compose recipe for MediaGoblin hacking. --- .dockerignore | 3 +++ docker-compose.yml | 33 +++++++++++++++++++++++++++++++++ mediagoblin/init/config.py | 9 +++++++++ 3 files changed, 45 insertions(+) create mode 100644 .dockerignore create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..12ef3383 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +# This helps to reduce the size of the Docker build context. +user_dev +node_modules diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..ac11257b --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,33 @@ +# A docker-compose recipe for MediaGoblin hacking. +# +# Tested on Trisquel 8. Currently runs Python 3 and works for photos and video. +# Audio raises an exception "NameError: name 'audiolab' is not defined". + +# docker-compose up --build +# docker-compose run --rm web bin/python +# docker-compose start [service] +# docker-compose stop [service] +# docker-compose down + +version: '2' + +services: + web: + build: + context: . + dockerfile: Dockerfile-python3 + # Is user required here, or does it just pick up from the last USER in Dockerfile? + user: www-data + # Consider running dbupdate here (at runtime), rather than in Dockerfile. + command: ./lazyserver.sh --server-name=broadcast + volumes: + # Mount your local copy of the source for hecking on MediaGoblin. + - ./mediagoblin:/opt/mediagoblin/mediagoblin + + # Mount your local media/secrets. Requires some initial setup: + # + # $ mkdir user_dev/media user_dev/crypto + # $ chmod 777 user_dev/media user_dev_crypto + - ./user_dev:/opt/mediagoblin/user_dev + ports: + - "6543:6543" diff --git a/mediagoblin/init/config.py b/mediagoblin/init/config.py index fe469156..2e22083a 100644 --- a/mediagoblin/init/config.py +++ b/mediagoblin/init/config.py @@ -84,6 +84,15 @@ def read_mediagoblin_config(config_path, config_spec_path=CONFIG_SPEC_PATH): config_spec_path, encoding="UTF8", list_values=False, _inspec=True) + # HACK to get MediaGoblin running under Docker/Python 3. Without this line, + # `./bin/gmg dbupdate` fails as the configuration under 'DEFAULT' in + # config_spec still had %(here)s markers in it, when these should have been + # replaced with actual paths, resulting in + # "configobj.MissingInterpolationOption: missing option "here" in + # interpolation". This issue doesn't seem to appear when running on Guix, + # but adding this line also doesn't appear to cause problems on Guix. + _setup_defaults(config_spec, config_path) + # Set up extra defaults that will be pushed into the rest of the # configs. This is a combined extrapolation of defaults based on mainconfig_defaults = copy.copy(config_spec.get("DEFAULT", {})) -- 2.25.1