forked from overhangio/tutor
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Migrate openedx-docker project to Tutor 👩🏫
The project gets a new name and some proper documentation. Build/Deploy are now properly separated.
- Loading branch information
Showing
72 changed files
with
1,208 additions
and
868 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,5 @@ | ||
.*.swp | ||
config/ | ||
data-*/ | ||
TODO | ||
openedx/requirements/private.txt | ||
.env | ||
!.gitignore | ||
/config.json | ||
/data*/ | ||
/TODO |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,257 +1,43 @@ | ||
.PHONY: all android configure build update migrate run | ||
.PHONY: android build | ||
.DEFAULT_GOAL := help | ||
|
||
|
||
PWD ?= $$(pwd) | ||
PWD = $$(pwd) | ||
USERID ?= $$(id -u) | ||
EDX_PLATFORM_SETTINGS ?= universal.production | ||
DOCKER_COMPOSE = docker-compose -f docker-compose.yml | ||
-include $(PWD)/config/Makefile.env | ||
|
||
post_configure_targets = | ||
ifneq ($(DISABLE_STATS), 1) | ||
post_configure_targets += stats | ||
endif | ||
ifeq ($(ACTIVATE_HTTPS), 1) | ||
post_configure_targets += https-certificate | ||
endif | ||
extra_migrate_targets = | ||
ifeq ($(ACTIVATE_XQUEUE), 1) | ||
extra_migrate_targets += migrate-xqueue | ||
DOCKER_COMPOSE += -f docker-compose-xqueue.yml | ||
endif | ||
ifeq ($(ACTIVATE_NOTES), 1) | ||
extra_migrate_targets += migrate-notes | ||
DOCKER_COMPOSE += -f docker-compose-notes.yml | ||
endif | ||
ifeq ($(ACTIVATE_PORTAINER), 1) | ||
DOCKER_COMPOSE += -f docker-compose-portainer.yml | ||
endif | ||
|
||
DOCKER_COMPOSE_RUN = $(DOCKER_COMPOSE) run --rm | ||
DOCKER_COMPOSE_RUN_OPENEDX = $(DOCKER_COMPOSE_RUN) -e SETTINGS=$(EDX_PLATFORM_SETTINGS) \ | ||
--volume="$(PWD)/openedx/themes:/openedx/themes" | ||
ifneq ($(EDX_PLATFORM_PATH),) | ||
DOCKER_COMPOSE_RUN_OPENEDX += -e USERID=$(USERID) --volume="$(EDX_PLATFORM_PATH):/openedx/edx-platform" | ||
endif | ||
|
||
DOCKER_COMPOSE_RUN_LMS = $(DOCKER_COMPOSE_RUN_OPENEDX) -p 8000:8000 lms | ||
DOCKER_COMPOSE_RUN_CMS = $(DOCKER_COMPOSE_RUN_OPENEDX) -p 8001:8001 cms | ||
|
||
##################### Running Open edX | ||
|
||
# other targets are not listed as requirements in order to reload the env file | ||
all: configure ## Configure and run a full-featured platform | ||
@$(MAKE) post_configure | ||
@$(MAKE) update | ||
@$(MAKE) databases | ||
@$(MAKE) assets | ||
@$(MAKE) daemonize | ||
@echo "All set \o/ You can access the LMS at http://localhost and the CMS at http://studio.localhost" | ||
|
||
run: ## Run the complete platform | ||
$(DOCKER_COMPOSE) up | ||
up: run | ||
build: ## Build all docker images | ||
cd build/ && make build | ||
|
||
daemonize: ## Run the complete platform, with daemonization | ||
$(DOCKER_COMPOSE) up -d | ||
@echo "Daemon is up and running" | ||
daemon: daemonize | ||
|
||
stop: ## Stop all services | ||
$(DOCKER_COMPOSE) rm --stop --force | ||
|
||
##################### Configuration | ||
|
||
configure: build-configurator ## Configure the environment prior to running the platform | ||
docker run --rm -it --volume="$(PWD)/config:/openedx/config" \ | ||
-e USERID=$(USERID) -e SILENT=$(SILENT) $(CONFIGURE_OPTS) \ | ||
configure: | ||
@$(MAKE) -s -C build/ build-configurator 1> /dev/null | ||
@docker run --rm -it \ | ||
--volume="$(PWD):/openedx/config/" \ | ||
-e USERID=$(USERID) -e SILENT=$(SILENT) \ | ||
regis/openedx-configurator:hawthorn | ||
|
||
post_configure: $(post_configure_targets) | ||
|
||
##################### Database | ||
|
||
databases: provision-databases migrate provision-oauth2 ## Bootstrap databases | ||
singleserver: ## Configure and run a ready-to-go Open edX platform | ||
cd deploy/ && make all | ||
|
||
provision-databases: ## Create necessary databases and users | ||
$(DOCKER_COMPOSE_RUN) lms /openedx/config/provision.sh | ||
provision-oauth2: ## Create users for SSO between services | ||
$(DOCKER_COMPOSE_RUN) lms /openedx/config/oauth2.sh | ||
android: ## Configure and build a development Android app | ||
cd android/ && make all | ||
|
||
migrate: migrate-openedx migrate-forum $(extra_migrate_targets) ## Perform all database migrations | ||
migrate-openedx: ## Perform database migrations on LMS/CMS | ||
$(DOCKER_COMPOSE_RUN) lms bash -c "dockerize -wait tcp://mysql:3306 -timeout 20s && ./manage.py lms migrate" | ||
$(DOCKER_COMPOSE_RUN) cms bash -c "dockerize -wait tcp://mysql:3306 -timeout 20s && ./manage.py cms migrate" | ||
$(MAKE) reindex-courses | ||
migrate-forum: ## Perform database migrations on discussion forums | ||
$(DOCKER_COMPOSE_RUN) forum bash -c "bundle exec rake search:initialize && \ | ||
bundle exec rake search:rebuild_index" | ||
migrate-notes: ## Perform database migrations for the Notes service | ||
$(DOCKER_COMPOSE_RUN) notes ./manage.py migrate | ||
migrate-xqueue: ## Perform database migrations for the XQueue service | ||
$(DOCKER_COMPOSE_RUN) xqueue ./manage.py migrate | ||
reindex-courses: ## Refresh course index so they can be found in the LMS search engine | ||
$(DOCKER_COMPOSE_RUN) cms ./manage.py cms reindex_course --all --setup | ||
travis: | ||
cd build && make build | ||
cd deploy/singleserver \ | ||
&& make configure SILENT=1 CONFIGURE_OPTS="-e SETTING_ACTIVATE_NOTES=1 -e SETTING_ACTIVATE_XQUEUE=1" \ | ||
&& make databases \ | ||
&& make assets | ||
|
||
##################### Static assets | ||
upgrade-to-tutor: | ||
@(stat config/config.json > /dev/null 2>&1 && (\ | ||
echo "You are running an older version of Tutor. Now migrating to the latest version" \ | ||
&& echo "Moving config/config.json to ./config.json" && mv config/config.json config.json \ | ||
&& echo "Moving config/ to deploy/env/" && mv config/ deploy/env/ \ | ||
&& ((ls openedx/themes/* > /dev/null 2>&1 && echo "Moving openedx/themes/* to build/openedx/themes/" && mv openedx/themes/* build/openedx/themes/) || true) \ | ||
&& echo "Done migrating to tutor. This command will not be run again."\ | ||
)) || true | ||
|
||
# To collect assets we don't rely on the "paver update_assets" command because | ||
# webpack collection incorrectly sets the NODE_ENV variable when using custom | ||
# settings. Thus, each step must be performed separately. This should be fixed | ||
# in the next edx-platform release thanks to https://github.com/edx/edx-platform/pull/18430/ | ||
|
||
assets: ## Generate production-ready static assets | ||
docker-compose -f docker-compose-scripts.yml run --rm \ | ||
--volume=$(PWD)/data/openedx:/tmp/openedx/ openedx bash -c \ | ||
"rm -rf /tmp/openedx/staticfiles \ | ||
&& cp -r /openedx/staticfiles /tmp/openedx" | ||
assets-development: ## Generate static assets for local development | ||
$(DOCKER_COMPOSE_RUN_OPENEDX) --no-deps lms bash -c "openedx-assets build --env=dev" | ||
assets-development-lms: | ||
$(DOCKER_COMPOSE_RUN_OPENEDX) --no-deps lms bash -c "openedx-assets build --env=dev --system lms" | ||
assets-development-cms: | ||
$(DOCKER_COMPOSE_RUN_OPENEDX) --no-deps lms bash -c "openedx-assets build --env=dev --system cms" | ||
watch-themes: ## Watch for changes in your themes and build development assets | ||
$(DOCKER_COMPOSE_RUN_OPENEDX) --no-deps lms openedx-assets watch-themes --env dev | ||
|
||
##################### Information | ||
|
||
# Obtained by running "echo '\033' in a shell | ||
ESCAPE = | ||
help: ## Print this help | ||
@grep -E '^([a-zA-Z_-]+:.*?## .*|######* .+)$$' Makefile \ | ||
| sed 's/######* \(.*\)/\n $(ESCAPE)[1;31m\1$(ESCAPE)[0m/g' \ | ||
| awk 'BEGIN {FS = ":.*?## "}; {printf "\033[33m%-30s\033[0m %s\n", $$1, $$2}' | ||
|
||
info: ## Print some information about the current install, for debugging | ||
uname -a | ||
@echo "-------------------------" | ||
git rev-parse HEAD | ||
@echo "-------------------------" | ||
docker version | ||
@echo "-------------------------" | ||
docker-compose --version | ||
@echo "-------------------------" | ||
echo $$EDX_PLATFORM_PATH | ||
echo $$EDX_PLATFORM_SETTINGS | ||
|
||
|
||
#################### Logging | ||
|
||
logs: ## Print all logs from a service since it started. E.g: "make logs service=lms", "make logs service=nginx" | ||
$(DOCKER_COMPOSE) logs $(service) | ||
tail: ## Similar to "tail" on the logs of a service. E.g: "make tail service=lms", "make tail service=nginx" | ||
$(DOCKER_COMPOSE) logs --tail=10 $(service) | ||
tail-follow: ## Similar to "tail -f" on the logs of a service. E.g: "make tail-follow service=lms", "make tail-follow service=nginx" | ||
$(DOCKER_COMPOSE) logs --tail=10 -f $(service) | ||
|
||
#################### Docker image building & updating | ||
|
||
update: ## Download most recent images | ||
$(DOCKER_COMPOSE) pull | ||
|
||
build: build-openedx build-configurator build-forum build-notes build-xqueue build-android ## Build all docker images | ||
|
||
openedx_build_args = | ||
ifdef EDX_PLATFORM_REPOSITORY | ||
openedx_build_args += --build-arg="EDX_PLATFORM_REPOSITORY=$(EDX_PLATFORM_REPOSITORY)" | ||
endif | ||
ifdef EDX_PLATFORM_VERSION | ||
openedx_build_args += --build-arg="EDX_PLATFORM_VERSION=$(EDX_PLATFORM_VERSION)" | ||
endif | ||
|
||
build-openedx: ## Build the Open edX docker image | ||
docker build -t regis/openedx:latest -t regis/openedx:hawthorn $(openedx_build_args) openedx/ | ||
build-configurator: ## Build the configurator docker image | ||
docker build -t regis/openedx-configurator:latest -t regis/openedx-configurator:hawthorn configurator/ | ||
build-forum: ## Build the forum docker image | ||
docker build -t regis/openedx-forum:latest -t regis/openedx-forum:hawthorn forum/ | ||
build-notes: ## Build the Notes docker image | ||
docker build -t regis/openedx-notes:latest -t regis/openedx-notes:hawthorn notes/ | ||
build-xqueue: ## Build the Xqueue docker image | ||
docker build -t regis/openedx-xqueue:latest -t regis/openedx-xqueue:hawthorn xqueue/ | ||
build-android: ## Build the docker image for Android | ||
docker build -t regis/openedx-android:latest android/ | ||
|
||
################### Pushing images to docker hub | ||
|
||
push: push-openedx push-configurator push-forum push-notes push-xqueue push-android ## Push all images to dockerhub | ||
push-openedx: ## Push Open edX images to dockerhub | ||
docker push regis/openedx:hawthorn | ||
docker push regis/openedx:latest | ||
push-configurator: ## Push configurator image to dockerhub | ||
docker push regis/openedx-configurator:hawthorn | ||
docker push regis/openedx-configurator:latest | ||
push-forum: ## Push forum image to dockerhub | ||
docker push regis/openedx-forum:hawthorn | ||
docker push regis/openedx-forum:latest | ||
push-notes: ## Push notes image to dockerhub | ||
docker push regis/openedx-notes:hawthorn | ||
docker push regis/openedx-notes:latest | ||
push-xqueue: ## Push Xqueue image to dockerhub | ||
docker push regis/openedx-xqueue:hawthorn | ||
docker push regis/openedx-xqueue:latest | ||
push-android: ## Push the Android image to dockerhub | ||
docker push regis/openedx-android:latest | ||
|
||
dockerhub: build push ## Build and push all images to dockerhub | ||
|
||
##################### Development | ||
|
||
lms: ## Open a bash shell in the LMS | ||
$(DOCKER_COMPOSE_RUN_LMS) bash | ||
cms: ## Open a bash shell in the CMS | ||
$(DOCKER_COMPOSE_RUN_CMS) bash | ||
|
||
lms-python: ## Open a python shell in the LMS | ||
$(DOCKER_COMPOSE_RUN_OPENEDX) lms ./manage.py lms shell | ||
lms-shell: lms-python | ||
lms-runserver: ## Run a local webserver, useful for debugging | ||
$(DOCKER_COMPOSE_RUN_LMS) ./manage.py lms runserver 0.0.0.0:8000 | ||
cms-python: ## Open a python shell in the CMS | ||
$(DOCKER_COMPOSE_RUN_OPENEDX) cms ./manage.py cms shell | ||
cms-shell: cms-python | ||
cms-runserver: ## Run a local webserver, useful for debugging | ||
$(DOCKER_COMPOSE_RUN_CMS) ./manage.py cms runserver 0.0.0.0:8001 | ||
|
||
restart-openedx: ## Restart lms, cms, and workers | ||
docker-compose restart lms lms_worker cms cms_worker | ||
|
||
##################### SSL/TLS (HTTPS certificates) | ||
|
||
https_command = docker run --rm -it \ | ||
--volume="$(PWD)/config/letsencrypt/:/openedx/letsencrypt/config/" \ | ||
--volume="$(PWD)/data/letsencrypt/:/etc/letsencrypt/" \ | ||
-p "80:80" | ||
certbot_image = certbot/certbot:latest | ||
|
||
https-certificate: ## Generate https certificates | ||
$(https_command) --entrypoint "/openedx/letsencrypt/config/certonly.sh" $(certbot_image) | ||
|
||
https-certificate-renew: ## Renew https certificates | ||
$(https_command) $(certbot_image) renew | ||
|
||
#################### Android application | ||
|
||
android: ## Build the Android app, for development | ||
@docker-compose -f docker-compose-android.yml run --rm android | ||
@echo "Your APK file is ready: ./data/android/$(shell ls data/android/*.apk)" | ||
|
||
android-release: ## Build the final Android app (beta) | ||
# Note that this requires that you edit ./config/android/gradle.properties | ||
docker-compose -f docker-compose-android.yml run --rm android ./gradlew assembleProdRelease | ||
|
||
##################### Additional commands | ||
|
||
stats: ## Collect anonymous information about the platform | ||
@docker run --rm -it --volume="$(PWD)/config:/openedx/config" \ | ||
regis/openedx-configurator:hawthorn /openedx/config/openedx/stats 2> /dev/null|| true | ||
|
||
import-demo-course: ## Import the demo course from edX | ||
$(DOCKER_COMPOSE_RUN_OPENEDX) cms /bin/bash -c " \ | ||
git clone https://github.com/edx/edx-demo-course --branch open-release/hawthorn.2 --depth 1 ../edx-demo-course \ | ||
&& python ./manage.py cms import ../data ../edx-demo-course" | ||
|
||
create-staff-user: ## Create a user with admin rights | ||
$(DOCKER_COMPOSE_RUN_OPENEDX) lms /bin/bash -c "./manage.py lms manage_user --superuser --staff ${USERNAME} ${EMAIL} && ./manage.py lms changepassword ${USERNAME}" |
Oops, something went wrong.