Skip to content
This repository has been archived by the owner on Aug 1, 2024. It is now read-only.

feat: apple-silicon support #920

Closed
wants to merge 16 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
# make dev.attach.credentials
# make dev.pull.registrar+studio
# make dev.up.lms
# make dev.up.without-deps.lms+forum+discovery+mysql57+elasticsearch+memcached
# make dev.restart-container.mysql57+lms
# make dev.up.without-deps.lms+forum+discovery+mysql80+elasticsearch+memcached
# make dev.restart-container.mysql80+lms

# There are also "prefix-form" targets, which are simply an alternate way to spell
# the 'dev.' targets.
Expand Down Expand Up @@ -230,17 +230,17 @@ impl-dev.provision.%: dev.check-memory ## Provision specified services.
dev.provision.%: ## Provision specified services.
@scripts/send_metrics.py wrap "dev.provision.$*"

dev.backup: dev.up.mysql57+mongo+elasticsearch+elasticsearch7+elasticsearch710+opensearch12+coursegraph ## Write all data volumes to the host.
docker run --rm --volumes-from $$(make --silent --no-print-directory dev.print-container.mysql57) -v $$(pwd)/.dev/backups:/backup debian:jessie tar zcvf /backup/mysql57.tar.gz /var/lib/mysql
dev.backup: dev.up.mysql80+mongo+elasticsearch+elasticsearch7+elasticsearch710+opensearch12+coursegraph ## Write all data volumes to the host.
docker run --rm --volumes-from $$(make --silent --no-print-directory dev.print-container.mysql80) -v $$(pwd)/.dev/backups:/backup debian:jessie tar zcvf /backup/mysql80.tar.gz /var/lib/mysql
docker run --rm --volumes-from $$(make --silent --no-print-directory dev.print-container.mongo) -v $$(pwd)/.dev/backups:/backup debian:jessie tar zcvf /backup/mongo.tar.gz /data/db
docker run --rm --volumes-from $$(make --silent --no-print-directory dev.print-container.elasticsearch) -v $$(pwd)/.dev/backups:/backup debian:jessie tar zcvf /backup/elasticsearch.tar.gz /usr/share/elasticsearch/data
docker run --rm --volumes-from $$(make --silent --no-print-directory dev.print-container.elasticsearch7) -v $$(pwd)/.dev/backups:/backup debian:jessie tar zcvf /backup/elasticsearch7.tar.gz /usr/share/elasticsearch/data
docker run --rm --volumes-from $$(make --silent --no-print-directory dev.print-container.elasticsearch710) -v $$(pwd)/.dev/backups:/backup debian:jessie tar zcvf /backup/elasticsearch710.tar.gz /usr/share/elasticsearch/data
docker run --rm --volumes-from $$(make --silent --no-print-directory dev.print-container.opensearch12) -v $$(pwd)/.dev/backups:/backup debian:jessie tar zcvf /backup/opensearch12.tar.gz /usr/share/opensearch/data
docker run --rm --volumes-from $$(make --silent --no-print-directory dev.print-container.coursegraph) -v $$(pwd)/.dev/backups:/backup debian:jessie tar zcvf /backup/coursegraph.tar.gz /data

dev.restore: dev.up.mysql57+mongo+elasticsearch+elasticsearch7+elasticsearch710+opensearch12+coursegraph ## Restore all data volumes from the host. WILL OVERWRITE ALL EXISTING DATA!
docker run --rm --volumes-from $$(make --silent --no-print-directory dev.print-container.mysql57) -v $$(pwd)/.dev/backups:/backup debian:jessie tar zxvf /backup/mysql57.tar.gz
dev.restore: dev.up.mysql80+mongo+elasticsearch+elasticsearch7+elasticsearch710+opensearch12+coursegraph ## Restore all data volumes from the host. WILL OVERWRITE ALL EXISTING DATA!
docker run --rm --volumes-from $$(make --silent --no-print-directory dev.print-container.mysql80) -v $$(pwd)/.dev/backups:/backup debian:jessie tar zxvf /backup/mysql80.tar.gz
docker run --rm --volumes-from $$(make --silent --no-print-directory dev.print-container.mongo) -v $$(pwd)/.dev/backups:/backup debian:jessie tar zxvf /backup/mongo.tar.gz
docker run --rm --volumes-from $$(make --silent --no-print-directory dev.print-container.elasticsearch) -v $$(pwd)/.dev/backups:/backup debian:jessie tar zxvf /backup/elasticsearch.tar.gz
docker run --rm --volumes-from $$(make --silent --no-print-directory dev.print-container.elasticsearch7) -v $$(pwd)/.dev/backups:/backup debian:jessie tar zxvf /backup/elasticsearch7.tar.gz
Expand Down Expand Up @@ -270,7 +270,7 @@ dev.migrate.%: ## Run migrations on a service.
dev.drop-db: _expects-database.dev.drop-db

