本文属于「自托管 Docker 部署实战」系列(共 35 篇),第 21 篇。 示例中的 IP(192.0.2.10)、域名(example.com)、密码均为占位符,请按实际环境替换。

它是什么

开源的「写代码打游戏」平台,Python/JS 等语言教学场景常用。容器里用 supervisord 同时拉起 Node 应用和 MongoDB。

前置条件

  • 一台 Linux 服务器(1C1G 起步;Java 类应用建议 2C4G 以上);
  • 已安装 Docker 与 Compose v2,执行 docker compose version 有版本号输出;
  • 所有示例里的 IP / 域名 / 密码都是占位符,实际部署请替换成自己的。
# 安装 Docker(已安装可跳过)
curl -fsSL https://get.docker.com | sh

# 目录约定:一个服务一个目录,后文的 ./data 均指栈目录内
mkdir -p /srv/docker/active/<stack> && cd /srv/docker/active/<stack>

镜像地址

operepo/ope-codecombat:latest

部署步骤

docker run -d \
  --name codecombat \
  --restart always \
  -p 8541:3000 \
  operepo/ope-codecombat:latest

浏览器打开 http://<SERVER_IP>:8541。

关键配置

  • 容器内端口 3000,宿主机映射到 8541(示例);
  • COCO_MONGO_HOST=localhost:MongoDB 和主应用在同一个容器里;
  • NODE_ENV=development:社区镜像默认是开发模式,不适合生产,仅适合演示/内部体验;
  • 镜像 3G+,首次拉取慢。

注意事项

  • 该镜像不是官方维护的生产发行版,数据在容器内,docker rm 即数据全丢,需要持久化请自己挂卷或改数据目录;
  • 占用内存较高(Node + Mongo),2G 内存机器会 OOM;
  • 只是拿来玩/教学可以,公网暴露前想清楚。

升级与回滚

# 升级 = 拉新镜像 + 重建容器(容器内数据会一起没掉)
docker pull operepo/ope-codecombat:latest
docker stop codecombat && docker rm codecombat
docker run -d --name codecombat --restart always -p 8541:3000 operepo/ope-codecombat:latest

# 需要留档时,整容器导出
docker export codecombat -o "codecombat-$(date +%F).tar"
  • 该镜像没有声明数据卷,重要进度请自行在应用内导出;
  • 升级前先 docker inspect 记录原来的端口与启动参数,回滚时照抄。