現在、各種手順書等のとりまとめ先として色々検討しているのですが、Wikiシステムでは「Growi」の評判が良かったので、CentOS8の完全互換である「AlmaLinux 8.4」と「Docker」環境で導入をしてみました。
例によって、VMware ESXi 仮想環境で導入しています。
Firewallサービスの設定を変更しました。
今回の導入目的・導入内容
今回は上述の通り、「Growi」の評価が主となります。また、AlmaLinuxがどの程度、CentOS8の知識で活用できるかを確認する目的もあります。 ほぼ完全に同じ形で構築出来ました。
GrowiはDocker環境下での構築となります。
- グループインストール (標準)で入るパッケージ
- グループインストール (デベロッパー)で入るパッケージ
- グループインストール (ネットワーク)で入るパッケージ
- その他必要パッケージ (mailx、vmware tool、postfix)
- Docker
- Python 3.9
- docker-compose
AlmaLinux初期導入
AlmaLinuxのイメージ取得
公式サイトのISOリストサイトにて取得をします。
今回は「日本リージョン」の任意のサーバーより、「AlmaLinux-8.4-x86_64-minimal.iso」を利用して構築しています。
OSのインストール
WEBコンソールを開き、「Install AlmaLinux 8.4」を選択します。

「日本語」を選択して「続行」をクリックします。

「インストール概要画面」に遷移しますので、「必要箇所を設定」します。
本画面は見切れていますので、ユーザーの設定等はマウススクロール等で表示させる必要があります。

「インストール先」をクリックし、詳細設定画面に遷移します。
次に「インストール先のディスク(パーティション)を確保」し、「完了」ボタンをクリックします。

「ネットワークとホスト名」をクリックし、詳細設定画面に遷移します。
左下の「ホスト名(H)」にホスト名を入力し、「適用」をクリックします。
右下の「現在のホスト名」が入力されたホスト名に更新される事を確認します。

IPv4の固定アドレス設定を行います。(必要な場合のみ)
- 「設定」をクリックし、画面を遷移、「IPv4設定」をクリックします。
- メソッド:「手動」を選択します
- アドレス:「追加」をクリック後、IPアドレス、ネットマスク、ゲートウェイを入力します。
- DNSサーバー:複数ある場合はカンマ区切りで入力します。
必要な情報を入力後、「保存」をクリックし、前の画面に戻ります。

画面左上のスライダースイッチをクリックし、「有効(青色)」にします。
「接続済みです」と表示され設定したIPアドレス等が表示されることを確認し、「完了」をクリックします。
「日付と時刻」をクリックし、詳細設定画面に遷移します。
次に「表示された地図」から「日本 (東京)」をクリックし、「完了」をクリックします。

「root パスワード」をクリック後、詳細設定画面に遷移します。
次に「rootパスワード」、「確認」を入力し、「完了」をクリックします。
本項目は見切れている場合が大半だと思いますので、その場合はマウスでホイールスクロールをすることにより表示されます。

「ユーザーの作成」をクリックし、詳細設定画面に遷移します。
次に「フルネーム」、「ユーザー名」、「パスワード」、「パスワードの確認」を入力し、「完了」をクリックします。
本項目は見切れている場合が大半だと思いますので、その場合はマウスでホイールスクロールをすることにより表示されます。

初期設定が正常に完了すると「インストールの開始」ボタンが「青色」になります。
次に「インストールの開始」をクリックします。