dev.drop-db.%: ## Irreversably drop the contents of a MySQL database in each mysql container.
docker-compose exec -T mysql57 bash -c "mysql --execute=\"DROP DATABASE $*;\""
docker-compose exec -T mysql80 bash -c "mysql --execute=\"DROP DATABASE $*;\""


########################################################################################
Expand Down Expand Up @@ -457,10 +457,10 @@ dev.shell.%: ## Run a shell on the specified service's container.
docker-compose exec $* /bin/bash

dev.dbshell:
docker-compose exec mysql57 bash -c "mysql"
docker-compose exec mysql80 bash -c "mysql"

dev.dbshell.%: ## Run a SQL shell on the given database.
docker-compose exec mysql57 bash -c "mysql $*"
docker-compose exec mysql80 bash -c "mysql $*"

# List of Makefile targets to run static asset generation, in the form dev.static.$(service)
# Services will only have their asset generation added here
Expand Down
2 changes: 1 addition & 1 deletion README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ You can also browse all the documentation in `Read the Docs`_.
Notices
-------

**NOTE:** LMS is now using MySql 5.7 by default. You have to run ``make dev.pull.lms`` and ``make dev.provision.lms`` (more details in `Getting Started`_) to fetch latest images and reprovision local copies of databases in order for an existing devstack setup to keep working.
**NOTE:** LMS is now using MySql 8.0 by default. You have to run ``make dev.pull.lms`` and ``make dev.provision.lms`` (more details in `Getting Started`_) to fetch latest images and reprovision local copies of databases in order for an existing devstack setup to keep working.


Getting Started
Expand Down
51 changes: 26 additions & 25 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -237,22 +237,23 @@ services:
volumes:
- mongo_data:/data/db

mysql57:
mysql80:
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The dev-env working group decided the most reasonable path forward here was to rename MySQL-related docker assets. this avoids data incompatibility and allows existing volumes (with data) to be preserved in the event we want to access that preexisting data.

command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci
container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.mysql57"
hostname: mysql57.devstack.edx
container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.mysql80"
hostname: mysql80.devstack.edx
environment:
MYSQL_ROOT_PASSWORD: ""
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
image: mysql:5.7
image: mysql:8.0.28-oracle
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

curiosity - why the oracle version?

networks:
default:
aliases:
- edx.devstack.mysql80
- edx.devstack.mysql57
Copy link
Contributor Author

@johnnagro johnnagro May 11, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

keeping the old edx.devstack.mysql57 alias provides backwards comparability for projects with local config that point to the old hostname

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we put an expiration date on this?

ports:
- "3506:3306"
volumes:
- mysql57_data:/var/lib/mysql
- mysql80_data:/var/lib/mysql

