コンテナのプロジェクト管理プラットフォーム「dyrector.io」を触ってみた


# 概要

dyrector.ioというツールを触ってみたため、どういうものなのかと、セットアップ方法、利用の流れ等をまとめてみます。

## 本記事の対象
- コンテナやKubernetesの管理ツールを調べてる方
- セルフホストで簡単に触れるツールを探してる方

# dyrector.ioとは

dyrector.ioはOSSで提供されているコンテナやKubernetesの管理プラットフォームです。
登録したDockerホストやKubernetesノードに対してのデプロイをUI上から管理することができます。

イメージとしてはプロジェクト管理ツールのような形で、ユーザーやチームを作成してその中でプロジェクトを作成し、その中でコンテナの管理等をバージョン管理していくような形です。
[githubリンク](https://github.com/dyrector-io)

UIは以下のような感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/c96ad2af-7942-e0f4-8455-924801d57ae0.png)

## アーキテクチャ

提供形態としてクラウド版とセルフホスト版が現在存在しているようでした。
どちらにも共通ですが管理対象のDockerホストやKubernetesノード上にAgentを展開し、それらがdyrector.ioのプラットフォームと連携して管理を行う形です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/fed5182a-2ff1-9d54-a59d-2eb379454b56.png)
https://docs.dyrector.io/basics/how-it-works


## 基本的な利用

基本的には以下のような流れで利用を行う形でした。

1. Userの作成
2. Teamの作成 & Teamへ各Userを追加
3. Nodeの追加
4. Projectの作成
5. Projectでversionを作成
6. Imageの追加 & deployment (展開内容) を作成

※NodeやImage registryは別途追加しておく必要

5-6を繰り返してProject内でversion管理を行ったり、Projectを新しく作成して都度必要な管理を行っていく形と思われます。

触った感じの管理のイメージ図

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/de317ef8-6bd0-4259-ff61-db6fe38f7ec3.png)

# セルフホストセットアップ

今回私はセルフホストでPlatformを作成したため、その流れも記載します。

## 事前準備

動作要件として以下2つがインストールされている必要があります。

- Docker or podman
- go (1.20以降)

今回はローカルのWindows環境でdocker desktopを使って進めています。

docker環境はdocker desktopを使う形にします。
https://docs.docker.jp/desktop/install/windows-install.html

goは公式サイトよりmsiを取得してインストールしておきます。
versionが1.20以降のものが必要な点だけ注意が必要です。
https://go.dev/doc/install


## dyo CLIのインストール

セルフホストでプラットフォームを利用するにあたりdyoというCLIを用いるため、CLIのインストールを行います。

go installでgitリポジトリから簡単にインストールできるので以下コマンドでインストールします。

```golang
go install github.com/dyrector-io/dyrectorio/golang/cmd/dyo@main
```

以下コマンドでバージョンが表示されればCLIインストール完了となります。

```bash
dyo version

# 出力
9:50AM INF CLI version=0.10.0 Runtime=Docker Runtime version=24.0.5
```

## セルフホストの起動

dyoコマンドを用いてdyrector.ioの起動をしてみます。

以下コマンドを実行して起動します。
※初回はコンテナイメージの取得等が行われるため、少し時間がかかります

```bash
dyo up
```

完了後、実行中のコンテナを確認するといくつか作成されていることが確認できます。
```bash
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}"

# 出力
CONTAINER ID   NAMES                        PORTS
ca02998533a2   dyo-stable_traefik           0.0.0.0:8000->8000/tcp, :::8000->8000/tcp, 80/tcp, 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
5b3d628e594d   dyo-stable_crux-ui           0.0.0.0:3000->3000/tcp, :::3000->3000/tcp
e8e746909be1   dyo-stable_mailslurper       0.0.0.0:1025->1025/tcp, :::1025->1025/tcp, 2500/tcp, 8080/tcp, 0.0.0.0:4436-4437->4436-4437/tcp, :::4436-4437->4436-4437/tcp, 8085/tcp
e97e8d3c73dd   dyo-stable_crux              0.0.0.0:1848->1848/tcp, :::1848->1848/tcp, 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp
6ad5e37dddce   dyo-stable_kratos            0.0.0.0:4433-4434->4433-4434/tcp, :::4433-4434->4433-4434/tcp
114143273b8f   dyo-stable_kratos-postgres   0.0.0.0:5433->5432/tcp, :::5433->5432/tcp
34d28d24828b   dyo-stable_crux-postgres     0.0.0.0:5432->5432/tcp, :::5432->5432/tcp
```

localhostで8000番ポートにアクセスを行い、ログイン画面が表示されれば無事起動完了です。（めっちゃ簡単）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/3a86e7dd-710b-01f8-47af-fa8015bb5c77.png)

# 使ってみる

せっかく起動したので軽く触ってみた流れも書いてみます。
今回はdockerを登録してdyrector.ioのUI上からコンテナをDeplyしつつバージョン管理をしてみようと思います。

順序は記事前半で書いた流れに加えて、ノードの追加と新versionの作成を行う形で以下のように進めます。
1. Userの作成
2. Teamの作成 (今回はOwnerで作業のため、ユーザー追加作業無し)
3. Nodeの追加
4. Projectの作成
5. Projectでversionを作成
6. Imageの追加 & deployment (展開内容) を作成
7. 新versionを作成

