Canvas LMS Docker 部署方案分析与实施记录

2026-06-08 Canvas LMS Docker

这篇笔记记录我尝试用 Docker 部署 Canvas LMS 开源版的过程,包括几种方案的选择原因和最终实施时遇到的几个注意点。

一、部署方案对比

在动手之前,我大致看了三种方式:

  • 官方生产环境部署:按官方文档在 Linux 服务器上手动安装 Ruby、PostgreSQL、Redis 等。适合正式环境,但配置复杂,学习曲线陡。
  • Bitnami Helm Chart / Docker Image:Bitnami 提供了打包好的镜像和 Helm Chart,部署速度快,但版本可能落后于官方。
  • 官方 Docker 开发环境:Canvas 官方仓库里有 Dockerfile 和 docker-compose 配置,主要是给开发者用的,拿来学习和测试比较合适。

综合考虑,我先用官方 Docker 开发环境做测试,因为可以跟踪最新代码,也便于理解整体依赖关系。

二、实施步骤概览

  1. 克隆官方仓库:git clone https://github.com/instructure/canvas-lms.git
  2. 切换到稳定分支,避免使用正在开发中的 master。
  3. 复制环境配置模板 cp docker-compose/config/env.sh.example docker-compose/config/env.sh 并按需修改。
  4. 运行 docker-compose up -d 启动服务。
  5. 执行数据库初始化、资产编译等初始化命令。

三、遇到的问题

1. 镜像构建时间长

首次构建需要下载大量依赖并编译前端资源,耗时较长。建议在配置较好的机器上进行,避免在机械硬盘或低内存环境下操作。

2. 环境变量配置

数据库连接、Redis 地址、文件存储路径等都需要在环境变量里正确配置。如果启动后报数据库连接失败,优先检查 env.sh 中的主机名和端口。

3. 静态资源加载异常

有时候容器起来了,但页面样式丢失。通常是因为前端资源没有编译完成,需要进入容器重新执行 yarn installyarn build 相关命令。

四、后续计划

目前只是跑通了单实例测试环境。后续想继续研究的是:如何持久化数据库和文件存储、如何配置外部 SMTP、以及如何在生产环境中使用 HTTPS 和反向代理。