免费学习平台,力省 10万补习费,极空间 NAS 部署 LearnHouse
大家好呀,昨天是六一儿童节。家里的小神兽今天在幼儿园吃吃喝喝,老师们准备了一份盛大的自助餐,每个人还分到了六一儿童节礼物,真的别提多开心了。
不过这也是小神兽在幼儿园最后的一个六一了,马上九月份就要上小学,要开始无穷无尽的学习生活。老母亲很感伤,也很担心。担心他学业跟不上,毕竟我们家的啥培训班都不上,纯玩。
最近在 Github 找到了一款很有意思的开源教育平台 —— LearnHouse,它是一个旨在创建、分享和参与教育内容,并且具有 AI 助手并支持各种内容类型。

粗粗看了看项目支持的功能,那可是真的很强大。拥有课程管理、作业管理、博客、数据分析、AI 游戏、自动 AI 评估、结业证书、用户组等等功能,完全是一款可商业化的课程管理平台。

好了,想到这里我不禁邪恶的笑了一下。为奖励某小孩助人为乐的精神,不辞万里送去 10 箱课外习题的新闻再次涌上脑海。话不多说,我们直接来看看它有哪些用法。
LearnHouse 类似现在的大学选修课在线课堂等等的工具,它分为课程、合集、博客、社区、Playgounds 五个模块。

课程是学习的核心模块,教师可以将各种各样课程内容发布到平台上,每个课程都作为学习的最小单位,供学生用户使用。

编辑后台类似教师的备课版,里面可以支持丰富的课件形式。视频、PDF 文档、Markdown、作业、网页活动等都可以纳入课程内容。


🔻发布课程

待课程发布以后,孩子可以通过课程进行学习。比如我这里上传了 PDF 的课本,孩子可以通过 iPad、电脑、学习机网页打开地址进行学习,PDF 阅读器中有笔、橡皮等常规工具,支持断电续学。甚至如果你接入了 AI ,还可以在学习中直接问 AI 某个知识点的信息。

每次完成一个单元的学习后,都可以获取一定的学习积分,这个积分涨满到 100%,就能获得课程对应的证书,有点类似于学分的概念。

博客和课程类似,只不过将课件的内容更换成了音频内容。可以让孩子一边学习、一边听博客。

合集则是将多个课程、博客合并归纳入管理。比如一年级的课程全部纳入一年级。

比较有意思的是这个作业系统,支持测试、数学题、代码、文本简答、表单选项等等内容。每个课程里,可以根据学习进度,塞进去几个随堂练习,这些练习可以复用,也可以由 AI 进行批改。

每个题目都可以设置标准答案在里面,而且答案下还能跟上释义。这意味着在线测试就可以直接完成批改,题目做的对还是错,哪里错了,一下就可以搞清楚。

更夸张的是,它还拥有一个无限画布的实时授课白板。支持代码、图片、笔记、网站、实时画笔、todo 等等丰富的插件内容。轻松代替学校教师的希沃白板。

剩下两个比较有意思的部分是社区和 PlayGround。社区可以认为是一个在线论坛,用户可以在里面发布问题、想法、综合、公告、展示等信息。每一个社区都可以针对具体的用户权限开放,做成一个类似兴趣班、班级群的概念就特别棒。

而 Playgrounds 则类似一个在线实验室,可以由 AI 生成可互动的在线游戏。让孩子通过玩乐的方式学习知识,你可以说是劳逸结合,也可以说知识以某种奇怪的方式进入了我的脑子。

LearnHouse 的用法还有很多,它既可以作为虎爸虎妈们小圈子内的学习资料分享基地,也可以作为课外培训班免费的课程管理系统,还可以作为孩子们互相交流的小天地。
总之任何和学习相关的事情,在 LearnHouse 里都可以实现。
接下来我们再来说说如何在 NAS 里部署这个工具。
还是以极空间私有云为例。我们先创建一个 learnhouse 的文件夹,然后在创建一个 extra 的子文件夹,然后再创建一个 nginx.prod.conf 的 文件。

用文本编辑器打开文件,把下面这段代码全部复制进去,然后保存。
server {
listen 80;
listen [::]:80;
server_name _;
client_max_body_size 500M;
# Increase header buffer size
large_client_header_buffers 4 32k;
# Increase the maximum allowed size of the client request body
client_body_buffer_size 32k;
# Increase the maximum allowed size of the client request header fields
client_header_buffer_size 32k;
# Proxy all requests to the learnhouse-app service
# The app container has internal nginx routing between frontend, backend, and collab
location / {
proxy_pass http://learnhouse-app:80;
# Use $http_host (not $host) so the port is preserved — Next.js Server
# Actions reject POSTs where origin and x-forwarded-host disagree.
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket support (needed for /collab)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Timeouts for long-running requests and WebSocket connections
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
proxy_connect_timeout 75s;
}
}
接着打开极空间的 Docker 应用,创建一个 Compose 项目,目录选择刚才我们创建的 learnhouse 这个文件夹,然后把后面提供的 yaml 和 .env ,分别复制到对应的框体里部署即可。

