使用Tutor安装完成OpenEdx后即可通过域名方式进行访问,由于Tutor使用一个nginx的容器转发所有的网络流量,其利用域名分别处理对lms和cms的请求,但在内网中,这种方式反而麻烦。因此打算将其改成基于端口的模式,预期将lms和cms分别绑定在80和81端口。配置方式如下:
首先修改docker-compose的配置文件:
#~/.local/share/tutor/env/local/docker-compose.yml ... nginx: image: docker.io/nginx:1.13 restart: unless-stopped ports: - "80:80" - "81:81" #加上一个81:81,即将nginx容器外部的81端口绑定到容器内的81端口 - "443:443" networks: default: aliases: [] volumes: - ../apps/nginx:/etc/nginx/conf.d/:ro - ../../data/openedx:/var/www/openedx:ro - ../../data/openedx-media:/var/www/openedx-media:ro
配置完成后使用”tutor local reboot -d nginx”才能让nginx对应的”docker-compose.yml”的配置生效,注意仅仅使用”tutor local restart nginx”似乎只是启动容器,而不更新”docker-compose.yml”的配置。此时查看”docker ps -a”即可查看到对应的端口映射已经出现。
由于nginx容器的配置文件时通过docker的目录挂载来实现的,相应的配置文件在”~/.local/share/tutor/env/apps/nginx/”中。此时对于lms的配置将部分配置文件进行修改,cms也类似:
#lms.conf upstream lms-backend { server lms:8000 fail_timeout=0; } server { listen 80 default_server; #绑定80端口 server_name _; .... } #cms.conf upstream cms-backend { server cms:8000 fail_timeout=0; } server { listen 81 default_server; #绑定81端口 server_name _; ... }
配置完成后通过”tutor local restart lms”和”tutor local restart cms”重启相应服务后,再次尝试访问,此时发现还是不能访问。原因在于lms和cms的站点访问策略设置的太严格。进入”~/.local/share/tutor/env/apps/openedx/settings/”目录中,分别在lms和cms的子目录中找到”production.py”文件,这个即是相应服务的启动文件。分别在对应的”ALLOWED_HOSTS”加入”*”来允许任意站点的访问。
#~/.local/share/tutor/env/apps/openedx/settings/lms/production.py .... ######## End of common LMS settings ALLOWED_HOSTS = [ ENV_TOKENS.get("LMS_BASE"), FEATURES["PREVIEW_LMS_BASE"], "*", #允许任意站点访问 "lms", "127.0.0.1", "localhost", "preview.localhost", ] ... #~/.local/share/tutor/env/apps/openedx/settings/lms/production.py .... ######## End of common CMS settings ALLOWED_HOSTS = [ ENV_TOKENS.get("CMS_BASE"), "cms", "*", #允许任意站点访问 "127.0.0.1", "localhost", "studio.localhost", ] ...
配置完成后,再次使用”tutor local restart lms”和”tutor local restart cms”重启相应服务后,再次尝试访问80和81端口就正常了。