Raspberry Pi 4でPostgreSQLとPgAdmin4を起動してみました。
Docker HubのイメージをPodmanで起動しましたが、以前インテル・アーキテクチャのDockerで使用させて頂いたdpage/pgadmin4イメージは起動できず、別のARM 64アーキテクチャのイメージを探す必要がありました。
というわけでRaspberry Pi用のイメージになりますが、PodmanでPostgreSQLとPgAdmin4を起動する手順を記録しておこうと思います。
PostgreSQLのロケールについて
-e POSTGRES_INITDB_ARGS="--encoding=UTF-8 --locale=C"
本当は、PostgreSQLのロケールに日本語「-e POSTGRES_INITDB_ARGS=”–encoding=UTF-8 –locale=ja_JP.UTF-8″ \」を指定したいのですが、エラーになってしまいます。
以前、Dockerでビルドが必要だったように、Podmanもビルドが必要なようです。
これは追々、Podmanの理解を深めてから対応したいと思います。いまのところはlocale=Cで起動しています。
Ubuntu 20.04.1 LTSのインストール
Raspberry Pi 4のOSですが。サーバとして長期間安定して使用できるように、microSDカードは使わず、USBストレージからUbuntuを起動しました。
Podmanのインストール
こちらの手順でPodmanをインストールします。
PostgreSQL, PgAdmin4起動設定
※21.1.31追記:
Podmanのバージョンアップの影響で、下記のYAMLファイルではポッドが正常に起動できない場合があります。
その場合、ポッドを手動で作成後、YAMLファイルを出力する必要が御座います。
手順は下記の記事を御覧ください。
ポッドの実行に使用する、Kubernetesのpod.yaml設定ファイルを作成します。
mkdir postgres
cd postgres
vi postgres-pod.yaml
次の内容になります。
# Generation of Kubernetes YAML is still under development!
#
# Save the output of this file and use kubectl create -f to import
# it into Kubernetes.
#
# Created with podman-2.0.6
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2020-09-20T06:57:40Z"
labels:
app: postgres-pod
name: postgres-pod
spec:
containers:
- name: postgres-db
env:
- name: POSTGRES_PASSWORD
value: pgadmin
- name: POSTGRES_DB
value: mydb
- name: POSTGRES_INITDB_ARGS
value: --encoding=UTF-8 --locale=C
image: docker.io/library/postgres:latest
ports:
- containerPort: 5432
hostPort: 5432
protocol: TCP
resources: {}
securityContext:
allowPrivilegeEscalation: true
capabilities: {}
privileged: false
readOnlyRootFilesystem: false
seLinuxOptions: {}
workingDir: /
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: db-volume
- name: postgres-adm
env:
- name: PGADMIN_DEFAULT_EMAIL
value: admin
- name: PGADMIN_DEFAULT_PASSWORD
value: pgadmin
image: docker.io/biarms/pgadmin4:latest
ports:
- containerPort: 5050
hostPort: 5050
protocol: TCP
resources: {}
securityContext:
allowPrivilegeEscalation: true
capabilities: {}
privileged: false
readOnlyRootFilesystem: false
runAsGroup: 50
runAsUser: 1000
seLinuxOptions: {}
workingDir: /
volumeMounts:
- mountPath: /var/lib/pgadmin
name: adm-volume
volumes:
- name: db-volume
hostPath:
path: /home/ubuntu/postgres/db
type: Directory
- name: adm-volume
hostPath:
path: /home/ubuntu/postgres/pgadmin
type: Directory
status: {}
PostgreSQLは/var/lib/postgresql/dataディレクトリ、PgAdmin4のファイル出力先/var/lib/pgadminディレクトリを永続化をしていますが、PgAdmin4は設定が永続化できていないような。後で調整しようと思います。
mkdir db pgadmin
sudo podman play kube ./postgres-pod.yaml
いつもの通り、podman play kubeでポッドを起動しました。このような感じで、コンテナが3つ起動します。
使用させて頂いたPgAdmin4は、TCPポート5050番で動作するようです。
http://<Raspberry PiのIPアドレス>:5050
永続化の確認のため、PgAdmin4からテーブルを作ってみました。
sudo podman pod stop postgres-pod
sudo podman pod rm postgres-pod
ポッドを停止・削除後、再度起動すると、先程作成したテーブルが表示されましたので、永続化の設定も問題ないかと思います。
日本語のロケールを使用するには、dockerの場合はdockerfileを作り、コンテナ起動時にlocaledefコマンドが動くように、イメージをビルドする必要がありました。
Podmanの場合も基本的に同じく、dockerfileとビルドに相当する操作を行えば良いと思うのですが。
具体的なやり方は、勉強中ということで。追々調べて記事に書き足そうと思います。