Add Python 3 docker-compose recipe for MediaGoblin hacking.
authorBen Sturmfels <ben@sturm.com.au>
Mon, 16 Sep 2019 08:08:57 +0000 (18:08 +1000)
committerBen Sturmfels <ben@sturm.com.au>
Mon, 16 Sep 2019 08:08:57 +0000 (18:08 +1000)
.dockerignore [new file with mode: 0644]
docker-compose.yml [new file with mode: 0644]
mediagoblin/init/config.py

diff --git a/.dockerignore b/.dockerignore
new file mode 100644 (file)
index 0000000..12ef338
--- /dev/null
@@ -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 (file)
index 0000000..ac11257
--- /dev/null
@@ -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"
index fe4691561e944b69e24416f8be68a81c4145eb4e..2e22083a5270be9b36e31da42dd02b355e07b363 100644 (file)
@@ -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", {}))