我用QNAP的ContainerStation,在Docker-Compose中构建和更新了Growi的故事
在公司内部的WiKi上建立了Growi。
我们决定启动内部WiKi,并在进行了各种研究后决定使用正在积极进行版本更新的Growi。
首先,我们在公司内部的虚拟服务器上搭建了一个CentOS系统。
这时候,毫不犹豫地按照步骤使用Docker-Compose,并且毫无问题地开始了试用。
鉴于使用起来方便,我们决定将其投入正式运营。
为了更安全和容量更大的服务器操作,我们选择将其部署在刚好公司购买的QNAP NAS上。
ContainerStation的陷阱(Growi v4.5)
首先,我不理解Docker本身就很不好,但在ContainerStation的创建功能中,搜索并安装了weseek/growi。
不久后,当我开始使用它时,我意识到无法进行搜索。
啊,原来还需要安装Elasticsearch。于是,我尝试安装了同样搜索到的内容,但由于不了解它们的协作方式,进展受阻。
果然,我还是需要使用Docker-Compose进行安装…
因此,我决定进行应用程序的创建(Docker-Compose)。
特别是Growi在Docker-Compose中没有完全处理,并且需要查看子文件夹中的Docker文件,所以有些麻烦,但是我随意尝试后,成功了。
在QNAP上使用资源管理器访问,并在Container文件夹下创建一个Growi文件夹。
我已将Zip文件中的所有内容全部放入。
将docker-compose.yml文件中的内容写入应用程序中,验证并创建YAML。
经历了曲折之后,采取了以下方法才成功。
将文件的实际路径写成完整路径就成功了。
可能在Dockerfile中使用相对路径也是可以的。
我认为完整路径可以通过错误的文件指定来推测。
另外,应用程序的名称非常重要,记得牢记。
version: '3'
services:
app:
build:
context: /share/CACHEDEV1_DATA/Container/growi
dockerfile: /share/CACHEDEV1_DATA/Container/growi/Dockerfile
ports:
- 3000:3000 # localhost only by default
links:
- mongo:mongo
- elasticsearch:elasticsearch
depends_on:
- mongo
- elasticsearch
environment:
- MONGO_URI=mongodb://mongo:27017/growi
- ELASTICSEARCH_URI=http://elasticsearch:9200/growi
- PASSWORD_SEED=changeme
# - FILE_UPLOAD=mongodb # activate this line if you use MongoDB GridFS rather than AWS
# - FILE_UPLOAD=local # activate this line if you use local storage of server rather than AWS
# - MATHJAX=1 # activate this line if you want to use MathJax
# - PLANTUML_URI=http:// # activate this line and specify if you use your own PlantUML server rather than public plantuml.com
# - HACKMD_URI=http:// # activate this line and specify HackMD server URI which can be accessed from GROWI client browsers
# - HACKMD_URI_FOR_SERVER=http://hackmd:3000 # activate this line and specify HackMD server URI which can be accessed from this server container
# - FORCE_WIKI_MODE='public' # activate this line to force wiki public mode
# - FORCE_WIKI_MODE='private' # activate this line to force wiki private mode
entrypoint: "dockerize
-wait tcp://mongo:27017
-wait tcp://elasticsearch:9200
-timeout 60s
/docker-entrypoint.sh"
command: ["yarn migrate && node -r dotenv-flow/config --expose_gc dist/server/app.js"]
restart: unless-stopped
volumes:
- growi_data:/data
mongo:
image: mongo:4.4
restart: unless-stopped
volumes:
- mongo_configdb:/data/configdb
- mongo_db:/data/db
elasticsearch:
build:
context: /share/CACHEDEV1_DATA/Container/growi/elasticsearch
dockerfile: /share/CACHEDEV1_DATA/Container/growi/elasticsearch/Dockerfile
environment:
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms256m -Xmx256m" # increase amount if you have enough memory
- LOG4J_FORMAT_MSG_NO_LOOKUPS=true # CVE-2021-44228 mitigation for Elasticsearch <= 6.8.20/7.16.0
ulimits:
memlock:
soft: -1
hard: -1
restart: unless-stopped
volumes:
- es_data:/usr/share/elasticsearch/data
- /share/CACHEDEV1_DATA/Container/growi/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
volumes:
growi_data:
mongo_configdb:
mongo_db:
es_data:
检查放在外面的集装箱群,然后开始。
无事起身,欢欢喜喜。
版本升级的试炼(Growi v4.5 -> v5)
在短时间内忙忙碌碌,尚未达到正式运行的阶段,而进行着使用所需的准备工作。
确认后,已进行了主要版本升级!
由于尚未开始正式运营,所以现在是练习的好时机。
因此,我要试一试。
在官方指南中,是这样解释的。
特别是对于Docker-Compose的情况,可以按照以下步骤进行操作。
如果是命令,那应该直接执行,但是ContainerStation是通过图形界面操作的,该如何进行操作呢?
当你搜索这个关键词时,会得到以下结果。
不管什么,只要停止并删除容器就可以了。
所以,停止容器 -> 删除容器
可能还是删除镜像比较好吧?所以,也删除镜像。
但是,不要动 MongoDB,只删除应用名_app和应用名_elasticsearch容器。
如果不删除容器,这些就无法删除。
最初一样,
我把Zip文件中的所有内容都放在与上次文件夹相同名字的位置上。
为了安全起见,我还重新命名了之前的那部分。
当我检查docker-compose.yml时,发现它完全没有变化,
所以我使用了完全相同的内容,就像上一次一样。
同时,我也将应用程序名称设置为了与上次相同的内容。
我想这样做可能会导致保存在卷中的数据被继承,是吗?
按下创建按钮后,启动容器,并等待一段时间,可以看到数据完整地传输到了启动的Growi上。
由于从v4.5升级到v5,因此需要进行数据转换。
转换已成功完成,并完成了更新。
我想再进行几次版本更新来确保可靠性。
最后
对于 Docker 我不太懂,但总算应付过去了。