我用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 我不太懂,但总算应付过去了。

广告
将在 10 秒后关闭
bannerAds