## Userの作成

先程のログイン画面より、Sign upを選択して作成を行います。
今回はセルフホストのため存在しないアドレス (example.com) で登録を進めていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/7892c9d2-5a8c-2957-917d-a9d4a3f1e330.png)

4436番ポートにアクセスを行うと、dyrector.ioのメール管理画面にアクセスができます。
送信されたメールから、発行されたトークンを確認して、ログインを行うことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/0560c98f-7280-5ba9-26c1-0cbd4cc25c41.png)

## Teamの作成

ログインが完了するとTeamの作成画面が表示されます。
任意の名前を入力して作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/b2999d6d-b6d5-359a-a5ec-67cc2b5b8da1.png)

作成が完了するとダッシュボードが表示されます。
右上を確認するとOwner権限でログインしていることも確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/4ddcece3-fbe0-f137-acb1-7df1dece01f3.png)

また、今回は実施しませんが、Teamsタブからユーザーの追加 (招待) を行うことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/26cf58f5-c6d7-dad2-54eb-c6a0493eca9d.png)

## Nodeの追加
管理対象とするNodeを追加する必要があるため、追加します。
今回はWindows上のDocker desktopを登録します。

Nodesタブを選択してaddを選択するとNodeの追加画面が表示されます。
設定値を入力後、Generate scriptをクリックするとスクリプトが表示されるため、Powershell等で実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/9abf1962-ca7f-2039-400a-238e550b8a88.png)

実行完了後画面が自動で切り替わり、Connectedになれば登録完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/2b7f5bce-6835-ee76-67a0-372e842fc69d.png)

## Projectの作成
それではProjectの作成を行っていきます。
作成自体は非常にシンプルでProjectsタブに移動してaddを選択後、NameとDescriptionを入力してSaveを押すだけになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/105e381b-c85d-1b48-e527-d7c05bd815b2.png)

作成完了後は以下のような形でProjectを確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/18359d99-b74f-2e0b-d341-ae594bc29c8a.png)

## versionの作成

Projectの画面からAdd versionを選択してNameとChange logを入力して作成するのみとなります。
なお、Nameはセマンティックバージョニングで記載を行う必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/ceeeb8cf-a17b-5cf0-2407-3b50715cc5a4.png)

作成完了後は以下のような形で確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/95ba9722-d067-ba28-4008-703402b1c5c1.png)

## Imageの追加 & deploymentの作成

まずImageの追加を行っていきます。
作成したversionのImagesを選択してaddを選択すると作成画面が表示されます。
こちらで必要なImage名を入力して選択を行います。

なお、ContainerRegistryはデフォルトではDocker Hubが登録されています。
必要に応じて別途追加を行う必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/3d8b7020-eb4e-2178-6a1c-edba29c3000b.png)

続いてDeploymentsの作成を行います。
Imageと同じような形でバージョンからDeploymentsを選択してaddを選択すると作成画面が表示されます。
対象となるNodesを選択して、Prefixを入力後Addを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/89422da4-4bef-c2f3-9039-985bef959a57.png)

その後Deploymentsのパラメータの設定画面に遷移します。
必要な登録したImageから必要なものと、必要に応じて環境変数等を入力して、Deployを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/7a0cf4f3-6c6b-00ec-9678-a4ab368f346a.png)

Deployが開始され、実行中のログや進捗を確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/73a0b6ad-3418-cc87-ec52-598318c32790.png)

完了後Nodesから確認をすると作成したDeploymentsが展開されたことが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/013ad62e-d1fc-055b-88f3-b31f298fd6bf.png)

以上が一連の流れになります。
このあとは新versionを作成して、Imageを追加してDeploymentを作成して、の流れを繰り返して管理を進めていく形になります。

## 新versionを作成

せっかくなのでversionを増やしてみます。

Projectから先程作成したversionの中にある上矢印のボタンを選択します。
こうすることで、既存のversionの後継として作成を行うことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/52cfc6e3-8a56-1c02-3675-0a8475eaf5de.png)

versionの作成画面は同様に進めていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/db740cf9-7630-98e9-c9d6-2f92603c661f.png)

ImageとDeploymentは先程と同様な手順にて実施しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/232fabcd-d042-0113-7ef4-912eb6b69523.png)

一連完了後プロジェクトの画面で確認すると新しいバージョン含めてGUI上で確認できました。
なお必要に応じて旧versionを開いてDeployを実施することで、即座にversionを戻すことも可能になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/7286952b-3358-4f13-ff03-119656f6c539.png)

# まとめ

今回はdyrector.ioというツールを触ってみました。
セルフホストで実施してみましたが、セットアップ自体はかなり簡単でした。
また、管理に関してもルールさえわかればそこまで困難ではないかなといった印象でした。
軽く触った程度なため理解が浅い部分もありますが、直感的に操作できる点が非常に良かったです。

まだ試していない機能や、今後のロードマップもドキュメントに記載されていたりしたので、また触ってみようかなと思います。


## おまけ

8080番ポートにアクセスをするとトラフィックの可視化も行われてたりしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/cf526805-7c63-6630-4bfe-f4b6a4ad70b2.png)

## 参考ドキュメント
https://docs.dyrector.io/
https://github.com/dyrector-io/dyrectorio