一、安装的过程:
安装教程提到了简易的安装方式,即使用“tutor local quickstart”即可进行镜像下载和启动。该命令会在启动时提示用户输入网站域名等信息,这些信息会被保存在“~.local/share/tutor/env/local”目录中,其中有这个文件比较重要:
~.local/share/tutor/env/local/docker-compose.yml #存放服务的启动文件
~.local/share/tutor/env/local/docker-compose.jobs.yml #存放初始化的启动文件
~.local/share/tutor/env/apps/nginx/ #存放nginx的配置文件
~.local/share/tutor/env/apps/openedx/ #存放lms,cms的配置文件
系统在第一次启动后,需要调用一些初始化函数用于创建数据库,创建数据表和初始化用户等信息。此时会调用上面的”docker-compose.jobs.yml” 文件来执行初始化任务,该文件内容如下:
#docker-compose.jobs.yml
version: “3.7”
services:
mysql-job:
image: docker.io/mysql:5.6.36
entrypoint: []
command: [“echo”, “done”]
lms-job:
image: docker.io/overhangio/openedx:3.12.1
environment:
SERVICE_VARIANT: lms
SETTINGS: ${EDX_PLATFORM_SETTINGS:-tutor.production}
volumes:
– ../apps/openedx/settings/lms/:/openedx/edx-platform/lms/envs/tutor/:ro
– ../apps/openedx/settings/cms/:/openedx/edx-platform/cms/envs/tutor/:ro
– ../apps/openedx/config/:/openedx/config/:ro
cms-job:
image: docker.io/overhangio/openedx:3.12.1
environment:
SERVICE_VARIANT: cms
SETTINGS: ${EDX_PLATFORM_SETTINGS:-tutor.production}
volumes:
– ../apps/openedx/settings/lms/:/openedx/edx-platform/lms/envs/tutor/:ro
– ../apps/openedx/settings/cms/:/openedx/edx-platform/cms/envs/tutor/:ro
– ../apps/openedx/config/:/openedx/config/:ro
forum-job:
image: docker.io/overhangio/openedx-forum:3.12.1
environment:
SEARCH_SERVER: “http://elasticsearch:9200”
MONGODB_AUTH: “”
MONGODB_HOST: “mongodb”
MONGODB_PORT: “27017”
从上述文件看到openedx有三个初始化任务,分别时mysql、lms、cms和forum。本文看似什么都不做,其实际上是调用了tutor仓库中hooks目录内的函数来生成执行的命令,如下的内容是在调用“tutor local quickstart”命令生成的。
对mysql执行信息如下:
================================================
Database creation and migrations
================================================
Initialising all services…
docker-compose -f /home/hyt/.local/share/tutor/env/local/docker-compose.yml –project-name tutor_local -f /home/hyt/.local/share/tutor/env/local/docker-compose.jobs.yml run –rm mysql-job sh -e -c echo “Initialising MySQL…”
mysql_connection_max_attempts=10
mysql_connection_attempt=0
until mysql -u root –password=”D2Zz0xj3″ –host “mysql” –port 3306 -e ‘exit’
do
mysql_connection_attempt=$(expr $mysql_connection_attempt + 1)
echo ” [$mysql_connection_attempt/$mysql_connection_max_attempts] Waiting for MySQL service (this may take a while)…”
if [ $mysql_connection_attempt -eq $mysql_connection_max_attempts ]
then
echo “MySQL initialisation error” 1>&2
exit 1
fi
sleep 10
done
echo “MySQL is up and running”
mysql -u root –password=”D2Zz0xj3″ –host “mysql” –port 3306 -e ‘CREATE DATABASE IF NOT EXISTS openedx;’
mysql -u root –password=”D2Zz0xj3″ –host “mysql” –port 3306 -e ‘GRANT ALL ON openedx.* TO “openedx”@”%” IDENTIFIED BY “uR0gGcbb”;’
对lms执行信息如下:
Initialising lms…
docker-compose -f /home/hyt/.local/share/tutor/env/local/docker-compose.yml –project-name tutor_local -f /home/hyt/.local/share/tutor/env/local/docker-compose.jobs.yml run –rm lms-job sh -e -c dockerize -wait tcp://mysql:3306 -timeout 20s
export DJANGO_SETTINGS_MODULE=$SERVICE_VARIANT.envs.$SETTINGS
echo “Loading settings $DJANGO_SETTINGS_MODULE”
./manage.py lms migrate
./manage.py lms create_oauth2_client \
“http://androidapp.com” “http://androidapp.com/redirect” public \
–client_id android –client_secret VfzhH0Zwkve97z8s6aK19ImY \
–trusted
# Fix incorrect uploaded file path
if [ -d /openedx/data/uploads/ ]; then
if [ -n “$(ls -A /openedx/data/uploads/)” ]; then
echo “Migrating LMS uploaded files to shared directory”
mv /openedx/data/uploads/* /openedx/media/
rm -rf /openedx/data/uploads/
fi
fi
2020/04/29 07:51:17 Waiting for: tcp://mysql:3306
2020/04/29 07:51:17 Connected to tcp://mysql:3306
Loading settings lms.envs.tutor.production
对cms执行信息如下:
Initialising cms…
docker-compose -f /home/hyt/.local/share/tutor/env/local/docker-compose.yml –project-name tutor_local -f /home/hyt/.local/share/tutor/env/local/docker-compose.jobs.yml run –rm cms-job sh -e -c dockerize -wait tcp://mysql:3306 -timeout 20s
export DJANGO_SETTINGS_MODULE=$SERVICE_VARIANT.envs.$SETTINGS
echo “Loading settings $DJANGO_SETTINGS_MODULE”
./manage.py cms migrate
# Fix incorrect uploaded file path
if [ -d /openedx/data/uploads/ ]; then
if [ -n “$(ls -A /openedx/data/uploads/)” ]; then
echo “Migrating CMS uploaded files to shared directory”
mv /openedx/data/uploads/* /openedx/media/
rm -rf /openedx/data/uploads/
fi
fi
2020/04/29 07:59:21 Waiting for: tcp://mysql:3306
2020/04/29 07:59:21 Connected to tcp://mysql:3306
Loading settings cms.envs.tutor.production
对forum执行信息如下:
Initialising forum…
docker-compose -f /home/hyt/.local/share/tutor/env/local/docker-compose.yml –project-name tutor_local -f /home/hyt/.local/share/tutor/env/local/docker-compose.jobs.yml run –rm forum-job sh -e -c export MONGOHQ_URL=”mongodb://$MONGODB_AUTH$MONGODB_HOST:$MONGODB_PORT/cs_comments_service”
bundle exec rake search:initialize
bundle exec rake search:rebuild_index
Waiting for mongodb/elasticsearch…
2020/04/29 07:59:46 Waiting for: tcp://mongodb:27017
2020/04/29 07:59:46 Waiting for: http://elasticsearch:9200
2020/04/29 07:59:46 Connected to tcp://mongodb:27017
2020/04/29 07:59:46 Received 200 from http://elasticsearch:9200
二、安装完成后有两个命令:
tutor local start #实际调用了
docker-compose -f /home/hyt/.local/share/tutor/env/local/docker-compose.yml –project-name tutor_local up –remove-orphans #可以加个 -d
tutor local stop #实际调用了
docker-compose -f /home/hyt/.local/share/tutor/env/local/docker-compose.yml –project-name tutor_local rm –stop –force