redis:
container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.redis"
Expand Down Expand Up @@ -309,13 +310,13 @@ services:
depends_on:
- lms
- memcached
- mysql57
- mysql80
# Allows attachment to the credentials service using 'docker attach <containerID>'.
stdin_open: true
tty: true
environment:
CACHE_LOCATION: edx.devstack.memcached:11211
DB_HOST: edx.devstack.mysql57
DB_HOST: edx.devstack.mysql80
SOCIAL_AUTH_EDX_OIDC_URL_ROOT: http://edx.devstack.lms:18000/oauth2
ENABLE_DJANGO_TOOLBAR: 1
DJANGO_WATCHMAN_TIMEOUT: 30
Expand All @@ -334,14 +335,14 @@ services:
depends_on:
- elasticsearch710
- memcached
- mysql57
- mysql80
# Allows attachment to the discovery service using 'docker attach <containerID>'.
stdin_open: true
tty: true
environment:
# This next DB_MIGRATION_HOST line can be removed once edx/configuration has been updated with this value for
# a while and most people have had a chance to do a "make pull" to get the latest images.
DB_MIGRATION_HOST: edx.devstack.mysql57
DB_MIGRATION_HOST: edx.devstack.mysql80
TEST_ELASTICSEARCH_URL: "edx.devstack.elasticsearch710"
ENABLE_DJANGO_TOOLBAR: 1
DJANGO_WATCHMAN_TIMEOUT: 30
Expand All @@ -363,7 +364,7 @@ services:
- discovery
- lms
- memcached
- mysql57
- mysql80
# Allows attachment to the ecommerce service using 'docker attach <containerID>'.
stdin_open: true
tty: true
Expand All @@ -387,7 +388,7 @@ services:
- devpi
- elasticsearch710
- lms
- mysql57
- mysql80
image: edxops/notes:${OPENEDX_RELEASE:-latest}
networks:
default:
Expand All @@ -397,7 +398,7 @@ services:
- "18120:18120"
environment:
DB_ENGINE: "django.db.backends.mysql"
DB_HOST: "edx.devstack.mysql57"
DB_HOST: "edx.devstack.mysql80"
DB_NAME: "notes"
DB_PASSWORD: "password"
DB_PORT: "3306"
Expand Down Expand Up @@ -437,7 +438,7 @@ services:
- forum
- memcached
- mongo
- mysql57
- mysql80
- opensearch12
# Allows attachment to the LMS service using 'docker attach <containerID>'.
stdin_open: true
Expand Down Expand Up @@ -469,14 +470,14 @@ services:
hostname: insights.devstack.edx
depends_on:
- analyticsapi
- mysql57
- mysql80
- lms
- memcached
# Allows attachment to the insights service using 'docker attach <containerID>'.
stdin_open: true
tty: true
environment:
DB_HOST: edx.devstack.mysql57
DB_HOST: edx.devstack.mysql80
DB_NAME: dashboard
DB_PORT: 3306
DB_USER: analytics001
Expand All @@ -498,13 +499,13 @@ services:
container_name: edx.devstack.analyticsapi
hostname: analyticsapi
depends_on:
- mysql57
- mysql80
- elasticsearch710
command: bash -c 'source /edx/app/analytics_api/analytics_api_env && while true; do python /edx/app/analytics_api/analytics_api/manage.py runserver 0.0.0.0:19001 --settings analyticsdataserver.settings.devstack; sleep 2; done'
stdin_open: true
tty: true
environment:
DB_HOST: edx.devstack.mysql57
DB_HOST: edx.devstack.mysql80
DB_PORT: 3306
DB_USER: analytics001
DB_PASSWORD: password
Expand All @@ -521,15 +522,15 @@ services:
depends_on:
- discovery
- lms
- mysql57
- mysql80
- memcached
- redis
- registrar-worker
# Allows attachment to the registrar service using 'docker attach <containerID>'.
stdin_open: true
tty: true
environment:
DB_HOST: edx.devstack.mysql57
DB_HOST: edx.devstack.mysql80
DB_NAME: registrar
DB_PORT: 3306
DB_USER: registrar001
Expand Down Expand Up @@ -559,12 +560,12 @@ services:
hostname: registrar-worker.devstack.edx
depends_on:
- lms
- mysql57
- mysql80
- redis
stdin_open: true
tty: true
environment:
DB_HOST: edx.devstack.mysql57
DB_HOST: edx.devstack.mysql80
DB_NAME: registrar
DB_PORT: 3306
DB_USER: registrar001
Expand Down Expand Up @@ -597,7 +598,7 @@ services:
- lms
- memcached
- mongo
- mysql57
- mysql80
- opensearch12
# Allows attachment to the Studio service using 'docker attach <containerID>'.
stdin_open: true
Expand Down Expand Up @@ -630,7 +631,7 @@ services:
volumes:
- ${DEVSTACK_WORKSPACE}/xqueue:/edx/app/xqueue/xqueue
depends_on:
- mysql57
- mysql80
networks:
default:
aliases:
Expand All @@ -645,7 +646,7 @@ services:
volumes:
- ${DEVSTACK_WORKSPACE}/xqueue:/edx/app/xqueue/xqueue
depends_on:
- mysql57
- mysql80
networks:
default:
aliases:
Expand Down Expand Up @@ -837,4 +838,4 @@ volumes:
elasticsearch710_data:
mongo_data:
opensearch12_data:
mysql57_data:
mysql80_data:
2 changes: 1 addition & 1 deletion docs/developing_on_named_release_branches.rst
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ Switch between your Devstack releases by doing the following:
Examples of Docker Service Names After Setting the ``COMPOSE_PROJECT_NAME`` variable. Notice that the **devstack-juniper.master** name represents the ``COMPOSE_PROJECT_NAME``.

- edx.devstack-juniper.master.lms
- edx.devstack-juniper.master.mysql57
- edx.devstack-juniper.master.mysql80

Each instance has an isolated set of databases. This could, for example, be used to quickly switch between versions of Open edX without hitting as many issues with migrations, data integrity, etc.

Expand Down
10 changes: 5 additions & 5 deletions docs/devstack_faq.rst
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ How do I connect to the databases from an outside editor?
---------------------------------------------------------

To connect to the databases from an outside editor (such as MySQLWorkbench),
first uncomment these lines from ``docker-compose.yml``'s ``mysql57`` section
first uncomment these lines from ``docker-compose.yml``'s ``mysql80`` section

