任务管理系统搭建
下载 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
Comments NOTHING