「インストールが開始」されます。
「インストール完了」が表示されましたら、「システムの再起動」をクリックします。
再起動後、「作成したユーザー」及び「rootユーザー」でログインできることを確認します。
AlmaLinux環境構築
インストールが完了したら順に設定をしていきます。原則、ユーザーログイン後、管理者昇格状態で構築をしています。
login as: 作成したユーザー
exsample-user password: パスワードを入力
Last login: *** *** ** **:**:** **** from ***.***.***.***
[作成したユーザー@localhost ~]$ su -
パスワード: パスワードを入力
最終ログイン: ****/**/** (*) **:**:** JST日時 pts/0
[root@localhost ~]#
SELINUXの無効化
現在の状況を「getenforce」で確認します。「disabled」以外は本作業を実施します。
[root@localhost ~]# getenforce
Enforcing
「設定ファイル」を「バックアップ」します。
cp -p /etc/selinux/config /etc/selinux/config.old
「設定ファイル」を編集します。
次に「SELINUX=enforcing」を「SELINUX=disabled」に変更し、上書き保存終了します。
vi /etc/selinux/config
# permissive - SELinux prints warnings instead of enforcing.$
# disabled - No SELinux policy is loaded.$
SELINUX=disabled ←「enforcing」から「disabled」に変更します。
「差分チェック」を実施し、変更内容に不備がないか確認します。
diff /etc/selinux/config /etc/selinux/config.old
7c7
< SELINUX=disabled
---
> SELINUX=enforcing
「システムの再起動」を実施します。
shutdown -r now
再度「getenforce」を実行し、「Disabled」に変更されている事を確認します。
[root@localhost ~]# getenforce
Disabled
基本パッケージをまとめて導入
「groupinstall」を利用し、基本的なパッケージをまず導入してしまいます。
dnf -y groupinstall base
dnf -y groupinstall development
dnf -y groupinstall network-tools
導入されたパッケージを確認します。
LANG=C dnf group list
パッケージの更新確認
以下のコマンドを実行し、最新パッケージに更新します。
dnf -y update
Firewalld の設定
「設定ファイル」を「バックアップ」します。
cp -p /etc/firewalld/firewalld.conf /etc/firewalld/firewalld.conf.old
「設定ファイル」を編集します。
次に「AllowZoneDrifting=yes」を「AllowZoneDrifting=no」に書き換え後、上書き保存します。
vi /etc/firewalld/firewalld.conf
~ 最終行付近 ~
# based zones (including the default zone). Packets never drift from interface
# based zones to other interfaces based zones (including the default zone).
# Possible values; "yes", "no". Defaults to "yes".
AllowZoneDrifting=no ←「yes」から「no」に変更します。
「差分チェック」を実施し、変更内容に不備がないか確認します。
diff /etc/firewalld/firewalld.conf /etc/firewalld/firewalld.conf.old
75c75
< AllowZoneDrifting=no
---
> AlloZoneDrifting=yes
Firewallサービスの稼働状況を確認します。
systemctl status firewalld.service
Firewallサービスが停止している場合、サービスを開始させ、かつ自動開始を設定します。
systemctl enable firewalld.service
systemctl start firewalld.service
Firewallサービスの状況を確認します。
firewall-cmd --zone=public --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ******
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
forward: no
masquerade: yes
forward-ports:
source-ports:
icmp-blocks:
rich rules:
- Firewallサービスにて各種サービスの追加及びGrowiにて利用するポートを許可します。
firewall-cmd --add-port=3000/tcp --zone=public --permanent
firewall-cmd --add-port=80/tcp --zone=public --permanent
firewall-cmd --add-port=443/tcp --zone=public --permanent
firewall-cmd --add-service=http --zone=public --permanent
firewall-cmd --add-service=https --zone=public --permanent
firewall-cmd --reload
Firewallサービスにて、SSH接続の接続制限を設定します。
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="xxx.xxx.xxx.xxx/24" service name="ssh" accept' --permanent
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="xxx.xxx.xxx.xxx/24" port protocol=tcp port=22 accept' --permanent
firewall-cmd --reload
Firewallサービスの設定状況を確認します。
firewall-cmd --zone=public --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ******
sources:
services: cockpit dhcpv6-client http https
ports: 3000/tcp 80/tcp 443/tcp
protocols:
forward: no
masquerade: yes
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="xxx.xxx.xxx.xxx/24" service name="ssh" accept
rule family="ipv4" source address="xxx.xxx.xxx.xxx/24" port port="22" protocol="tcp" accept
Docker環境でのNAPTの許可
firewall-cmd --add-masquerade --permanent
firewall-cmd --reload
システムを再起動します。
shutdown -r now
不要サービスの停止
その他、今回利用しないサービスを停止します。
systemctl disable auditd.service
systemctl disable kdump
systemctl disable atd
systemctl disable mdmonitor
サードパーティリポジトリの導入
サードパーティリポジトリとして、「EPEL」と「REMI」を導入します。
dnf -y install epel-release
「設定ファイル」の「バックアップ」を実施します。
cp -p /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.old
「設定ファイル」の「編集」をします。
次に「epel項目」内の「enable=1」を「enable=0」に変更し、上書き保存終了します。
vi /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux $releasever - $basearch
#baseurl=https://download.fedoraproject.org/pub/epel/$releasever/Everything/$basearch
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-$releasever&arch=$basearch&infra=$infra&content=$contentdir
enabled=0 ←「1」から「0」に変更します。
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
「差分チェック」を実施し、変更内容に不備がないか確認します。
diff /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.old
5c5
< enable=0
---
> enable=1
続いて、「remiパッケージ」を導入します。
rpm -ivh http://rpms.remirepo.net/enterprise/remi-release-8.rpm
rpm --import http://rpms.remirepo.net/RPM-GPG-KEY-remi
「remiパッケージ」を有効化します。
dnf config-manager --set-enabled remi
その他パッケージの導入
以下のコマンドを実行し、今回必要なパッケージを導入します。
dnf -y install perl postfix mailx open-vm-tools
dnf --enablerepo=epel -y install dkms
「検索用データベース」の「アップデート」を実施します。
updatedb
全体の更新確認を実施します。
dnf -y update
タイムサーバーの設定
「設定ファイル」の「バックアップ」をとります。
cp -p /etc/chrony.conf /etc/chrony.conf.old
「設定ファイル」を編集します。
次に「参照サーバー」を書き換え後、上書き保存します。
vi /etc/chrony.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
# pool 2.centos.pool.ntp.org iburst ← コメントアウトします。
server ntp1.jst.mfeed.ad.jp iburst ← 追加します。
server ntp2.jst.mfeed.ad.jp iburst ← 追加します。
server ntp3.jst.mfeed.ad.jp iburst ← 追加します。
「差分チェック」を実施し、変更内容に不備がないか確認します。
diff /etc/chrony.conf /etc/chrony.conf.old
3,6c3
< # pool 2.centos.pool.ntp.org iburst
< server ntp1.jst.mfeed.ad.jp iburst
< server ntp2.jst.mfeed.ad.jp iburst
< server ntp3.jst.mfeed.ad.jp iburst
---
> pool 2.centos.pool.ntp.org iburst
サービスを再起動します。
systemctl restart chronyd
「時刻同期」を開始します。
(*)がつかない場合は複数回実施してください。
chronyc sources
210 Number of sources = 3
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^+ ntp1.jst.mfeed.ad.jp 2 6 17 37 -393us[ -371us] +/- 72ms
^* ntp2.jst.mfeed.ad.jp 2 6 17 38 -161us[ -139us] +/- 66ms
^+ ntp3.jst.mfeed.ad.jp 2 6 17 38 +759us[ +781us] +/- 95ms
rootユーザーの直接ログイン禁止設定
「設定ファイル」の「バックアップ」を実施します。
cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.old
「設定ファイル」を編集します。
「rootの直接ログインを禁止」に書き換え後、上書き保存をします。
vi /etc/ssh/sshd_config
#LoginGraceTime 2m
PermitRootLogin no ←「yes」を「no」に変更します。
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
「差分チェック」を実施し、変更内容に不備がないか確認します。
diff /etc/ssh/sshd_config /etc/ssh/sshd_config.old
43c43
< PermitRootLogin no
---
> PermitRootLogin yes
「サービスの再起動」を実施します。
systemctl restart sshd
su出来るユーザーの制限設定
「作成したユーザー」を「wheel」グループに追加します。
usermod -g wheel hogeuser
「作成したユーザー」が「wheel」グループに参加しているか確認します。
id hogeuser
uid=1000(hogeuser) gid=10(wheel) groups=10(wheel)
「設定ファイル」を「バックアップ」します。
cp -p /etc/pam.d/su /etc/pam.d/su.old
「設定ファイル」を編集します。
下記内容の「コメントアウトを削除」し、上書き保存をします。
vi /etc/pam.d/su
#%PAM-1.0
auth required pam_env.so
auth sufficient pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth sufficient pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
auth required pam_wheel.so use_uid ← コメントアウトを外す
auth substack system-auth
「差分チェック」を実施し、変更内容に不備がないか確認します。
diff /etc/pam.d/su /etc/pam.d/su.old
7c7
< auth required pam_wheel.so use_uid
---
> #auth required pam_wheel.so use_uid
vim 拡張機能の追加
「ユーザー毎の固有環境」を編集します。
次に下記内容を「最終行」に追記して、上書き保存します。
vi ~/.bashrc
alias vi='vim'
設定を反映させます。
source ~/.bashrc
「全体設定ファイル」を「バックアップ」します。
cp -p /etc/vimrc /etc/vimrc.old
「全体設定ファイル」を編集します。
次に以下の内容を「追記・変更」します。その後上書き保存します。
vi /etc/vimrc
01.先頭に追記
set encoding=utf-8 "文字コードを指定
02.変更
" set fileencodings=ucs-bom,utf-8,latin1 コメントアウト
set fileencodings=utf-8,iso-2022-jp,sjis,euc-jp "ファイルエンコードを指定
03.有効になっているか確認 (コメントアウトされていた場合は有効化)
set nocompatible "独自拡張機能を使用
set history=50 " 検索履歴を残す世代数
set hlsearch " 検索語にマッチした単語をハイライト
set autoindent " 自動インデントを有効にする
syntax on " 構文ごとに色分け表示
04.追記 はじめの方、set~が並んでいる行の後に追記
set fileformats=unix,dos " 自動認識させる改行コードを指定
set ignorecase " 検索時に大文字小文字を区別しない
set incsearch " インクリメンタルサーチを使用
set number " 行番号を表示
set list " 改行 ( $ ) やタブ ( ^I ) を可視化
set showmatch " 括弧入力時に対応する括弧を強調
set binary noeol " ファイルの末尾に改行を入れない
set wrap " ウィンドウ幅で行を折り返す
set tabstop=4 "タブをスペース4つ分にする 初期値:8
set smartcase "大文字で検索した際、大文字小文字を区別する。(大文字のみサーチする。)
05.syntax on の後に追記
highlight Comment ctermfg=LightCyan "syntax onの場合のコメント文の色を変更
「差分チェック」を実施し、変更内容に不備がないか確認します。
diff /etc/vimrc /etc/vimrc.old
1d0
< set encoding=utf-8 "文字コードを指定
3,4c2
< " set fileencodings=ucs-bom,utf-8,latin1
< set fileencodings=utf-8,iso-2022-jp,sjis,euc-jp "ファイルエンコードを指定
---
> set fileencodings=ucs-bom,utf-8,latin1
9c7
< set ai " always set autoindenting on
---
> "set ai " always set autoindenting on
15,25d12
< set fileformats=unix,dos " 自動認識させる改行コードを指定
< set ignorecase " 検索時に大文字小文字を区別しない
< set incsearch " インクリメンタルサーチを使用
< set number " 行番号を表示
< set list " 改行 ( $ ) やタブ ( ^I ) を可視化
< set showmatch " 括弧入力時に対応する括弧を強調
< set binary noeol " ファイルの末尾に改行を入れない
< set wrap " ウィンドウ幅で行を折り返す
< set tabstop=4 "タブをスペース4つ分にする 初期値:8
< set smartcase "大文字で検索した際、大文字小文字を区別する。(大文字のみサーチする。)
<
66,67d52
< highlight Comment ctermfg=LightCyan "syntax onの場合のコメント文の色を変更
「ユーザー毎の設定ファイル」を「新規作成」します。
次に以下の内容を記述後、保存終了します。
vi ~/.vimrc
highlight Comment ctermfg=LightCyan
メール送信設定
サービスの起動及び自動起動を設定します。
systemctl enable --now postfix
「which sendmail」を実施し、「usr/bin/sendmail」が返ってくることを確認します。
[root@localhost ~]# which sendmail
/usr/sbin/sendmail
「root 宛メール」の「転送設定」をします。
sed -i '/^root:/d' /etc/aliases
sh -c "echo 'root: exsample@exsample.com' >> /etc/aliases"
newaliases
「テストメールを送信」し、正常に受信が出来ることを確認します。
echo test | mail root
Growi導入の準備
Growi導入に必要なアプリケーションを導入します。
Python3.xの導入
Python3.x は AppStream から導入可能なため、今回はそちらから導入します。
まずは導入可能なPythonを確認します。
dnf module list python*
2021年10月21日現在、以下のようなリストが表示されます。
AlmaLinux 8 - AppStream
Name Stream Profiles Summary
python27 2.7 [d] common [d] Python programming language, version 2.7
python36 3.6 [d] build, common [d] Python programming language, version 3.6
python38 3.8 [d] build, common [d] Python programming language, version 3.8
python39 3.9 [d] build, common [d] Python programming language, version 3.9
今回はせっかくですので、Python3.9を導入します。
dnf module -y install python39
導入したPythonのバージョンを確認します。
python3 -V
git の導入
上述のgroupinstallにてgitは既に導入されていると思いますので、導入可否及びバージョンを確認します。
git --version
万が一導入されていない場合は、以下のコマンドを実施します。
dnf -y install git
Dockerの導入
Dockerを導入します。以下のコマンドを実施します。
curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/docker-ce.repo
dnf --enablerepo=docker-ce-stable -y install docker-ce
systemctl enable --now docker
rpm -q docker-ce
最後に導入したDockerのバージョンを確認します。
docker version
Docker Compose の導入
以下のコマンドにてDocker Composeを導入します。
curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
chmod 755 /usr/local/bin/docker-compose
導入バージョンを確認します。
docker-compose --version
Growiの導入
Docker環境上にて、Growiを導入します。
また一緒にSSL(自己証明書)化も行います。
初期導入 (クローン) の実施
まずGrowiの設計ファイルを任意の場所にダウンロードします。
今回は「/opt」配下にダウンロードしました。
cd /opt/
git clone https://github.com/weseek/growi-docker-compose.git growi
cd /opt/growi/
フォルダーを確認して、各種ファイルがダウンロードされていることを確認します。
ls -l /opt/growi/
合計 32
-rw-r--r-- 1 root root 412 10月 22 09:14 Dockerfile
-rw-r--r-- 1 root root 980 10月 22 09:14 Dockerfile.v42x
-rw-r--r-- 1 root root 1069 10月 22 09:14 LICENSE
-rw-r--r-- 1 root root 3612 10月 22 09:14 README.md
-rw-r--r-- 1 root root 1266 10月 22 09:14 docker-compose.dev.yml
-rw-r--r-- 1 root root 2217 10月 22 09:14 docker-compose.v42x.yml
-rw-r--r-- 1 root root 2305 10月 22 09:14 docker-compose.v43x-v446.yml
-rw-r--r-- 1 root root 2325 10月 22 09:14 docker-compose.yml
drwxr-xr-x 3 root root 38 10月 22 09:14 elasticsearch
drwxr-xr-x 7 root root 123 10月 22 09:14 examples
drwxr-xr-x 2 root root 71 10月 22 09:14 hackmd
docker-compose.yml ファイルの編集
このままでは、導入サーバー内でしか扱うことが出来ないため、設定ファイルを編集します。
まず、設定ファイルをバックアップします。
cp -p /opt/growi/docker-compose.yml /opt/growi/docker-compose.yml.old
続いて、設定ファイルを編集します。
vi docker-compose.yml
まず、サーバー外からのアクセスを許可します。
# - 127.0.0.1:3000:3000 # localhost only by default$
- 3000:3000$
次にファイルのアップロード先をローカル(AlmaLinuxサーバー内)に変更します。
- FILE_UPLOAD=local # activate this line if you use local storage of server rather than AWS$
# コメントアウトを外す
メモリを増やします。今回サーバーで8GB取っているので、半分の4GBを確保します。
# - "ES_JAVA_OPTS=-Xms256m -Xmx256m" # increase amount if you have enough memory$
- "ES_JAVA_OPTS=-Xms4g -Xmx4g" # increase amount if you have enough memory$$
https-portal を利用し、SSL化 (自己証明書)します。
まず、「volumes:」の前に以下を追加します。
https-portal:
image: steveltn/https-portal:1
ports:
- 80:80
- 443:443
links:
- app
restart: always
environment:
DOMAINS: 'exsample.com -> http://app:3000'
STAGE: local
container_name: https-portal
volumes:
- ./ssl_certs:/var/lib/https-portal
「volumes:」 内に以下を追加します。
volumes:
ssl_certs:
最終的に今回は以下の内容になりました。
version: '3'
services:
app:
build:
context: .
dockerfile: ./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 Grid FS 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 Math Jax
# - 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 serv er 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 pub lic mode
# - FORCE_WIKI_MODE='private' # activate this line to force wiki pri vate 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/s erver/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: ./elasticsearch
dockerfile: ./Dockerfile
environment:
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms4g -Xmx4g" # increase amount if you have enough m emory
ulimits:
memlock:
soft: -1
hard: -1
restart: unless-stopped
volumes:
- es_data:/usr/share/elasticsearch/data
- ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/co nfig/elasticsearch.yml
https-portal:
image: steveltn/https-portal:1
ports:
- 80:80
- 443:443
links:
- app
restart: always
environment:
DOMAINS: 'exsample.com -> http://app:3000'
STAGE: local
container_name: https-portal
volumes:
- ./ssl_certs:/var/lib/https-portal
volumes:
growi_data:
mongo_configdb:
mongo_db:
es_data:
ssl_certs:
diff で変更点を確認します。
diff /opt/growi/docker-compose.yml /opt/growi/docker-compose.yml.old
「 docker-compose.yml」を編集する際は、インデント(段落揃え)に注意してください。
https-portalのインデントは他の記述を参考に揃えるいいと思います。
インデントが揃っていないとエラーが発生します。
Growiの実行及び起動確認
Growi コンテナを実行します。
docker-compose up -d
ダウンロードとインストールが開始されます。
正常に終了すると下記メッセージが表示されます。
Creating growi_elasticsearch_1 ... done
Creating https-portal ... done
Creating growi_mongo_1 ... done
Creating growi_app_1 ... done
「https://ドメイン」に接続し、「Growi」が起動するか確認します。

正常にログインが出来れば、実行環境の構築は完了です。