Gobble up pudding

プログラミングの記事がメインのブログです。

MENU

WindowsでGitLabを構築(Docker)

f:id:fa11enprince:20200413013004j:plain
Docker DesktopによるGitLab構築方法の紹介です。
一応、初心者向きにはなっていますが、
Dockerの基礎知識は知っている前提の記事です。
Windows + Docker Desktop (旧版 Docker for Windowsでも可)向けの記事です。
まぁ、Windowsでも動けば、Mac/Linux等でも動くでしょう。
Windows固有のハマりポイントはマウントの設定でしょうか

Dockerは気づくとITエンジニアほぼ必須の知識になってしまいました。
正直ここまで広まるとは思っていませんでした。
一部環境ではVT-x(インテル 仮想化支援機構)がONにするのを許されていなくて、
手元でDocker使えない、不便だーなんてことが起きてますが、
その場合はあきらめて開発サーバーを建てましょう(わたしもご多分に漏れず…)。
Docker使う場合は基本的にはLinuxがベターではあります。

docker-composeにてサクッとGitLabを立ててみようという記事です。
ただ、デフォルトのままではメール設定どうすんの?
とかWindowsの場合、ちょっとハマりがあったりとか、
そもそも遅いとか言った問題があるかと思います。
GitLabで使うデフォルトはPostgreSQLです。
https://docs.gitlab.com/omnibus/settings/database.html

こだわりがなければこのまま使います。 ちなみに、Dockerを使っている人はご存知かと思いますが、 Docker内のデータは一度止めてしまうとすべて消えてしまいます。
そのために、ホスト側にデータ領域をマウントし、再起動時にそこから読むことで
永続化を行っています。

前提条件

私の環境は以下です。多少異なっていてもおそらく大丈夫かと思います。
かなり古い場合でなければ、特にDocker for Windowsでも大丈夫かと。

OS/ソフト バージョン
Windows 10 1903
Docker Desktop community 2.2.0.4

設定方法

Docker Desktopおよびホスト側の設定

Settings > Resources > File Sharing でCドライブを選びます

docker volume の作成

Windowsでは起動時に権限がらみのエラーが発生してしまうので、
マウントするのに名前付きボリュームを利用します。 docker volume lsでその一覧があとで参照できます。
実際にどこにマウントされているかはDocker DesktopのDashBoardのコンテナのInspectから参照することもできます。

docker-composeの設定

ドキュメント(Documents)ディレクトリ配下
%USERPROFILE%\Documents
docker\gitlab
というフォルダを作り、そこにdocker-compose.ymlを作成します
今回はPostgreSQL使用、
メールはGmail使用
としました。 この辺りの設定(GITLAB_OMNIBUS_CONFIG [/etc/gitlab/gitlab.rb])は
gitlab-ctl reconfigureで設定できる内容です(詳細割愛)。
GitLab的にはGmailは非推奨のようです。
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/smtp.md

version: "3.6"

services:
  web:
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    hostname: '127.0.0.1'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://127.0.0.1:8929'
        gitlab_rails['gitlab_shell_ssh_port'] = 50022
        gitlab_rails['smtp_enable'] = true
        gitlab_rails['smtp_address'] = "smtp.gmail.com"
        gitlab_rails['smtp_port'] = 587
        
        gitlab_rails['smtp_domain'] = "smtp.gmail.com"
        gitlab_rails['smtp_authentication'] = "login"
        gitlab_rails['smtp_enable_starttls_auto'] = true
        gitlab_rails['smtp_tls'] = false
        gitlab_rails['smtp_openssl_verify_mode'] = 'peer'

        gitlab_rails['smtp_user_name'] = "<your gmail address>"
        gitlab_rails['smtp_password'] = "<your passowrd>"
        
        # Gitlab tuning
        unicorn['worker_processes'] = 2
        unicorn['worker_timeout'] = 600
        postgresql['shared_buffers'] = "512MB"
        
    ports:
      - '8929:8929'
      - '50022:22'
    volumes:
      - 'gitlab_config:/etc/gitlab'
      - 'gitlab_log:/var/log/gitlab'
      - 'gitlab_data:/var/opt/gitlab'

volumes:
  gitlab_config:
    external: true
  gitlab_log:
    external: true
  gitlab_data:
    external: true

1点注意事項があります。 2段階認証プロセスを使っている場合、あれれ?メールが飛ばないなんてことがあります。

Gmail を使って Net::SMTPAuthenticationError が出力される場合の解決法 https://karur4n.hatenablog.com/entry/2015/03/07/234600

この場合上記に従い、アプリパスワードを使います。 仕事で使う場合は、社内メールだと思いますので
doc/settings/smtp.md · master · GitLab.org / omnibus-gitlab · GitLab
あたりの設定が参考になるのではないでしょうか。

