diff --git a/README.md b/README.md
index afda9aa..6d56228 100644
--- a/README.md
+++ b/README.md
@@ -52,3 +52,34 @@ Install the required PHP via composer:
```sh
composer install
```
+
+### Docker Compose development
+
+The existing Alpha-backed setup uses addshore-alpha:
+
+```sh
+docker compose -f docker-compose.alpha.yml up -d
+```
+
+Open Cradle at .
+
+To test against a local MediaWiki instead, start its stack from its checkout:
+
+```sh
+docker compose -p cradle-shex-mw up -d
+```
+
+Then start Cradle from this checkout:
+
+```sh
+docker compose up -d
+```
+
+Cradle uses the local wiki at . If that host does
+not resolve, add `127.0.0.1 site1.localhost` to your hosts file. This MediaWiki
+stack uses a fake API; OAuth-backed writes are not configured.
+
+Cradle's source files, Composer dependencies, and generated frontend resources
+are mounted from this checkout, so edits are available without rebuilding the
+image. Run `composer install` first to populate dependencies and generated
+resources.
diff --git a/docker-compose.alpha.yml b/docker-compose.alpha.yml
new file mode 100644
index 0000000..25027d3
--- /dev/null
+++ b/docker-compose.alpha.yml
@@ -0,0 +1,18 @@
+version: '3.3'
+services:
+ cradle:
+ build: .
+ volumes:
+ - ./public_html/api.php:/var/www/html/cradle/public_html/api.php:ro
+ - ./public_html/config.js.template:/var/www/html/cradle/public_html/config.js.template:ro
+ - ./public_html/index.html:/var/www/html/cradle/public_html/index.html:ro
+ - ./public_html/vue.js:/var/www/html/cradle/public_html/vue.js:ro
+ - ./public_html/vue_components:/var/www/html/cradle/public_html/vue_components:ro
+ - ./public_html/resources:/var/www/html/cradle/public_html/resources:ro
+ - ./vendor:/var/www/html/cradle/vendor:ro
+ - ./docker/config-docker-compose-alpha.js:/var/www/html/cradle/public_html/config.js:ro
+ ports:
+ - 8087:80
+ environment:
+ CRADLE_WIKIBASE_BASE_URL: https://addshore-alpha.wiki.opencura.com
+ CRADLE_BASE_URL: http://localhost:8087
diff --git a/docker-compose.yml b/docker-compose.yml
index 2905c06..5f61998 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -3,8 +3,16 @@ services:
cradle:
build: .
volumes:
- - ./docker/config-docker-compose.js:/var/www/html/cradle/public_html/config.js
- - ./public_html:/var/www/html/cradle/public_html
- - ./vendor:/var/www/html/cradle/vendor
+ - ./public_html/api.php:/var/www/html/cradle/public_html/api.php:ro
+ - ./public_html/config.js.template:/var/www/html/cradle/public_html/config.js.template:ro
+ - ./public_html/index.html:/var/www/html/cradle/public_html/index.html:ro
+ - ./public_html/vue.js:/var/www/html/cradle/public_html/vue.js:ro
+ - ./public_html/vue_components:/var/www/html/cradle/public_html/vue_components:ro
+ - ./public_html/resources:/var/www/html/cradle/public_html/resources:ro
+ - ./vendor:/var/www/html/cradle/vendor:ro
+ - ./docker/config-docker-compose.js:/var/www/html/cradle/public_html/config.js:ro
ports:
- 8087:80
+ environment:
+ CRADLE_WIKIBASE_BASE_URL: http://site1.localhost:8001
+ CRADLE_BASE_URL: http://localhost:8087
diff --git a/docker/config-docker-compose-alpha.js b/docker/config-docker-compose-alpha.js
new file mode 100644
index 0000000..3d28d9d
--- /dev/null
+++ b/docker/config-docker-compose-alpha.js
@@ -0,0 +1,15 @@
+'use strict';
+
+const wikibaseBaseUrl = 'https://addshore-alpha.wiki.opencura.com';
+const cradleBaseUrl = 'http://localhost:8087';
+
+let config = {
+ "source_page": 'Project:Cradle',
+ "wikibase_url": `${wikibaseBaseUrl}/wiki/`,
+ "api": `${wikibaseBaseUrl}/w/api.php`,
+ "wikibase_api": `${wikibaseBaseUrl}/w/api.php`,
+ "oauth_url": `${wikibaseBaseUrl}/w/index.php?title=Special:OAuth`,
+ "cradle_url": `${cradleBaseUrl}/`,
+ "cradle_api": `${cradleBaseUrl}/api.php`,
+ "vue_components_base_url": `${cradleBaseUrl}/resources/vue/`
+} ;
diff --git a/docker/config-docker-compose.js b/docker/config-docker-compose.js
index 0a04e99..c966eb6 100644
--- a/docker/config-docker-compose.js
+++ b/docker/config-docker-compose.js
@@ -1,13 +1,15 @@
'use strict';
-// Hardcoded addshore-alpha API for development..
+const wikibaseBaseUrl = 'http://site1.localhost:8001';
+const cradleBaseUrl = 'http://localhost:8087';
+
let config = {
- "source_page":'Project:Cradle',
- "wikibase_url":'https://addshore-alpha.wiki.opencura.com/wiki/',
- "api":'https://addshore-alpha.wiki.opencura.com/w/api.php',
- "wikibase_api":'https://addshore-alpha.wiki.opencura.com/w/api.php',
- "oauth_url":'https://addshore-alpha.wiki.opencura.com/w/index.php?title=Special:OAuth',
- "cradle_url":'http://localhost:8087/cradle/',
- "cradle_api":'http://localhost:8087/api.php',
- "vue_components_base_url": 'http://localhost:8087/resources/vue/'
+ "source_page": 'Project:Cradle',
+ "wikibase_url": `${wikibaseBaseUrl}/wiki/`,
+ "api": `${wikibaseBaseUrl}/w/api.php`,
+ "wikibase_api": `${wikibaseBaseUrl}/w/api.php`,
+ "oauth_url": `${wikibaseBaseUrl}/w/index.php?title=Special:OAuth`,
+ "cradle_url": `${cradleBaseUrl}/`,
+ "cradle_api": `${cradleBaseUrl}/api.php`,
+ "vue_components_base_url": `${cradleBaseUrl}/resources/vue/`
} ;
diff --git a/public_html/api.php b/public_html/api.php
index 30cc746..a60463b 100644
--- a/public_html/api.php
+++ b/public_html/api.php
@@ -23,6 +23,21 @@ function get_config() {
'cradle_api' => "https://${s}/tools/cradle/api.php",
'vue_components_base_url' => "https://${s}/tools/cradle/resources/vue/",
];
+ $wikibaseBaseUrl = getenv('CRADLE_WIKIBASE_BASE_URL');
+ if ( $wikibaseBaseUrl !== false && $wikibaseBaseUrl !== '' ) {
+ $wikibaseBaseUrl = rtrim( $wikibaseBaseUrl, '/' );
+ $j['wikibase_url'] = "${wikibaseBaseUrl}/wiki/";
+ $j['api'] = "${wikibaseBaseUrl}/w/api.php";
+ $j['wikibase_api'] = "${wikibaseBaseUrl}/w/api.php";
+ $j['oauth_url'] = "${wikibaseBaseUrl}/w/index.php?title=Special:OAuth";
+ }
+ $cradleBaseUrl = getenv('CRADLE_BASE_URL');
+ if ( $cradleBaseUrl !== false && $cradleBaseUrl !== '' ) {
+ $cradleBaseUrl = rtrim( $cradleBaseUrl, '/' );
+ $j['cradle_url'] = "${cradleBaseUrl}/";
+ $j['cradle_api'] = "${cradleBaseUrl}/api.php";
+ $j['vue_components_base_url'] = "${cradleBaseUrl}/resources/vue/";
+ }
$j = json_decode( json_encode( $j ) );// Convert to object
return $j ;
}