GitLabを立ち上げて、ReadMe?などの閲覧でMarkDown?書いて、そんでもってPlantUml?がmarkdown内に記述できたら、以下のメリットがあるのではないかと思った
テキストなので、diffを使った差分がわかるので以下のメリットがある。
メールサーバを導入しないので以下に示す手順を実行しないとログインできない点に注意する
mkdir config mkdir logs mkdir data mkdir gitlab-runner-config
要点:以下の文章で部分的に説明していますが、結局はこれをコピペしてつかってください。
version: "3.9"
services:
web:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: 'gitlab.example.com'
environment:
TZ: "Asia/Tokyo"
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab1:8929'
nginx['redirect_http_to_https'] = true
gitlab_rails['gitlab_shell_ssh_port'] = 2224
ports:
- '8929:8929'
- '2224:22'
- '443:443'
volumes:
- './config:/etc/gitlab'
- './logs:/var/log/gitlab'
- './data:/var/opt/gitlab'
plantuml:
image: plantuml/plantuml-server
restart: always
ports:
- "8005:8080"
environment:
TZ: "Asia/Tokyo"
kroki:
image: 'yuzutech/kroki'
restart: always
ports:
- "8081:8000"
depends_on:
- blockdiag
- mermaid
- bpmn
- excalidraw
environment:
- TZ="Asia/Tokyo"
- KROKI_BLOCKDIAG_HOST=blockdiag
- KROKI_MERMAID_HOST=mermaid
- KROKI_BPMN_HOST=bpmn
- KROKI_EXCALIDRAW_HOST=excalidraw
blockdiag:
image: yuzutech/kroki-blockdiag
restart: always
expose:
- "8001"
mermaid:
image: yuzutech/kroki-mermaid
restart: always
expose:
- "8002"
bpmn:
image: yuzutech/kroki-bpmn
restart: always
expose:
- "8003"
excalidraw:
image: yuzutech/kroki-excalidraw
restart: always
expose:
- "8004"
gitlab-runner:
image: gitlab/gitlab-runner:latest
container_name: gitlab-runner
restart: always
volumes:
# windows
- //./pipe/docker_engine:/var/run/docker.sock
# linux
# - /var/run/docker.sock:/var/run/docker.sock
- ./gitlab-runner-config:/etc/gitlab-runner
ports:
- "8093:8093"
上記のvolumesがない場合は作成しておく
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = {
'main' => {
'label' => 'GitLab AD',
'host' => 'ad.mydomain.com',
'port' => 636,
'uid' => 'sAMAccountName',
'encryption' => 'simple_tls',
'base' => 'dc=example,dc=com',
}
}
最近のwindows11のバージョンでは、いろいろサーバを立ち上げると、docker desktopがメモリを圧迫したまま開放しない、という仕組みに変わったらしいので、いずれ修正されると思うが、
git for windowsで使う想定で、.wslconfigを修正するスクリプトを書いた。手動のほうが早かったかもしれない。実験でdocker-composeを使った後のメモリ開放設定の後始末用にあると自動化できて便利かもしれないから残しておきます。
#!/bin/bash
# 設定したいメモリのサイズ (例: 8GB)
MEMORY_SIZE="8GB"
# .wslconfigファイルのパス
WSLCONFIG_PATH="/c/Users/(自分のログインユーザのディレクトリ)/.wslconfig"
# .wslconfigファイルが存在するか確認
if [ -f "$WSLCONFIG_PATH" ]; then
# ファイルが存在する場合、memory設定を更新
sed -i "s/^memory=.*$/memory=$MEMORY_SIZE/" $WSLCONFIG_PATH
else
# ファイルが存在しない場合、新規作成してmemory設定を追加
echo -e "[wsl2]\nmemory=$MEMORY_SIZE" > $WSLCONFIG_PATH
fi
何がしたいのかというと単純に.wslconfigというファイル名で、上記のdocker-compose.ymlで起動するサーバのメモリをwindowsで上限付きで確保しておきたいというだけです。ちなみに.wslconfigファイルは以下のようになります。
[wsl2] memory=8GB
上記のメモリの上限せっていはwindows11の特定のバージョンでしか使わないとはおもいますが、その設定を行った後は、以下のコマンドで再起動します。もちろん手動でも全然大丈夫です。
# wslのシャットダウン wsl --shutdown # Docker Desktop起動 "C:\Program Files\Docker\Docker\Docker Desktop.exe" &
公式サイトの以下のページを見る
https://docs.gitlab.com/ee/install/
インストール方法はたくさんあるが、今回はdockerを使ったやり方にする
ローカルサーバとしてたちあげてみるだけなので、メールの認証とかの設定は行わず、rubyのインタプリタツールを直接触って、サーバに直接パスワードを書き込む方式とする。
今回は、どの環境でも素早く構築できることを信じてDockerでインストールする方法をためしてみようと思う。
https://docs.gitlab.com/ee/install/docker.html
Docker for Windows は公式にはサポートされていないようだ。でもやりたいのは、ローカルマシンのwindows上で動作させることだからなんとかやってみる。
成功事例の以下のブログ記事を参考にしてみよう。
https://qiita.com/peanuts2013/items/105be140eb9826cfdb2d
https://qiita.com/beeeegle/items/b8d8da113f272f61af44
https://hub.docker.com/r/gitlab/gitlab-ee/
いや、まてよコミュニティーエディションは、こっちか https://registry.hub.docker.com/r/gitlab/gitlab-ce/
こっちがコミュニティーエディションのほうが無料のはず。まあ、そんなことは気にしなくても、dockerを使ったインストールのブログをあされば、docker-composeの設定が書いてあるとおもうから、それをつかえばいい。
https://about.gitlab.com/features/?stage=plan
無料で使える機能が充実している、よっぽど使い倒す気持ちがない以上は無料プランでよいとおもった。
JIRAとも連携できるのか、ふむふむ。
ipconfig -all
以下の説明では、調べたIPアドレスを以下名前でhostsファイルに登録したものとする
調べたIPアドレス gitlab1
保存すると、すぐに適用されるようだ
だから、IPアドレスが変更になってしまっても、最小限の修正で復帰できて、他サーバからもアクセス可能にするためにhostsをつかう運用が良いのだ。
以下のコマンドで、上記で設定したdocker-compose.ymlで設定した内容でdockerが起動する。
docker-compose up -d
起動には数分かかる。起動中は以下のコマンドでstartingと表示される
docker-compose ps
起動が完了すると
healty
という状態になる。
docker-compose.ymlのvolume:で指定したディレクトリにgitlabのファイルが共有されるようになる。
# 立ち上がっているdockerのコンテナ名を調べる docker-compose ps
# コンテナに接続 docker exec -it コンテナ名 bash
gitlabからplantumlへは、gitlab内のnginxサーバのプロキシ設定を以下の設定を追記することで行う。
参考: https://docs.gitlab.com/ee/administration/integration/plantuml.html
# Docker deployment
nginx['custom_gitlab_server_config'] = "location /-/plantuml/ { \n proxy_cache off; \n proxy_pass http://gitlab1:8080/; \n}\n"
捕捉:ここで躓く人は、以下のサイトを見るといいのかもしれない。
https://qiita.com/RYO-4947123/items/cf138989eebf12e45601
# 設定を反映させる gitlab-ctl reconfigure
ldapサーバを使わない場合の手順である。ほかのサービスも立ち上げる場合はLADPサーバを使えるように設定するのが良いと思う。
参考: https://e-penguiner.com/gitlab-with-docker-onpremise/
dockerコンテナ内のbash上で以下のコマンドを打つ
gitlab-rails console -e production
※起動には数分かかります
gitlabのdocker版はメールサーバまでは入っていない。設定方法は有るらしいが、 数人で使う程度ならば、パスワードはgitlabに以下に示す手作業でいれることができる。
user = User.where(id: 1).first
user.password='設定したいパスワード'
user.password_confirmation='設定したいパスワード'
user.save!
exit
ユーザを追加する前に、root権限でログインしておく
以下の手順で認証のメールが必要な手続きをしないようにしておく
これで、ユーザ追加後にログインできるようになった。
ユーザ登録をすると、パスワードがランダムに割り振られるので、上記の
user = User.where(id: 1).first
の数値1を適宜増やしてパスワードを直接いれて保存するのがよいと思う。
ただし、パスワードをいれたあと、以下の設定が無いとログインができない。
plantumlをgitlabで使うには、設定で有効にしないといけない
Main menu の Adminをクリック
Settings の Generalをクリック
PlantUML セクションを広げる
Enable PlantUML のチェックボックスをオンにする
URLには、http://gitlab1:8005 と入れる
https://docs.gitlab.com/ee/administration/integration/plantuml.html#configure-your-plantuml-server
参考: https://click.jp/knowledge/1476/
もし、git for windowsをインストールしていない場合はインストールする
もし、まだ公開鍵がない場合は以下の手順で作る
以下の"ホームディレクトリ"は各自の環境のホームディレクトリに読み替えて実行されたい
git for windowsのシェルでログインした直後という前提で説明する
# ホームディレクトリに移動 cd ~
mkdir .ssh
cd .ssh
ssh-keygen
あとはエンターキー
すると、ファイルが2つできる。
# 生成されたファイルを確認 ls
拡張子がpubのファイルがあったとする。
なんとか.pub
そのファイルの中身をコピペしたいので
cat なんとか.pub
とすると鍵の内容がわかるので、それをコピーする。
gitlabでプロジェクトをつくったとしたら、"ADD SSH-KEY"ボタンをクリックする
先ほどコピーしたなんとか.pubの中身を張り付ける。
これで、
git pull
や
git push
ができるようになる。
上記のplantumlの追加だけでも十分なのだが、ついでにkrokiも使えるようにしておく。
C4とかBPMNとか使ってみたい。
GitLabの設定参考URL: https://docs.gitlab.com/ee/administration/integration/kroki.html
以下をdocker-compose.ymlに追加する。軽く説明すると、krokiのコアを呼ぶけど、いろいろなマークダウン風の出力を提供しているサーバのdockerたちに依存してるよ。
ぐらいの意味である。
kroki:
image: 'yuzutech/kroki'
ports:
- "8081:8000"
depends_on:
- blockdiag
- mermaid
- bpmn
- excalidraw
environment:
- TZ="Asia/Tokyo"
- KROKI_BLOCKDIAG_HOST=blockdiag
- KROKI_MERMAID_HOST=mermaid
- KROKI_BPMN_HOST=bpmn
- KROKI_EXCALIDRAW_HOST=excalidraw
blockdiag:
image: yuzutech/kroki-blockdiag
expose:
- "8001"
mermaid:
image: yuzutech/kroki-mermaid
expose:
- "8002"
bpmn:
image: yuzutech/kroki-bpmn
expose:
- "8003"
excalidraw:
image: yuzutech/kroki-excalidraw
expose:
- "8004"
ポートの8081が、こちらから使うポートになるので、番号が他のdockerで立ち上げたサーバとかぶらないようにしよう。
https://www.rk-k.com/archives/4399
plantumlのときで出てきた設定項目の2,3個上にkrokiの設定がある。
サーバのアドレスをgitlab1にしていれば、以下のリンクからでも設定画面に行くと思う。
http://gitlab1:8929/admin/application_settings/general#js-kroki-settings
チェックボックスをオンにする。
URLには、
http://gitlab1:8081
をいれる
公式の解説URL: https://docs.kroki.io/kroki/setup/install/#images
そこには、Companion containers という欄にBPMN
が書いてあって、リンクをたどると、Dockerのページに飛ぶ。ちなみにURLは以下
https://hub.docker.com/r/yuzutech/kroki-bpmn
そこには、dockerのpullコマンドが下記のように書いてあった。
docker pull yuzutech/kroki-bpmn
gmailに送信できないらしいが参考URLを手掛かりにやってみる。
メールサーバがないと、手動でユーザ登録とかなので、ローカルでSMTPのメールサーバをたて、gitlabと連動させてみる
mailserver:
image: boky/postfix
environment:
ALLOWED_SENDER_DOMAINS: 'gitlab1'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "gitlab1"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_domain'] = "gitlab1"
gitlab_rails['gitlab_email_from'] = 'gitlab@gitlab1'
gitlab_rails['gitlab_email_reply_to'] = 'noreply@gitlab1'
https://hawksnowlog.blogspot.com/2021/07/run-postfix-and-gitlab-on-docker-compose.html
下記のサイトには、gmailに送るのが楽と記載があった。
https://e-penguiner.com/gitlab-with-docker-onpremise/
参考: https://qiita.com/hiren/items/cba9fc6da7165c9416a0
前提としてGitlabがインストールされている必要がある。確認のためバージョン情報が格納されていることを以下のコマンドで確認する
gitlab-rake gitlab:env:info
以下のファイルはデフォルトでは、LDAPが使えないようになっている
/etc/gitlab/gitlab.rb
LDAPでは、各エントリ(オブジェクト)を一意に識別するためにDN(Distinguished Name)という形式を使用します。DNは、ツリー構造を辿ってエントリを特定するためのパスのようなものです。
DNは逆順で記述され、コンマで区切られます。各コンポーネントは属性=値の形式で記述されます。たとえば、cn=John Doe,ou=Marketing,dc=example,dc=comというDNは、example.comドメインのMarketing組織単位(OU)に属するユーザーJohn Doeを表しています。
LDAP設定のbaseパラメータに設定するDNは、ユーザー検索を開始する基点となるDNを指定します。したがって、GitLabがLDAPサーバでユーザーを検索する際には、このbaseDNから下のツリー構造を探索します。
以下のキーワードでgitlab.rb内を検索する
ldap_enabled
置き換える前のコードは以下のようになっている
###! **remember to close this block with 'EOS' below** # gitlab_rails['ldap_servers'] = YAML.load <<-'EOS' # main: # 'main' is the GitLab 'provider ID' of this LDAP server # label: 'LDAP' # host: '_your_ldap_server' # port: 389 # uid: 'sAMAccountName' # bind_dn: '_the_full_dn_of_the_user_you_will_bind_with' # password: '_the_password_of_the_bind_user' # encryption: 'plain' # "start_tls" or "simple_tls" or "plain" # verify_certificates: true # smartcard_auth: false # active_directory: true # allow_username_or_email_login: false # lowercase_usernames: false # block_auto_created_users: false # base: '' # user_filter: '' # ## EE only # group_base: '' # admin_group: '' # sync_ssh_keys: false # # secondary: # 'secondary' is the GitLab 'provider ID' of second LDAP server # label: 'LDAP' # host: '_your_ldap_server' # port: 389 # uid: 'sAMAccountName' # bind_dn: '_the_full_dn_of_the_user_you_will_bind_with' # password: '_the_password_of_the_bind_user' # encryption: 'plain' # "start_tls" or "simple_tls" or "plain" # verify_certificates: true # smartcard_auth: false # active_directory: true # allow_username_or_email_login: false # lowercase_usernames: false # block_auto_created_users: false # base: '' # user_filter: '' # ## EE only # group_base: '' # admin_group: '' # sync_ssh_keys: false # EOS
※変更後を提示しますが、以下の項目を適宜変更してください。
gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
main: # 'main' is the GitLab 'provider ID' of this LDAP server
label: 'LDAP Account'
host: '192.168.1.200'
port: 389
uid: 'uid'
bind_dn: 'cn=admin,dc=example,dc=com'
password: 'xxx'
encryption: 'plain'
verify_certificates: false
active_directory: false
allow_username_or_email_login: true
lowercase_usernames: true
block_auto_created_users: false
base: 'dc=example,dc=com'
user_filter: ''
EOS
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = {
'main' => {
'label' => 'GitLab AD',
'host' => 'ad.mydomain.com',
'port' => 636,
'uid' => 'sAMAccountName',
'encryption' => 'simple_tls',
'base' => 'dc=example,dc=com',
}
LDIF(LDAP Data Interchange Format)は、LDAPエントリを表現するための標準的な形式です。エントリ(ユーザーやグループなど)を追加、変更、削除するために使用されます。
/tmp/user1.ldifに設定した例
dn: uid=12345, ou=people, dc=example, dc=co, dc=jp
changetype: add
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uid: 12345
cn: Test User
sn: user
o: people
userPassword: {SSHA}wvxuaDL+/m3phJE6fyrtGU8UODCfjA2i
mail: test.user@example.co.jp
上記の {SSHA}は、パスワードがソルト付きのSHA(Secure Hash Algorithm)でハッシュ 化されていることを示しています。
のハッシュ値を生成するには特殊なツールが必要で、例えば slappasswd コマンド(OpenLDAPの一部)がよく使われます。以下のように使用します:
slappasswd -h {SSHA} -s yourpassword
このコマンドは、入力されたパスワード(この場合は yourpassword)に対するSSHAハッシュを出力します。この出力値をLDIFファイルの userPassword フィールドに設定します。
LDAP 電子メール属性が GitLab ユーザー データベースに見つからない場合は、新しいユーザーが作成されます。
すでに、Gitlabにユーザが登録されている場合は、電子メールアドレスが LDAP 電子メールアドレスと一致する必要があります。
# ldapadd -x -D "cn=Manager,dc=example,dc=co,dc=jp" -W -f /tmp/user1.ldif Enter LDAP Password: adding new entry "uid=12345, ou=people, dc=example, dc=co, dc=jp"
# slapcat (略) dn: uid=12345,ou=people,dc=example,dc=co,dc=jp objectClass: top objectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson uid: 12345 cn: Test User sn: user o: people userPassword:: e1NTSEF9d3Z4dWFETCsvbTNwaEpFNmZ5cnRHVThVT0RDZmpBMmk= structuralObjectClass: inetOrgPerson entryUUID: a88737f8-8f58-1035-832a-fbe69abdd39f creatorsName: cn=Manager,dc=example,dc=co,dc=jp createTimestamp: 20160405090058Z entryCSN: 20160405090058.799276Z#000000#000#000000 modifiersName: cn=Manager,dc=example,dc=co,dc=jp modifyTimestamp: 20160405090058Z
https://qiita.com/gigatune/items/23439fa02488a626c3d4
https://docs.gitlab.com/ee/administration/auth/ldap/?tab=Docker#attribute-configuration-settings
openldapのコンテナにdocker execコマンドで入って以下のコマンドを打つ
slapcat
root@87bced4a4861:/# slapcat dn: dc=example,dc=com objectClass: top objectClass: dcObject objectClass: organization o: Example Organization dc: example structuralObjectClass: organization entryUUID: 62fba352-8719-103d-94d5-97c5167399a0 creatorsName: cn=admin,dc=example,dc=com createTimestamp: 20230515030735Z entryCSN: 20230515030735.894048Z#000000#000#000000 modifiersName: cn=admin,dc=example,dc=com modifyTimestamp: 20230515030735Z
LDAPは、ログインIDだけではダメで、dcの値も入れないといけない。例えていうならば、自分の名前だけでログインはできず、住所を述べてそのあとで名前を入れないといけない感じ