From 5b139f5856a63f8df5f67d926eb59730dc02934b Mon Sep 17 00:00:00 2001 From: Hunia Fatima Date: Mon, 18 Nov 2024 22:44:57 +0500 Subject: [PATCH 1/5] chore: add portal-designer in devstack services --- .github/workflows/provisioning-tests.yml | 2 +- docker-compose-host.yml | 5 ++++ docker-compose.yml | 20 ++++++++++++++ docs/service_list.rst | 3 +++ options.mk | 2 +- provision-designer.sh | 34 ++++++++++++++++++++++++ provision-mysql80.sql | 4 +++ provision.sh | 1 + provision.sql | 8 ++++++ repo.sh | 2 ++ 10 files changed, 79 insertions(+), 2 deletions(-) create mode 100755 provision-designer.sh diff --git a/.github/workflows/provisioning-tests.yml b/.github/workflows/provisioning-tests.yml index 82963d0d..c822c823 100644 --- a/.github/workflows/provisioning-tests.yml +++ b/.github/workflows/provisioning-tests.yml @@ -30,7 +30,7 @@ jobs: os: - ubuntu-20.04 # Ubuntu 20.04 "Focal Fossa" python-version: [ '3.11' ] - services: [ discovery+lms+forum ,registrar+lms, ecommerce+lms, edx_notes_api+lms, credentials+lms, xqueue, analyticsapi+insights+lms, enterprise-catalog+lms, license-manager+lms] + services: [ discovery+lms+forum ,registrar+lms, ecommerce+lms, edx_notes_api+lms, credentials+lms, xqueue, analyticsapi+insights+lms, designer+lms, enterprise-catalog+lms, license-manager+lms] fail-fast: false # some services can be flaky; let others run to completion even if one fails steps: diff --git a/docker-compose-host.yml b/docker-compose-host.yml index b3635d32..d0552adc 100644 --- a/docker-compose-host.yml +++ b/docker-compose-host.yml @@ -45,6 +45,11 @@ services: volumes: - ${DEVSTACK_WORKSPACE}/registrar:/edx/app/registrar - ${PWD}/py_configuration_files/registrar.py:/edx/app/registrar/registrar/registrar/settings/devstack.py + designer: + volumes: + - ${DEVSTACK_WORKSPACE}/portal-designer:/edx/app/designer + - ${PWD}/py_configuration_files/portal_designer.py:/edx/app/designer/designer/settings/devstack.py + - ${PWD}/py_configuration_files/registrar.py:/edx/app/registrar/registrar/registrar/settings/devstack.py registrar-worker: volumes: - ${DEVSTACK_WORKSPACE}/registrar:/edx/app/registrar diff --git a/docker-compose.yml b/docker-compose.yml index afffc16e..84538110 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -872,6 +872,26 @@ services: depends_on: - lms + designer: + image: edxops/designer-dev:latest + container_name: edx.devstack.designer + volumes: + - .:/edx/app/designer + command: bash -c 'while true; do python /edx/app/designer/manage.py runserver 0.0.0.0:18808; sleep 2; done' + ports: + - "18808:18808" + depends_on: + - mysql80 + networks: + default: + aliases: + - edx.devstack.xqueue + stdin_open: true + tty: true + environment: + DJANGO_SETTINGS_MODULE: designer.settings.devstack + ENABLE_DJANGO_TOOLBAR: 1 + frontend-app-profile: extends: file: microfrontend.yml diff --git a/docs/service_list.rst b/docs/service_list.rst index fa70a75b..74742e30 100644 --- a/docs/service_list.rst +++ b/docs/service_list.rst @@ -67,6 +67,8 @@ Instead of a service name or list, you can also run commands like ``make dev.pro +------------------------------------+-------------------------------------+----------------+--------------+ | `frontend-app-ora-grading`_ | http://localhost:1993 | MFE (React.js) | Extra | +------------------------------------+-------------------------------------+----------------+--------------+ +| `designer`_ | http://localhost:18808 | Python/Django | Extra | ++------------------------------------+-------------------------------------+----------------+--------------+ | `enterprise-catalog`_ | http://localhost:18160/ | Python/Django | Extra | +------------------------------------+-------------------------------------+----------------+--------------+ @@ -102,5 +104,6 @@ Some common service combinations include: .. _frontend-app-ora-grading: https://github.com/edx/frontend-app-ora-grading .. _insights: https://github.com/edx/edx-analytics-dashboard .. _analyticsapi: https://github.com/edx/edx-analytics-data-api +.. _designer: https://github.com/edx/portal-designer .. _enterprise-catalog: https://github.com/openedx/enterprise-catalog .. _license-manager: https://github.com/openedx/license-manager diff --git a/options.mk b/options.mk index 031a947f..38a0b3e2 100644 --- a/options.mk +++ b/options.mk @@ -61,7 +61,7 @@ ALWAYS_CACHE_PROGRAMS ?= false # The current value was chosen such that it would not change the existing # Devstack behavior. DEFAULT_SERVICES ?= \ -credentials+discovery+ecommerce+edx_notes_api+forum+frontend-app-authn+frontend-app-gradebook+frontend-app-payment+frontend-app-publisher+frontend-app-learning+lms+cms +credentials+discovery+ecommerce+edx_notes_api+forum+frontend-app-authn+frontend-app-gradebook+frontend-app-payment+frontend-app-publisher+frontend-app-learning+lms+cms+designer # All edX services, whether or not they are run by default. # Separated by plus signs. diff --git a/provision-designer.sh b/provision-designer.sh new file mode 100755 index 00000000..2101e647 --- /dev/null +++ b/provision-designer.sh @@ -0,0 +1,34 @@ +name="designer" +port="18808" + +docker compose up -d $name --build +docker compose up -d lms + +# Install requirements +# Can be skipped right now because we're using the --build flag on docker compose. This will need to be changed once we move to devstack. + +# Wait for MySQL +echo "Waiting for MySQL" +until docker exec -i edx.devstack.mysql80 mysql -u root -se "SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = 'root')" &> /dev/null +do + printf "." + sleep 1 +done +sleep 5 + +echo -e "${GREEN}Installing requirements for ${name}...${NC}" +docker compose exec -T ${name} bash -e -c 'cd /edx/app/designer/ && make requirements' -- f"$name" + +# Run migrations +echo -e "${GREEN}Running migrations for ${name}...${NC}" +docker compose exec -T ${name} bash -e -c -c "cd /edx/app/${name}/ && make migrate" + +# Create superuser +echo -e "${GREEN}Creating super-user for ${name}...${NC}" +docker compose exec -T ${name} bash -e -c -c "echo 'from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.create_superuser(\"edx\", \"edx@example.com\", \"edx\") if not User.objects.filter(username=\"edx\").exists() else None' | python /edx/app/${name}/manage.py shell" + +./provision-ida-user.sh ${name} ${name} ${port} + +# Restart designer app +docker compose restart designer + diff --git a/provision-mysql80.sql b/provision-mysql80.sql index 724a84bb..5f450ee0 100644 --- a/provision-mysql80.sql +++ b/provision-mysql80.sql @@ -14,6 +14,10 @@ CREATE DATABASE IF NOT EXISTS discovery; CREATE USER IF NOT EXISTS 'discov001'@'%' IDENTIFIED BY 'password'; GRANT ALL ON discovery.* TO 'discov001'@'%'; +CREATE DATABASE IF NOT EXISTS designer; +CREATE USER IF NOT EXISTS 'designer001'@'%' IDENTIFIED BY 'password'; +GRANT ALL ON designer.* TO 'designer001'@'%'; + CREATE DATABASE IF NOT EXISTS ecommerce; CREATE USER IF NOT EXISTS 'ecomm001'@'%' IDENTIFIED BY 'password'; GRANT ALL ON ecommerce.* TO 'ecomm001'@'%'; diff --git a/provision.sh b/provision.sh index d27a2d6f..b84c04a4 100755 --- a/provision.sh +++ b/provision.sh @@ -51,6 +51,7 @@ insights \ analyticsapi \ enterprise-catalog \ license-manager \ +designer \ " # What should we provision? diff --git a/provision.sql b/provision.sql index c0d3a96d..db76b181 100644 --- a/provision.sql +++ b/provision.sql @@ -33,6 +33,14 @@ GRANT ALL ON `reports`.* TO 'analytics001'@'%' IDENTIFIED BY 'password'; CREATE DATABASE IF NOT EXISTS `reports_v1`; GRANT ALL ON `reports_v1`.* TO 'analytics001'@'%' IDENTIFIED BY 'password'; +CREATE DATABASE IF NOT EXISTS `enterprise_catalog`; +GRANT ALL ON `enterprise_catalog`.* TO 'catalog001'@'%' IDENTIFIED BY 'password'; +CREATE DATABASE IF NOT EXISTS designer; +GRANT ALL ON discovery.* TO 'designer001'@'%' IDENTIFIED BY 'password'; + + +CREATE DATABASE IF NOT EXISTS license_manager; +GRANT ALL ON license_manager.* TO 'license_manager001'@'%' IDENTIFIED BY 'password'; CREATE DATABASE IF NOT EXISTS `enterprise_catalog`; GRANT ALL ON `enterprise_catalog`.* TO 'catalog001'@'%' IDENTIFIED BY 'password'; diff --git a/repo.sh b/repo.sh index 7362cd15..79d7cb15 100755 --- a/repo.sh +++ b/repo.sh @@ -37,6 +37,7 @@ repos=( "https://github.com/edx/edx-analytics-dashboard.git" "https://github.com/edx/edx-analytics-data-api.git" "https://github.com/openedx/enterprise-catalog.git" + "https://github.com/edx/portal-designer.git" "https://github.com/openedx/license-manager.git" "https://github.com/openedx/codejail-service.git" ) @@ -70,6 +71,7 @@ ssh_repos=( "git@github.com:openedx/frontend-app-publisher.git" "git@github.com:edx/edx-analytics-dashboard.git" "git@github.com:edx/edx-analytics-data-api.git" + "git@github.com:edx/portal-designer.git" "git@github.com:openedx/license-manager.git" "git@github.com:openedx/codejail-service.git" ) From 4fcedc5e949e7ce7751770e9faee46a875138a16 Mon Sep 17 00:00:00 2001 From: Hunia Fatima Date: Wed, 12 Feb 2025 09:09:01 +0500 Subject: [PATCH 2/5] chore: resolve feedback --- check.sh | 6 ++++++ docker-compose-host.yml | 1 - docker-compose.yml | 3 ++- options.mk | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/check.sh b/check.sh index f010e392..cb5ed205 100755 --- a/check.sh +++ b/check.sh @@ -132,6 +132,12 @@ if should_check edx_notes_api; then "curl --fail -L http://localhost:18120/heartbeat" fi +if should_check designer; then + echo "Checking designer health:" + run_check designer_heartbeat designer \ + "curl --fail -L http://localhost:18808/health/" +fi + if should_check credentials; then echo "Checking credentials heartbeat:" run_check credentials_heartbeat credentials \ diff --git a/docker-compose-host.yml b/docker-compose-host.yml index d0552adc..9de14116 100644 --- a/docker-compose-host.yml +++ b/docker-compose-host.yml @@ -49,7 +49,6 @@ services: volumes: - ${DEVSTACK_WORKSPACE}/portal-designer:/edx/app/designer - ${PWD}/py_configuration_files/portal_designer.py:/edx/app/designer/designer/settings/devstack.py - - ${PWD}/py_configuration_files/registrar.py:/edx/app/registrar/registrar/registrar/settings/devstack.py registrar-worker: volumes: - ${DEVSTACK_WORKSPACE}/registrar:/edx/app/registrar diff --git a/docker-compose.yml b/docker-compose.yml index 84538110..d53247cb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -875,6 +875,7 @@ services: designer: image: edxops/designer-dev:latest container_name: edx.devstack.designer + hostname: designer.devstack.edx volumes: - .:/edx/app/designer command: bash -c 'while true; do python /edx/app/designer/manage.py runserver 0.0.0.0:18808; sleep 2; done' @@ -885,7 +886,7 @@ services: networks: default: aliases: - - edx.devstack.xqueue + - edx.devstack.designer stdin_open: true tty: true environment: diff --git a/options.mk b/options.mk index 38a0b3e2..49fe1d23 100644 --- a/options.mk +++ b/options.mk @@ -61,13 +61,13 @@ ALWAYS_CACHE_PROGRAMS ?= false # The current value was chosen such that it would not change the existing # Devstack behavior. DEFAULT_SERVICES ?= \ -credentials+discovery+ecommerce+edx_notes_api+forum+frontend-app-authn+frontend-app-gradebook+frontend-app-payment+frontend-app-publisher+frontend-app-learning+lms+cms+designer +credentials+discovery+ecommerce+edx_notes_api+forum+frontend-app-authn+frontend-app-gradebook+frontend-app-payment+frontend-app-publisher+frontend-app-learning+lms+cms # All edX services, whether or not they are run by default. # Separated by plus signs. # Separated by plus signs. Listed in alphabetical order for clarity. EDX_SERVICES ?= \ -analyticsapi+codejail+credentials+cms+cms-worker+cms_watcher+discovery+ecommerce+edx_notes_api+forum+frontend-app-account+frontend-app-learner-dashboard+frontend-app-learner-record+frontend-app-profile+frontend-app-authn+frontend-app-course-authoring+frontend-app-gradebook+frontend-app-ora-grading+frontend-app-learning+frontend-app-library-authoring+frontend-app-payment+frontend-app-program-console+frontend-app-publisher+insights+lms+lms-worker+lms_watcher+registrar+registrar-worker+xqueue+xqueue_consumer+enterprise-catalog+license-manager +analyticsapi+codejail+credentials+cms+cms-worker+cms_watcher+discovery+ecommerce+edx_notes_api+forum+frontend-app-account+frontend-app-learner-dashboard+frontend-app-learner-record+frontend-app-profile+frontend-app-authn+frontend-app-course-authoring+frontend-app-gradebook+frontend-app-ora-grading+frontend-app-learning+frontend-app-library-authoring+frontend-app-payment+frontend-app-program-console+frontend-app-publisher+insights+lms+lms-worker+lms_watcher+registrar+registrar-worker+xqueue+xqueue_consumer+enterprise-catalog+license-manager+designer # Services with database migrations. # Should be a subset of $(EDX_SERVICES). From c601ceda5b69b16cd3968d9b9642fab0b57fbc09 Mon Sep 17 00:00:00 2001 From: Hunia Fatima Date: Wed, 12 Feb 2025 10:35:36 +0500 Subject: [PATCH 3/5] fix: corrected command --- provision-designer.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/provision-designer.sh b/provision-designer.sh index 2101e647..b4394849 100755 --- a/provision-designer.sh +++ b/provision-designer.sh @@ -30,5 +30,4 @@ docker compose exec -T ${name} bash -e -c -c "echo 'from django.contrib.auth im ./provision-ida-user.sh ${name} ${name} ${port} # Restart designer app -docker compose restart designer - +make dev.restart-devserver.designer From 5753ab8d4e666d58c35e8ec9d086aece3a141eb0 Mon Sep 17 00:00:00 2001 From: Hunia Fatima Date: Wed, 12 Feb 2025 18:29:36 +0500 Subject: [PATCH 4/5] fix: remove extra code --- provision.sql | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/provision.sql b/provision.sql index 8eff8905..52a674cb 100644 --- a/provision.sql +++ b/provision.sql @@ -38,15 +38,10 @@ GRANT ALL ON `reports_v1`.* TO 'analytics001'@'%' IDENTIFIED BY 'password'; CREATE DATABASE IF NOT EXISTS `enterprise_catalog`; GRANT ALL ON `enterprise_catalog`.* TO 'catalog001'@'%' IDENTIFIED BY 'password'; + CREATE DATABASE IF NOT EXISTS designer; GRANT ALL ON discovery.* TO 'designer001'@'%' IDENTIFIED BY 'password'; - -CREATE DATABASE IF NOT EXISTS license_manager; -GRANT ALL ON license_manager.* TO 'license_manager001'@'%' IDENTIFIED BY 'password'; -CREATE DATABASE IF NOT EXISTS `enterprise_catalog`; -GRANT ALL ON `enterprise_catalog`.* TO 'catalog001'@'%' IDENTIFIED BY 'password'; - CREATE DATABASE IF NOT EXISTS license_manager; GRANT ALL ON license_manager.* TO 'license_manager001'@'%' IDENTIFIED BY 'password'; From 3701a2bebc7950158c8ffb07100abe08693c5ef9 Mon Sep 17 00:00:00 2001 From: Hunia Fatima Date: Wed, 12 Feb 2025 22:59:46 +0500 Subject: [PATCH 5/5] fix: added db env variables for designer --- docker-compose.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 5d555469..7f172e31 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -955,6 +955,11 @@ services: environment: DJANGO_SETTINGS_MODULE: designer.settings.devstack ENABLE_DJANGO_TOOLBAR: 1 + DB_HOST: "edx.devstack.mysql80" + DB_NAME: "designer" + DB_PASSWORD: "password" + DB_PORT: "3306" + DB_USER: "designer001" frontend-app-profile: extends: