なぜかGitLab公式の通りに設定してもうまくいかなかったので、試行錯誤してうまくいった方法です。
実行環境
私の環境は以下の通りです。
- Ubuntu 18.04.5
- GitLab-ce 14.0.1 (Omnibus版)
※Dockerを使わず直接apt install
しています。
PlantUML ServerをDockerで起動
まずPlantUMLは描画用のWebサーバーを立てないといけないので今回はDockerを使用します。
コマンドは以下です。
sudo docker run --restart=on-failure:10 -d --name plantuml -p 8085:8080 plantuml/plantuml-server:tomcat
--restart=on-failure:10
としているのは、うちのサーバーは定期的に落としているので、再起動時にDockerサービスが上がったタイミングで一緒にコンテナも起動してもらう様にする為です。
ポート番号8085
は好きな番号で構いません。
GitLabの設定ファイル
オムニバスパッケージ版ではおなじみの/etc/gitlab/gitlab.rb
に追記を行います。
以下を追記してください。
nginx['custom_gitlab_server_config'] = "location /-/plantuml { \n rewrite ^/-/plantuml/(.*) /$1 break;\n proxy_cache off; \n proxy_pass http://localhost:8085; \n}\n"
その後忘れずにsudo gitlab-ctl reconfigure
を実行します。
解説
公式では以下となっています。
# Docker deployment
nginx['custom_gitlab_server_config'] = "location /-/plantuml/ { \n proxy_cache off; \n proxy_pass http://plantuml:8080/; \n}\n"
# Built from source
nginx['custom_gitlab_server_config'] = "location /-/plantuml { \n rewrite ^/-/(plantuml.*) /$1 break;\n proxy_cache off; \n proxy_pass http://localhost:8080/plantuml; \n}\n"
Dockerだから上だろと思って設定したら、GitLabにアクセス出来なくなるという罠が待っていました・・・
plantuml
の部分が悪いと思いlocalhost
に変えると、今度はちゃんと接続はできるけど、Docker内のtomcatにアクセス拒否を喰らいます。
というわけで下をベースに一部修正を行います。
公式と異なる部分は2点です。
plantuml/(.*)
http://localhost:8085
何をしているかざっくり説明しますと、
指定した条件にマッチするURLでアクセスした時にDocker内のwebサーバーにプロキシする様にしています。
例えばhttps://mygitlab.com/-/plantuml
にアクセスすると、http://localhost:8085
にプロキシします。
この時、URLパラメータを正規表現で^/-/plantuml/(.*)
から/$1
に置き換えています。$1は置換前文字列の括弧の中を意味するので、^/-/plantuml/
の部分を消しているんですね。
https://mygitlab.com/-/plantuml/png/ABCDE
というURLはhttp://localhost:8085/png/ABCDE
になります。
plantuml/
がいらないというところがミソです。
GitLab Admin AreaでPlantUMLを有効化
GitLabからAdminエリアに入って、(日本語の場合)設定→一般→PlantUMLからURLに、https://mygitlab.com/-/plantuml/
を設定します。
(mygitlab.com
はご自身のサーバーURLを入れる)
これで、GitLab内でPlantUMLが描画される様になります。