🔻 docker-compose.yml ,这些内容全部不要动,直接复制进去就可以。
services: learnhouse-app: image: ghcr.io/learnhouse/app:1.2.2 container_name: learnhouse-app restart: unless-stopped env_file: - .env environment: - HOSTNAME=0.0.0.0 - LEARNHOUSE_API_URL=http://localhost:9000 nginx: image: nginx:alpine container_name: learnhouse-nginx restart: unless-stopped ports: - "${HTTP_PORT:-80}:80" volumes: - ./extra/nginx.prod.conf:/etc/nginx/conf.d/default.conf:ro ssr-fwd: image: alpine/socat:1.8.0.0 container_name: learnhouse-ssr-fwd restart: unless-stopped network_mode: "service:learnhouse-app" command: TCP-LISTEN:13371,fork,reuseaddr TCP:localhost:80 db: image: pgvector/pgvector:pg16 container_name: learnhouse-db restart: unless-stopped env_file: - .env environment: - POSTGRES_USER=${POSTGRES_USER:-learnhouse} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-learnhouse} - POSTGRES_DB=${POSTGRES_DB:-learnhouse} volumes: - learnhouse_db_data:/var/lib/postgresql/data redis: image: redis:7.2.3-alpine container_name: learnhouse-redis restart: unless-stopped command: redis-server --appendonly yes volumes: - learnhouse_redis_data:/data volumes: learnhouse_db_data: learnhouse_redis_data:
🔻.env 才是要改的核心文件,主要改的是 IP,你可以修改为你自己的局域网地址,也可以修改为域名地址。
# 这里要注意,有 IP ,Port 两个部分。其中 IP 可以替换为域名。 # 我举个例子,IP - [192.168.0.135],Port - [13371]。 # IP 一共有 9 个地方要同步修改,port 有 7 个地方需要同步修改。 HTTP_PORT=13371 LEARNHOUSE_DOMAIN=192.168.0.135:13371 LEARNHOUSE_COOKIE_DOMAIN=.192.168.0.135 NEXT_PUBLIC_COLLAB_URL=ws://192.168.0.135:13371/collab NEXT_PUBLIC_LEARNHOUSE_TOP_DOMAIN=192.168.0.135 NEXT_PUBLIC_LEARNHOUSE_DOMAIN=192.168.0.135:13371 NEXT_PUBLIC_LEARNHOUSE_API_URL=http://192.168.0.135:13371/api/v1/ NEXT_PUBLIC_LEARNHOUSE_BACKEND_URL=http://192.1 68.0.135:13371/ NEXTAUTH_URL=http://192.168.0.135:13371 ##### 管理员账号密码,必须改 LEARNHOUSE_INITIAL_ADMIN_EMAIL=cgakki@wx.com # 管理员账号 LEARNHOUSE_INITIAL_ADMIN_PASSWORD=cherry1234 # 管理员密码 # 后端配置,都可以不用改 NEXT_PUBLIC_LEARNHOUSE_MULTI_ORG=False NEXT_PUBLIC_LEARNHOUSE_DEFAULT_ORG=default NEXT_PUBLIC_LEARNHOUSE_HTTPS=False NEXTAUTH_SECRET=334fQfufJAL+0HzQXlUfs2KSRt0Wg6mcDszNED1/HQ8= LEARNHOUSE_SQL_CONNECTION_STRING=postgresql://learnhouse:D_Zp4SmBlyGfd4ZGYJgWxw6nL1PBConJ@db:5432/learnhouse LEARNHOUSE_REDIS_CONNECTION_STRING=redis://redis:6379/learnhouse LEARNHOUSE_PORT=9000 COLLAB_INTERNAL_KEY=JxMRmG7VfUAOHRvdcQUp1XC6bil0hKF2KjFiRg23lDk= LEARNHOUSE_REDIS_URL=redis://redis:6379 POSTGRES_USER=learnhouse POSTGRES_PASSWORD=D_Zp4SmBlyGfd4ZGYJgWxw6nL1PBConJ POSTGRES_DB=learnhouse LEARNHOUSE_AUTH_JWT_SECRET_KEY=yOL7fLQavAGp0GXSbJgPReSFMph3RXcyrXpjmE3hmB4= LEARNHOUSE_INITIAL_ORG_NAME='My School' LEARNHOUSE_INITIAL_ORG_SLUG=default #### AI 相关的,可以改,可以不改 LEARNHOUSE_DEVELOPMENT_MODE=False LEARNHOUSE_LOGFIRE_ENABLED=False LEARNHOUSE_IS_AI_ENABLED=False LEARNHOUSE_CONTENT_DELIVERY_TYPE=filesystem
写在最后
这个项目本身还是偏学业为主的,家长/老师,给孩子搭一个私有学习空间,视频、测验、编程启蒙全包,但是它不仅仅可以作为孩子的学习工具使用。
如果你是知识博主想卖课,不想被平台抽成 30%,可以部署它,因为它有支付系统。如果你是企业内训,内部培训资料统一管理,还可以权限分级,学习进度可追踪;开发者社区,做技术文档+互动课程,代码游乐场直接跑示例。
这不是今天 61 儿童节么~ 而知识则是最好的礼物,在 NAS 上给他搭一个 LearnHouse 学习平台。
然后和他说:孩子呀,老妈给你弄了一个生日礼物,你快来试试!

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

卷卷毛de夏天
校验提示文案
卷卷毛de夏天
校验提示文案