コマンドプロンプトにて初回のみ

docker volume create --name gitlab_config
docker volume create --name gitlab_data
docker volume create --name gitlab-logs

として名前付きボリュームを作成します。

コマンドプロンプトにて

cd %USERPROFILE%\Documents
docker-compose up -d

で起動します。

立ち上がりはマシンによっては遅いのでカップラーメンを食べながら待ちます。
Dockerのタスクトレイ内のアイコンを右クリックして、
Dashboardにアクセスすると、起動状態が確認できます。

GitLabにアクセス

しばらくたつと、 http://127.0.0.1:8929/
にアクセスします。

初回はrootのパスワードを求められます。

ユーザを作成した時にメールが飛べば成功です。

あとは煮るなり焼くなり。
GitHub同様使いやすいかと思います。

参考リンク

https://docs.gitlab.com/omnibus/docker/
https://mikoto2000.blogspot.com/2018/06/gitlab-docker-image-https.html https://myamada9999.hatenablog.com/entry/2018/11/04/204613
https://qiita.com/TomoyukiSugiyama/items/b17800d4e142e3dc549b
https://qiita.com/comefigo/items/2066dd02e2a0f3b470ca

チューニング系参考リンク

http://www.sakutyuu.com/technology/?p=1979
https://qiita.com/k_nakayama/items/9f083a4700915d02104a

名前付きボリューム関連

https://tan-y.hatenablog.com/entry/2019/02/26/003000
https://mikoto2000.blogspot.com/2018/06/gitlab-docker-image-https.html

Docker Desktopのマウント問題

https://qiita.com/kikako/items/7b6301a140cf37a5b7ac
https://stackoverflow.com/questions/41036273/disable-autostart-of-docker-compose-project

docker volume削除

https://qiita.com/Ikumi/items/b319a12d7e2c9f7b904d

メール関連

https://h-otter.hatenablog.jp/entry/2015/07/31/220511
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/smtp.md

GitLab CE Omnibus の基本操作手順

https://fumiyas.github.io/gitlab/install-omnibus.html

VSCodeでPython3開発環境構築

f:id:fa11enprince:20200211214101j:plain

WindowsでVSCodeとAnaconda3(Python3)で開発環境を整えることにしました。
目標は次の通りです。

  • VSCode上で関数の定義へのジャンプや参照、コード補完ができる
  • docstring(JavaでいうJavadoc)が楽にかける
  • テストのカバレッジ取得及び通ったコードパスが視覚的にわかる

あと、開発環境と違うけれど…

  • loggerの使い方例
  • ソースコードの構成例

を一緒にまとめて置いておきました。
github.com この例では極小の意味のないアプリケーションですが、MongoDBを使うサンプルになっています。 ここに書いてある
requirements.txtによる方法は既に古いらしいので別の方法にしたほうがいいそうです。

補足事項

Pythonの環境切替

gup.monster
この記事のようにAnaconda2 ,3の両方を入れている場合、VSCodeのこの部分から変更ができる
f:id:fa11enprince:20200211215021p:plain
Python 3.7,4 64-bitってところが実はクリックできて、ここで切り替え可能です。

カバレッジのコードハイライト

Coverage Gutters - Visual Studio Marketplace ここのアニメーションの通りなのですが、先ほどと同様に下部のWatch/Remove watchから表示切替ができます。

単体テスト実行について

基本的に該当のフォルダに移動して(PYTHONPATH/モジュール検索パスが通っているところ)で unittest
python -m unitest discoverとやっていたところを
coverage run -m unitest discoverとやればOKです。
ただしunittest前提です。pytestを使っている場合は別の方法になります。

pushd app1\test
coverage run -m unittest discover && coverage xml
popd

discoverってなんだ?と思ったらTestLoader.discover()を呼び出しているそうです。

Windowsを英語化

f:id:fa11enprince:20200131025725j:plain Windowsを英語化してみました。
まだ2日しかたってないですが今のところトラブルなし。
Explorerで最初の一文字目をキーボードで打ってフォーカスがあてられるように
DocumentとかPicturesとか英語のままがよかったので、
英語版にしました。もちろんそこだけ設定いじって英語化する方法もなくはないけど、
Windows Updateのたびに戻されるのは嫌なので、このほうがいいと思い思い切ってWindowsを英語化。
ちなみにトラブルシューティングの際、英語メッセージだとより問題に近づきやすいのでググラビリティも高まるはず!
特に問題は起きてないです。
以前Macも途中から英語化したけどその時はESETでインストールしなおし問題があったよーな…。

参考にさせてもらったところ

pcmanabu.com win10labo.info に従って英語化
大体これですべて英語になる

