04-任务管理系统搭建

nobility 发布于 2020-08-28 1181 次阅读


任务管理系统搭建

下载 Habitica 并上传到服务器

habitica 官方 Github 下载源代码的zip包,或者直接通过 git clone 进行下载。目前最新版本是 5.24.1,我使用的是最新版本。

# 下载历史版本解压
tar -zxvf habitica-5.0.0.tar.gz
# 下载源代码解压
unzip habitica-develop.zip

修改配置文件

进入项目根目录,拷贝配置示例配置文件。如果端口冲突,请修改

# 进入 habitica 项目根目录
cd habitica-develop
# 拷贝 habitica 项目的配置文件
cp config.json.example config.json

构建镜像

由于国内网络原因,使用官方的提供的docker-compose一致构建失败,所以建议手动构建。具体如何执行,其实内容都来自官方的 Dockerflie

# 查看 habitica 所依赖的基础镜像
cat Dockerfile-Dev
# 交互式启动基础镜像容器,我这里使用的是 node:20
docker run --name tempContatner -it node:20 /bin/bash

新开一个终端,将 habitica 源代码拷贝进容器。

# 进入 habitica 项目根目录
cd habitica-develop
# 将 habitica 源代码拷贝进容器
docker cp ./  tempContatner:/usr/src/habitica

切换回临时容器终端。

# 进入 habitica 项目根目录
cd /usr/src/habitica
# 切换 npm 源为国内
npm config set registry https://registry.npmmirror.com/
# 安装全局依赖。
npm install -g gulp-cli mocha
# 安装项目依赖
npm install
# 运行项目编译脚本
npm run postinstall

安装成功后,切换到新终端,提交镜像。

# 将容器提交为镜像
docker commit tempContatner habitica

当容器成功提交后就可以切换到容器终端,进行清理工作。

# 退出当前容器
exit
# 删除临时容器
docker container rm tempContatner

如果期间安装在下载依赖时卡住可以将 node_modules 文件夹删除重新安装。

# 删除 node_modules 文件夹
rm -rf node_modules/
# 清空 npm 缓存
npm cache clean --force

启动 Docker 容器

# 创建 docker 网络
docker network create habitica --driver bridge
# 启动 mogo 容器
docker run --name mongo -d \
  --network habitica \
  -v mongo:/data/db \
  -v /etc/mongod.conf:/data/configdb \
  mongo:3.6
# 启动 Server 容器
docker run --name server -d \
  --network habitica \
  -e NODE_DB_URI=mongodb://mongo/habitrpg \
  -v $(pwd):/usr/src/habitica \
  -v habitica_node_modules:/usr/src/habitica/node_modules \
  -w /usr/src/habitica \
  habitica node ./website/server/index.js
# 启动 Client
docker run --name client -d \
  --network habitica \
  -p 80:8080 \
  -e BASE_URL=http://server:3000 \
  -v $(pwd):/usr/src/habitica \
  -v habitica_node_modules:/usr/src/habitica/node_modules \
  -v habitica_client_node_modules:/usr/src/habitica/website/client/node_modules \
  -w /usr/src/habitica \
  habitica npm run client:dev

卸载 Docker 容器

期间,如果想停止服务,重新部署时,需要执行下面命令。

# 停止容器
docker stop client server mongo
# 删除容器
docker rm client server mongo
# 删除网络
docker network rm habitica
# 重启 Docker 服务
systemctl restart docker

调试容器

期间,如果某个服务出现无法启动,并且无法通过日志进行排查,如docker log client命令。需要执行下面命令,进入容器排查

# 删除启动失败的容器
docker rm client 
# 将启动容器时执行的命令更换为 tail -f /dev/null
docker run --name client -d \
  --network habitica \
  -p 80:8080 \
  -e BASE_URL=http://server:3000 \
  -v $(pwd):/usr/src/habitica \
  -v /usr/src/habitica/node_modules \
  -v /usr/src/habitica/website/client/node_modules \
  -w /usr/src/habitica \
  habitica tail -f /dev/null
# 进入 docker 容器
docker exec -it client /bin/bash
# 执行原先的命令
npm run client:dev

总结为 Docker Compose

根据前面所作的步骤和手动创建的镜像,总结为正确的 docker-compose.yml 文件。

# 指定docker-compose.yml的版本
version: "3.1"
services:
  client:
    image: habitica
    restart: always
    # 由于镜像是手动提交的,所以这里要指定工作目录
    working_dir: /usr/src/habitica
    command: ["npm", "run", "client:dev"]
    # 启动顺序在 server 之后
    depends_on:
      - server
    environment:
      # server 地址
      - BASE_URL=http://server:3000
    networks:
      - habitica
    ports:
      - "80:8080"
    volumes:
      - .:/usr/src/habitica
      - habitica_node_modules:/usr/src/habitica/node_modules
      - habitica_client_node_modules:/usr/src/habitica/website/client/node_modules
  server:
    image: habitica
    # 由于镜像是手动提交的,所以这里要指定工作目录
    working_dir: /usr/src/habitica
    command: ["node", "./website/server/index.js"]
    # 启动顺序在 mongo 之后
    depends_on:
      - mongo
    environment:
      # mongo 地址
      - NODE_DB_URI=mongodb://mongo/habitrpg
    networks:
      - habitica
    volumes:
      - .:/usr/src/habitica
      - habitica_node_modules:/usr/src/habitica/node_modules
  mongo:
    image: mongo:4.2.8
    networks:
      - habitica
    volumes:
      - mongo:/data/db
      - /etc/mongod.conf:/data/configdb
volumes: 
  habitica_node_modules:
  habitica_client_node_modules:
  mongo:
networks:
  habitica:
    driver: bridge
此作者没有提供个人介绍
最后更新于 2020-08-28