LoginSignup
1
0

Debian+podman+Directus(1)インストール

Last updated at Posted at 2024-03-19

Debian+podman+Directus(1)インストール

0. はじめに

 詳細はここでは書かないが、情報の整理の枠組みがほしいと思っている。XML で書けばおしまいではなく、追加、検索が容易で、PDFが追加でき、メモ書きがOneNote ですぐにアクセスでき、… と夢は広がる。これを既存のサービスに頼るのではなく、自分で作る。それができる時代になった。手始めに、環境を整える。ChatGPT の推奨はDirectus だったので、これを使う。
 今回は、インストールするまで。

1. 選定理由

 データベースに情報を入れていくときに、フロントエンドをつける必要がある。データベースの堅牢さと、フロントエンドの使いやすさが重要である。それをヘッドレスCMSで実現する。Strapi と Directus が候補となる。Strapi は前回やりかけて終わっている。すっかり忘れているので、ゼロからやるなら、違うもので挑戦する。
サーバーは、Debian で運用している。Strapi も Directus も、パッケージは無い。どうせ、Node.js を最新にしなければならない、などの作業が発生するので、サーバーの環境を汚染しないためにも、コンテナで運用する。
 コンテナを運用するに当たって、docker を選ぶと、Debianのパッケージではうまくいかないようだ。これを別個にインストールすると、また環境を汚染することになる。最近は podman がいい感じのようなので、パッケージの podman を選んだ。

2. インストール

2-1. マシンの確認

 後でわかったことだが、これから使う Directus のイメージは、CPU の AVX 命令を使っている。これが備わっているCPUでないと動かない。古いマシンの場合には、事前にこれを確認して、動作しなければあきらめる。

cat /proc/cpuinfo | grep -i avx

2-2. podman の準備

  • インストール
sudo apt install podman

ちなみに、一般ユーザーではpodman logs [コンテナID] はうまく動かない。sudo journalctl -xe でエラーを表示させなければならない。なにか工夫がありそうだが追求していない。

  • 名前空間の設定
    ファイルを編集して、次のような記述を追加する。この記述は、uid,gid それぞれ、100000から、65536個分という意味になる。すでにエントリーがある場合には、重ならないように設定する必要があるので注意する。先頭に# を入れればコメントになるので説明を入れておくと良い。username のところは、自分のログイン名とする。
/etc/subuid
# for podman
username:100000:65536
/etc/subgid
# for podman
username:100000:65536

設定を反映させるためにシステムを再起動する。(再起動させないで反映させる方法がありそうだけど。)

2-3. ディレクトリの作成

Directus で使うディレクトリの準備

mkdir -m 777 -p $HOME/lib/directus/database \
                $HOME/lib/directus/extensions \
                $HOME/lib/directus/uploads

以降、working directory を変更して作業する。

cd $HOME/lib/directus

モードについて777(-rwxrwxrwx)にしている。データベースにアクセスする際に、ログイン名のユーザー名で書き込めるだけではエラーになる。これも解決策がありそうだが追求していない。

2-4. pull と run

  • pull
podman pull docker.io/directus/directus
  • run
podman run -d \
     --name directus \
     -p 8055:8055   \
     -v ./database:/directus/database \
     -v ./uploads:/directus/uploads \
     -v ./extensions:/directus/extensions \
     -e KEY="a000000000000000" \
     -e SECRET="b000000000000" \
     -e ADMIN_EMAIL="abc@example.com" \
     -e ADMIN_PASSWORD="password" \
     -e DB_CLIENT="sqlite3" \
     -e DB_FILENAME="/directus/database/data.db" \
     docker.io/directus/directus:latest
  • 注意とコメント
    • KEY と SECRET は、数字だけにしてはならない。数字だけにすると、ログイン時に Unexpected なんとか、と表示され、journalctl -xe でみると、ERROR: secretORPrivateKey is not valid key material となってうまくいかない。(cf. secretOrPrivateKey is not valid key material)
    • Directus のページには、docker-compose を使ったインストール方法が掲載されているので、podman-comopse が必要かと思ったが、上のようにすれば解決する。
    • データベースは、とりあえず、sqlite にしている。

2-5. メールを送れるようにする

 メインテナンスのためには、メールを送れるようにしておくとよい。上の run のままではメールは送れない。次のオプションを追加して run する。

	     -e EMAIL_TRANSPORT="smtp" \
	     -e EMAIL_FROM="メール送信者のアドレス" \
	     -e EMAIL_SMTP_HOST="ローカルにSMTPでのメール送信を請け負ってくれるマシン名" \
         -e EMAIL_SMTP_PORT="25" \
         -e PUBLIC_URL="http://example.com:8055/" \
  • 注意
    • この設定では、メール送信を請け負っってくれるサーバーが近所にあって、そこに smtp で連絡する前提になっている。
    • パスワードリセットの通知メールにアクセス先が入っている。PUBLIC_URL は、その先頭部分になるのでここで指定する。
    • -e で指定するのは環境変数とその値である。メールを含めて、それらの一覧は、Configuration Optionsで見ることができる。

2-6. 確認

locahostの8055番ポートにブラウザでアクセスする。
http://localhost:8055/
画像2.png

 Forgot Password をクリックして、メールが送られることも確認する。
 上で指定したメールアドレスとパスワードでサインインできればインストール完了!
画像1.png
 サインイン後、パスワードを適宜設定し直す。

2-7. コンテナ内部にアクセスする

 これで一通り動いたわけだが、コンテナ内部がどうなっているのか気になる。なにかトラブルになったときの原因究明のためにも、コンテナ内部二アクセスできると良い。提供されているイメージには bash が含まれていないので、sh でアクセスする。

  • ps -a でコンテナIDを取得
$ podman ps -a
CONTAINER ID  IMAGE                               COMMAND        CREATED      STATUS          PORTS                   NAMES
5089e910f1c9  docker.io/directus/directus:latest  /bin/sh -c :   && ...       34 minutes ago  Up 34 minutes ago       0.0.0.0:8055->8055/tcp  directus
  • exec でコンテナ内のシェルを起動する
podman exec -it 5089e910f1c9 sh
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0