GitLabでPlantUML使ってみる
の編集
Top
/ GitLabでPlantUML使ってみる
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
.git/info/exclude の使い方と活用シーン - 個人的なファイルをローカルだけで除外する方法
10の質問
2024/09月時点でのおすすめAI
ABC予想
AGIアーキテクチャ設計図:自己参照型注意モデル_SRAM
AGI時代の「評価の一元化」が奪う再起の権利
AI
AI API
AI Scheduler MCP導入手順 - Google Tasks/CalendarをMCP経由で操作
AI プロンプト
AIが詳細を避けがちな合法分野
AIでつかわれているtransformerのまとめ
AIとIDEの共存:ドキュメント整合性のための新しいアプローチ
AIとの効果的な協働のための設計アプローチ:S式とコード生成テンプレートの活用
AIと上手に付き合うコツ:「自分らしさ」を失わないために
AIと共存する時代のソフトウェア開発:コンパイラー開発からの学び
AIの男女と美醜について学習の問題点
AIの話題
AIエージェント階層PMシステムのGit基盤選択
AIチャットの文脈を記憶する!Apache UnomiとModel Context Protocolで実現する次世代のAIチャット管理
AI大規模開発とTDDの意外な関係
AI時代でもエンジニアだらけにならない説
AI開発の「いきなり統合」から脱却!層別テスト駆動開発のテンプレート集
AI開発の現在と未来:統計的限界を超えるために
AI関連の自分がよく見るチャンネル
ANTLR
ANTLR v3 FAQ よくある質問
ANTLR 独学
ANTLR4 独学
ANTLRでOracleのDDLを解析してみる
ANTLRチュートリアル
AOP
API
ARMマイコン基盤
ATOM SHELL理論
Access VBAメモ
Access-Control-Allow-Origin
AndroidとTensorflow
Android開発
Android開発 入門
AngularJS
Anko
Apache Bench
ArchUnitを学ぶ
Axiosとは
Axis2
BI Publisherで始めるデータ駆動型レポート作成
BPMNの勉強
BackTrack4
Blog from iPhone
Bootstrapとは
BracketName
C3 AI Applications
C3 AI エクスマキナ
CSS備忘録
CentOS
ChatGPTの話題
Chevrotainのパーサメソッド
Chevrotain一覧
Chromeエクステンション
Claud MCP
Claude CodeがWindows Nativeサポート開始!Claude-Flowで究極のAI駆動開発体験
Claude Codeサブエージェントで実現する「AIチーム開発」
Claude DesktopのNeo4j接続でCypher構文エラーが出る時の対処法
Claude sonnet computer useを実践投入してみる
ClaudeCode のRalph Wiggum Plugin活用テクニック
ClaudeやMCPでGoogle CalendarにTODO(タスク)を記入できるMCPサーバまとめ
Clojureの実行のお作法
Clojureの3万個以上あるライブラリエコシステム
Clojureをつかってみる
Cocoa Touch Static Library
CoffeeScript
Confluent Control Centerやってみる
C言語でオブジェクト志向な記述方法
DDD ドメイン駆動設計
DDL生成ツール
DJUnit
DMM.comのAPIとか
DOSコマンドメモ
DX人材とUMLによる「設計可視化」の実践ガイド
Dashcode
DeepFloyd IF
Dockerが動かない場合の対処
DockerでLillyMolを爆速起動!化学式から合成経路を探る旅に出よう!
DuckDB導入メモ
ES2015
Eclipse Monkey
Eclipse Plugin
Eclipseの色設定
Eclipse使いがXCode使い初めて知りたいこと
ElasticMQメモ
Elixir
Emmet
Erlangメモ
ExcelファイルをAIに読ませる
Exceptionを見やすく
Expression Tree
FLEX
FLEX リフレクション
Firebase App Check
Firebase Emulator Suite
Fisheye
FlashやJavascriptを使った演出
FlutterとReactとOptiWeb
Flutterの開発環境をDockerで整える
FlyonUI
Forgejo MCP環境設定ガイド
FormattingRules
FrontPage
GAE
GAE Data Store API
GENERAL SQL PARSER JAVA を試してみる
GLOBAL
GPT4ALL
GQL
GUIからMacPortsを管理するアプリケーション - Porticus
Generative Adversarial Networks
Gin JavaScriptで構文解析
Git Blame
Git リポジトリのクローンができないときの解決法
GitHubアクションを使ったトロイの木馬のまとめ
GitLab
GitLabRunnerを増やす
GitLabでPlantUML使ってみる
GitLabでプロジェクト管理する
GitLabの機能をそのまま使って認証システム作ったらどこまでできる?
GitLabサーバインストールとメンテ注意事項
GitとAntとSpringとJUnit
Google Antigravity
Google ClientID
Google Cloud Platform
Google Cloud Platform (GCP) と gcloud CLI 入門
Google MCP Toolbox for Databases と BigQuery で Google Sheets を SQL 操作するガイド
Google Maps Platformを学ぶ
GoogleMapレンダリング
Googleの裏技
Google認定プロジェクトマネージャの勉強メモ
Gradioで簡単GUI作成
Grails
GraphHopperを使用した住所のジオコーディング例
GraphQL
HTM 階層型時間メモリ
HTML スクレイピング
HTML パース
HTML5
HTML5 Canvas
Hadoop
Help
If Then Maybe プログラミング
Inkscape script
InterWiki
InterWikiName
InterWikiSandBox
JAVAの記事一覧
JBoss
JDBC テーブル一覧を得る
JDBC カラム一覧を得る
JDT eclipse
JGRIB
JHIPSTER JDL
JHIPSTER OpenAPI
JHIPSTER エンティティをフィルタリングする
JHIPSTER6.1.2
JHIPSTERでスマホサイト
JHIPSTERのBLUEPRINTを作る
JHIPSTER一覧
JHipster
JHipster API FirstDepelop
JHipster エンティティを更新する
JHipster7をつかってみる
JHipsterでBuleprintを使いこなす
JHipsterのコード生成を改造
JHipsterのプロジェクトをGitLabでCI/CDする
JHipsterのプロジェクトをデプロイする
JIRAをAPI使って操作する
JMeter
JOOQとは
JSFとStruts
JSqlParser
Java Closure
Java Compiler API
Java Function
Java SQL Parserを調査する
Java Spring AOP
Java Spriteを設計してみる
Java オブジェクトのダンプ
Java ドラックできる曲線
Java 備忘録
Java 文字化け
Java11以降のJRE
Java7サンプルコード
JavaFx
JavaScriptでパーサを作る Chevrotain
Javaasist 動的にクラスを編集
Javascript グラフィックライブラリ
Javascript コーディングパターン
Javascript界隈
Javassist
JavaでSVG
Javaで関数型で引数をとる
JavaのジェネリクスTip
Javaのラムダ式
Javaの有名なライブラリ紹介
Javaは、IDEのテンプレートを使いこなせばいいよ
Javaプログラマ向けモナド
Javaメモリリーク
Jenkins
Jenkins(Hudson)メモ
Jestとは
Jhipsterマイグレーション
Json Yaml Xml Hash Scala
KIROナレッジ蓄積フォルダ構成
Kafka REST Proxy さわってみる
Kotolin
LDAPサーバをdockerで立ち上げる
LINE Bot AI翻訳システム構築記(2):n8nでMySQL・翻訳API連携を実装する
LISPで自分の言語を作る
LibreOfficeのCalcをハックしてみる
Linux メモ
LiquiBaseとは
Lispの学び
Lombok
MCP「ここまでのチャットを整理して保存しておいて」
MDBをコンパクトにするVBA
MQL5 半値インジケータ作った
MQL5 小作品
MT4
MT5 EA
MT5お気に入りのインジケータ
MYSQL
MYSQLのバックアップとローカル利用
MacTool
Macにしゃべらせる
Mac用のメモ
Mattermostを使ってオンプレミスでチャット環境を作る
Maven
Mementoパターン
MenuBar
MoonsharpとLuaとUnityについて学ぶ
NILScript
Neo4j バックアップ・復元ガイド
Neo4jでシステムダウン!グラフデータベース選択の失敗談と安全な代替案
NetBeanでプロファイル
Network Service Desk Engineer
Nimbalyst活用メモ
Node-RED
Node-Red
Notion MCP関連について学ぶ
NumPy
OQL オブジェクト問い合わせ言語
OSコマンドインジェクション
ObjctiveC サウンド
ObjectMapperの備忘録
ObjectiveC NSString
ObjectiveC サーバ
ObjectiveC ターミナル用コマンドを作る
ObjectiveC バックグラウンド
ObjectiveC ワーニング
Obsidian MCP インストール
Obsidianの使い方:プロ開発者のための必須プラグインガイド
Obsidianは「メモ帳」ではなく「圧縮帳」である
Oculusアプリの開発
OpenAI Swarm Examples Basic
OpenAI Swarmについて学ぶ
OpenAI Swarmについて認識を深める
OpenFeint
OpenOffice
OpenResty
OpenStreetMapを利用した車両ルーティング問題(VRP)のOptaPlanner解決例
OptaPlanner
OptaPlannerとは
OptaWeb
Outlook VBA
PHP
POSTGRESQL
Pandas Python Data Analysis Library
PdfBox Java用PDFライブラリ
Plagger
Playwrightの実用ガイド:MCPとの統合による新たな可能性
PostgreSQL+AGEでNeo4jの代替え環境構築
PrismaでGraphQL APIを自動生成しよう - チュートリアル
PrismaとGraphQLで作るシンプルなAPI - クイックスタート
PukiWiki
PukiWiki/1.4
PukiWiki/1.4/Manual
PukiWiki/1.4/Manual/Plugin
PukiWiki/1.4/Manual/Plugin/A-D
PukiWiki/1.4/Manual/Plugin/E-G
PukiWiki/1.4/Manual/Plugin/H-K
PukiWiki/1.4/Manual/Plugin/L-N
PukiWiki/1.4/Manual/Plugin/O-R
PukiWiki/1.4/Manual/Plugin/S-U
PukiWiki/1.4/Manual/Plugin/V-Z
PyHipster
QuartzCore
RAD
REST
RWKV
Rails3
Railsと差分開発についての考察
React.js
React.js モーダル画面
RecentDeleted
RedmineLE
Redshift
Relumeでサイトの骨格を作る
Require.js
Roo Codeを使う
Rubycocoa
RubyでScalaをコンパイルするツールをつくる
Rubyアソシエーション認定証
Ruby入門
SCALA REPL
SCALA support tool
SCALAの記事一覧
SDL3で始めるクロスプラットフォームゲーム開発 - 環境構築ガイド
SELinux
SEO
SEO Yahoo対策
SEO対策一覧
SPAM対策
SQLite
SRP×A2A×MCP まとめ:kagentとGoogle A2A Project比較メモ
SSH
SST OpenCode:Claude Codeを超える次世代AIコーディングエージェント
SVNをJavaで操作
SakuraZencoding
SandBox
Scala / Hadoop
Scala Process exec
Scala 遅延評価
Scala/LiftでSlim3
ScalaSigParser
ScalaWithExcel
Scala チュートリアル
Scalaで3D
ScalaでLisp
ScalaとGroovyのPOJO比較
ScalaのIDEについて
Scala言語を学ぶやさしいツール「Kojo」
Slack API やってみる
SocketAppender
Spring
Spring bootでのテストのTIPS
SpringBoot-JPA-NotAManagedType解決記録
SpringBootとSeleniumとJunitの連携
SpringBootのSTSの新規プロジェクトでるエラーの対応
SpringSecurity SAML
Sqlite
Squirrel
StringTemplate
Stringクラス拡張
TALEND
ThreadLocal
Todo一覧
Trac Lightning
Twitter
UltraEdit
UnityでClojureCLRをREPLで使う
UnityでClojureCLRを使いたい
Unityでシューティングゲーム作る際のメモ
VBAでREST通信
VBAのコード
VBAをOpenOffice.org Basicにする
VBAをOpenOffice.org+Basicにする
VPN構築の勉強メモ
VPSやIaaSメモ
VSCodeでRuby開発
VSCodeメモ
VSCode用ChatGptのPlugin
VSCode設定
VirtualBox On Mac
Visual Studio Code プラグイン開発
Vuexとは
WBS管理の弊害
WIN32API
WSDL
WSL2 + Podman 環境を快適にする Flatnet CLI を公開しました
Watson
WebDesign探訪
WebLogic フィルタ
WikiEngines
WikiName
WikiWikiWeb
Windows10のPowerShell でキーボードの言語切り替え
WindowsTool
WindowsでRustからGPUアセンブリ(PTX)を生成する
Windows上でOpenCode + MCP連携環境構築 - 実際のハマりポイントと解決法
Windows環境でJavaバージョンを制御する方法 - Java Shimと環境変数の活用
Windsurf
Windsurf能紹介:カスタムワークフロー(Workflow)とファイルベースルール(Rules)紹介
Windsurf+PlantUMLでAWTエラーに遭遇した話
Worker Thread パターン
XBee
XDOCLET
XForms
XPath
XSL
YahooPIPES
Yahooインフォセンター
Yet Another Pragger
YouTuber
Youtubuのあれ
YukiWiki
anacondaをcygwinで使う
ansible
antlr snippet
antlr 再入門
antlrと日本語
autoit
automator
bluemix
bootstrap2
bower
ccze Colorize log files on CentOS and Ubuntu using ccze tool
centos7
cglibを使って動的コード生成
claude-bridgeでローカルLLMを使い放題
cocos2d
collection/collection.dart
cygwin
diff
dockerのローカルイメージをDocker-in-Dockerで参照する
eclipse設定
emacs 備忘録
emacs 文字列置換
emacsをviライクにする
excel tips
excelのdiff
expectで自動化
figmaにプラグインをインストールする
firebase デプロイ
flutterで、google認証させてFirebaseAuthするメモ
flutterをngrok経由で動作させる
flutter環境設定
ftp自動化
gemini
generator-jhipster-gql
git diffを使った構成管理の省力化
goをやってみる
go言語でファイルサーバ
grizzly
gulp
homebrew
iPhone Bluetoothプログラミング
iPhone iAd
iPhone 実機テスト手続き
iPhoneでグラフィックのHellowWorld
iPhoneとGmailメール
iPhoneに実機転送
iPhoneプログラミング
iPhoneプログラミング/ビューを理解すればiPhoneアプリの基礎を押さえられる
iPhoneプログラミング一覧
iPhoneプログラミング入門
iPhone開発/Interface Builder Plug-in
iPhone開発/キャプチャの取り方
intra-mart
jQuery.Flickableのメモ
java spring boot 認証 memo
jersey
jhipster-codeにアノテーション追加してみる
jhipsterのテンプレート改造準備
jparsecドキュメント日本語訳
jparsec入門
kafkaの勉強
log4j2の脆弱性
mac diff
mailcowのインストール
marmaid
mcp-atlassian バージョン互換性の問題と解決方法
memcached
metabaseはダッシュボードなのか
minecraft マイクラ あるきながら、高速ダンジョン作成
mqttの勉強
n8nとDockerでLINE翻訳ボットを作る時に遭遇した5つの罠とその解決法
n8n入門:Docker-composeでWebhook→データ処理→ファイル保存のワークフローを作る
nginx_lua
nginxのメモ
ngrokを利用したLINE Webhookの動的更新 - グローバルIP不要の開発環境構築
node_moduleをnpm linkを使って自分用にする
npm
openapi generator
openapi-generatorをコンパイル
openstack
oraclerac
play framework 1.2.5 sample
play! framework
play!framework selenium
playframework テンプレート
postmanとopenapi
postman使ってみる
prezi プレゼン
pukiwikiで行動管理
pukiwikiに類似したツール
pukiwiki勉強
pukiwiki記事一覧
python
python3のwindowsでの日本語文字化け対応
pythonでseleniumを使う
pythonのテストに使うライブラリ
rails5
rate.jsを使ってみる
reactでポップアップ表示
redmine
ruby on rails 6.0.0
scala
scala 99problem 32~
scala prototype.zip
scala repl
scala sbaz
scala spring
scala/インストール
scalaでまだ不勉強なところ
scalaのインストール
selenium
skills
slack api
spark
spring boot
spring initializerをつかってプロジェクトのひな型をゲットする
spring-test
springboot
springboot env
storybook
sublimetext2
swagger
tracについて
ubuntu
vaadin
vue を typescriptで開発
vue 共通部品作成
vue.js memo
vue.jsとは
vue.jsのデバッグ
vue一覧
webの編集画面のよくあるパターン
windows版のwindsurfのアップデートが失敗する場合、com surrogateが原因かもしれない
windows環境構築
windsurfでフロント開発用プラグイン
wordpress
xamppについて
•Axis2の本家のスタートガイドによるWebサービスの作り方
「AIによる動的実行」と「従来の静的最適化済みコード」が棲み分けられる時代
「AI促進法」国会審議をDXする提案メモ
「Computer use」Claude 3.5 SonnetでPCを操作
【Javascript】【CLIライブラリ】commanderの勉強
【MQL5】KuniRangeBreakoutEA
【初心者必見】テーマだけ決めてスムーズに話せる!動画撮影のコツと練習法
【実践Tips】Node.jsでレスポンス切替型モックAPIを超シンプルに作る方法
いまさらながらC++
おすすめされたフリーソフト
びっくりする短いコード
もう合成ルート探索で迷わない! ASKCOSでスマートに逆合成解析!
アクター
アニメーション
アノテーション
アプリコット
アプリコット PukiWiki
アプリコード
アプリコード林邦行
イラストのエフェクト
インテンショナルプログラミング
オープンソースLSPプロバイダーのMCPであるSerenaの紹介
カスタマイズjhipster7.9.3イメージ
カブロボ
ガイガーカウンター
クラスとハッシュマップの関係
クラック対策
クロス集計
コマンドラインという概念への考察
コマンドラインの出力に色を付ける
コミニュケーション
コラッツ予想:シンプルな数学の問題が隠す深遠な謎
コード生成
サロゲートキーを使ったテーブル設計
シェルのサンプル
シェルサンプル
スクレイピング
スマートコントラクト開発環境Hardhatを学ぶ
スレッドプログラミングメモ
ソースtoソース変形
ターミナルをAppleScriptで制御
テキストエディタ作成javascriptフレームワーク
テスト用まっさらDBをdockerでたてる
テスト駆動
テレワーク環境の比較
ドキュメント指摘AIエージェント定義
ドット絵
ナイアシンと脂質代謝に関する新仮説
ハーネスフォルダを作ってSWE改善
バイオビルダー合成生物学メモ
バグの少ない設計のためのValueObject
パフォーマンスチューニング
フロントエンドとバックエンド(API)を1つのリポジトリで管理するメリット
フロントエンドのテストの結合テストを減らすには?
プッシュ技術
プログラマーじゃない人に覚えてほしいプログラムのコメントの書き方
プロジェクト管理スプレッドシート
プロンプトエンジニア以外のこれからのAI技術者
マイクラ 有名ディメンション モッド
マクスウェル方程式
メタ
ライフハック_選挙を楽しむ方法
ラムダ計算について考える
リベリカJava13いいみたい
リモートワークでのプロジェクト注意点
レイアウトツール
ログ解析
世界の構文解析グラマーたち
予定表
予定表/2009-12-14
予定表/2009-12-18
予定表/2009-12-19
予定表/2009-12-22
予定表/2009-12-23
予定表/2009-12-24
事業の心構え
事業計画方針
五蘊と経営を磨く徳目表
五蘊と経営を磨く徳目表:ウェルビーイング対応一覧
人工知能とCUDA
人工知能コンペKaggle
仕様書のフォーマットについての考察
他言語サイトサンプル作成
仮説Oracleの罠
作曲と効果音作り
僕が無意識に使っていた設計パターンたちに、ちゃんと名前があった話
免疫型社会モデル:性善説でも性悪説でもない第三の道
共和分
効率的なAI活用戦略:S式ベースの問題解決ライブラリの構築
厚黒学から見た日本の構造的脆弱性
口コミ
古いRails5を入れる
哲学
型落ちノートPCでDockerサービスを公開したい
大文字小文字変換
契約書で避けたい条項リスト(エンジニア視点)
学習をHackする
扶養とシステム
投薬のみのガンの治療薬
擬似コーディングのすすめ
放射能対策
数学を学んでいて気づいた物理学との驚くべきつながり
数式を扱う
文章を書く
新エネルギー
新年の抱負2010
新技術 プログラム編
日本のゼネコン式IT開発が失敗する理由
日本半導体産業の敗北から学ぶ経営の本質
最近更新したページ
未来のAIは「私はここまでできます、ここからは専門家にお任せを!」と語りかける
未来技術/新技術
枯れた技術の水平思考
株価データ
業界の動向
構文解析の記事一覧
正規表現
気象データ
流れるようなインタフェース
究極の集中状態を実現する:プログラマーのためのディープワーク実践ガイド
管理画面の生成におけるopenapiとJDLなどの考察
細胞の若返り
経済のことをまとめてみる
脆弱性
脳腫瘍の開発中治療薬LY367385とリンゴ酢
自分でPlaggerみたいなのを作るためのメモ
虚数軸への新たな視点
話せるAIの記事のリンク
論語/学而第一
負荷テスト
販売/デスクトップPC
販売/ノートパソコン
販売/外部ストレージ
起業
超小型ローカルLLM
酸化グラフェン
開発哲学
電子出版
電子出版の記事一覧
非可換幾何学
顧客分析のデシル分析とRFM分析
DIコンテナについて考える
MP3から携帯着うたを作る方法
[[GitLab]] * 目次 [#la6e12bc] #contents * 動機 [#z55447e1] GitLabを立ち上げて、ReadMeなどの閲覧でMarkDown書いて、そんでもってPlantUmlがmarkdown内に記述できたら、以下のメリットがあるのではないかと思った ** メリット [#kab36434] テキストなので、diffを使った差分がわかるので以下のメリットがある。 - 汎用的なツールで違いを見つけることができる。つまり、低コスト - 差分だけの確認でよいので、時間の節約 - テキストなので、成果物のファイルサイズが小さくて済むので、マシンリソースの節約 - gitがつかえるので、分散管理でドキュメントの消失に強い ** 注意点 [#na6258d6] メールサーバを導入しないので以下に示す手順を実行しないとログインできない点に注意する * volumesディレクトリの準備 [#c7b0af57] mkdir config mkdir logs mkdir data mkdir gitlab-runner-config * 完成版、docker-compose.yaml [#qd7bc3c0] 要点:以下の文章で部分的に説明していますが、結局はこれをコピペしてつかってください。 version: "3.9" services: web: image: 'gitlab/gitlab-ce:latest' restart: always hostname: 'gitlab.example.com' environment: # 初回ログインに利用するrootユーザーのパスワード※簡単だとエラーになる GITLAB_ROOT_PASSWORD: "autjg267" TZ: "Asia/Tokyo" GITLAB_OMNIBUS_CONFIG: | external_url 'http://gitlab1:8929' nginx['redirect_http_to_https'] = true gitlab_rails['gitlab_shell_ssh_port'] = 2224 letsencrypt['enable'] = false GITLAB_OMNIBUS_CONFIG: | external_url 'http://localhost:8929' letsencrypt['enable'] = false gitlab_rails['omniauth_enabled'] = false gitlab_rails['ldap_enabled'] = true gitlab_rails['prevent_ldap_sign_in'] = false gitlab_rails['ldap_sync_worker_cron'] = "*/5 * * * *" gitlab_rails['time_zone'] = 'Asia/Tokyo' gitlab_rails['ldap_servers'] = YAML.load <<-EOS main: label: 'My Ldap' host: 'ldap-server' port: 389 uid: 'cn' encryption: false verify_certificates: false bind_dn: 'cn=admin,dc=my-company,dc=com' password: 'admin' # tls_options: # ca_file: '' # ssl_version: '' # ciphers: '' # cert: '' # key: '' active_directory: false allow_username_or_email_login: true # root権限ユーザでLDAPユーザが正規かどうかチェックする運用の場合はtrue block_auto_created_users: false base: 'dc=my-company,dc=com' user_filter: '' lowercase_usernames: true # attributes: # name: 'cn' # group_base : 'ou=gitlab_groups,ou=groups,dc=internal' # admin_group : 'gitlab_admins' # external_groups : [] # sync_ssh_keys : false EOS ports: - '8929:8929' - '2224:22' - '443:443' volumes: - './volumes/gitlab-data/config:/etc/gitlab' - './volumes/gitlab-data/logs:/var/log/gitlab' - './volumes/gitlab-data/data:/var/opt/gitlab' tty: true 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" ldap-server: image: osixia/openldap:latest restart: always container_name: ldap-server environment: LDAP_ORGANISATION: "My Company" LDAP_DOMAIN: "my-company.com" LDAP_ADMIN_PASSWORD: "admin" LDAP_READONLY_USER: "true" LDAP_READONLY_USER_USERNAME: "readonly" LDAP_READONLY_USER_PASSWORD: "readonly_password" LDAP_TLS_VERIFY_CLIENT: "never" ports: - "389:389" volumes: - ./volumes/openldap/var/lib/ldap:/var/lib/ldap - ./volumes/openldap/etc/ldap/slapd.d:/etc/ldap/slapd.d - ./openldap/testuser.ldif:/slapd/assets/custome/testuser.ldif ldap-admin: image: osixia/phpldapadmin:latest container_name: ldap-admin restart: always environment: PHPLDAPADMIN_LDAP_HOSTS: "ldap" PHPLDAPADMIN_HTTPS: "false" ports: - "8095:80" links: - "ldap-server:ldap" * windowsのWSLのメモリサイズの上限を設定するシェルの例 [#g5b4bfbc] 最近の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 ** Docker Desktopの再起動 [#ha0de03f] 上記のメモリの上限せっていはwindows11の特定のバージョンでしか使わないとはおもいますが、その設定を行った後は、以下のコマンドで再起動します。もちろん手動でも全然大丈夫です。 # wslのシャットダウン wsl --shutdown # Docker Desktop起動 "C:\Program Files\Docker\Docker\Docker Desktop.exe" & * GitLabをDockerをつかってインストール [#f79010c2] 公式サイトの以下のページを見る https://docs.gitlab.com/ee/install/ インストール方法はたくさんあるが、今回はdockerを使ったやり方にする ローカルサーバとしてたちあげてみるだけなので、メールの認証とかの設定は行わず、rubyのインタプリタツールを直接触って、サーバに直接パスワードを書き込む方式とする。 ** dockerを利用したGitLabのインストール [#dd55d77f] 今回は、どの環境でも素早く構築できることを信じてDockerでインストールする方法をためしてみようと思う。 https://docs.gitlab.com/ee/install/docker.html Docker for Windows は公式にはサポートされていないようだ。でもやりたいのは、ローカルマシンのwindows上で動作させることだからなんとかやってみる。 成功事例の以下のブログ記事を参考にしてみよう。 ***Windows10にDocker ComposeでGitlabを導入 [#qec795ad] https://qiita.com/peanuts2013/items/105be140eb9826cfdb2d *** Windows+Docker(Compose)でGitlabをローカルに立ち上げた時の話 [#q9e96503] https://qiita.com/beeeegle/items/b8d8da113f272f61af44 *** gitlabのDockerイメージ [#if2e5780] https://hub.docker.com/r/gitlab/gitlab-ee/ いや、まてよコミュニティーエディションは、こっちか https://registry.hub.docker.com/r/gitlab/gitlab-ce/ こっちがコミュニティーエディションのほうが無料のはず。まあ、そんなことは気にしなくても、dockerを使ったインストールのブログをあされば、docker-composeの設定が書いてあるとおもうから、それをつかえばいい。 *** 機能の比較 [#o6733efb] https://about.gitlab.com/features/?stage=plan 無料で使える機能が充実している、よっぽど使い倒す気持ちがない以上は無料プランでよいとおもった。 JIRAとも連携できるのか、ふむふむ。 * 手順 [#ye66473d] *** 端末のIPアドレスを調べる [#dda0e021] ipconfig -all ** hostsファイルにローカルのIPアドレスの別名を登録しておく [#y7b70353] 以下の説明では、調べたIPアドレスを以下名前でhostsファイルに登録したものとする 調べたIPアドレス gitlab1 保存すると、すぐに適用されるようだ *** なぜこうするかというと、 [#c16ecb98] - wifi接続のローカルのマシンだとIPアドレスが不安定だし、macアドレスで固定するにしても、会社の環境だとルータの設定さわらせてくれないことも考えられる。 - localhostを使う場合だと、他の同じwifi接続のマシンから見たときにplantumlサーバがlocalhostになってしまって、うまくplantumlの画像が生成されない。 だから、IPアドレスが変更になってしまっても、最小限の修正で復帰できて、他サーバからもアクセス可能にするためにhostsをつかう運用が良いのだ。 ** 手順2 gitlabとplantumlサーバを立ち上げる [#t99254a4] 以下のコマンドで、上記で設定したdocker-compose.ymlで設定した内容でdockerが起動する。 docker-compose up -d 起動には数分かかる。起動中は以下のコマンドでstartingと表示される docker-compose ps 起動が完了すると healty という状態になる。 docker-compose.ymlのvolume:で指定したディレクトリにgitlabのファイルが共有されるようになる。 ** 手順3 gitlabの設定ファイルにplantumlサーバとのリダイレクト設定できるように設定を追記 [#ya542138] *** 設定を反映させる [#g97cd26c] # 立ち上がっているdockerのコンテナ名を調べる docker-compose ps # コンテナに接続 docker exec -it コンテナ名 bash gitlabからplantumlへは、gitlab内のnginxサーバのプロキシ設定を以下の設定を追記することで行う。 参考: https://docs.gitlab.com/ee/administration/integration/plantuml.html *** ファイル名:/etc/gitlab/gitlab.rb [#n3c30aa5] # 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 ** 手順4 Adminでログインできるように直接パスワードを登録する [#k5e6a568] ldapサーバを使わない場合の手順である。ほかのサービスも立ち上げる場合はLADPサーバを使えるように設定するのが良いと思う。 参考: https://e-penguiner.com/gitlab-with-docker-onpremise/ *** 立ち上がっているGitLabにbashで接続する [#vf6ede7f] *** rubyのツールを立ち上げる [#a2f154ee] dockerコンテナ内のbash上で以下のコマンドを打つ gitlab-rails console -e production ※起動には数分かかります ** 手順5 ログインできるようにする。 [#n7bdc680] gitlabのdocker版はメールサーバまでは入っていない。設定方法は有るらしいが、 数人で使う程度ならば、パスワードはgitlabに以下に示す手作業でいれることができる。 *** rubyのインタプリタが動作するのでパスワードを設定する [#g37735cb] user = User.where(id: 1).first user.password='設定したいパスワード' user.password_confirmation='設定したいパスワード' user.save! exit *** gitの管理者でログイン [#v04d9f24] ユーザを追加する前に、root権限でログインしておく 以下の手順で認証のメールが必要な手続きをしないようにしておく - メインメニュー [管理者]をクリック - 設定 [全般的]をクリック - Sign-up restrictions [Expand]をクリック - "Require admin approval for new sign-ups"のチェックをはずす これで、ユーザ追加後にログインできるようになった。 *** rootユーザ以外の場合 [#kb0282f0] ユーザ登録をすると、パスワードがランダムに割り振られるので、上記の user = User.where(id: 1).first の数値1を適宜増やしてパスワードを直接いれて保存するのがよいと思う。 ただし、パスワードをいれたあと、以下の設定が無いとログインができない。 * GitLabでPlantUmlを使う手順 [#s5375ad8] plantumlをgitlabで使うには、設定で有効にしないといけない ** 手順 [#qca3dc23] Main menu の Adminをクリック Settings の Generalをクリック PlantUML セクションを広げる Enable PlantUML のチェックボックスをオンにする URLには、http://gitlab1:8005 と入れる *** 参考:gitlabのplantuml設定を有効にする [#xccfabbb] https://docs.gitlab.com/ee/administration/integration/plantuml.html#configure-your-plantuml-server * SSHキーの登録 [#g8e90abe] 参考: https://click.jp/knowledge/1476/ ** 手順 [#de1f1e6b] もし、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 ができるようになる。 * krokiも使えるようにしてみる [#d2ff053a] 上記のplantumlの追加だけでも十分なのだが、ついでにkrokiも使えるようにしておく。 C4とかBPMNとか使ってみたい。 GitLabの設定参考URL: https://docs.gitlab.com/ee/administration/integration/kroki.html ** docker-compose.ymlに追加する [#hd36b7d8] 以下を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で立ち上げたサーバとかぶらないようにしよう。 *** 参考にさせていただいたURL [#h774a420] https://www.rk-k.com/archives/4399 *** GitLabの設定 [#ad539820] plantumlのときで出てきた設定項目の2,3個上にkrokiの設定がある。 サーバのアドレスをgitlab1にしていれば、以下のリンクからでも設定画面に行くと思う。 http://gitlab1:8929/admin/application_settings/general#js-kroki-settings チェックボックスをオンにする。 URLには、 http://gitlab1:8081 をいれる * krokiの追加フォーマット扱い [#q85e1831] 公式の解説URL: https://docs.kroki.io/kroki/setup/install/#images ** たとえば、BPMNを有効にしてみる [#ic6a9067] そこには、Companion containers という欄にBPMN が書いてあって、リンクをたどると、Dockerのページに飛ぶ。ちなみにURLは以下 https://hub.docker.com/r/yuzutech/kroki-bpmn そこには、dockerのpullコマンドが下記のように書いてあった。 docker pull yuzutech/kroki-bpmn * LDAPサーバを使う場合の設定 [#yf454c14] 参考: https://qiita.com/hiren/items/cba9fc6da7165c9416a0 *** DN(Distinguished Name)について [#s62a4852] LDAPでは、各エントリ(オブジェクト)を一意に識別するためにDN(Distinguished Name)という形式を使用します。DNは、ツリー構造を辿ってエントリを特定するためのパスのようなものです。 DNは逆順で記述され、コンマで区切られます。各コンポーネントは属性=値の形式で記述されます。たとえば、cn=John Doe,ou=Marketing,dc=example,dc=comというDNは、example.comドメインのMarketing組織単位(OU)に属するユーザーJohn Doeを表しています。 - dc=example,dc=com: ドメインコンポーネント(dc)は、LDAPツリーの最上位に位置し、通常は企業や組織のインターネットドメイン名を表します。 - ou=Marketing: 組織単位(ou)は、組織内の部門やグループを表します。 - cn=John Doe: 共通名(cn)は、エントリの一意の識別子を表します。ユーザーの場合はユーザー名やフルネームが使われます。 *** baseパラメータについて [#nb7ea570] LDAP設定のbaseパラメータに設定するDNは、ユーザー検索を開始する基点となるDNを指定します。したがって、GitLabがLDAPサーバでユーザーを検索する際には、このbaseDNから下のツリー構造を探索します。 *** 設定を反映させる [#ne6197a6] docker-compose exec web gitlab-ctl reconfigure * LADPでのユーザ登録 [#d568c49b] ** ldifファイルの作成 [#g1fe564d] LDIF(LDAP Data Interchange Format)は、LDAPエントリを表現するための標準的な形式です。エントリ(ユーザーやグループなど)を追加、変更、削除するために使用されます。 - dn: Distinguished Name(識別名)で、LDAPディレクトリ内のエントリの一意なパスを示します。 - changetype: このエントリに対する操作のタイプを示します。ここでは新しいエントリを追加するため、addが指定されています。 - objectClass: エントリのタイプを定義するスキーマを示します。複数のobjectClassが存在する場合、そのエントリはすべてのobjectClassの特性を持ちます。 - uid: ユーザーIDを示します。 - cn: 共通名を示します。通常はフルネームです。 - sn: サーネーム(姓)を示します。 - o: organization(組織)を示します。 - userPassword: ユーザーのパスワードを格納します。 {SSHA}wvxuaDL+/m3phJE6fyrtGU8UODCfjA2iはハッシュ化されたパスワードを表しています。 * ldifの例 [#x53e4223] mkdir openldap cd openldap vi testuser.ldif ** testuser.ldif [#rdbe7be2] dn: cn=test001,dc=my-company,dc=com givenName: test001 sn: test001 cn: test001 mail: test001@my-company.com userPassword: dGVzdDAwMQ=a objectClass: inetOrgPerson objectClass: top dn: cn=test002,dc=my-company,dc=com givenName: test002 sn: test002 cn: test002 mail: test002@my-company.com userPassword: dGVzdDAwMg== objectClass: inetOrgPerson objectClass: top ** 暗号化されたパスワードを用いる例 [#p4a2086a] 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 フィールドに設定します。 *** gitlabの電子メールの取り扱いについて [#y3d6a25b] LDAP 電子メール属性が GitLab ユーザー データベースに見つからない場合は、新しいユーザーが作成されます。 すでに、Gitlabにユーザが登録されている場合は、電子メールアドレスが LDAP 電子メールアドレスと一致する必要があります。 - uid: ユーザーがサインインに使用するユーザー名にマップする LDAP 属性。 にマップする値ではなく、属性である必要がありますuid。GitLab ユーザー名には影響しません ** 追加 [#vb926d76] 上記の場合だと、 docker exec -it ldap-server bash ldapadd -x -D "cn=admin,dc=my-company,dc=com" -w admin -f /slapd/assets/custome/testuser.ldif -ZZ # 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" ** 確認 [#lb8b7d81] # 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 ** 参考にしたサイト [#s5625bba] *** OpenLDAPサーバーで、ユーザーを追加 [#e32f0f00] https://qiita.com/gigatune/items/23439fa02488a626c3d4 *** Integrate LDAP with GitLab [#u8ce9fbb] https://docs.gitlab.com/ee/administration/auth/ldap/?tab=Docker#attribute-configuration-settings * LDAP_INVALID_CREDENTIALS 49 [#t21b026f] openldapのコンテナにdocker execコマンドで入って以下のコマンドを打つ slapcat *** 結果 [#x5907eaf] 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の値も入れないといけない。例えていうならば、自分の名前だけでログインはできず、住所を述べてそのあとで名前を入れないといけない感じ *** 対策 [#scf9aae9] docker-composeで初回に設定した内容で、設定フォルダなどができてしまい、それが残っている場合は、いったん設定フォルダをクリアすると、自分の場合は解消した。 *** 参考になったURL [#zc27e0d1] https://hatman62.hatenablog.com/entry/2016/06/08/230701 - docker コンテナで構築するGitlabでLDAP連携(OpenLDAP)する方法 https://qiita.com/v1tam1n/items/2b780fa7fb6ae133bf8b
spamではない場合はチェックをいれてください。
タイムスタンプを変更しない
[[GitLab]] * 目次 [#la6e12bc] #contents * 動機 [#z55447e1] GitLabを立ち上げて、ReadMeなどの閲覧でMarkDown書いて、そんでもってPlantUmlがmarkdown内に記述できたら、以下のメリットがあるのではないかと思った ** メリット [#kab36434] テキストなので、diffを使った差分がわかるので以下のメリットがある。 - 汎用的なツールで違いを見つけることができる。つまり、低コスト - 差分だけの確認でよいので、時間の節約 - テキストなので、成果物のファイルサイズが小さくて済むので、マシンリソースの節約 - gitがつかえるので、分散管理でドキュメントの消失に強い ** 注意点 [#na6258d6] メールサーバを導入しないので以下に示す手順を実行しないとログインできない点に注意する * volumesディレクトリの準備 [#c7b0af57] mkdir config mkdir logs mkdir data mkdir gitlab-runner-config * 完成版、docker-compose.yaml [#qd7bc3c0] 要点:以下の文章で部分的に説明していますが、結局はこれをコピペしてつかってください。 version: "3.9" services: web: image: 'gitlab/gitlab-ce:latest' restart: always hostname: 'gitlab.example.com' environment: # 初回ログインに利用するrootユーザーのパスワード※簡単だとエラーになる GITLAB_ROOT_PASSWORD: "autjg267" TZ: "Asia/Tokyo" GITLAB_OMNIBUS_CONFIG: | external_url 'http://gitlab1:8929' nginx['redirect_http_to_https'] = true gitlab_rails['gitlab_shell_ssh_port'] = 2224 letsencrypt['enable'] = false GITLAB_OMNIBUS_CONFIG: | external_url 'http://localhost:8929' letsencrypt['enable'] = false gitlab_rails['omniauth_enabled'] = false gitlab_rails['ldap_enabled'] = true gitlab_rails['prevent_ldap_sign_in'] = false gitlab_rails['ldap_sync_worker_cron'] = "*/5 * * * *" gitlab_rails['time_zone'] = 'Asia/Tokyo' gitlab_rails['ldap_servers'] = YAML.load <<-EOS main: label: 'My Ldap' host: 'ldap-server' port: 389 uid: 'cn' encryption: false verify_certificates: false bind_dn: 'cn=admin,dc=my-company,dc=com' password: 'admin' # tls_options: # ca_file: '' # ssl_version: '' # ciphers: '' # cert: '' # key: '' active_directory: false allow_username_or_email_login: true # root権限ユーザでLDAPユーザが正規かどうかチェックする運用の場合はtrue block_auto_created_users: false base: 'dc=my-company,dc=com' user_filter: '' lowercase_usernames: true # attributes: # name: 'cn' # group_base : 'ou=gitlab_groups,ou=groups,dc=internal' # admin_group : 'gitlab_admins' # external_groups : [] # sync_ssh_keys : false EOS ports: - '8929:8929' - '2224:22' - '443:443' volumes: - './volumes/gitlab-data/config:/etc/gitlab' - './volumes/gitlab-data/logs:/var/log/gitlab' - './volumes/gitlab-data/data:/var/opt/gitlab' tty: true 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" ldap-server: image: osixia/openldap:latest restart: always container_name: ldap-server environment: LDAP_ORGANISATION: "My Company" LDAP_DOMAIN: "my-company.com" LDAP_ADMIN_PASSWORD: "admin" LDAP_READONLY_USER: "true" LDAP_READONLY_USER_USERNAME: "readonly" LDAP_READONLY_USER_PASSWORD: "readonly_password" LDAP_TLS_VERIFY_CLIENT: "never" ports: - "389:389" volumes: - ./volumes/openldap/var/lib/ldap:/var/lib/ldap - ./volumes/openldap/etc/ldap/slapd.d:/etc/ldap/slapd.d - ./openldap/testuser.ldif:/slapd/assets/custome/testuser.ldif ldap-admin: image: osixia/phpldapadmin:latest container_name: ldap-admin restart: always environment: PHPLDAPADMIN_LDAP_HOSTS: "ldap" PHPLDAPADMIN_HTTPS: "false" ports: - "8095:80" links: - "ldap-server:ldap" * windowsのWSLのメモリサイズの上限を設定するシェルの例 [#g5b4bfbc] 最近の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 ** Docker Desktopの再起動 [#ha0de03f] 上記のメモリの上限せっていはwindows11の特定のバージョンでしか使わないとはおもいますが、その設定を行った後は、以下のコマンドで再起動します。もちろん手動でも全然大丈夫です。 # wslのシャットダウン wsl --shutdown # Docker Desktop起動 "C:\Program Files\Docker\Docker\Docker Desktop.exe" & * GitLabをDockerをつかってインストール [#f79010c2] 公式サイトの以下のページを見る https://docs.gitlab.com/ee/install/ インストール方法はたくさんあるが、今回はdockerを使ったやり方にする ローカルサーバとしてたちあげてみるだけなので、メールの認証とかの設定は行わず、rubyのインタプリタツールを直接触って、サーバに直接パスワードを書き込む方式とする。 ** dockerを利用したGitLabのインストール [#dd55d77f] 今回は、どの環境でも素早く構築できることを信じてDockerでインストールする方法をためしてみようと思う。 https://docs.gitlab.com/ee/install/docker.html Docker for Windows は公式にはサポートされていないようだ。でもやりたいのは、ローカルマシンのwindows上で動作させることだからなんとかやってみる。 成功事例の以下のブログ記事を参考にしてみよう。 ***Windows10にDocker ComposeでGitlabを導入 [#qec795ad] https://qiita.com/peanuts2013/items/105be140eb9826cfdb2d *** Windows+Docker(Compose)でGitlabをローカルに立ち上げた時の話 [#q9e96503] https://qiita.com/beeeegle/items/b8d8da113f272f61af44 *** gitlabのDockerイメージ [#if2e5780] https://hub.docker.com/r/gitlab/gitlab-ee/ いや、まてよコミュニティーエディションは、こっちか https://registry.hub.docker.com/r/gitlab/gitlab-ce/ こっちがコミュニティーエディションのほうが無料のはず。まあ、そんなことは気にしなくても、dockerを使ったインストールのブログをあされば、docker-composeの設定が書いてあるとおもうから、それをつかえばいい。 *** 機能の比較 [#o6733efb] https://about.gitlab.com/features/?stage=plan 無料で使える機能が充実している、よっぽど使い倒す気持ちがない以上は無料プランでよいとおもった。 JIRAとも連携できるのか、ふむふむ。 * 手順 [#ye66473d] *** 端末のIPアドレスを調べる [#dda0e021] ipconfig -all ** hostsファイルにローカルのIPアドレスの別名を登録しておく [#y7b70353] 以下の説明では、調べたIPアドレスを以下名前でhostsファイルに登録したものとする 調べたIPアドレス gitlab1 保存すると、すぐに適用されるようだ *** なぜこうするかというと、 [#c16ecb98] - wifi接続のローカルのマシンだとIPアドレスが不安定だし、macアドレスで固定するにしても、会社の環境だとルータの設定さわらせてくれないことも考えられる。 - localhostを使う場合だと、他の同じwifi接続のマシンから見たときにplantumlサーバがlocalhostになってしまって、うまくplantumlの画像が生成されない。 だから、IPアドレスが変更になってしまっても、最小限の修正で復帰できて、他サーバからもアクセス可能にするためにhostsをつかう運用が良いのだ。 ** 手順2 gitlabとplantumlサーバを立ち上げる [#t99254a4] 以下のコマンドで、上記で設定したdocker-compose.ymlで設定した内容でdockerが起動する。 docker-compose up -d 起動には数分かかる。起動中は以下のコマンドでstartingと表示される docker-compose ps 起動が完了すると healty という状態になる。 docker-compose.ymlのvolume:で指定したディレクトリにgitlabのファイルが共有されるようになる。 ** 手順3 gitlabの設定ファイルにplantumlサーバとのリダイレクト設定できるように設定を追記 [#ya542138] *** 設定を反映させる [#g97cd26c] # 立ち上がっているdockerのコンテナ名を調べる docker-compose ps # コンテナに接続 docker exec -it コンテナ名 bash gitlabからplantumlへは、gitlab内のnginxサーバのプロキシ設定を以下の設定を追記することで行う。 参考: https://docs.gitlab.com/ee/administration/integration/plantuml.html *** ファイル名:/etc/gitlab/gitlab.rb [#n3c30aa5] # 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 ** 手順4 Adminでログインできるように直接パスワードを登録する [#k5e6a568] ldapサーバを使わない場合の手順である。ほかのサービスも立ち上げる場合はLADPサーバを使えるように設定するのが良いと思う。 参考: https://e-penguiner.com/gitlab-with-docker-onpremise/ *** 立ち上がっているGitLabにbashで接続する [#vf6ede7f] *** rubyのツールを立ち上げる [#a2f154ee] dockerコンテナ内のbash上で以下のコマンドを打つ gitlab-rails console -e production ※起動には数分かかります ** 手順5 ログインできるようにする。 [#n7bdc680] gitlabのdocker版はメールサーバまでは入っていない。設定方法は有るらしいが、 数人で使う程度ならば、パスワードはgitlabに以下に示す手作業でいれることができる。 *** rubyのインタプリタが動作するのでパスワードを設定する [#g37735cb] user = User.where(id: 1).first user.password='設定したいパスワード' user.password_confirmation='設定したいパスワード' user.save! exit *** gitの管理者でログイン [#v04d9f24] ユーザを追加する前に、root権限でログインしておく 以下の手順で認証のメールが必要な手続きをしないようにしておく - メインメニュー [管理者]をクリック - 設定 [全般的]をクリック - Sign-up restrictions [Expand]をクリック - "Require admin approval for new sign-ups"のチェックをはずす これで、ユーザ追加後にログインできるようになった。 *** rootユーザ以外の場合 [#kb0282f0] ユーザ登録をすると、パスワードがランダムに割り振られるので、上記の user = User.where(id: 1).first の数値1を適宜増やしてパスワードを直接いれて保存するのがよいと思う。 ただし、パスワードをいれたあと、以下の設定が無いとログインができない。 * GitLabでPlantUmlを使う手順 [#s5375ad8] plantumlをgitlabで使うには、設定で有効にしないといけない ** 手順 [#qca3dc23] Main menu の Adminをクリック Settings の Generalをクリック PlantUML セクションを広げる Enable PlantUML のチェックボックスをオンにする URLには、http://gitlab1:8005 と入れる *** 参考:gitlabのplantuml設定を有効にする [#xccfabbb] https://docs.gitlab.com/ee/administration/integration/plantuml.html#configure-your-plantuml-server * SSHキーの登録 [#g8e90abe] 参考: https://click.jp/knowledge/1476/ ** 手順 [#de1f1e6b] もし、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 ができるようになる。 * krokiも使えるようにしてみる [#d2ff053a] 上記のplantumlの追加だけでも十分なのだが、ついでにkrokiも使えるようにしておく。 C4とかBPMNとか使ってみたい。 GitLabの設定参考URL: https://docs.gitlab.com/ee/administration/integration/kroki.html ** docker-compose.ymlに追加する [#hd36b7d8] 以下を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で立ち上げたサーバとかぶらないようにしよう。 *** 参考にさせていただいたURL [#h774a420] https://www.rk-k.com/archives/4399 *** GitLabの設定 [#ad539820] plantumlのときで出てきた設定項目の2,3個上にkrokiの設定がある。 サーバのアドレスをgitlab1にしていれば、以下のリンクからでも設定画面に行くと思う。 http://gitlab1:8929/admin/application_settings/general#js-kroki-settings チェックボックスをオンにする。 URLには、 http://gitlab1:8081 をいれる * krokiの追加フォーマット扱い [#q85e1831] 公式の解説URL: https://docs.kroki.io/kroki/setup/install/#images ** たとえば、BPMNを有効にしてみる [#ic6a9067] そこには、Companion containers という欄にBPMN が書いてあって、リンクをたどると、Dockerのページに飛ぶ。ちなみにURLは以下 https://hub.docker.com/r/yuzutech/kroki-bpmn そこには、dockerのpullコマンドが下記のように書いてあった。 docker pull yuzutech/kroki-bpmn * LDAPサーバを使う場合の設定 [#yf454c14] 参考: https://qiita.com/hiren/items/cba9fc6da7165c9416a0 *** DN(Distinguished Name)について [#s62a4852] LDAPでは、各エントリ(オブジェクト)を一意に識別するためにDN(Distinguished Name)という形式を使用します。DNは、ツリー構造を辿ってエントリを特定するためのパスのようなものです。 DNは逆順で記述され、コンマで区切られます。各コンポーネントは属性=値の形式で記述されます。たとえば、cn=John Doe,ou=Marketing,dc=example,dc=comというDNは、example.comドメインのMarketing組織単位(OU)に属するユーザーJohn Doeを表しています。 - dc=example,dc=com: ドメインコンポーネント(dc)は、LDAPツリーの最上位に位置し、通常は企業や組織のインターネットドメイン名を表します。 - ou=Marketing: 組織単位(ou)は、組織内の部門やグループを表します。 - cn=John Doe: 共通名(cn)は、エントリの一意の識別子を表します。ユーザーの場合はユーザー名やフルネームが使われます。 *** baseパラメータについて [#nb7ea570] LDAP設定のbaseパラメータに設定するDNは、ユーザー検索を開始する基点となるDNを指定します。したがって、GitLabがLDAPサーバでユーザーを検索する際には、このbaseDNから下のツリー構造を探索します。 *** 設定を反映させる [#ne6197a6] docker-compose exec web gitlab-ctl reconfigure * LADPでのユーザ登録 [#d568c49b] ** ldifファイルの作成 [#g1fe564d] LDIF(LDAP Data Interchange Format)は、LDAPエントリを表現するための標準的な形式です。エントリ(ユーザーやグループなど)を追加、変更、削除するために使用されます。 - dn: Distinguished Name(識別名)で、LDAPディレクトリ内のエントリの一意なパスを示します。 - changetype: このエントリに対する操作のタイプを示します。ここでは新しいエントリを追加するため、addが指定されています。 - objectClass: エントリのタイプを定義するスキーマを示します。複数のobjectClassが存在する場合、そのエントリはすべてのobjectClassの特性を持ちます。 - uid: ユーザーIDを示します。 - cn: 共通名を示します。通常はフルネームです。 - sn: サーネーム(姓)を示します。 - o: organization(組織)を示します。 - userPassword: ユーザーのパスワードを格納します。 {SSHA}wvxuaDL+/m3phJE6fyrtGU8UODCfjA2iはハッシュ化されたパスワードを表しています。 * ldifの例 [#x53e4223] mkdir openldap cd openldap vi testuser.ldif ** testuser.ldif [#rdbe7be2] dn: cn=test001,dc=my-company,dc=com givenName: test001 sn: test001 cn: test001 mail: test001@my-company.com userPassword: dGVzdDAwMQ=a objectClass: inetOrgPerson objectClass: top dn: cn=test002,dc=my-company,dc=com givenName: test002 sn: test002 cn: test002 mail: test002@my-company.com userPassword: dGVzdDAwMg== objectClass: inetOrgPerson objectClass: top ** 暗号化されたパスワードを用いる例 [#p4a2086a] 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 フィールドに設定します。 *** gitlabの電子メールの取り扱いについて [#y3d6a25b] LDAP 電子メール属性が GitLab ユーザー データベースに見つからない場合は、新しいユーザーが作成されます。 すでに、Gitlabにユーザが登録されている場合は、電子メールアドレスが LDAP 電子メールアドレスと一致する必要があります。 - uid: ユーザーがサインインに使用するユーザー名にマップする LDAP 属性。 にマップする値ではなく、属性である必要がありますuid。GitLab ユーザー名には影響しません ** 追加 [#vb926d76] 上記の場合だと、 docker exec -it ldap-server bash ldapadd -x -D "cn=admin,dc=my-company,dc=com" -w admin -f /slapd/assets/custome/testuser.ldif -ZZ # 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" ** 確認 [#lb8b7d81] # 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 ** 参考にしたサイト [#s5625bba] *** OpenLDAPサーバーで、ユーザーを追加 [#e32f0f00] https://qiita.com/gigatune/items/23439fa02488a626c3d4 *** Integrate LDAP with GitLab [#u8ce9fbb] https://docs.gitlab.com/ee/administration/auth/ldap/?tab=Docker#attribute-configuration-settings * LDAP_INVALID_CREDENTIALS 49 [#t21b026f] openldapのコンテナにdocker execコマンドで入って以下のコマンドを打つ slapcat *** 結果 [#x5907eaf] 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の値も入れないといけない。例えていうならば、自分の名前だけでログインはできず、住所を述べてそのあとで名前を入れないといけない感じ *** 対策 [#scf9aae9] docker-composeで初回に設定した内容で、設定フォルダなどができてしまい、それが残っている場合は、いったん設定フォルダをクリアすると、自分の場合は解消した。 *** 参考になったURL [#zc27e0d1] https://hatman62.hatenablog.com/entry/2016/06/08/230701 - docker コンテナで構築するGitlabでLDAP連携(OpenLDAP)する方法 https://qiita.com/v1tam1n/items/2b780fa7fb6ae133bf8b
テキスト整形のルールを表示する