.. code:: yaml

Expand All @@ -145,8 +145,8 @@ Then bring your mysql container down and back up by running:

.. code:: sh

docker-compose stop mysql57
docker-compose up -d mysql57
docker-compose stop mysql80
docker-compose up -d mysql80

Then connect using the values below. Note that the username and password will
vary depending on the database. For all of the options, see ``provision.sql``.
Expand All @@ -158,7 +158,7 @@ vary depending on the database. For all of the options, see ``provision.sql``.

If you have trouble connecting, ensure the port was mapped successfully by
running ``make dev.ps`` and looking for a line like this:
``edx.devstack.mysql57 docker-entrypoint.sh mysql ... Up 0.0.0.0:3506→3306/tcp``.
``edx.devstack.mysql80 docker-entrypoint.sh mysql ... Up 0.0.0.0:3506→3306/tcp``.

How do I build the service images myself?
-----------------------------------------
Expand Down Expand Up @@ -209,7 +209,7 @@ To access the MySQL shell for a particular database, run:

.. code:: sh

make dev.shell.mysql57
make dev.shell.mysql80
mysql
use <database>;

Expand Down
2 changes: 1 addition & 1 deletion load-db.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@ then
fi

echo "Loading the $1 database..."
mysql_container=$(make --silent --no-print-directory dev.print-container.mysql57)
mysql_container=$(make --silent --no-print-directory dev.print-container.mysql80)
docker exec -i "$mysql_container" mysql -uroot $1 < $1.sql
echo "Finished loading the $1 database!"
2 changes: 1 addition & 1 deletion options.mk
Original file line number Diff line number Diff line change
Expand Up @@ -90,4 +90,4 @@ credentials+discovery+ecommerce+insights+lms+registrar+studio
# All third-party services.
# Separated by plus signs. Listed in alphabetical order for clarity.
THIRD_PARTY_SERVICES ?= \
chrome+coursegraph+devpi+elasticsearch+elasticsearch7+elasticsearch710+firefox+memcached+mongo+mysql57+opensearch12+redis+namenode+datanode+resourcemanager+nodemanager+sparkmaster+sparkworker+vertica
chrome+coursegraph+devpi+elasticsearch+elasticsearch7+elasticsearch710+firefox+memcached+mongo+mysql80+opensearch12+redis+namenode+datanode+resourcemanager+nodemanager+sparkmaster+sparkworker+vertica
14 changes: 7 additions & 7 deletions provision.sh
Original file line number Diff line number Diff line change
Expand Up @@ -123,14 +123,14 @@ fi
echo -e "${GREEN}Will provision the following:\n ${to_provision_ordered}${NC}"

# Bring the databases online.
docker-compose up -d mysql57
docker-compose up -d mysql80
if needs_mongo "$to_provision_ordered"; then
docker-compose up -d mongo
fi

# Ensure the MySQL server is online and usable
echo "${GREEN}Waiting for MySQL 5.7.${NC}"
until docker-compose exec -T mysql57 bash -e -c "mysql -uroot -se \"SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = 'root')\"" &> /dev/null
echo "${GREEN}Waiting for MySQL 8.0.${NC}"
until docker-compose exec -T mysql80 bash -e -c "mysql -uroot -se \"SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = 'root')\"" &> /dev/null
do
printf "."
sleep 1
Expand All @@ -140,8 +140,8 @@ done
# See https://github.com/docker-library/mysql/issues/245 for why this is necessary.
sleep 10

echo "${GREEN}Waiting for MySQL 5.7 to restart.${NC}"
until docker-compose exec -T mysql57 bash -e -c "mysql -uroot -se \"SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = 'root')\"" &> /dev/null
echo "${GREEN}Waiting for MySQL 8.0 to restart.${NC}"
until docker-compose exec -T mysql80 bash -e -c "mysql -uroot -se \"SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = 'root')\"" &> /dev/null
do
printf "."
sleep 1
Expand All @@ -152,8 +152,8 @@ echo -e "${GREEN}MySQL ready.${NC}"

# Ensure that the MySQL databases and users are created for all IDAs.
# (A no-op for databases and users that already exist).
echo -e "${GREEN}Ensuring MySQL 5.7 databases and users exist...${NC}"
docker-compose exec -T mysql57 bash -e -c "mysql -uroot mysql" < provision.sql
echo -e "${GREEN}Ensuring MySQL 8.0 databases and users exist...${NC}"
docker-compose exec -T mysql80 bash -e -c "mysql -uroot mysql" < provision.sql

# If necessary, ensure the MongoDB server is online and usable
# and create its users.
Expand Down
Loading