設定方法

設定 > 言語
英語を追加し、言語パックをインストール
英語のオプションで  キーボードの追加で日本語を追加してUSのキーボードを消す IMEの関係上、日本語 > 英語の順のまま

Windows表示言語
English(United States)
に変更 Explorerとかはこれで英語になります

アプリ毎の変更

あとはアプリごとに切替が必要です。 Macだと一気に全部英語になりますがWindowsは個別です。 それがいいのか悪いのかは、設計思想だと思うんです。
Windows歴が長いせいもあり、この辺はWindowsのほうが良いのではないかなと…
(変更がめんどくさいけど)

アプリ ざっくり設定方法
Chrome 英語のまま→日本語翻訳を使いたい場合、日本語のままが良い
FireFox 設定 > 一般 > 代替言語 > 英語の追加
Thunderbird オプション > 詳細から英語化
WinMerge オプションから英語に切替
Kindle 言語を切り替えから英語
Evernote オプションから言語を切り替え
Eclipse そもそも英語のままで日本語化してない
Visual Studio Code そもそも英語のままで日本語化してない
ConEmu そもそも英語のままで日本語化してない
WinSCP 英語に切り替わってる
HeidiSQL 英語に切り替わってる
サクラエディタ 日本語のまま(dllを置くと英語になるらしい)
rlogin そもそも英語に対応してないっぽい?のでそのまま
LINE 日本語のまま
ESET 日本語のまま

Googleを英語化した状態で英語を含む他言語を右クリックで日本語にする設定は少し難易度が高かった。
なぜかデフォルトはポルトガル語になっていました。
設定を変えたあと、翻訳のポップアップが出てきたときにいろいろ選ぶとうまくいきます。
(正直ブラウザは日本語設定のままでもいいのかも)
いろいろいじくっていたら二重翻訳とかたまたまできてしまった(日本語→英語→日本語)。

余談

そういやコマンドプロンプトとかそのまま英語になる

> ls
'ls' is not recognized as an internal or external command,
operable program or batch file.

素敵。やったね

Chromeの翻訳について

英語をデフォルトにしたときに英語ページで日本語に翻訳というのは無理っぽい。
ユースケース的に基本的にあり得ないので仕方ない気もするのだが、
そもそもこの辺りをすべて制御できるようなUIにはなっておらず、
ちゃんと設定するには一度、
「母国語以外のページツールで翻訳ツールを表示する」を選択し
母国語(設定言語)以外になっているページを表示すると、
翻訳ツールにどの言語からどの言語に翻訳するかが現れるので
「英語」→「日本語」を選択する。
こうすると、任意の言語から任意の言語へ翻訳できる。
そのあと、「母国語以外のページツールで翻訳ツールを表示する」を解除するとよい。
しかし、改めてよくわからない設定…という感じだ。
この辺りはこのページが詳しい。

did2memo.net

レジストリの右クリック関連メモ

f:id:fa11enprince:20190427161451j:plain Explorerで右クリックしたときのコンテキストメニューは簡単に編集できる
レジストリをいじればOK
例えばVS Codeの場合、インストール時にVSCodeで開くのメニューを出すチェックを入れ忘れた場合など、次のようにして追加することができる

Win + Rキー
regedit
コンピューター\HKEY_CLASSES_ROOT\Directory\shell\
右クリック > 新規 > キー
VSCodeを作る
 値: VSCodeで開く(&C)
VSCodeのところで右クリック > 新規 > キー
commandを作る
 値: "C:\Program Files\Microsoft VS Code\Code.exe" %1
※%1は右クリックしたときの引数(クリックしたときのファイル/フォルダ)が入る

雑な説明なので詳細は参考リンクを見ていただいたほうがいいと思われる この辺りを調べると、 コンピューター\HKEY_CLASSES_ROOT\Directory\shell\VSCode\command
以外にもいろいろキーが登録されていて、邪魔なやつは消せばよい
あと似たようなのに
コンピューター\HKEY_CLASSES_ROOT\Directory\Background\shell\...
というのが存在する
このBackground有り無しはフォルダ/ファイルの上で右クリックするか、
何もないところで右クリックするかの違いである
ITエンジニアの方なら、単なるデータベースだと直感的にわかるので、
邪魔だ…と思うのはこの辺を消してしまうとよい
(自己責任でお願いします。よほど思い切った消し方しなければ大丈夫だと思うけど) この辺りの情報まとまってないかなーとおもったら、まとめてくれているところがありました
stakiran.hatenablog.com

参考URL

https://qiita.com/cielrion/items/21d064b47cad21e2c7e0 https://boukenki.info/migi-click-menu-shortcut-key-registry-settei-houhou/