docker-composeでコンテナ作成(GROWI)

GROWIがナレッジ共有によさそうと聞いたので便利な使い方を調査するとともに環境を作ってみることにした。
ここでは、docker-composeで起動するまでを記載。

### Growiの概要

OSSのWikiソフトウェアで、Markdownをベースとしたドキュメント管理およびコラボレーションツール。簡単にインストール・使用ができてチーム内での情報共有やナレッジベースの構築に便利。

### GROWI便利なところ

1. **Markdown対応**:
   - Markdown形式をサポートしている。Markdownはシンプルで学習コストが低いため、誰でもすぐに使いこなすことができる。
2. **リアルタイム編集**
   - Growiはリアルタイムで複数のユーザーが同時に同じドキュメントを編集できる。
3. **検索機能**
   - 強力な検索機能を搭載。タグ付けやページリンクを利用し、情報の整理が簡単にできる。
4. **アクセス管理**
   - ユーザーごとに、アクセス権限を設定できる。閲覧権限、編集権限、管理権限などを詳細設定ができる。
5. **プラグイン対応**
   - プラグインをサポートしており、機能を拡張できる。GitHubやSlackなど、他のツールとの連携ができる。
6.  **エクスポート/インポート機能** 
    - ドキュメントのエクスポートやインポートが簡単で、他のシステムとの連携やバックアップが容易。

### 参考URL

- [Growi公式サイト](https://growi.org/)
- [GitHub - Growi](https://github.com/weseek/growi)
### 構築環境

仮想化：VMware Workstation-playre17
ホスト：Windows11pro
ゲスト：ubuntu22.04.3TLS
↓環境構築時メモ
[VMでWindowsホストにUbuntuをゲスト起動する](https://qiita.com/38pinn/items/a136ed43457562c8471d)
[dockerコンテナ環境作成](https://qiita.com/38pinn/items/92a65ea162098f7a9859)



### 1. GROWI起動用のDocker-Compose.ymlを作成

GROWI起動用の`docker-compose.yml`ファイルを作成。

```
mkdir docker-growi
cd docker-growi
nano docker-compose.yml
```

以下を`docker-compose.yml`ファイルに転記。

```
version: '3'

services:
  mongo:
    image: mongo:4.4
    container_name: growi_mongo
    volumes:
      - mongo_data:/data/db
    networks:
      - growi-network

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.9.3
    container_name: growi_elasticsearch
    environment:
      - "discovery.type=single-node"
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    networks:
      - growi-network

  growi:
    image: weseek/growi:latest
    container_name: growi
    environment:
      - "MONGO_URI=mongodb://mongo:27017/growi"
      - "ELASTICSEARCH_URI=http://elasticsearch:9200/growi"
      - "PUID=1000" # optional
      - "PGID=1000" # optional
    volumes:
      - growi_data:/data
    ports:
      - XXXX:3000
    depends_on:
      - mongo
      - elasticsearch
    networks:
      - growi-network

volumes:
  mongo_data:
  growi_data:

networks:
  growi-network:
    driver: bridge
```

`XXXX` は任意のブラウザでアクセスする際のport番号を指定。

### 2. GROWIの起動

以下のコマンドでGROWIを起動。

```
sudo docker-compose up -d
```
起動確認
```
katano@katano-virtual-machine:~/docker-growi$ docker ps -a
CONTAINER ID   IMAGE                                                 COMMAND                   CREATED        STATUS        PORTS                                                                                      NAMES
ffafb2bc24fc   weseek/growi:latest                                   "/docker-entrypoint.…"   17 hours ago   Up 17 hours   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp                                                  growi
e4961c4e0136   mongo:4.4                                             "docker-entrypoint.s…"   17 hours ago   Up 17 hours   27017/tcp                                                                                  mongo
0fe768c95b58   docker.elastic.co/elasticsearch/elasticsearch:7.9.3   "/tini -- /usr/local…"   17 hours ago   Up 17 hours   9200/tcp, 9300/tcp                                                                         elasticsearch
```
以下のDockerコンテナが起動していることが確認できる。

growi: Growi本体
mongo: データベース
elasticsearch: 検索エンジン
### 3. ブラウザでアクセス確認

ブラウザを開き、`http://<サーバーのIPアドレス>:XXXX` にアクセスし管理権限ユーザを作成。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/340841/a653a254-6c16-1fd5-b2ab-c05bd7d49e2c.png)

メモ（ID:38pinn）

### 4. ユーザ追加など管理設定をする
ブラウザを開き、`http://<サーバーのIPアドレス>:XXXX/admin` にアクセス
サイトのURL`http://<サーバーのIPアドレス>:XXXX/`を設定し更新をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/340841/58cea329-e063-3f32-5eea-482699e0b53d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/340841/992c446f-5a4a-fe7f-2f8f-0fdbae9e4302.png)


サイトのURL`http://<サーバーのIPアドレス>:XXXX/`に移動し、
新規ページ作成でタイトルを入力し、Editで編集する。（プレビュー表示できる）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/340841/515e256e-0e6c-fca6-7140-735d6b2f84dc.png)