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がベターではあります。
とはいえどういうわけか手元にはWindowsマシン(Windows 10 Pro Edition)しかないみたいなときとか役に立つかと。

この記事について

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は非推奨のようですが、例として使いやすいのでGmailで説明します。
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/smtp.md
下記に示した内容をいくつか置き換えて社内メール等を設定すれば環境構築できるかと思います。
大抵のケースの場合SMTP周りの設定をしておけばいいと思われます。

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
あたりの設定が参考になるのではないでしょうか。

パフォーマンスチューニングについて

GitLabは結構マシンパワーを要求するのでpostgresql['shared_buffers']を大きめにとったほうが良いかと思います。
できれば2GB以上あったほうがサクサク動きます。
unicorn['worker_processes']も多いほど良いです。

名前付きボリュームの作成

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

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の使い方例
  • ソースコードの構成例

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

補足事項

Pythonの環境切替

この記事のように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でインストールしなおし問題があったよーな…。

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

に従って英語化
大体これですべて英語になる

設定方法

設定 > 言語
英語を追加し、言語パックをインストール
英語のオプションで  キーボードの追加で日本語を追加して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にはなっておらず、
ちゃんと設定するには一度、
「母国語以外のページツールで翻訳ツールを表示する」を選択し
母国語(設定言語)以外になっているページを表示すると、
翻訳ツールにどの言語からどの言語に翻訳するかが現れるので
「英語」→「日本語」を選択する。
こうすると、任意の言語から任意の言語へ翻訳できる。
そのあと、「母国語以外のページツールで翻訳ツールを表示する」を解除するとよい。
しかし、改めてよくわからない設定…という感じだ。
この辺りはこのページが詳しい。

Windows 10 バージョン1803でhangoutsなどのマイク音声が拾えない

f:id:fa11enprince:20190529015947j:plain 久々にhangoutsでマイクを使おうと思ったら、トラブりました。
相手に音が聞こえないようです。
Skypeでは聞こえるのに…
ちなみにhangoutsはサービスが終了する見込みのようですね。
10年前のマイクデバイスを使ってたので調子悪いのかな…なんて思ったりしましたが、
違いました。
対処法ですが下記のサイトが参考になります

  1. Windowsの設定に行き、プライバシーを選択してください。
  2. [マイク]を選択し、[アプリからマイクへのアクセスを許可する]トグルをオンにします。
  3. [マイクにアクセスできるアプリケーションを選択してください]の下で、一部のデスクトップアプリケーションでは必要になるため、Win32WebViewHost(後で "デスクトップアプリケーションWebビューア"と名前を変更)がオンになっていることを確認します。
  4. マイクを使用したい場所でこれらのアプリケーションを再起動します。
  5. (オプション)アプリからマイクへのアクセスをブロックするには、アプリごとにマイクをオフにする必要があります。あなたはあなたがインストールするそれぞれの新しいアプリの後にこれをしなければならないでしょう。一部のデスクトップアプリケーションでは必要になるため、Win32WebViewHost(以降「デスクトップアプリケーションWebビューア」と呼ばれます)のマイクアクセスを無効にしないことをお勧めします。

3が特に重要です。Win32WebViewHostってのをONにしないとおそらくダメです。
私の場合はこれに該当していました。
f:id:fa11enprince:20190529015851p:plain どういう人がこの症状に当たっているか謎です。 ただ、デフォルトではどうもOffになっているようです。