Dockerfile for local use FSWiki (FreeStyleWiki) with Markdown Plugin, CSP (Content Security Policy), and LaTeX/MathML rendering using MathJax.
FSWiki (FreeStyleWiki)は、Perl (とJavaScript)で書かれた Wikiクローンです。
詳しくは、こちらをご参照下さい。
注意: Dockerfile、docker-compose.ymlなどの設定を変更すれば外部からもアクセスできるようになるのですが、httpsの使用、パーミッションなど、セキュリティ上の設定にもご注意下さい。
シェル端末で以下のコマンドをご実行下さい。
git clone https://github.com/KazKobara/dockerfile_fswiki_local.git
cd dockerfile_fswiki_local
.env
ファイル中の変数を編集vim .env
変数名 | 説明 |
---|---|
FSWIKI_DATA_ROOT |
FSWiki のデータなどが格納される attach/ config/ data/ log/ などを直下に含む親フォルダ名を指定*1 |
CONTAINER_CLI |
使用するコンテナCLI (docker , nerdctl など) を指定 |
COMPOSE |
使用するコンテナコンポーザー (docker-compose , nerdctl compose など) を指定 |
- *1 FSWiki のどのフォルダを共有ボリュームとするかは、使用する
docker-compose.yml
またはrun_fswiki_local.sh
で指定
./get_fswiki.sh
以下のステップでは、お使いの環境などとの相性に応じて、2a. Compose版(‘docker-compose’, ‘nerdctl compose’ などを使う版)、または、2b. シェルスクリプト版のいずれかをご使用下さい。
また、Windows OS 上でのコマンド実行時に以下のようなウィンドウが表示された場合には、通信の許可は不要ですので、「キャンセル」ボタンをお押し下さい。
nerdctl compose build
または
docker-compose build
- Windows版 のコマンドには
.exe
をお付け下さい。- Alpineイメージでのビルドでは git clone に時間が掛かります。
- 名前解決に時間を要しているのかもしれません。
nerdctl compose up
または
docker-compose up
バックグラウンドで実行する際には
-d
オプションを付けて下さい。
Webブラウザで http//localhost:<ポート番号>/
へご接続下さい。
ポート番号は .env
ファイル中の FSWIKI_PORT
で指定した番号になります
(例 http//localhost:8366/
)。
nerdctl compose down
または
docker-compose down
./docker_build.sh
- Compose版と同様に、Alpineイメージでのビルドには時間が掛かります。
./run_fswiki_local.sh
Webブラウザで http//localhost:<ポート番号>/
へご接続下さい。
ポート番号は .env ファイル中の FSWIKI_PORT
で指定した番号になります
(例 http//localhost:8366/
)。
nerdctl stop <container_name> && nerdctl rm <container_name>
または
docker stop <container_name> && docker rm <container_name>
ここで <container_name>
は、Alpineのイメージを使う場合は fswiki_alpine_local
、Debian/Ubuntuのイメージを使う場合は、
fswiki_ubuntu_local
となります。
Compose版の
<container_name>
には最後に_dc
が付きます。
nerdctl rmi <image_name>
または
docker rmi <image_name>
ここで <image_name>
は <container_name>:<fswiki_version>
、 <fswiki_version>
は latest
、 3_8_5
などとなります。
Alpine イメージを使っている場合:
nerdctl pull httpd:alpine
または、
docker pull httpd:alpine
Debian/Ubuntu イメージを使っている場合:
nerdctl pull httpd:latest
または、
docker pull httpd:latest
gitレポジトリの最新のFSWikiを使用している場合:
(cd ./tmp/wikilatest/theme/kati_dark && git pull)
FSWiki 3.5.6 を使用している場合:
(cd ./tmp/wiki3_6_5/theme/kati_dark && git pull)
上記の 2. ビルドと実行 を実行
新たなフォルダを追加する方法と既存のフォルダに追加する方法があります。
その新たなフォルダ内で、docker-compose.ymlの以下の説明に従い各変数を、既存の設定と被らないように変更
##### To launch multiple independent docker processes #####
.env
ファイルの FSWIKI_DATA_ROOT_PRIVATE
と FSWIKI_PORT_PRIVATE
を編集以下のいづれかを実行:
nerdctl compose -f docker-compose-multiple.yml up
または、
docker-compose -f docker-compose-multiple.yml up
または、
./run_fswiki_private.sh
tag_version | fswiki | base | kernel | httpd | perl | Image Size[MB] |
---|---|---|---|---|---|---|
0.0.5 | latest (4ba68e3) | Alpine 3.17 *1 | 5.15.79.1 | 2.4.54 *2 | 5.36.0 | 78.6 |
0.0.5 | 3_6_5 | Alpine 3.17 *1 | 5.15.79.1 | 2.4.54 *2 | 5.36.0 | 73.5 |
0.0.5 | latest (4ba68e3) | Debian 11 | 5.15.79.1 | 2.4.54 *2 | 5.32.1 | 229 |
0.0.5 | 3_6_5 | Debian 11 | 5.15.79.1 | 2.4.54 *2 | 5.32.1 | 224 |
以下のバージョンには脆弱性があります。アップデート方法は上記の 3. アップデート/アップグレードのためのリビルドをご参照下さい。
イメージサイズの一覧は、以下のコマンドなどで調べられます。
nerdctl images | grep fswiki_
または、
docker images | grep fswiki_
バージョンは、上記コマンドで表示される <container_name>
に対して、以下のスクリプトを実行するか、
./check_ver_in_container.sh <container_name>
以下のテストを実行することで得られます。
./test.sh
ファイル中の以下の箇所で、テストする項目を選択
## Uncomment one of them # 以下のいずれか一つのコメントを外す
TEST_PLATFORM="alpine ubuntu" # AlpineとDebian/Ubuntu両方をテストする場合
# TEST_PLATFORM="ubuntu" # Debian/Ubuntuのみをテストする場合
# TEST_PLATFORM="alpine" # Alpineのみをテストする場合
## Comment out if not to test # Compose版とシェルスクリプト版の両方をテストする場合は両方のコメントを外す
TEST_COMPOSE_VER="Do" # Compose版をテスト
TEST_SHELL_VER="Do" # シェルスクリプト版をテスト
.env
ファイル中の FSWIKI_DATA_ROOT
を(シェルスクリプト版をテストする場合は絶対パスで)指定テストスクリプトを実行
./test.sh
OWASP ZAP, Nikto などを利用し、他のコンテナからここで立ち上げたウェブサーバーのセキュリティチェックを行う際には、.env
ファイルの FSWIKI_PORT
の説明をご参照の上、設定をご変更下さい。
.env
ファイルで指定した FSWIKI_DATA_ROOT
のファイルパーミッションとグループを設定するには、ホストOS上で .env
ファイルと同じフォルダで以下のスクリプトを実行するか、
./change_permissions.sh
docker-compose.yml
または run_fswiki_local.sh
で指定した共有ボリューム( attach/ config/ data/ log/ が指定してある場合)に対して、以下のコマンドを実行します。
なお、コマンド実行後においても FSWiki がファイルを更新すると(umask に関係無く)、パーミッションは 644 となり、owner はコンテナOSの httpd_sub-processes の uid になります。
chmod -R a-rwx,ug+rwX attach/ config/ data/ log/
chgrp -R <gid_of_httpd_sub-processes> attach/ config/ data/ log/
ここで <gid_of_httpd_sub-processes>
には、コンテナOS(Base OS)に応じて、以下の番号を指定するか、コンテナOS上からであれば、group
名を指定することが可能です(ホストOS上から設定する場合、コンテナOSの www-data に対応する番号が同じとは限らないため、番号で指定する必要があります)。
(uid_of_httpd_sub-processes) | group | base | httpd | |
---|---|---|---|---|
33 | (33) | www-data | Debian/Ubuntu | 2.4.52 |
82 | (82) | www-data | Alpine | 2.4.52 |
1 | (1) | daemon | Debian/Ubuntu | 2.4.46 |
2 | (2) | daemon | Alpine | 2.4.46 |
前述のとおり、OSにより httpd_sub-processes の uid と gid が異なるため、別コンテナの httpd_sub-processes の gid で共有ボリュームに書き込まれたファイルを、自コンテナの httpd_sub-processes が読めるようにする必要があります。
これは、例えば、別コンテナの httpd_sub-processes のグループに自コンテナの httpd_sub-processes の uid を追加することで実現できます。具体的には、Debian/Ubuntuコンテナ上では、以下のコマンドなどで Alpine の httpd_sub-process の gid である 82 番をもつ新たなグループ www-data-alpine
を追加し、そのグループに Debian/Ubuntu の httpd_sub-process の uid である www-data を追加します。
addgroup --gid 82 www-data-alpine
adduser www-data www-data-alpine
そして、Alpineコンテナ上では、以下のコマンドなどで Debian/Ubuntu の httpd_sub-process の gid である 33 番(xfs)のグループに Alpine の httpd_sub-process のユーザネーム www-data を追加します。
adduser www-data xfs
ウェブブラウザに以下のようなエラーが表示された場合、上記のパーミッションとグループの設定をお試し下さい。
Permission denied at lib/Wiki/DefaultStorage.pm line 114.
Permission denied: ./log at lib/CGI2.pm line 34.
You don't have permission to access this resource.
Lock is busy. at plugin/core/ShowPage.pm line 69. at lib/Util.pm line 743.
ウェブブラウザに以下のようなエラーが表示された場合、.env
ファイルの FSWIKI_DATA_ROOT
の説明を参考にしながら、共有ボリュームのパスをご指定下さい。実行環境により受け付けるパスの記述方法が異なります。
Software Error:
HTML::Template->new() : Cannot open included file ./tmpl/site//. tmpl : file not found. at lib/HTML/Template.pm
コンテナが以下のようなログを吐く場合、コンテナ内で、例えば Debian/Ubuntu の場合は apt-get install -y libcgi-session-perl
、Alpineの場合には apk add -y perl-cgi-fast
などのコマンドで Perl CGI をインストールして下さい。
Can't locate CGI.pm in @INC (you may need to install the CGI module) (...) at lib/CGI2.pm line 7.
BEGIN failed--compilation aborted at lib/CGI2.pm line 7.
最後までお読み頂きありがとうございます。 GitHubアカウントをお持ちでしたら、フォロー及び Star 頂ければと思います。リンクも歓迎です。