diff --git a/Makefile b/Makefile index bcd6e1025..65251dfb2 100644 --- a/Makefile +++ b/Makefile @@ -172,7 +172,7 @@ run-islandora-migrations: #docker-compose exec -T drupal with-contenv bash -lc "for_all_sites import_islandora_migrations" # this line can be reverted when https://github.com/Islandora-Devops/isle-buildkit/blob/fae704f065435438828c568def2a0cc926cc4b6b/drupal/rootfs/etc/islandora/utilities.sh#L557 # has been updated to match - docker-compose exec -T drupal with-contenv bash -lc 'drush -l $(SITE) migrate:import islandora_defaults_tags,islandora_tags' + docker-compose exec -T drupal with-contenv bash -lc 'drush -l $(SITE) migrate:import $(MIGRATE_IMPORT_USER_OPTION) islandora_defaults_tags,islandora_tags' .PHONY: solr-cores ## Creates solr-cores according to the environment variables. @@ -347,17 +347,17 @@ demo: generate-secrets ## Make a local site with codebase directory bind mounted, modeled after sandbox.islandora.ca local: QUOTED_CURDIR = "$(CURDIR)" local: generate-secrets - $(MAKE) download-default-certs ENVIROMENT=local + $(MAKE) download-default-certs ENVIRONMENT=local $(MAKE) -B docker-compose.yml ENVIRONMENT=local $(MAKE) pull ENVIRONMENT=local mkdir -p $(CURDIR)/codebase if [ -z "$$(ls -A $(QUOTED_CURDIR)/codebase)" ]; then \ docker container run --rm -v $(CURDIR)/codebase:/home/root $(REPOSITORY)/nginx:$(TAG) with-contenv bash -lc 'git clone -b main https://github.com/islandora-devops/islandora-sandbox /tmp/codebase; mv /tmp/codebase/* /home/root;'; \ fi - $(MAKE) set-files-owner SRC=$(CURDIR)/codebase ENVIROMENT=local + $(MAKE) set-files-owner SRC=$(CURDIR)/codebase ENVIRONMENT=local docker-compose up -d --remove-orphans docker-compose exec -T drupal with-contenv bash -lc 'composer install; chown -R nginx:nginx .' - $(MAKE) remove_standard_profile_references_from_config drupal-database update-settings-php ENVIROMENT=local + $(MAKE) remove_standard_profile_references_from_config drupal-database update-settings-php ENVIRONMENT=local docker-compose exec -T drupal with-contenv bash -lc "drush si -y islandora_install_profile_demo --account-pass $(shell cat secrets/live/DRUPAL_DEFAULT_ACCOUNT_PASSWORD)" $(MAKE) delete-shortcut-entities && docker-compose exec -T drupal with-contenv bash -lc "drush pm:un -y shortcut" docker-compose exec -T drupal with-contenv bash -lc "drush en -y migrate_tools" @@ -521,3 +521,47 @@ fix_masonry: fix_views: docker cp scripts/patch_views.sh $$(docker ps --format "{{.Names}}" | grep drupal):/var/www/drupal/patch_views.sh docker-compose exec -T drupal with-contenv bash -lc "bash /var/www/drupal/patch_views.sh ; rm /var/www/drupal/patch_views.sh ; drush cr" + +.PHONY: starter +## Make a local site with codebase directory bind mounted, using starter site. +starter: QUOTED_CURDIR = "$(CURDIR)" +starter: generate-secrets + $(MAKE) starter-init ENVIRONMENT=starter + if [ -z "$$(ls -A $(QUOTED_CURDIR)/codebase)" ]; then \ + docker container run --rm -v $(CURDIR)/codebase:/home/root $(REPOSITORY)/nginx:$(TAG) with-contenv bash -lc 'composer create-project islandora/islandora-starter-site:dev-main /tmp/codebase; mv /tmp/codebase/* /home/root;'; \ + fi + $(MAKE) set-files-owner SRC=$(CURDIR)/codebase ENVIRONMENT=starter + docker-compose up -d --remove-orphans + $(MAKE) starter-finalize ENVIRONMENT=starter + +.PHONY: starter_dev +## Make a local site with codebase directory bind mounted, using cloned starter site. +starter_dev: QUOTED_CURDIR = "$(CURDIR)" +starter_dev: generate-secrets + $(MAKE) starter-init ENVIRONMENT=starter_dev + if [ -z "$$(ls -A $(QUOTED_CURDIR)/codebase)" ]; then \ + docker container run --rm -v $(CURDIR)/codebase:/home/root $(REPOSITORY)/nginx:$(TAG) with-contenv bash -lc 'git clone -b main https://github.com/Islandora/islandora-starter-site /home/root;'; \ + fi + $(MAKE) set-files-owner SRC=$(CURDIR)/codebase ENVIRONMENT=starter_dev + docker-compose up -d --remove-orphans + docker-compose exec -T drupal with-contenv bash -lc 'composer install' + $(MAKE) starter-finalize ENVIRONMENT=starter_dev + +.PHONY: starter-init +starter-init: generate-secrets + $(MAKE) download-default-certs + $(MAKE) -B docker-compose.yml + $(MAKE) pull + mkdir -p $(CURDIR)/codebase + +.PHONY: starter-finalize +starter-finalize: + docker-compose exec -T drupal with-contenv bash -lc 'chown -R nginx:nginx .' + $(MAKE) drupal-database update-settings-php + docker-compose exec -T drupal with-contenv bash -lc "drush si -y --existing-config minimal --account-pass $(shell cat secrets/live/DRUPAL_DEFAULT_ACCOUNT_PASSWORD)" + docker-compose exec -T drupal with-contenv bash -lc "drush -l $(SITE) user:role:add fedoraadmin admin" + MIGRATE_IMPORT_USER_OPTION=--userid=1 $(MAKE) hydrate + docker-compose exec -T drupal with-contenv bash -lc 'drush -l $(SITE) migrate:import --userid=1 islandora_fits_tags' + #docker-compose exec -T drupal with-contenv bash -lc 'chown -R `id -u`:nginx /var/www/drupal' + #docker-compose exec -T drupal with-contenv bash -lc 'drush migrate:rollback islandora_defaults_tags,islandora_tags' + $(MAKE) login diff --git a/README.md b/README.md index ae375b4b8..b1cd6dcfd 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,11 @@ that you supply in a `.env` file. And there are three use cases we're trying to - **local** *(Local development using composer/drush in the codebase folder)* - **custom** *(A custom Dockerfile to deploy created from local)* +Additionally, there's a couple other targets derived from `local` which make use of [the `islandora/islandora-starter-site` project](https://github.com/Islandora/islandora-starter-site): + +- **starter**: Uses `composer create-project` to initialize the site, for general use; and, +- **starter_dev**: Creates a clone of the starter site project, intended for development of the "starter site" proper; however, given a number of different items are configured during provisioning, `starter_dev` may be of limited utility as config exports will be dirtied during provisioning (ideally, these bits that vary could be reworked to use [Drupal's "state API"](https://www.drupal.org/docs/8/api/state-api/overview) instead, or perhaps avoiding reworking of the modules by using [Drupal's configuration override system](https://www.drupal.org/docs/drupal-apis/configuration-api/configuration-override-system)). + On top of that, there's a lot of useful commands for managing an Islandora instance, such as database import/export and reindexing. diff --git a/build/docker-compose/docker-compose.starter.yml b/build/docker-compose/docker-compose.starter.yml new file mode 100644 index 000000000..f4f44103d --- /dev/null +++ b/build/docker-compose/docker-compose.starter.yml @@ -0,0 +1,36 @@ +# Container does not perform any initialization aside from importing env-vars from `confd`. +# Users are expected to manually set up their site using a combination of the following: +# - Makefile targets +# - composer requires / install +# - Drush commands +# - Manual changes to the codebase directory +version: "3.7" +networks: + default: + internal: true + gateway: + external: true +volumes: + drupal-sites-data: + solr-data: +services: + drupal: + restart: ${RESTART_POLICY:-unless-stopped} + image: ${REPOSITORY:-islandora}/drupal:${TAG:-latest} + volumes: + - ../../codebase:/var/www/drupal:delegated + - drupal-sites-data:/var/www/drupal/web/sites/default/files + - solr-data:/opt/solr/server/solr + environment: + DRUPAL_DEFAULT_INSTALL_EXISTING_CONFIG: ${INSTALL_EXISTING_CONFIG} + DRUPAL_DEFAULT_PROFILE: ${DRUPAL_INSTALL_PROFILE} + depends_on: + # Requires a the very minimum a database. + - ${DRUPAL_DATABASE_SERVICE} + # Extends docker-compose.solr.yml + solr: + volumes: + # On a production site you may not want to take this approach but instead refer to each of the cores + # data directories specifically and maintain the configuration as part of a customized image, where + # in your configuration is Solr managed under source control somewhere. + - solr-data:/opt/solr/server/solr diff --git a/build/docker-compose/docker-compose.starter_dev.yml b/build/docker-compose/docker-compose.starter_dev.yml new file mode 100644 index 000000000..f4f44103d --- /dev/null +++ b/build/docker-compose/docker-compose.starter_dev.yml @@ -0,0 +1,36 @@ +# Container does not perform any initialization aside from importing env-vars from `confd`. +# Users are expected to manually set up their site using a combination of the following: +# - Makefile targets +# - composer requires / install +# - Drush commands +# - Manual changes to the codebase directory +version: "3.7" +networks: + default: + internal: true + gateway: + external: true +volumes: + drupal-sites-data: + solr-data: +services: + drupal: + restart: ${RESTART_POLICY:-unless-stopped} + image: ${REPOSITORY:-islandora}/drupal:${TAG:-latest} + volumes: + - ../../codebase:/var/www/drupal:delegated + - drupal-sites-data:/var/www/drupal/web/sites/default/files + - solr-data:/opt/solr/server/solr + environment: + DRUPAL_DEFAULT_INSTALL_EXISTING_CONFIG: ${INSTALL_EXISTING_CONFIG} + DRUPAL_DEFAULT_PROFILE: ${DRUPAL_INSTALL_PROFILE} + depends_on: + # Requires a the very minimum a database. + - ${DRUPAL_DATABASE_SERVICE} + # Extends docker-compose.solr.yml + solr: + volumes: + # On a production site you may not want to take this approach but instead refer to each of the cores + # data directories specifically and maintain the configuration as part of a customized image, where + # in your configuration is Solr managed under source control somewhere. + - solr-data:/opt/solr/server/solr diff --git a/sample.env b/sample.env index 9cbde46f3..9a20b9dae 100644 --- a/sample.env +++ b/sample.env @@ -117,6 +117,7 @@ CODE_SERVER_PORT=8443 ############################################################################### DOMAIN=islandora.traefik.me +SITE=https://${DOMAIN} DISABLE_SYN=false FEDORA_6=true RESTART_POLICY=unless-stopped